Cara menjalankan inferensi LLM di GPU Cloud Run dengan vLLM dan OpenAI Python SDK

1. Pengantar

Ringkasan

Cloud Run baru-baru ini menambahkan dukungan GPU. Video ini tersedia sebagai pratinjau publik dalam daftar tunggu. Jika Anda tertarik untuk mencoba fitur ini, isi formulir ini untuk bergabung ke daftar tunggu. Cloud Run adalah platform container di Google Cloud yang memudahkan Anda menjalankan kode dalam container, tanpa perlu mengelola cluster.

Saat ini, GPU yang kami sediakan adalah GPU Nvidia L4 dengan vRAM 24 GB. Ada satu GPU per instance Cloud Run, dan penskalaan otomatis Cloud Run masih berlaku. Hal ini meliputi penyebaran skala hingga 5 instance (dengan penambahan kuota yang tersedia), serta memperkecil skala hingga nol instance saat tidak ada permintaan.

Salah satu kasus penggunaan untuk GPU adalah menjalankan model bahasa besar (LLM) terbuka Anda sendiri. Tutorial ini memandu Anda dalam men-deploy layanan yang menjalankan LLM.

Layanan ini adalah layanan backend yang menjalankan vLLM, mesin inferensi untuk sistem produksi. Codelab ini menggunakan Gemma 2 Google dengan model yang disesuaikan dengan petunjuk sebanyak 2 miliar parameter.

Yang akan Anda pelajari

  • Cara menggunakan GPU di Cloud Run.
  • Cara menggunakan Wajah Memeluk untuk mengambil model.
  • Cara men-deploy model Google yang disesuaikan dengan instruksi Gemma 2 2b di Cloud Run menggunakan vLLM sebagai mesin inferensi.
  • Cara memanggil layanan backend untuk melakukan penyelesaian kalimat.

2. Penyiapan dan Persyaratan

Prasyarat

  • Anda sudah login ke Konsol Cloud.
  • Anda sebelumnya telah men-deploy layanan Cloud Run. Misalnya, Anda dapat mengikuti men-deploy layanan web dari panduan memulai kode sumber untuk memulai.
  • Anda memiliki akun Hugging Face dan telah mengonfirmasi lisensi Gemma 2 2b di https://huggingface.co/google/gemma-2-2b-it; jika tidak, Anda tidak akan dapat mengunduh model.
  • Anda telah membuat token akses yang memiliki akses ke model google/gemma-2-2b-it.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.

d95252b003979716.png

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

7833d5e1c5d18f54.pngS

Mesin virtual ini dimuat dengan semua alat pengembangan yang diperlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Mengaktifkan API dan Menetapkan Variabel Lingkungan

Mengaktifkan API

Sebelum Anda dapat mulai menggunakan codelab ini, ada beberapa API yang perlu Anda aktifkan. Codelab ini memerlukan penggunaan API berikut. Anda dapat mengaktifkan API tersebut dengan menjalankan perintah berikut:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

Menyiapkan variabel lingkungan

Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.

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. Membuat akun layanan

Akun layanan ini digunakan untuk membangun layanan Cloud Run dan mengakses secret dari Secret Manager.

Pertama, buat akun layanan dengan menjalankan perintah ini:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run vllm SA to access secrete manager"

Kedua, berikan peran Vertex AI User ke akun layanan.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/secretmanager.secretAccessor

Sekarang, buat rahasia di {i>Secret Manager<i} bernama HF_TOKEN untuk {i>HF_TOKEN<i} untuk Token Akses Wajah Anda. Cloud Build menggunakan akun layanan untuk mengakses rahasia ini pada waktu build untuk menghapus model Gemma 2 (2B) dari Hugging Face. Anda dapat mempelajari rahasia dan Cloud Build lebih lanjut di sini.

printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-

Dan berikan akses akun layanan ke secret HF_TOKEN di Secret Manager.

gcloud secrets add-iam-policy-binding HF_TOKEN \
    --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role='roles/secretmanager.secretAccessor'

5. Buat image di Artifact Registry

Pertama, buat repositori di Artifact Registry.

gcloud artifacts repositories create $AR_REPO_NAME \
  --repository-format docker \
  --location us-central1

Selanjutnya, buat Dockerfile yang akan menyertakan rahasia dari Secret Manager. Anda dapat mempelajari lebih lanjut flag Docker buildx –secrets di sini.

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"}

Sekarang buat file 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"

Terakhir, kirimkan build.

gcloud builds submit --config=cloudbuild.yaml

Build sekitar 8 menit.

6. Men-deploy layanan

Sekarang Anda siap men-deploy image ke 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

Deployment dapat memerlukan waktu hingga 5 menit.

7. Menguji layanan

Setelah di-deploy, Anda dapat menggunakan Cloud Run dev proxy service yang otomatis menambahkan token ID untuk Anda atau Anda dapat melakukan curl URL layanan secara langsung.

Menggunakan layanan proxy dev Cloud Run

Untuk menggunakan layanan proxy dev Cloud Run, Anda dapat menggunakan langkah-langkah berikut:

Pertama, jalankan perintah berikut

gcloud run services proxy $SERVICE_NAME --region us-central1

Berikutnya, lakukan curl layanan

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
}'

Menggunakan URL layanan secara langsung

Pertama, ambil URL untuk layanan yang di-deploy.

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

Melakukan curl layanan

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
}'

Hasil

Anda akan melihat hasil yang mirip dengan yang berikut ini:

{"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. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Sebaiknya tinjau dokumentasi Cloud Run

Yang telah kita bahas

  • Cara menggunakan GPU di Cloud Run.
  • Cara menggunakan Wajah Memeluk untuk mengambil model.
  • Cara men-deploy model Gemma 2 (2B) Google di Cloud Run menggunakan vLLM sebagai mesin inferensi.
  • Cara memanggil layanan backend untuk melakukan penyelesaian kalimat.

9. Pembersihan

Untuk menghindari tagihan yang tidak disengaja, (misalnya, jika layanan Cloud Run secara tidak sengaja dipanggil lebih sering daripada alokasi panggilan Cloud Run bulanan Anda di paket gratis), Anda dapat menghapus Cloud Run atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus layanan Cloud Run, buka Konsol Cloud Cloud Run di https://console.cloud.google.com/run dan hapus layanan vllm-gemma-2-2b. Anda juga dapat menghapus akun layanan vllm-gemma-2-2b.

Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, pilih project yang dibuat pada Langkah 2, lalu pilih Hapus. Jika project dihapus, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.