1. Giới thiệu
Tổng quan
Gần đây, Cloud Run đã thêm tính năng hỗ trợ GPU. Tính năng này được cung cấp dưới dạng bản xem trước công khai 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 để tham gia 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 một vùng chứa mà không cần phải quản lý cụm.
Hiện nay, các GPU 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 điều chỉnh tỷ lệ của Cloud Run vẫn được áp dụng. Điều đó bao gồm việc mở rộng quy mô lên tới 5 phiên bản (có thể tăng hạn mức), cũng như giảm quy mô về 0 phiên bản khi không có yêu cầu nào.
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 cách triển khai một dịch vụ chạy một mô hình ngôn ngữ lớn (LLM).
Trong lớp học lập trình này, bạn sẽ triển khai dịch vụ nhiều vùng chứa sử dụng Open WebUI làm vùng chứa lưu lượng vào giao diện người dùng và sử dụng Ollama trong tệp trợ giúp để phân phát mô hình Gemma 2 2B được lưu trữ trong bộ chứa Google Cloud Storage.
Kiến thức bạn sẽ học được
- Cách tạo dịch vụ nhiều vùng chứa trong Cloud Run
- Cách triển khai Ollama làm chương trình trợ giúp phân phối mô hình Gemma 2 2B
- Cách triển khai Open WebUI dưới dạng vùng chứa truy cập vào giao diện người dùng
2. Đặt 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 gcloud CLI. 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 biến môi trường
Bạn có thể đặt các biến môi trường sẽ được sử 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
Trước khi có thể bắt đầu sử dụng lớp học lập trình này, bạn sẽ cần bật một số API. Lớp học lập trình này yêu cầu 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 vùng chứa 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 từ dòng lệnh bằng cách chạy
ollama run gemma2:2b
Khi bạn 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
Giờ đây, khi mô hình đã tải xuống, bạn có thể chuyển mô hình đó sang bộ chứa GCS.
Trước tiên, hãy tạo bộ chứa.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Bây giờ, hãy di chuyển thư mục mô hình vào 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 tệp dockerfile có nội dung sau
FROM 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 # Store the model weights in the container image ENV MODEL gemma2:2b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Tạo một kho lưu trữ Artifact Registry để lưu trữ hình ảnh dịch vụ.
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 xe bên 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 lưu lượng vào giao diện người dùng bằng Open WebUI.
Dùng docker để kéo hình ảnh Open WebUI xuống.
docker pull ghcr.io/open-webui/open-webui:main
Sau đó, đị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 sử dụng docker để đẩy một hình ảnh vào kho lưu trữ Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Gắn thẻ cho hình ảnh rồi đẩy vào Cấu phần phần mềm.
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ụ nhiều vùng chứa cho Cloud Run
Sử dụng tệp yaml để triển khai dịch vụ nhiều vùng chứa
Tạo service.yaml
với cá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 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 cho 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 của dịch vụ trong trình duyệt web.
Sau khi giao diện người dùng tải xong, trong phần Chọn mô hình, hãy chọn Gemma 2 2B.
Bây giờ, hãy đặt câu hỏi cho Gemma, ví dụ: "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!
Bạn nên xem tài liệu về hàm Cloud Run
Nội dung đã đề cập
- Cách tạo dịch vụ nhiều vùng chứa trong Cloud Run
- Cách triển khai Ollama làm chương trình trợ giúp phân phối mô hình Gemma 2 2B
- Cách triển khai Open WebUI dưới dạng vùng chứa lưu lượng vào giao diện người dùng
9. Dọn dẹp
Để tránh bị tính phí do nhầm lẫn (ví dụ: nếu các dịch vụ Cloud Run vô tình được gọi nhiều lần hơn mức phân bổ số lần gọi Cloud Run hằng tháng 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 Console của Cloud Run 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ẽ phải thay đổi các dự án trong Cloud SDK của mình. Bạn có thể xem danh sách tất cả dự án hiện có bằng cách chạy gcloud projects list
.