Menjalankan Gemma 3 di Cloud Run

Panduan ini menjelaskan cara men-deploy model terbuka Gemma 3 di Cloud Run menggunakan container yang telah dibuat sebelumnya, dan memberikan panduan tentang cara menggunakan layanan Cloud Run yang di-deploy dengan SDK AI Generatif Google.

Sebelum memulai

Jika Anda menggunakan Google AI Studio untuk men-deploy ke Cloud Run, lanjutkan ke bagian Berinteraksi dengan aman dengan Google Gen AI SDK.

Jika Anda tidak menggunakan Google AI Studio, ikuti langkah-langkah berikut sebelum menggunakan Cloud Run untuk membuat layanan baru.

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Siapkan lingkungan pengembangan Cloud Run di project Google Cloud Anda.
  7. Instal dan lakukan inisialisasi gcloud CLI.
  8. Pastikan Anda memiliki peran IAM berikut yang diberikan ke akun Anda:
  9. Pelajari cara memberikan peran

    Konsol

    1. Di konsol Google Cloud , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan ID pengguna Anda. Ini biasanya berupa alamat email Akun Google yang digunakan untuk men-deploy layanan Cloud Run.

    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.

    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:

    • PROJECT_NUMBER dengan Google Cloud nomor project Anda.
    • PROJECT_ID dengan Google Cloud project ID Anda.
    • PRINCIPAL dengan akun yang Anda tambahkan binding-nya. Biasanya, alamat email Akun Google yang digunakan untuk men-deploy layanan Cloud Run.
    • ROLE dengan peran yang Anda tambahkan ke akun deployer.
  10. Minta kuota Total Nvidia L4 GPU allocation, per project per region di bagian Cloud Run Admin API di halaman Quotas and system limits.
  11. Tinjau halaman harga Cloud Run. Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
  12. Men-deploy model Gemma dengan container bawaan

    Cloud Run menyediakan container yang telah dibuat sebelumnya untuk menayangkan model terbuka Gemma di Cloud Run.

    Untuk men-deploy model Gemma di Cloud Run, gunakan perintah gcloud CLI berikut dengan setelan yang direkomendasikan:

    gcloud run deploy SERVICE_NAME \
       --image us-docker.pkg.dev/cloudrun/container/gemma/GEMMA_PARAMETER \
       --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 \
       --timeout=600 \
       --region REGION

    Ganti:

    • SERVICE_NAME dengan nama unik untuk layanan Cloud Run.
    • GEMMA_PARAMETER dengan model Gemma yang Anda gunakan:

      • Gemma 3 1B (gemma-3-1b-it): gemma3-1b
      • Gemma 3 4B (gemma-3-4b-it): gemma3-4b
      • Gemma 3 12B (gemma-3-12b-it): gemma3-12b
      • Gemma 3 27B (gemma-3-27b-it): gemma3-27b

      Secara opsional, ganti seluruh URL gambar dengan image Docker yang telah Anda bangun dari repositori GitHub Gemma-on-Cloudrun.

    • REGION dengan region Google Cloud tempat Cloud Run Anda akan di-deploy, seperti europe-west1. Jika Anda perlu mengubah region, lihat Konfigurasi GPU untuk mempelajari region yang didukung untuk deployment yang mendukung GPU.

    Setelan lainnya adalah sebagai berikut:

    Opsi Deskripsi
    --concurrency

    Jumlah maksimum permintaan yang dapat diproses secara bersamaan oleh instance tertentu, seperti 4. Lihat Menetapkan serentak untuk performa optimal guna mendapatkan rekomendasi tentang latensi permintaan yang optimal.

    --cpu

    Jumlah CPU yang dialokasikan untuk layanan Anda, seperti 8.

    --set-env-vars

    Variabel lingkungan yang ditetapkan untuk layanan Anda. Contoh, OLLAMA_NUM_PARALLEL=4. Lihat Menetapkan serentak untuk performa optimal guna mendapatkan rekomendasi tentang latensi permintaan yang optimal.

    --gpu

    Nilai GPU untuk layanan Anda, seperti 1.

    --gpu-type

    Jenis GPU yang akan digunakan untuk layanan Anda, seperti nvidia-l4.

    --max-instances

    Jumlah maksimum instance container untuk layanan Anda, seperti 1.

    --memory

    Jumlah memori yang dialokasikan untuk layanan Anda, seperti 32Gi.

    --no-invoker-iam-check

    Nonaktifkan pemeriksaan IAM pemanggil. Lihat Berinteraksi dengan Google Gen AI SDK secara aman untuk mendapatkan rekomendasi tentang cara mengamankan aplikasi Anda dengan lebih baik.

    --no-cpu-throttling

    Setelan ini menonaktifkan pembatasan CPU saat penampung tidak aktif melayani permintaan.

    --timeout

    Waktu saat respons harus ditampilkan, seperti 600 detik.

    Jika Anda perlu mengubah setelan default atau menambahkan setelan yang lebih disesuaikan ke layanan Cloud Run, lihat Mengonfigurasi layanan.

    Setelah layanan yang di-deploy selesai, pesan berhasil akan ditampilkan beserta URL endpoint Cloud Run yang berakhir dengan run.app.

    Menguji layanan Gemma yang di-deploy dengan curl

    Setelah men-deploy layanan Gemma, 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 front-end. Untuk mengetahui informasi selengkapnya tentang autentikasi antar layanan di Cloud Run, lihat Mengautentikasi antar layanan.

    Untuk mengirim permintaan ke layanan Gemma, tambahkan header dengan token OIDC yang valid ke permintaan, misalnya menggunakan proxy developer Cloud Run:

    1. Mulai proxy, dan saat diminta untuk menginstal komponen cloud-run-proxy, pilih Y:

      gcloud run services proxy ollama-gemma --port=9090
    2. Kirim permintaan ke proxy di tab terminal terpisah, dan 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 ini:

      {"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}
      ...
      

    Berinteraksi dengan aman dengan Google Gen AI SDK

    Setelah men-deploy layanan Cloud Run, Anda dapat menggunakan endpoint Cloud Run dengan Google Gen AI SDK.

    Sebelum Anda menggunakan Google Gen AI SDK, pastikan permintaan masuk meneruskan token identitas yang sesuai. Untuk mempelajari lebih lanjut cara menggunakan autentikasi IAM dan Cloud Run, lihat Mengautentikasi antar layanan.

    Contoh berikut menunjukkan cara menggunakan Google Gen AI SDK dengan autentikasi IAM.

    JavaScript atau TypeScript

    Jika Anda menggunakan Google Gen AI SDK untuk Javascript dan TypeScript, kode mungkin terlihat sebagai berikut:

    import { GoogleGenAI, setDefaultBaseUrls } from "@google/genai";
    import { GoogleAuth} from 'google-auth-library'
    
    const cloudrunurl = 'https://CLOUD_RUN_SERVICE_URL';
    const targetAudience = url;
    
    const auth = new GoogleAuth();
    
    async function main() {
    
      const client = await auth.getIdTokenClient(targetAudience);
      const headers = await client.getRequestHeaders(targetAudience);
      const idToken = headers['Authorization']
    
    const ai = new GoogleGenAI({
      apiKey:"placeholder",
      httpOptions: { baseUrl: url, headers: {'Authorization': idToken}  },
    });
    
      const response = await ai.models.generateContent({
        model: "gemma-3-1b-it",
        contents: "I want a pony",
      });
      console.log(response.text);
    }
    
    main();
    

    curl

    Jika menggunakan curl, jalankan perintah berikut untuk menjangkau endpoint Google Gen AI SDK:

    • Untuk Generate Content, gunakan /v1beta/{model=models/*}:generateContent: Membuat respons model berdasarkan input GenerateContentRequest.

      curl "<cloud_run_url>/v1beta/models/<model>:generateContent" \
      -H 'Content-Type: application/json' \
      -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
      -X POST \
      -d '{
        "contents": [{
          "parts":[{"text": "Write a story about a magic backpack. You are the narrator of an interactive text adventure game."}]
          }]
          }'
      
    • Untuk Stream Generate Content, gunakan /v1beta/{model=models/*}:streamGenerateContent: Menghasilkan respons streaming dari model yang diberi input GenerateContentRequest.

      curl "<cloud_run_url>/v1beta/models/<model>:streamGenerateContent" \
        -H 'Content-Type: application/json' \
        -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
        -X POST \
        -d '{
          "contents": [{
            "parts":[{"text": "Write a story about a magic backpack. You are the narrator of an interactive text adventure game."}]
            }]
            }'
      

    Menetapkan 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_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 jumlah 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.

    Optimalkan pemanfaatan

    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.

    Pembersihan

    Hapus resource yang dibuat berikut: Google Cloud

    Langkah berikutnya