1. บทนำ
ภาพรวม
Cloud Run เป็นแพลตฟอร์มคอนเทนเนอร์ใน Google Cloud ที่ช่วยให้คุณเรียกใช้โค้ดในคอนเทนเนอร์ได้อย่างตรงไปตรงมาโดยไม่ต้องจัดการคลัสเตอร์ เมื่อเร็วๆ นี้ Cloud Run ได้เพิ่มการรองรับ GPU
ปัจจุบัน GPU ที่เรามีให้ใช้งานคือ GPU รุ่น L4 ของ Nvidia ที่มี vRAM ขนาด 24 GB มี GPU 1 ตัวต่ออินสแตนซ์ Cloud Run และการปรับขนาดอัตโนมัติของ Cloud Run ยังคงมีผล ซึ่งรวมถึงการเพิ่มขนาดสูงสุด 5 อินสแตนซ์ (พร้อมโควต้าที่เพิ่มขึ้น) รวมถึงการลดขนาดเป็น 0 อินสแตนซ์เมื่อไม่มีคำขอ
กรณีการใช้งาน GPU อย่างหนึ่งคือการเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) แบบเปิดของคุณเอง บทแนะนำนี้จะแนะนำขั้นตอนการติดตั้งใช้งานบริการที่เรียกใช้ LLM
บริการนี้เป็นบริการแบ็กเอนด์ที่เรียกใช้ vLLM ซึ่งเป็นเครื่องมืออนุมานสำหรับระบบการผลิต Codelab นี้ใช้โมเดล Gemma 2 ของ Google ที่มีพารามิเตอร์ 2 พันล้านรายการซึ่งได้รับการปรับแต่งตามคำสั่ง
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ GPU ใน Cloud Run
- วิธีใช้ Hugging Face เพื่อดึงข้อมูลโมเดล
- วิธีทำให้โมเดล Gemma 2 2b ที่ได้รับการปรับแต่งคำสั่งของ Google ใช้งานได้ใน Cloud Run โดยใช้ vLLM เป็นเครื่องมืออนุมาน
- วิธีเรียกใช้บริการแบ็กเอนด์เพื่อเติมประโยค
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณได้ทำให้บริการ Cloud Run ใช้งานได้ก่อนหน้านี้ เช่น คุณสามารถทำตามเริ่มต้นใช้งานการติดตั้งใช้งานเว็บเซอร์วิสจากซอร์สโค้ดเพื่อเริ่มต้นใช้งาน
- คุณมีบัญชี Hugging Face และรับทราบสัญญาอนุญาต Gemma 2 2b ที่ https://huggingface.co/google/gemma-2-2b-it แล้ว มิฉะนั้นคุณจะดาวน์โหลดโมเดลไม่ได้
- คุณได้สร้างโทเค็นเพื่อการเข้าถึงที่มีสิทธิ์เข้าถึงโมเดล google/gemma-2-2b-it แล้ว
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าระบบได้ตรวจสอบสิทธิ์ของคุณแล้วและตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตของคำสั่ง
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตของคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ได้ตั้งค่าไว้ คุณสามารถตั้งค่าได้ด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตของคำสั่ง
Updated property [core/project].
3. เปิดใช้ API และตั้งค่าตัวแปรสภาพแวดล้อม
เปิดใช้ API
ก่อนที่จะเริ่มใช้ Codelab นี้ได้ คุณจะต้องเปิดใช้ API หลายรายการ Codelab นี้กำหนดให้ใช้ API ต่อไปนี้ คุณเปิดใช้ API เหล่านั้นได้โดยการเรียกใช้คำสั่งต่อไปนี้
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้ง Codelab นี้ได้
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. สร้างบัญชีบริการ
บัญชีบริการนี้ใช้เพื่อสร้างบริการ Cloud Run และเข้าถึงข้อมูลลับจาก Secret Manager
ก่อนอื่น ให้สร้างบัญชีบริการโดยเรียกใช้คำสั่งนี้
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
ประการที่ 2 มอบบทบาทผู้ใช้ Vertex AI ให้กับบัญชีบริการ
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
ตอนนี้ให้สร้างข้อมูลลับใน Secret Manager ชื่อ HF_TOKEN สำหรับโทเค็นการเข้าถึง Hugging Face Cloud Build ใช้บัญชีบริการเพื่อเข้าถึงข้อมูลลับนี้ในเวลาบิลด์เพื่อดึงโมเดล Gemma 2 (2B) จาก Hugging Face ดูข้อมูลเพิ่มเติมเกี่ยวกับSecret และ Cloud Build ได้ที่นี่
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
และให้สิทธิ์เข้าถึงข้อมูลลับ HF_TOKEN ใน Secret Manager แก่บัญชีบริการ Compute เริ่มต้นเมื่อสร้างอิมเมจ
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. สร้างอิมเมจใน Artifact Registry
ก่อนอื่น ให้สร้างที่เก็บใน Artifact Registry
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location $REGION
จากนั้นสร้าง Dockerfile ที่จะรวมข้อมูลลับจาก Secret Manager ดูข้อมูลเพิ่มเติมเกี่ยวกับแฟล็ก Docker buildx –secrets ได้ที่นี่
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) \
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} \
--gpu-memory-utilization 0.85 \
--max-num-seqs 256 \
--max-model-len 4096
ตอนนี้ให้สร้างไฟล์ 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"
สุดท้าย ให้ส่งบิลด์
gcloud builds submit --config=cloudbuild.yaml --substitutions=_LOCATION=$REGION
การสร้างอาจใช้เวลาประมาณ 8 นาที
6. ติดตั้งใช้งานบริการ
ตอนนี้คุณพร้อมที่จะทําให้อิมเมจใช้งานได้ใน Cloud Run แล้ว การติดตั้งใช้งานจะใช้เวลาประมาณ 5 นาที คุณจะต้องเพิ่มการหน่วงเวลาเริ่มต้นสำหรับการตรวจสอบสถานะการทำงานเป็นเวลา 2-3 นาทีเพื่อให้รูปภาพมีเวลาโหลดมากขึ้น ไม่เช่นนั้น คุณจะได้รับข้อผิดพลาด "เกินกำหนดเวลา" จากการตรวจสอบสถานะ
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. ทดสอบบริการ
เมื่อติดตั้งใช้งานแล้ว คุณจะใช้บริการพร็อกซีสำหรับนักพัฒนาแอปของ Cloud Run ซึ่งจะเพิ่มโทเค็นรหัสให้โดยอัตโนมัติ หรือจะใช้ URL ของบริการโดยตรงก็ได้
การใช้บริการพร็อกซีสำหรับนักพัฒนาแอปของ Cloud Run
หากต้องการใช้บริการพร็อกซีสำหรับนักพัฒนาแอปของ Cloud Run ให้ทำตามขั้นตอนต่อไปนี้
ก่อนอื่นให้เรียกใช้คำสั่งต่อไปนี้
gcloud run services proxy $SERVICE_NAME --region $REGION
จากนั้นใช้ curl กับบริการ
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
}'
การใช้ URL ของบริการโดยตรง
ก่อนอื่น ให้ดึง URL ของบริการที่ใช้งาน
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Curl บริการ
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
}'
ผลลัพธ์
คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้
{"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. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบ Cloud Run
สิ่งที่เราได้พูดถึง
- วิธีใช้ GPU ใน Cloud Run
- วิธีใช้ Hugging Face เพื่อดึงข้อมูลโมเดล
- วิธีทำให้โมเดล Gemma 2 (2B) ของ Google ใช้งานได้ใน Cloud Run โดยใช้ vLLM เป็นเครื่องมืออนุมาน
- วิธีเรียกใช้บริการแบ็กเอนด์เพื่อเติมประโยค
9. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากมีการเรียกใช้บริการ Cloud Run โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี) คุณสามารถลบ Cloud Run หรือลบโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 ได้
หากต้องการลบบริการ Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบvllm-gemma-2-2bบริการ คุณอาจต้องลบบัญชีบริการ vllm-gemma-2-2b ด้วย
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list