1. บทนำ
ภาพรวม
สิ่งที่คุณจะได้เรียนรู้
- วิธีติดตั้งใช้งานโมเดล Gemma บน GPU RTX 6000 Pro ของ Cloud Run
- วิธีดาวน์โหลดโมเดลจาก Cloud Storage พร้อมกันระหว่างการเริ่มต้นคอนเทนเนอร์
2. การตั้งค่าและข้อกำหนด
ตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab
# set the project
gcloud config set project $PROJECT_ID
เปิดใช้ API ที่จำเป็นสำหรับ Codelab นี้
gcloud services enable artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com
สร้างโฟลเดอร์สำหรับ Codelab
mkdir codelab-rtx
cd codelab-rtx
เปิดใช้การเข้าถึง Google แบบส่วนตัวในซับเน็ตเพื่อเพิ่มประสิทธิภาพการโหลดโมเดล ML จาก Cloud Storage ดูข้อมูลเพิ่มเติมได้ในส่วนเอกสารแนวทางปฏิบัติแนะนำสำหรับ GPU เกี่ยวกับการโหลดโมเดลจาก Cloud Storage
gcloud compute networks subnets update default \
--region=europe-west4 \
--enable-private-ip-google-access
3. ตั้งค่า Cloud Storage
ก่อนอื่น ให้สร้าง Bucket ของ Cloud Storage เพื่อจัดเก็บน้ำหนักของโมเดล
สร้างที่เก็บข้อมูลที่ไม่ซ้ำกัน
# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"
# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
--location=$REGION \
--uniform-bucket-level-access
4. เรียกข้อมูลน้ำหนักของโมเดล
จากนั้นดาวน์โหลดโมเดล Gemma 3 ไปยังไดเรกทอรีในเครื่อง แล้วอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage
ติดตั้ง Ollama
คุณเรียกใช้คำสั่งนี้เพื่อติดตั้ง Ollama ได้
curl -fsSL https://ollama.com/install.sh | sh
ดาวน์โหลดโมเดล
สร้างไดเรกทอรีสำหรับโมเดลที่ดาวน์โหลด
mkdir model-weights
คุณจะต้องใช้แท็บเทอร์มินัล 2 แท็บสำหรับกระบวนการนี้ โดยแท็บหนึ่งใช้เพื่อเรียกใช้เซิร์ฟเวอร์ Ollama และอีกแท็บใช้เพื่อดึงข้อมูลโมเดล
เทอร์มินัล 1 (เซิร์ฟเวอร์):
เริ่มเซิร์ฟเวอร์โดยส่งตำแหน่งของโมเดลที่ดาวน์โหลด คำสั่งนี้จะทำงานต่อไป
OLLAMA_MODELS=$(pwd)/model-weights ollama serve
เทอร์มินัล 2 (ไคลเอ็นต์): เปิดแท็บเทอร์มินัลใหม่แล้วดาวน์โหลดโมเดล ไคลเอ็นต์จะสื่อสารกับเซิร์ฟเวอร์ที่ทำงานอยู่โดยอัตโนมัติ
# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b
กลับไปที่เทอร์มินัล 1: เมื่อดาวน์โหลดในเทอร์มินัล 2 เสร็จแล้ว ให้กลับไปที่เทอร์มินัล 1 แล้วกด Ctrl+C เพื่อหยุดเซิร์ฟเวอร์
อัปโหลดไปยัง Cloud Storage
ตอนนี้ให้อัปโหลดน้ำหนักไปยังที่เก็บข้อมูล gcloud storageจัดการการอัปโหลดแบบขนานโดยอัตโนมัติเพื่อเพิ่มความเร็ว
gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/
(ไม่บังคับ) ล้างข้อมูลน้ำหนักในเครื่อง
เนื่องจากตอนนี้โมเดลอยู่ใน Cloud Storage แล้ว ให้นำสำเนาในเครื่องออก
rm -rf model-weights
5. สร้างบริการ
ก่อนอื่น ให้สร้างโฟลเดอร์สำหรับบริการ
mkdir rtx-service
cd rtx-service
สร้าง Dockerfile ที่มีเนื้อหาต่อไปนี้
FROM ollama/ollama:latest
# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
apt-get update && apt-get install -y google-cloud-cli && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# 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
# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]
สร้างไฟล์ชื่อ entrypoint.sh ที่มีเนื้อหาต่อไปนี้
#!/bin/bash
set -e
# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS
# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
echo "Downloading model weights from gs://$MODEL_BUCKET..."
# gcloud storage handles concurrent downloads automatically
gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
echo "MODEL_BUCKET not set. Skipping download."
fi
# Start Ollama
exec ollama serve
6. ทำให้ใช้งานได้กับ Cloud Run
ในส่วนนี้ คุณจะติดตั้งใช้งานบริการโดยใช้ gcloud run deploy คำสั่งนี้จะสร้างคอนเทนเนอร์จากแหล่งที่มาและทำให้ใช้งานได้ใน Cloud Run พร้อมการกำหนดค่า GPU และเครือข่ายที่จำเป็น
สร้างบัญชีบริการ
สร้างบัญชีบริการเฉพาะสำหรับแอปพลิเคชันนี้ และให้สิทธิ์ที่จำเป็นเท่านั้น
# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
--display-name="RTX Codelab Identity"
# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
การกำหนดค่าเครือข่าย
ใช้ข้อมูลขาออก VPC โดยตรงเพื่อให้ได้ประสิทธิภาพสูงสุดเมื่อดาวน์โหลดโมเดลขนาดใหญ่ ซึ่งจะช่วยให้คอนเทนเนอร์เข้าถึง Cloud Storage ผ่านเครือข่ายส่วนตัวของ Google ได้ โดยข้ามอินเทอร์เน็ตสาธารณะและเกตเวย์ NAT มีการใช้แฟล็กต่อไปนี้ในคำสั่ง gcloud run deploy
--network: เชื่อมต่อกับ VPCdefault(ตรวจสอบว่าเครือข่ายนี้มีอยู่และมีซับเน็ตในภูมิภาคของคุณที่เปิดใช้การเข้าถึง Google แบบส่วนตัว)--subnet: ซับเน็ตที่เฉพาะเจาะจงในภูมิภาคของคุณ (โดยปกติคือdefaultหากใช้เครือข่ายเริ่มต้น)--vpc-egress: ตั้งค่าเป็นall-trafficเพื่อบังคับให้การรับส่งข้อมูลขาออกทั้งหมดผ่าน VPC
คำสั่งการทำให้ใช้งานได้
gcloud beta run deploy $SERVICE_NAME \
--source . \
--region $REGION \
--project $PROJECT_ID \
--no-allow-unauthenticated \
--port 11434 \
--service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--cpu 20 --memory 80Gi \
--gpu 1 \
--gpu-type nvidia-rtx-pro-6000 \
--set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
--network default \
--subnet default \
--vpc-egress all-traffic \
--no-gpu-zonal-redundancy
7. ทดสอบบริการ
เมื่อติดตั้งใช้งานแล้ว คุณจะโต้ตอบกับโมเดล Gemma 3 ได้โดยใช้ Ollama API
รับ URL ของบริการ
ดึงข้อมูล URL ของบริการ Cloud Run ที่ทำให้ใช้งานได้
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"
เรียกใช้การอนุมาน
ส่งพรอมต์ไปยังโมเดลโดยใช้ curl คุณตั้งค่า "stream": false เพื่อรับคำตอบทั้งหมดในออบเจ็กต์ JSON เดียว และใช้ jq เพื่อดึงเฉพาะข้อความได้
หมายเหตุ: หากใช้โมเดลขนาดใหญ่กว่า เช่น gemma3:27b คุณจะต้องเปลี่ยนชื่อโมเดลใน JSON ด้านล่าง
curl -s "$SERVICE_URL/api/generate" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:1b",
"prompt": "Why is the sky blue?",
"stream": false
}' | jq -r '.response'
8. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบของ Cloud Run
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีติดตั้งใช้งานโมเดล Gemma บน GPU RTX 6000 Pro ของ Cloud Run
- วิธีดาวน์โหลดโมเดลจาก Cloud Storage พร้อมกันระหว่างการเริ่มต้นคอนเทนเนอร์
9. ล้างข้อมูล
คุณสามารถลบโปรเจ็กต์หรือลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
ตัวเลือกที่ 1: ลบทรัพยากร
ลบบริการ Cloud Run
gcloud run services delete $SERVICE_NAME \
--region $REGION \
--quiet
ลบบัญชีบริการ
gcloud iam service-accounts delete \
rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--quiet
ลบที่เก็บข้อมูล Cloud Storage
gcloud storage rm --recursive gs://$MODEL_BUCKET
ลบอิมเมจคอนเทนเนอร์
การสร้างนี้สร้างอิมเมจคอนเทนเนอร์ใน Artifact Registry คุณสามารถค้นหาชื่อรูปภาพและลบได้
แสดงรายการอิมเมจเพื่อค้นหาชื่อที่แน่นอน (โดยปกติคือ gcr.io/PROJECT_ID/SERVICE_NAME)
gcloud container images list --filter="name:$SERVICE_NAME"
ลบรูปภาพ (แทนที่ IMAGE_NAME ด้วยผลลัพธ์จากด้านบน)
gcloud container images delete <IMAGE_NAME> --force-delete-tags
ตัวเลือกที่ 2: ลบโปรเจ็กต์
หากต้องการลบทั้งโปรเจ็กต์ ให้ไปที่จัดการทรัพยากร เลือกโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list