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 VPCdefault(pastikan jaringan ini ada dan memiliki subnet di region Anda dengan Akses Google Pribadi yang diaktifkan).--subnet: Subnet tertentu di region Anda (biasanyadefaultjika menggunakan jaringan default).--vpc-egress: Setel keall-trafficuntuk 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.