Cara menggunakan Ollama sebagai file bantuan dengan GPU Cloud Run dan Open WebUI sebagai container ingress frontend

1. Pengantar

Ringkasan

Cloud Run baru-baru ini menambahkan dukungan GPU. Fitur 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 akan memandu Anda men-deploy layanan yang menjalankan LLM.

Dalam codelab ini, Anda akan men-deploy layanan multi-container yang menggunakan Open WebUI sebagai container ingress frontend dan menggunakan Ollama di file bantuan untuk menyalurkan model Gemma 2 2B yang disimpan di bucket Google Cloud Storage.

Yang akan Anda pelajari

  • Cara membuat layanan multi-container di Cloud Run
  • Cara men-deploy Ollama sebagai file bantuan yang menyajikan model Gemma 2 2B
  • Cara men-deploy WebUI Terbuka sebagai container masuk frontend

2. Menetapkan Variabel Lingkungan dan Mengaktifkan API

Mengupgrade gcloud CLI

Pertama, Anda harus menginstal gcloud CLI versi terbaru. Anda dapat mengupdate CLI dengan menjalankan perintah berikut:

gcloud components update

Menyiapkan variabel lingkungan

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

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=us-central1
gcloud config set project $PROJECT_ID

Mengaktifkan API

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

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

Buat direktori untuk codelab ini.

mkdir ollama-sidecar-codelab
cd ollama-sidecar-codelab

3. Membuat Bucket GCS untuk menyimpan model Gemma 2 2B

Pertama, Anda harus menginstal Ollama untuk mendownload model. Tindakan ini akan mendownload model ke /home/$USER/.ollama/models

curl -fsSL https://ollama.com/install.sh | sh

Sekarang jalankan ollama dengan menjalankan

ollama serve

Ollama mulai memproses port 11434.

Buka jendela terminal kedua untuk menarik model Gemma 2 2B ke bawah

ollama pull gemma2:2b

(Opsional) Anda dapat berinteraksi dengan Gemma dari baris perintah dengan menjalankan

ollama run gemma2:2b

Setelah selesai chat dengan Gemma, Anda dapat keluar dengan mengetik

/bye

4. Membuat Bucket Storage

Setelah model didownload, Anda dapat memindahkan model ke bucket GCS.

Pertama, buat bucket.

gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab

Sekarang, pindahkan folder model ke GCS.

gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab

5. Membuat gambar Ollama

Buat dockerfile dengan konten berikut

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

Buat repo Artifact Registry untuk menyimpan image layanan Anda.

gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
    --location=us-central1 --description="Ollama + OpenWebUI website demo" \
    --project=$PROJECT_ID

Membangun gambar file bantuan 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. Membuat gambar frontend Open WebUI

Di bagian ini, Anda akan membuat container masuk frontend menggunakan Open WebUI.

Gunakan Docker untuk menarik gambar Open WebUI ke bawah.

docker pull ghcr.io/open-webui/open-webui:main

Kemudian, konfigurasikan Docker agar menggunakan kredensial Google Cloud Anda untuk melakukan autentikasi dengan Artifact Registry. Tindakan ini akan memungkinkan Anda menggunakan docker untuk mengirim image ke repo Artifact Registry.

gcloud auth configure-docker us-central1-docker.pkg.dev

Beri tag pada image, lalu kirim ke 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. Men-deploy layanan multi-container ke Cloud Run

Menggunakan file yaml untuk men-deploy layanan multi-container

Buat service.yaml dengan konten berikut.

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

Perbarui service.yaml untuk mengganti PROJECT_ID dengan project ID Anda:

sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml

Deploy ke Cloud Run menggunakan perintah berikut.

gcloud beta run services replace service.yaml

Menguji layanan Cloud Run

Sekarang buka URL Layanan di browser web Anda.

Setelah UI selesai dimuat, di bagian Select a model, pilih Gemma 2 2B.

Sekarang ajukan pertanyaan kepada Gemma, misalnya "Mengapa langit berwarna biru?"

8. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Sebaiknya tinjau dokumentasi tentang fungsi Cloud Run

Yang telah kita bahas

  • Cara membuat layanan multi-container di Cloud Run
  • Cara men-deploy Ollama sebagai file bantuan yang menyajikan model Gemma 2 2B
  • Cara men-deploy WebUI Terbuka sebagai container masuk frontend

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 fungsi Cloud Run, buka Konsol Cloud Cloud Run di https://console.cloud.google.com/run, lalu hapus layanan ollama-sidecar-codelab.

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