1. Giới thiệu
Tổng quan
Cloud Run mới bổ sung tính năng hỗ trợ GPU. Tính năng này hiện đang ở giai đoạn dùng thử công khai (có trong danh sách chờ). Nếu bạn muốn dùng thử tính năng này, hãy điền vào biểu mẫu này để có tên trong danh sách chờ. Cloud Run là một nền tảng vùng chứa trên Google Cloud, giúp bạn dễ dàng chạy mã trong vùng chứa mà không cần quản lý một cụm.
Hiện tại, GPU mà chúng tôi cung cấp là GPU Nvidia L4 với 24 GB vRAM. Mỗi phiên bản Cloud Run có một GPU và tính năng tự động mở rộng quy mô của Cloud Run vẫn được áp dụng. Điều này bao gồm việc mở rộng quy mô lên đến 5 phiên bản (có thể tăng hạn mức), cũng như giảm quy mô xuống 0 phiên bản khi không có yêu cầu.
Một trường hợp sử dụng GPU là chạy các mô hình ngôn ngữ lớn (LLM) mở của riêng bạn. Hướng dẫn này sẽ hướng dẫn bạn triển khai một dịch vụ chạy LLM.
Trong lớp học lập trình này, bạn sẽ triển khai một dịch vụ có nhiều vùng chứa sử dụng Open WebUI làm vùng chứa chuyển tiếp giao diện người dùng và sử dụng Ollama trong một vùng chứa phụ để phân phát mô hình Gemma 2 2B được lưu trữ trong một vùng chứa Google Cloud Storage.
Kiến thức bạn sẽ học được
- Cách tạo dịch vụ có nhiều vùng chứa trong Cloud Run
- Cách triển khai Ollama dưới dạng một ứng dụng phụ phục vụ mô hình Gemma 2 2B
- Cách triển khai Open WebUI làm vùng chứa cổng vào giao diện người dùng
2. Đặt các biến môi trường và bật API
Nâng cấp gcloud CLI
Trước tiên, bạn cần cài đặt một phiên bản gần đây của giao diện dòng lệnh gcloud. Bạn có thể cập nhật CLI bằng cách chạy lệnh sau:
gcloud components update
Thiết lập các biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được dùng trong suốt lớp học lập trình này.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
Bật API
Để có thể bắt đầu sử dụng lớp học lập trình này, bạn cần bật một số API. Lớp học lập trình này yêu cầu bạn sử dụng các API sau. Bạn có thể bật các API đó bằng cách chạy lệnh sau:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
Tạo một thư mục cho lớp học lập trình này.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Tạo một Nhóm GCS để lưu trữ mô hình Gemma 2 2B
Trước tiên, bạn sẽ cài đặt Ollama để tải mô hình xuống. Thao tác này sẽ tải mô hình xuống /home/$USER/.ollama/models
curl -fsSL https://ollama.com/install.sh | sh
Bây giờ, hãy chạy ollama bằng cách chạy
ollama serve
Ollama bắt đầu nghe trên cổng 11434.
Mở cửa sổ dòng lệnh thứ hai để kéo mô hình Gemma 2 2B xuống
ollama pull gemma2:2b
(Không bắt buộc) Bạn có thể tương tác với Gemma qua dòng lệnh bằng cách chạy
ollama run gemma2:2b
Khi trò chuyện xong với Gemma, bạn có thể thoát bằng cách nhập
/bye
4. Tạo Bộ chứa Storage
Sau khi tải mô hình xuống, bạn có thể di chuyển mô hình đó vào vùng lưu trữ GCS.
Trước tiên, hãy tạo vùng chứa.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Bây giờ, hãy di chuyển thư mục models sang GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Tạo hình ảnh Ollama
Tạo một dockerfile có nội dung sau
FROM --platform=linux/amd64 ollama/ollama # Listen on all interfaces, port 11434 ENV OLLAMA_HOST 0.0.0.0:11434 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1
Tạo một kho lưu trữ Artifact Registry để lưu trữ hình ảnh dịch vụ của bạn.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Tạo hình ảnh phụ ollama
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Tạo hình ảnh giao diện người dùng Open WebUI
Trong phần này, bạn sẽ tạo vùng chứa cổng vào giao diện người dùng bằng Open WebUI.
Sử dụng docker để kéo hình ảnh Open WebUI xuống.
docker pull ghcr.io/open-webui/open-webui:main
Sau đó, hãy định cấu hình Docker để sử dụng thông tin đăng nhập Google Cloud của bạn nhằm xác thực với Artifact Registry. Thao tác này sẽ cho phép bạn dùng docker để chuyển một hình ảnh đến một kho lưu trữ Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Gắn thẻ cho hình ảnh của bạn rồi chuyển đến Artifact Registry.
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. Triển khai dịch vụ có nhiều vùng chứa lên Cloud Run
Sử dụng tệp yaml để triển khai dịch vụ nhiều vùng chứa
Tạo một service.yaml có nội dung sau.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ollama-sidecar-codelab
labels:
cloud.googleapis.com/location: us-central1
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: '5'
run.googleapis.com/cpu-throttling: 'false'
run.googleapis.com/startup-cpu-boost: 'true'
run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- name: openwebui
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
ports:
- name: http1
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: http://localhost:11434
- name: WEBUI_AUTH
value: 'false'
resources:
limits:
memory: 1Gi
cpu: 2000m
volumeMounts:
- name: in-memory-1
mountPath: /app/backend/data
startupProbe:
timeoutSeconds: 240
periodSeconds: 240
failureThreshold: 1
tcpSocket:
port: 8080
- name: ollama-sidecar
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
volumeMounts:
- name: gcs-1
mountPath: /root/.ollama
startupProbe:
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
tcpSocket:
port: 11434
volumes:
- name: gcs-1
csi:
driver: gcsfuse.run.googleapis.com
volumeAttributes:
bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
- name: in-memory-1
emptyDir:
medium: Memory
sizeLimit: 10Gi
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
Cập nhật service.yaml để thay thế PROJECT_ID bằng mã dự án của bạn:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Triển khai lên Cloud Run bằng lệnh sau.
gcloud beta run services replace service.yaml
Kiểm thử dịch vụ Cloud Run
Bây giờ, hãy mở URL dịch vụ trong trình duyệt web.
Sau khi giao diện người dùng hoàn tất quá trình tải, trong mục Chọn một mô hình, hãy chọn Gemma 2 2B.
Bây giờ, hãy đặt câu hỏi cho Gemma, ví dụ: "Tại sao bầu trời lại có màu xanh?"
8. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình này!
Bạn nên xem tài liệu về các hàm Cloud Run
Nội dung đã đề cập
- Cách tạo dịch vụ có nhiều vùng chứa trong Cloud Run
- Cách triển khai Ollama dưới dạng một ứng dụng phụ phục vụ mô hình Gemma 2 2B
- Cách triển khai Open WebUI làm vùng chứa cổng vào giao diện người dùng
9. Dọn dẹp
Để tránh bị tính phí ngoài ý muốn (ví dụ: nếu các dịch vụ Cloud Run được gọi nhiều lần hơn hạn mức gọi Cloud Run hằng tháng của bạn trong cấp miễn phí), bạn có thể xoá Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.
Để xoá hàm Cloud Run, hãy truy cập vào Cloud Run Cloud Console tại https://console.cloud.google.com/run rồi xoá dịch vụ ollama-sidecar-codelab.
Nếu chọn xoá toàn bộ dự án, bạn có thể truy cập vào https://console.cloud.google.com/cloud-resource-manager, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi dự án trong Cloud SDK. Bạn có thể xem danh sách tất cả các dự án có sẵn bằng cách chạy gcloud projects list.