Dalam tutorial ini, Anda akan mempelajari cara men-deploy Gemma 2 Google, model bahasa besar (LLM) terbuka, di layanan Cloud Run yang mendukung GPU (untuk inferensi cepat).
Anda akan menggunakan Ollama, server inferensi LLM untuk model terbuka. Setelah menyelesaikan tutorial, jangan ragu untuk menjelajahi model terbuka lainnya yang didukung oleh Ollama, termasuk Llama 3.1 (8B), Mistral (7B), dan Qwen2 (7B).
Tujuan
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang 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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Instal dan lakukan inisialisasi gcloud CLI.
- Minta kuota
Total Nvidia L4 GPU allocation, per project per region
di bagian Cloud Run Admin API di halaman Kuota dan batas sistem untuk menyelesaikan tutorial ini.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Artifact Registry Admin (
roles/artifactregistry.admin
) -
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Buat Akun Layanan (
roles/iam.serviceAccountCreator
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Pelanggan Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Storage Admin (
roles/storage.admin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan gcloud
Untuk mengonfigurasi Google Cloud CLI untuk layanan Cloud Run Anda:
Setel project default Anda:
gcloud config set project PROJECT_ID
Klik ikon untuk mengganti variabel PROJECT_ID dengan nama project yang Anda buat untuk tutorial ini. Tindakan ini memastikan bahwa semua listingan di halaman ini yang mereferensikan PROJECT_ID memiliki nilai yang benar dan telah diisi.
Konfigurasikan Google Cloud CLI untuk menggunakan region
us-central1
untuk perintah Cloud Run.gcloud config set run/region us-central1
Membuat repositori Docker Artifact Registry
Buat repositori Docker untuk menyimpan image container untuk tutorial ini:
gcloud artifacts repositories create REPOSITORY \
--repository-format=docker \
--location=us-central1
Ganti REPOSITORY dengan nama repositori. Contoh, repo
.
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-backend
Membuat file
Dockerfile
Menyimpan bobot model dalam image container untuk memulai instance yang lebih cepat
Google merekomendasikan untuk menyimpan bobot model untuk Gemma 2 (9B) 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 memori GPU (VRAM) selama startup instance penampung, 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 akan memerlukan waktu lebih lama untuk diskalakan dari nol menjadi satu instance, dan memerlukan lebih banyak waktu untuk diskalakan selama lonjakan traffic.
Untuk memastikan startup yang cepat, simpan file model di image container itu sendiri. Cara ini lebih cepat dan lebih andal daripada mendownload file dari lokasi jarak jauh selama startup. 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 2 (9B) memerlukan penyimpanan sebesar 5,4 GB. Model yang lebih besar memiliki file bobot model yang lebih besar, dan file ini mungkin tidak praktis untuk disimpan dalam image penampung. Lihat Praktik terbaik: Inferensi AI di Cloud Run dengan GPU untuk mengetahui ringkasan kompromi.
Membangun image container menggunakan Cloud Build
Untuk mem-build image container dengan Cloud Build dan mendorongnya ke repositori Artifact Registry:
gcloud builds submit \
--tag us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/ollama-gemma \
--machine-type e2-highcpu-32
Perhatikan pertimbangan berikut:
- Untuk build yang lebih cepat, perintah ini memilih jenis mesin yang canggih dengan lebih banyak CPU dan bandwidth jaringan.
- Anda harus menunggu build selama sekitar 7 menit.
- Alternatifnya adalah mem-build image secara lokal dengan Docker dan mengirimkannya ke Artifact Registry. Proses ini mungkin lebih lambat daripada berjalan di Cloud Build, bergantung pada bandwidth jaringan Anda.
Men-deploy Ollama sebagai layanan Cloud Run
Dengan image container yang disimpan di repositori Artifact Registry, Anda kini siap untuk men-deploy Ollama sebagai layanan Cloud Run.
Membuat akun layanan khusus
Buat akun layanan khusus yang digunakan layanan Ollama sebagai identitas layanan:
gcloud iam service-accounts create OLLAMA_IDENTITY \
--display-name="Service Account for Ollama Cloud Run service"
Ganti OLLAMA_IDENTITY dengan nama akun layanan yang ingin Anda buat, misalnya, ollama
.
Praktik terbaiknya adalah membuat akun layanan khusus untuk setiap layanan Cloud Run dengan serangkaian izin minimal yang diperlukan. Layanan Ollama tidak perlu memanggil Google Cloud API apa pun, yang berarti tidak perlu memberikan izin apa pun ke akun layanannya.
Men-deploy layanan
Men-deploy layanan ke Cloud Run:
gcloud beta run deploy ollama-gemma \
--image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/ollama-gemma \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 7 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--service-account OLLAMA_IDENTITY@PROJECT_ID.iam.gserviceaccount.com \
--timeout=600
Perhatikan flag penting berikut dalam perintah ini:
--concurrency 4
ditetapkan agar cocok dengan nilai variabel lingkunganOLLAMA_NUM_PARALLEL
.--gpu 1
dengan--gpu-type nvidia-l4
menetapkan 1 GPU NVIDIA L4 ke setiap instance Cloud Run dalam layanan.--no-allow-authenticated
membatasi akses yang tidak diautentikasi ke layanan. Dengan menjaga layanan 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-throttling
diperlukan untuk mengaktifkan GPU.--service-account
menetapkan identitas layanan layanan.
Menetapkan serentak untuk performa yang 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_PARALLEL
menentukan jumlah slot permintaan yang tersedia per setiap model untuk menangani permintaan inferensi secara serentak.--concurrency
menentukan 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 dalam antrean tidak memicu Cloud Run untuk menskalakan dan memulai instance baru.
Ollama juga mendukung penayangan beberapa model dari satu GPU. Untuk sepenuhnya menghindari antrean permintaan di instance Ollama, Anda tetap harus menetapkan --concurrency
agar cocok dengan OLLAMA_NUM_PARALLEL
.
Perlu diperhatikan bahwa meningkatkan OLLAMA_NUM_PARALLEL
juga membuat permintaan paralel memerlukan waktu lebih lama.
Mengoptimalkan pemanfaatan
Untuk pemakaian GPU yang optimal, tingkatkan --concurrency
, dengan mempertahankannya dalam
dua kali nilai OLLAMA_NUM_PARALLEL
. Meskipun hal ini menyebabkan antrean permintaan di Ollama, hal ini dapat membantu meningkatkan penggunaan: Instance Ollama dapat langsung memproses permintaan dari antrean, 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 layanan lain yang
akan dipanggil, seperti aplikasi frontend. Untuk informasi selengkapnya tentang autentikasi antar-layanan di Cloud Run, lihat Melakukan autentikasi 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=9090
Kirim permintaan ke proxy di tab terminal terpisah, tanpa menghentikan proxy. Perhatikan bahwa proxy berjalan di
localhost:9090
:curl http://localhost:9090/api/generate -d '{ "model": "gemma2:9b", "prompt": "Why is the sky blue?" }'
Perintah ini akan memberikan output streaming yang mirip dengan ini:
{"model":"gemma2:9b","created_at":"2024-07-15T23:21:39.288463414Z","response":"The","done":false} {"model":"gemma2:9b","created_at":"2024-07-15T23:21:39.320937525Z","response":" sky","done":false} {"model":"gemma2:9b","created_at":"2024-07-15T23:21:39.353173544Z","response":" appears","done":false} {"model":"gemma2:9b","created_at":"2024-07-15T23:21:39.385284976Z","response":" blue","done":false} ...
Pembersihan
- Hapus resource Google Cloud lain yang dibuat dalam tutorial ini: