1. บทนำ
ภาพรวม
การรองรับ GPU ที่เพิ่งเพิ่ม Cloud Run โดยพร้อมให้ใช้งานเป็นเวอร์ชันตัวอย่างแบบสาธารณะที่ลงชื่อในคิวรอ หากสนใจทดลองใช้ฟีเจอร์นี้ โปรดกรอกแบบฟอร์มนี้เพื่อเข้าร่วมคิวรอ Cloud Run เป็นแพลตฟอร์มคอนเทนเนอร์บน Google Cloud ที่ทำให้การเรียกใช้โค้ดในคอนเทนเนอร์เป็นเรื่องง่าย โดยที่คุณไม่ต้องจัดการคลัสเตอร์
ปัจจุบัน GPU ที่เราเปิดให้ใช้งานคือ GPU ของ Nvidia L4 ที่มี vRAM ขนาด 24 GB มี GPU 1 รายการต่ออินสแตนซ์ Cloud Run และยังคงใช้การปรับขนาดอัตโนมัติของ Cloud Run อยู่ ซึ่งรวมถึงการปรับขนาดอินสแตนซ์สูงสุด 5 รายการ (โดยมีการเพิ่มโควต้า) และการลดอินสแตนซ์ให้เหลือ 0 รายการเมื่อไม่มีคำขอ
กรณีการใช้งานอย่างหนึ่งของ GPU คือการใช้โมเดลภาษาขนาดใหญ่ (LLM) แบบเปิดของคุณเอง บทแนะนำนี้จะแนะนำขั้นตอนในการทำให้บริการที่เรียกใช้ LLM ใช้งานได้
ในโค้ดแล็บนี้ คุณจะติดตั้งใช้งานบริการที่มีคอนเทนเนอร์หลายรายการซึ่งใช้ Open WebUI เป็นคอนเทนเนอร์อินเกรซสำหรับฟีดหน้าเว็บ และใช้ Ollama ในไซด์คาร์เพื่อแสดงโมเดล Gemma 2 2B ที่เก็บไว้ในที่เก็บข้อมูล Google Cloud Storage
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างบริการคอนเทนเนอร์หลายรายการใน Cloud Run
- วิธีทำให้ Ollama ทำงานเป็นอุปกรณ์เสริมที่ให้บริการ Gemma 2 รุ่น 2B
- วิธีทำให้ Open WebUI ใช้งานได้ในฐานะคอนเทนเนอร์ Ingress ของส่วนหน้า
2. ตั้งค่าตัวแปรสภาพแวดล้อมและเปิดใช้ API
อัปเกรด gcloud CLI
ก่อนอื่น คุณจะต้องติดตั้ง gcloud CLI เวอร์ชันล่าสุด คุณอัปเดต CLI โดยเรียกใช้คำสั่งต่อไปนี้
gcloud components update
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณกำหนดตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้ง Codelab ได้
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
เปิดใช้ API
ก่อนที่คุณจะเริ่มใช้ Codelab นี้ได้ คุณจะต้องเปิดใช้ API หลายรายการ โค้ดแล็บนี้ต้องใช้ 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 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 # Store the model weights in the container image ENV MODEL gemma2:2b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจบริการ
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
สร้างรูปภาพไฟล์ช่วยเหลือของ 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 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 ทำงานเป็นอุปกรณ์เสริมที่ให้บริการ Gemma 2 รุ่น 2B
- วิธีทำให้ Open WebUI ใช้งานได้เป็นคอนเทนเนอร์ฟรอนท์เอนด์
9. ล้างข้อมูล
เพื่อหลีกเลี่ยงการเรียกเก็บเงินที่ไม่ตั้งใจ (เช่น หากมีการเรียกใช้บริการ Cloud Run โดยไม่ได้ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในรุ่นฟรี) คุณจะลบ Cloud Run หรือลบโปรเจ็กต์ที่สร้างไว้ในขั้นตอนที่ 2 ก็ได้
หากต้องการลบฟังก์ชัน Cloud Run ให้ไปที่คอนโซล Cloud ของ 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