Tujuan
Panduan ini menunjukkan cara menjalankan inferensi LLM di GPU Cloud Run dengan Gemma 3 dan Ollama, serta memiliki tujuan berikut:
- Deploy Ollama dengan model Gemma 3 di layanan Cloud Run yang mendukung GPU.
- Kirim perintah ke layanan Ollama di endpoint pribadinya.
Untuk mempelajari cara alternatif men-deploy model terbuka Gemma 3 di Cloud Run menggunakan container yang telah di-build sebelumnya, lihat Menjalankan model Gemma 3 di Cloud Run.
Biaya
Di dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Instal dan lakukan inisialisasi gcloud CLI.
- Minta kuota
Total Nvidia L4 GPU allocation, per project per regiondi bagian Cloud Run Admin API di halaman Kuota dan batas sistem untuk menyelesaikan tutorial ini. -
Artifact Registry Admin (
roles/artifactregistry.admin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Admin Cloud Run (
roles/run.admin) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) -
Storage Admin (
roles/storage.admin) -
Di konsol Google Cloud , buka halaman IAM.
Buka IAM - Pilih project.
- Klik Grant access.
-
Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email yang digunakan untuk men-deploy layanan Cloud Run.
- Di daftar Select a role, pilih peran.
- Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
- Klik Simpan.
- PROJECT_NUMBER dengan nomor project Google Cloud Anda.
- PROJECT_ID dengan project ID Google Cloud Anda.
- PRINCIPAL dengan akun yang Anda tambahkan binding-nya. Biasanya berupa alamat email yang digunakan untuk men-deploy layanan Cloud Run.
- ROLE dengan peran yang Anda tambahkan ke akun deployer.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Memberikan peran
Konsol
gcloud
Untuk memberikan peran IAM yang diperlukan ke akun Anda di project Anda:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Ganti:
Menyiapkan gcloud
Untuk mengonfigurasi Google Cloud CLI untuk layanan Cloud Run Anda:
Setel project default Anda:
gcloud config set project PROJECT_IDKlik ikon untuk mengganti variabel PROJECT_ID dengan nama project yang Anda buat untuk tutorial ini. Hal ini memastikan bahwa semua listingan di halaman ini yang mereferensikan PROJECT_ID telah diisi dengan nilai yang benar.
Konfigurasi Google Cloud CLI untuk menggunakan region
europe-west1untuk perintah Cloud Run.gcloud config set run/region europe-west1
Menggunakan Docker untuk membuat image container dengan Ollama dan Gemma
Buat direktori untuk layanan Ollama dan ubah direktori kerja Anda ke direktori baru ini:
mkdir ollama-backend cd ollama-backendBuat file
Dockerfiledengan konten berikut:FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # 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 gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Menyimpan bobot model dalam image container untuk memulai instance yang lebih cepat
Google merekomendasikan penyimpanan bobot model untuk Gemma 3 (4B) dan model berukuran serupa langsung di image container.
Bobot model adalah parameter numerik yang menentukan perilaku LLM. Ollama harus membaca file ini sepenuhnya dan memuat bobot ke dalam memori GPU (VRAM) selama startup instance container, sebelum dapat mulai menayangkan permintaan inferensi.
Di Cloud Run, startup instance container yang cepat penting untuk meminimalkan latensi permintaan. Jika instance penampung Anda memiliki waktu startup yang lambat, layanan memerlukan waktu lebih lama untuk menskalakan dari nol ke satu instance, dan memerlukan lebih banyak waktu untuk menskalakan selama lonjakan traffic.
Untuk memastikan startup yang cepat, simpan file model dalam image container itu sendiri. Hal ini lebih cepat dan lebih andal daripada mendownload file dari lokasi jarak jauh selama proses mulai. Penyimpanan image container internal Cloud Run dioptimalkan untuk menangani lonjakan traffic, sehingga dapat menyiapkan sistem file container dengan cepat saat instance dimulai.
Perhatikan bahwa bobot model untuk Gemma 3 (4B) memerlukan penyimpanan sebesar 8 GB. Model yang lebih besar memiliki file bobot model yang lebih besar, dan file ini mungkin tidak praktis untuk disimpan dalam image container. Lihat Praktik terbaik: Inferensi AI di Cloud Run dengan GPU untuk mengetahui ringkasan pertimbangannya.
Membangun dan men-deploy layanan Ollama untuk inferensi LLM
Buat dan deploy layanan ke Cloud Run:
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600Perhatikan tanda penting berikut dalam perintah ini:
--concurrency 4ditetapkan agar cocok dengan nilai variabel lingkunganOLLAMA_NUM_PARALLEL.--gpu 1dengan--gpu-type nvidia-l4menetapkan 1 GPU NVIDIA L4 ke setiap instance Cloud Run dalam layanan.--max-instances 1menentukan jumlah maksimum instance yang akan diskalakan. Nilainya harus sama dengan atau lebih rendah dari kuota GPU NVIDIA L4 (Total Nvidia L4 GPU allocation, per project per region) project Anda.--no-allow-unauthenticatedmembatasi akses yang tidak diautentikasi ke layanan. Dengan menjaga layanan tetap bersifat pribadi, Anda dapat mengandalkan autentikasi Identity and Access Management (IAM) bawaan Cloud Run untuk komunikasi layanan-ke-layanan. Lihat Mengelola akses menggunakan IAM.--no-cpu-throttlingdiperlukan untuk mengaktifkan GPU.--no-gpu-zonal-redundancymenetapkan opsi redundansi zona bergantung pada persyaratan failover zona dan kuota yang tersedia. Lihat Opsi redundansi per zona GPU untuk mengetahui detailnya.
Setelan serentak untuk performa optimal
Bagian ini memberikan konteks tentang setelan serentak yang direkomendasikan. Untuk
latensi permintaan yang optimal, pastikan setelan --concurrency sama dengan variabel lingkungan
OLLAMA_NUM_PARALLEL Ollama.
OLLAMA_NUM_PARALLELmenentukan jumlah slot permintaan yang tersedia per setiap model untuk menangani permintaan inferensi secara serentak.--concurrencymenentukan jumlah permintaan yang dikirim Cloud Run ke instance Ollama secara bersamaan.
Jika --concurrency melebihi OLLAMA_NUM_PARALLEL, Cloud Run dapat mengirim
lebih banyak permintaan ke model di Ollama daripada slot permintaan yang tersedia.
Hal ini menyebabkan antrean permintaan dalam Ollama, sehingga meningkatkan latensi permintaan untuk
permintaan yang diantrekan. Hal ini juga menyebabkan penskalaan otomatis yang kurang responsif, karena permintaan yang diantrekan tidak memicu Cloud Run untuk melakukan penskalaan dan memulai instance baru.
Ollama juga mendukung penyajian beberapa model dari satu GPU. Untuk sepenuhnya menghindari antrean permintaan di instance Ollama, Anda tetap harus menyetel --concurrency agar cocok dengan OLLAMA_NUM_PARALLEL.
Penting untuk diperhatikan bahwa peningkatan OLLAMA_NUM_PARALLEL juga membuat permintaan paralel membutuhkan waktu lebih lama.
Mengoptimalkan pemakaian GPU
Untuk pemanfaatan GPU yang optimal, tingkatkan --concurrency, dengan mempertahankannya dalam
dua kali nilai OLLAMA_NUM_PARALLEL. Meskipun menyebabkan antrean permintaan di Ollama, hal ini dapat membantu meningkatkan pemanfaatan: Instance Ollama dapat segera memproses permintaan dari antreannya, dan antrean membantu menyerap lonjakan traffic.
Menguji layanan Ollama yang di-deploy dengan curl
Setelah men-deploy layanan Ollama, Anda dapat mengirim permintaan ke layanan tersebut. Namun,
jika Anda mengirim permintaan secara langsung, Cloud Run akan merespons dengan HTTP 401 Unauthorized.
Hal ini disengaja, karena API inferensi LLM ditujukan untuk dipanggil oleh layanan lain, seperti aplikasi frontend. Untuk mengetahui informasi selengkapnya tentang autentikasi antar layanan di Cloud Run, lihat Mengautentikasi antar layanan.
Untuk mengirim permintaan ke layanan Ollama, tambahkan header dengan token OIDC yang valid ke permintaan, misalnya menggunakan proxy developer Cloud Run:
Mulai proxy, dan saat diminta untuk menginstal komponen
cloud-run-proxy, pilihY:gcloud run services proxy ollama-gemma --port=9090Kirim permintaan ke proxy di tab terminal terpisah, biarkan proxy tetap berjalan. Perhatikan bahwa proxy berjalan di
localhost:9090:curl http://localhost:9090/api/generate -d '{ "model": "gemma3:4b", "prompt": "Why is the sky blue?" }'Perintah ini akan memberikan output streaming yang mirip dengan berikut:
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
Pembersihan
Agar tidak menimbulkan biaya tambahan pada akun Google Cloud Anda, hapus semua resource yang Anda deploy dengan tutorial ini.
Menghapus project
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan perlu mempertahankannya tanpa perubahan yang Anda tambahkan dalam tutorial ini, hapus resource yang Anda buat untuk tutorial.
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini. Layanan Cloud Run tidak menimbulkan biaya hingga menerima permintaan.
Untuk menghapus layanan Cloud Run, jalankan perintah berikut:
gcloud run services delete SERVICE-NAME
Ganti SERVICE-NAME dengan nama layanan Anda.
Anda juga dapat menghapus layanan Cloud Run dari Google Cloud console.
Hapus konfigurasi region default
gcloudyang Anda tambahkan selama penyiapan tutorial:gcloud config unset run/regionHapus konfigurasi project:
gcloud config unset project