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).
Dịch vụ này là một dịch vụ phụ trợ chạy vLLM, một công cụ suy luận cho các hệ thống sản xuất. Lớp học lập trình này sử dụng Gemma 2 của Google với mô hình được điều chỉnh hướng dẫn có 2 tỷ tham số.
Kiến thức bạn sẽ học được
- Cách sử dụng GPU trên Cloud Run.
- Cách sử dụng tính năng Ôm khuôn mặt để truy xuất người mẫu.
- Cách triển khai mô hình tinh chỉnh hướng dẫn Gemma 2 2b của Google trên Cloud Run bằng cách sử dụng vLLM làm công cụ suy luận.
- Cách gọi dịch vụ phụ trợ để hoàn thành câu.
2. Thiết lập và yêu cầu
Điều kiện tiên quyết
- Bạn đã đăng nhập vào Cloud Console.
- Trước đây, bạn đã triển khai một dịch vụ Cloud Run. Ví dụ: bạn có thể làm theo hướng dẫn triển khai dịch vụ web từ phần bắt đầu nhanh bằng mã nguồn để bắt đầu.
- Bạn có tài khoản Ôm Face và đã xác nhận giấy phép Gemma 2 2b tại https://huggingface.co/google/gemma-2-2b-it; nếu không, bạn sẽ không thể tải mô hình xuống.
- Bạn đã tạo mã truy cập có quyền truy cập vào mô hình google/gemma-2-2b-it.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu đây là lần đầu tiên khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn nhìn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này được tải tất cả các công cụ phát triển cần thiết. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nhiều (nếu không nói là) tất cả công việc của bạn trong lớp học lập trình này đều có thể thực hiện bằng trình duyệt.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án được đặt thành mã dự án.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Bật API và đặt biến môi trường
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 \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Thiết lập 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.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. Tạo một tài khoản dịch vụ
Tài khoản dịch vụ này được dùng để tạo dịch vụ Cloud Run và truy cập vào một khoá bí mật trên Secret Manager.
Trước tiên, hãy tạo tài khoản dịch vụ bằng cách chạy lệnh sau:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secrete manager"
Thứ hai, cấp vai trò Người dùng Vertex AI cho tài khoản dịch vụ.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Bây giờ, hãy tạo một mã thông báo bí mật trong Trình quản lý bí mật có tên HF_TOKEN cho Mã thông báo truy cập bằng khuôn mặt cho thao tác Ôm (Ôm) của bạn. Cloud Build sử dụng tài khoản dịch vụ để truy cập vào bí mật này tại thời điểm xây dựng để kéo xuống mô hình Gemma 2 (2B) từ Ôm Face. Bạn có thể tìm hiểu thêm về bí mật và Cloud Build tại đây.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Đồng thời, cấp cho tài khoản dịch vụ quyền truy cập vào mã thông báo bí mật HF_TOKEN trong Trình quản lý bí mật.
gcloud secrets add-iam-policy-binding HF_TOKEN \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/secretmanager.secretAccessor'
5. Tạo hình ảnh trong Artifact Registry
Trước tiên, hãy tạo một kho lưu trữ trong Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Tiếp theo, hãy tạo một Dockerfile
để kết hợp mã thông báo bí mật từ Secret Manager. Bạn có thể tìm hiểu thêm về cờ Docker buildx –secrets tại đây.
FROM vllm/vllm-openai:latest ENV HF_HOME=/model-cache RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \ huggingface-cli download google/gemma-2-2b-it ENV HF_HUB_OFFLINE=1 ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \ --port ${PORT:-8000} \ --model ${MODEL_NAME:-google/gemma-2-2b-it} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
Bây giờ, hãy tạo một tệp Cloudbuild.yaml
steps: - name: 'gcr.io/cloud-builders/docker' id: build entrypoint: 'bash' secretEnv: ['HF_TOKEN'] args: - -c - | SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN . availableSecrets: secretManager: - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest' env: 'HF_TOKEN' images: ["${_IMAGE}"] substitutions: _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it' options: dynamicSubstitutions: true machineType: "E2_HIGHCPU_32"
Cuối cùng, hãy gửi một bản dựng.
gcloud builds submit --config=cloudbuild.yaml
Quá trình dựng có thể mất khoảng 8 phút.
6. Triển khai dịch vụ
Giờ thì bạn đã sẵn sàng triển khai hình ảnh lên Cloud Run.
gcloud beta run deploy $SERVICE_NAME \ --image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 --gpu-type=nvidia-l4 \ --region us-central1 \ --no-allow-unauthenticated \ --max-instances 5 \ --no-cpu-throttling
Quá trình triển khai có thể mất đến 5 phút.
7. Kiểm thử dịch vụ
Sau khi triển khai, bạn có thể sử dụng dịch vụ proxy Cloud Run dành cho nhà phát triển. Dịch vụ này sẽ tự động thêm mã thông báo mã nhận dạng cho bạn hoặc bạn trực tiếp cuộn URL của dịch vụ.
Sử dụng dịch vụ proxy Cloud Run cho nhà phát triển
Để sử dụng dịch vụ proxy Cloud Run dành cho nhà phát triển, bạn có thể làm theo các bước sau:
Trước tiên, hãy chạy lệnh sau
gcloud run services proxy $SERVICE_NAME --region us-central1
Tiếp theo, cuộn dịch vụ
curl -X POST http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Trực tiếp sử dụng URL dịch vụ
Trước tiên, hãy truy xuất URL của dịch vụ đã triển khai.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Cuộn dịch vụ
curl -X POST $SERVICE_URL/v1/completions \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Kết quả
Bạn sẽ thấy kết quả tương tự như sau:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
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 tham khảo tài liệu về Cloud Run
Nội dung đã đề cập
- Cách sử dụng GPU trên Cloud Run.
- Cách sử dụng tính năng Ôm khuôn mặt để truy xuất người mẫu.
- Cách triển khai mô hình Gemma 2 (2B) của Google trên Cloud Run bằng vLLM làm công cụ suy luận.
- Cách gọi dịch vụ phụ trợ để hoàn thành câu.
9. Dọn dẹp
Để tránh các khoản phí vô tình (ví dụ: nếu các dịch vụ Cloud Run vô tình bị gọi nhiều lần hơn mức phân bổ lệnh gọi Cloud Run hằng tháng của bạn ở cấp miễn phí), bạn có thể xoá Cloud Run hoặc xoá dự án bạn đã tạo ở Bước 2.
Để xoá dịch vụ 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ụ vllm-gemma-2-2b
. Bạn cũng nên xoá tài khoản dịch vụ vllm-gemma-2-2b
.
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 mà 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
.