Cách chạy dự đoán LLM trên GPU Cloud Run bằng vLLM và SDK OpenAI Python

1. Giới thiệu

Tổng quan

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 quản lý cụm. Cloud Run gần đây đã bổ sung tính năng hỗ trợ GPU.

Hiện tại, các GPU mà chúng tôi cung cấp là GPU Nvidia L4 với 24 GB vRAM. Mỗi thực thể 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. Tính năng này bao gồm việc điều chỉnh tỷ lệ lên đến 5 thực thể (có thể tăng hạn mức), cũng như điều chỉnh tỷ lệ xuống 0 thực thể 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) nguồn 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 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 theo hướng dẫn 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 Hugging Face để truy xuất mô hình.
  • Cách triển khai mô hình được điều chỉnh theo hướng dẫn 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.

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.
  • Bạn đã triển khai một dịch vụ Cloud Run trước đó. Ví dụ: bạn có thể làm theo hướng dẫn bắt đầu nhanh về cách triển khai dịch vụ web từ mã nguồn để bắt đầu.
  • Bạn có tài khoản Hugging 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ột 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

  1. Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Nếu đây là lần đầu tiên bạ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 thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

d95252b003979716.png

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

7833d5e1c5d18f54.png

Máy ảo này được tải sẵn tất cả các công cụ phát triển cần thiết. Máy ảo này cung cấp một thư mục chính 5 GB liên tục và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và xác thực. Bạn có thể thực hiện hầu hết, nếu không phải là tất cả, công việc trong lớp học lập trình này bằng trình duyệt.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án được đặt thành mã dự án của bạn.

  1. 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`
  1. 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 không, bạn có thể đặt 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 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ể đặ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.

HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN>
PROJECT_ID=<YOUR_PROJECT_ID>

REGION=europe-west1
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 để xây dựng dịch vụ Cloud Run và truy cập vào một bí mật từ 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 secret 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 bí mật trong Secret Manager có tên là HF_TOKEN cho Mã truy cập Hugging Face. 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 nhằm kéo mô hình Gemma 2 (2B) xuống từ Hugging 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=-

Và cấp quyền truy cập vào bí mật HF_TOKEN trong Secret Manager cho tài khoản dịch vụ điện toán mặc định khi xây dựng hình ảnh.

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --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 $REGION

Tiếp theo, hãy tạo một Dockerfile sẽ kết hợp 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:v0.11.0

ENV HF_HOME=/model-cache
RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \
    hf 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} \
    --gpu-memory-utilization 0.85 \
    --max-num-seqs 256 \
    --max-model-len 4096

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: '${_LOCATION}-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 bản dựng.

gcloud builds submit --config=cloudbuild.yaml --substitutions=_LOCATION=$REGION

Bản dựng có thể mất khoảng 8 phút.

6. Triển khai dịch vụ

Bây giờ, bạn đã sẵn sàng triển khai hình ảnh vào Cloud Run. Quá trình triển khai sẽ mất khoảng 5 phút. Bạn cần tăng độ trễ ban đầu cho quá trình kiểm tra tình trạng thêm vài phút để hình ảnh có thêm thời gian tải. Nếu không, bạn sẽ gặp lỗi Đã vượt quá thời hạn từ quá trình kiểm tra tình trạng.

gcloud beta run deploy $SERVICE_NAME \
--image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \
--service-account $SERVICE_ACCOUNT_ADDRESS \
--cpu=8 \
--memory=32Gi \
--gpu=1 \
--port=8000 \
--gpu-type=nvidia-l4 \
--region $REGION \
--no-allow-unauthenticated \
--max-instances 3 \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240

7. Kiểm thử dịch vụ

Sau khi triển khai, bạn có thể sử dụng dịch vụ proxy dành cho nhà phát triển Cloud Run (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 có thể trực tiếp sử dụng URL dịch vụ.

Sử dụng dịch vụ proxy dành cho nhà phát triển Cloud Run

Để sử dụng dịch vụ proxy dành cho nhà phát triển Cloud Run, 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 $REGION

Tiếp theo, hãy sử dụng 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 cho dịch vụ đã triển khai.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')

Sử dụng 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 này!

Bạn nên xem tài liệu về Cloud Run

Nội dung chúng ta đã đề cập

  • Cách sử dụng GPU trên Cloud Run.
  • Cách sử dụng Hugging Face để truy xuất mô hình.
  • 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 bị tính phí ngoài ý muốn (ví dụ: nếu các dịch vụ Cloud Run vô tình được gọi nhiều lần hơn hạn mức gọi Cloud Run hằng tháng trong gói miễn phí), bạn có thể xoá Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.

Để xoá dịch vụ Cloud Run, hãy chuyển đến 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 có thể muố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 cần thay đổi dự án trong Cloud SDK. Bạn có thể xem danh sách tất cả các dự án hiện có bằng cách chạy gcloud projects list.