Menjalankan inferensi menggunakan model Gemma di Cloud Run dengan GPU RTX 6000 Pro

1. Pengantar

Ringkasan

Yang akan Anda pelajari

  • Cara men-deploy model Gemma di GPU RTX 6000 Pro Cloud Run
  • Cara mendownload model secara bersamaan dari Cloud Storage selama startup container

2. Penyiapan dan Persyaratan

Tetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini:

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

Aktifkan API yang diperlukan untuk Codelab ini

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

Buat folder untuk codelab

mkdir codelab-rtx
cd codelab-rtx

Aktifkan Akses Google Pribadi ke subnet Anda untuk mengoptimalkan pemuatan model ML dari Cloud Storage. Anda dapat mempelajari lebih lanjut di bagian dokumen praktik terbaik GPU tentang memuat model dari Cloud Storage.

gcloud compute networks subnets update default \
  --region=europe-west4 \
  --enable-private-ip-google-access

3. Menyiapkan Cloud Storage

Pertama, buat bucket Cloud Storage untuk menyimpan bobot model.

Membuat bucket unik

# 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. Mengambil Bobot Model

Selanjutnya, download model Gemma 3 ke direktori lokal, lalu upload ke bucket Cloud Storage Anda.

Menginstal Ollama

Anda dapat menjalankan perintah ini untuk menginstal Ollama:

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

Download Model

Buat direktori untuk model yang didownload.

mkdir model-weights

Anda akan menggunakan dua tab terminal untuk proses ini: satu untuk menjalankan server Ollama dan terminal lainnya untuk mengambil model.

Terminal 1 (Server):

Mulai server dengan meneruskan lokasi model yang didownload. Perintah ini akan terus berjalan.

OLLAMA_MODELS=$(pwd)/model-weights ollama serve

Terminal 2 (Klien): Buka tab terminal baru dan download model. Klien akan otomatis berkomunikasi dengan server yang sedang berjalan.

# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b

Kembali di Terminal 1: Setelah download di Terminal 2 selesai, kembali ke Terminal 1 dan tekan Ctrl+C untuk menghentikan server.

Mengupload ke Cloud Storage

Sekarang upload bobot ke bucket Anda. gcloud storage otomatis menangani upload paralel untuk mempercepat proses.

gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/

(Opsional) Membersihkan Bobot Lokal

Karena model sekarang ada di Cloud Storage, hapus salinan lokal.

rm -rf model-weights

5. Membuat layanan

Pertama, buat folder untuk layanan.

mkdir rtx-service
cd rtx-service

Buat Dockerfile dengan konten berikut

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

Buat file bernama entrypoint.sh dengan konten berikut:

#!/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. Men-deploy ke Cloud Run

Di bagian ini, Anda akan men-deploy layanan menggunakan gcloud run deploy. Perintah ini akan mem-build container Anda dari sumber dan men-deploy-nya ke Cloud Run dengan konfigurasi GPU dan jaringan yang diperlukan.

Buat Akun Layanan

Buat akun layanan khusus untuk aplikasi ini dan hanya berikan izin yang diperlukan.

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

Konfigurasi Jaringan

Untuk performa optimal saat mendownload model besar, gunakan Traffic Egress VPC Langsung. Hal ini memungkinkan penampung mengakses Cloud Storage melalui jaringan pribadi Google, dengan melewati internet publik dan gateway NAT. Flag berikut digunakan dalam perintah gcloud run deploy:

  • --network: Terhubung ke VPC default (pastikan jaringan ini ada dan memiliki subnet di region Anda dengan Akses Google Pribadi yang diaktifkan).
  • --subnet: Subnet tertentu di region Anda (biasanya default jika menggunakan jaringan default).
  • --vpc-egress: Setel ke all-traffic untuk memaksa semua traffic keluar melalui VPC.

Perintah Deployment

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. Menguji Layanan

Setelah di-deploy, Anda dapat berinteraksi dengan model Gemma 3 menggunakan Ollama API.

Mendapatkan URL Layanan

Ambil URL layanan Cloud Run yang di-deploy.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"

Menjalankan Inferensi

Kirim perintah ke model menggunakan curl. Anda dapat menetapkan "stream": false untuk mendapatkan respons lengkap dalam satu objek JSON dan menggunakan jq untuk mengekstrak teks saja.

Catatan: Jika Anda menggunakan model yang lebih besar, misalnya gemma3:27b, Anda harus mengubah nama model dalam json di bawah.

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. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Sebaiknya tinjau dokumentasi Cloud Run.

Yang telah kita bahas

  • Cara men-deploy model Gemma di GPU RTX 6000 Pro Cloud Run
  • Cara mendownload model secara bersamaan dari Cloud Storage selama startup container

9. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project atau menghapus setiap resource.

Opsi 1: Hapus Resource

Menghapus Layanan Cloud Run

gcloud run services delete $SERVICE_NAME \
      --region $REGION \
      --quiet

Menghapus Akun Layanan

gcloud iam service-accounts delete \
      rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
      --quiet

Hapus Bucket Cloud Storage

gcloud storage rm --recursive gs://$MODEL_BUCKET

Hapus Image Container

Build ini membuat image container di Artifact Registry. Anda dapat menemukan nama gambar dan menghapusnya.

Buat daftar image untuk menemukan nama persisnya (biasanya gcr.io/PROJECT_ID/SERVICE_NAME)

gcloud container images list --filter="name:$SERVICE_NAME"

Hapus gambar (ganti IMAGE_NAME dengan hasil dari langkah di atas)

gcloud container images delete <IMAGE_NAME> --force-delete-tags

Opsi 2: Menghapus Project

Untuk menghapus seluruh project, buka Manage Resources, pilih project yang Anda buat di Langkah 2, lalu pilih Delete. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.