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 yang memerlukan pendaftaran dalam daftar tunggu. Jika Anda tertarik untuk mencoba fitur ini, isi formulir ini untuk bergabung dalam daftar tunggu. Cloud Run adalah platform container di Google Cloud yang memudahkan Anda menjalankan kode dalam container, tanpa mengharuskan Anda 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 tetap berlaku. Hal ini mencakup penskalaan hingga 5 instance (dengan peningkatan kuota yang tersedia), serta penskalaan ke nol instance saat tidak ada permintaan.

Salah satu kasus penggunaan 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 sidecar untuk menayangkan 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 sidecar yang melayani model Gemma 2 2B
  • Cara men-deploy Open WebUI sebagai container ingress 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 mengharuskan 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. Buat Bucket GCS untuk menyimpan model Gemma 2 2B

Pertama, Anda akan 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 di port 11434.

Buka jendela terminal kedua untuk mendownload model Gemma 2 2B ke

ollama pull gemma2:2b

(Opsional) Anda dapat berinteraksi dengan Gemma dari command line dengan menjalankan

ollama run gemma2:2b

Setelah selesai melakukan percakapan 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. Buat image Ollama

Buat dockerfile dengan konten berikut

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

Buat repositori 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

Bangun image 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. Buat image frontend Open WebUI

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

Gunakan Docker untuk menarik image Open WebUI.

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

Kemudian, konfigurasi Docker agar menggunakan kredensial Google Cloud Anda untuk melakukan autentikasi dengan Artifact Registry. Dengan demikian, Anda dapat menggunakan docker untuk mengirim image ke repo Artifact Registry.

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

Beri tag pada image Anda, 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
        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

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 Pilih model, pilih Gemma 2 2B.

Sekarang ajukan pertanyaan kepada Gemma, misalnya "Kenapa 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 sidecar yang melayani model Gemma 2 2B
  • Cara men-deploy Open WebUI sebagai container ingress frontend

9. Pembersihan

Untuk menghindari biaya yang tidak disengaja (misalnya, jika layanan Cloud Run tidak sengaja dipanggil lebih banyak kali daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat gratis), Anda dapat menghapus Cloud Run atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus fungsi Cloud Run, buka Konsol Cloud Run di https://console.cloud.google.com/run, lalu hapus layanan ollama-sidecar-codelab.

Jika Anda 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 menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.