1. บทนำ
ภาพรวม
Cloud Run เพิ่งเพิ่มการรองรับ GPU โดยพร้อมใช้งานเป็นเวอร์ชันตัวอย่างแบบสาธารณะที่ต้องลงชื่อสมัครใช้ หากสนใจลองใช้ฟีเจอร์นี้ โปรดกรอกแบบฟอร์มนี้เพื่อเข้าร่วมรายชื่อผู้รอใช้ Cloud Run เป็นแพลตฟอร์มคอนเทนเนอร์ใน Google Cloud ที่ช่วยให้คุณเรียกใช้โค้ดในคอนเทนเนอร์ได้อย่างตรงไปตรงมาโดยไม่ต้องจัดการคลัสเตอร์
ปัจจุบัน GPU ที่เรามีให้ใช้งานคือ GPU รุ่น L4 ของ Nvidia ที่มี vRAM ขนาด 24 GB มี GPU 1 ตัวต่ออินสแตนซ์ Cloud Run และการปรับขนาดอัตโนมัติของ Cloud Run ยังคงมีผล ซึ่งรวมถึงการเพิ่มขนาดสูงสุด 5 อินสแตนซ์ (พร้อมโควต้าที่เพิ่มขึ้น) รวมถึงการลดขนาดเป็น 0 อินสแตนซ์เมื่อไม่มีคำขอ
กรณีการใช้งาน GPU อย่างหนึ่งคือการเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) แบบเปิดของคุณเอง บทแนะนำนี้จะแนะนำขั้นตอนการติดตั้งใช้งานบริการที่เรียกใช้ LLM
ในโค้ดแล็บนี้ คุณจะได้ติดตั้งใช้งานบริการแบบหลายคอนเทนเนอร์ที่ใช้ Open WebUI เป็นคอนเทนเนอร์ขาเข้าส่วนหน้า และใช้ Ollama ใน Sidecar เพื่อให้บริการโมเดล Gemma 2 2B ที่จัดเก็บไว้ในที่เก็บข้อมูล Google Cloud Storage
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างบริการแบบหลายคอนเทนเนอร์ใน Cloud Run
- วิธีทำให้ Ollama ใช้งานได้ในฐานะ Sidecar ที่ให้บริการโมเดล Gemma 2 2B
- วิธีทําให้ Open WebUI ใช้งานได้เป็นคอนเทนเนอร์ขาเข้าส่วนหน้า
2. ตั้งค่าตัวแปรสภาพแวดล้อมและเปิดใช้ API
อัปเกรด gcloud CLI
ก่อนอื่นคุณจะต้องติดตั้ง gcloud CLI เวอร์ชันล่าสุด คุณอัปเดต CLI ได้โดยเรียกใช้คำสั่งต่อไปนี้
gcloud components update
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้ได้
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
เปิดใช้ API
ก่อนที่จะเริ่มใช้ Codelab นี้ได้ คุณจะต้องเปิดใช้ API หลายรายการ Codelab นี้กำหนดให้ใช้ API ต่อไปนี้ คุณเปิดใช้ API เหล่านั้นได้โดยการเรียกใช้คำสั่งต่อไปนี้
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
สร้างไดเรกทอรีสำหรับ Codelab นี้
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. สร้างที่เก็บข้อมูล GCS เพื่อจัดเก็บโมเดล Gemma 2 2B
ก่อนอื่น คุณจะต้องติดตั้ง Ollama เพื่อดาวน์โหลดโมเดล ซึ่งจะดาวน์โหลดโมเดลไปยัง /home/$USER/.ollama/models
curl -fsSL https://ollama.com/install.sh | sh
ตอนนี้ให้เรียกใช้ Ollama โดยการเรียกใช้
ollama serve
Ollama จะเริ่มรับฟังบนพอร์ต 11434
เปิดหน้าต่างเทอร์มินัลที่ 2 เพื่อดึงโมเดล Gemma 2 2B ลงมา
ollama pull gemma2:2b
(ไม่บังคับ) คุณสามารถโต้ตอบกับ Gemma จากบรรทัดคำสั่งได้โดยการเรียกใช้
ollama run gemma2:2b
เมื่อแชทกับ Gemma เสร็จแล้ว คุณสามารถออกได้โดยพิมพ์
/bye
4. สร้างที่เก็บข้อมูล
เมื่อดาวน์โหลดโมเดลแล้ว คุณจะย้ายโมเดลไปยังที่เก็บข้อมูล GCS ได้
ก่อนอื่น ให้สร้างที่เก็บข้อมูล
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
ตอนนี้ให้ย้ายโฟลเดอร์โมเดลไปยัง GCS
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. สร้างอิมเมจ Ollama
สร้าง Dockerfile ที่มีเนื้อหาต่อไปนี้
FROM --platform=linux/amd64 ollama/ollama # 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
สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจบริการ
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
สร้างอิมเมจ Sidecar ของ Ollama
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. สร้างอิมเมจฟรอนท์เอนด์ Open WebUI
ในส่วนนี้ คุณจะสร้างคอนเทนเนอร์ Ingress ของส่วนหน้าโดยใช้ Open WebUI
ใช้ Docker เพื่อดึงรูปภาพ Open WebUI ลงมา
docker pull ghcr.io/open-webui/open-webui:main
จากนั้นกำหนดค่า Docker ให้ใช้ข้อมูลเข้าสู่ระบบ Google Cloud เพื่อตรวจสอบสิทธิ์กับ Artifact Registry ซึ่งจะช่วยให้คุณใช้ Docker เพื่อพุชอิมเมจไปยังที่เก็บ Artifact Registry ได้
gcloud auth configure-docker us-central1-docker.pkg.dev
ติดแท็กรูปภาพ แล้วพุชไปยัง Artifact Registry
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. ทำให้บริการแบบหลายคอนเทนเนอร์ใช้งานได้ใน Cloud Run
ใช้ไฟล์ YAML เพื่อทำให้บริการแบบหลายคอนเทนเนอร์ใช้งานได้
สร้าง service.yaml ที่มีเนื้อหาต่อไปนี้
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ollama-sidecar-codelab
labels:
cloud.googleapis.com/location: us-central1
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: '5'
run.googleapis.com/cpu-throttling: 'false'
run.googleapis.com/startup-cpu-boost: 'true'
run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- name: openwebui
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
ports:
- name: http1
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: http://localhost:11434
- name: WEBUI_AUTH
value: 'false'
resources:
limits:
memory: 1Gi
cpu: 2000m
volumeMounts:
- name: in-memory-1
mountPath: /app/backend/data
startupProbe:
timeoutSeconds: 240
periodSeconds: 240
failureThreshold: 1
tcpSocket:
port: 8080
- name: ollama-sidecar
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
volumeMounts:
- name: gcs-1
mountPath: /root/.ollama
startupProbe:
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
tcpSocket:
port: 11434
volumes:
- name: gcs-1
csi:
driver: gcsfuse.run.googleapis.com
volumeAttributes:
bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
- name: in-memory-1
emptyDir:
medium: Memory
sizeLimit: 10Gi
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
อัปเดต service.yaml เพื่อแทนที่ PROJECT_ID ด้วยรหัสโปรเจ็กต์ของคุณ
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
ทําให้ใช้งานได้กับ Cloud Run โดยใช้คําสั่งต่อไปนี้
gcloud beta run services replace service.yaml
ทดสอบบริการ Cloud Run
ตอนนี้ให้เปิด URL ของบริการในเว็บเบราว์เซอร์
เมื่อ UI โหลดเสร็จแล้ว ให้เลือก Gemma 2 2B ในส่วนเลือกโมเดล
ตอนนี้ให้ถามคำถามกับ Gemma เช่น "ทำไมท้องฟ้าถึงเป็นสีฟ้า"
8. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารเกี่ยวกับฟังก์ชัน Cloud Run
สิ่งที่เราได้พูดถึง
- วิธีสร้างบริการแบบหลายคอนเทนเนอร์ใน Cloud Run
- วิธีทำให้ Ollama ใช้งานได้ในฐานะ Sidecar ที่ให้บริการโมเดล Gemma 2 2B
- วิธีทําให้ Open WebUI ใช้งานได้เป็นคอนเทนเนอร์ขาเข้าส่วนหน้า
9. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากมีการเรียกใช้บริการ Cloud Run โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี) คุณสามารถลบ Cloud Run หรือลบโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 ได้
หากต้องการลบฟังก์ชัน Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบollama-sidecar-codelabบริการ
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list