Menyajikan Gemma menggunakan TPU di GKE dengan JetStream


Panduan ini menunjukkan cara menyalurkan model bahasa besar (LLM) Gemma menggunakan Tensor Processing Unit (TPU) di Google Kubernetes Engine (GKE) dengan JetStream melalui MaxText. Dalam panduan ini, Anda akan mendownload petunjuk parameter Gemma 7B yang menyesuaikan bobot model ke Cloud Storage dan men-deploy-nya di cluster GKE Autopilot atau Standard menggunakan container yang menjalankan JetStream.

Panduan ini adalah titik awal yang bagus jika Anda membutuhkan skalabilitas, ketahanan, dan efektivitas biaya yang ditawarkan oleh fitur Kubernetes saat men-deploy model di JetStream.

Latar belakang

Dengan menyajikan Gemma menggunakan TPU di GKE menggunakan JetStream, Anda dapat membangun solusi penyajian yang tangguh dan siap produksi dengan semua manfaat Kubernetes terkelola, termasuk efisiensi biaya, skalabilitas, dan ketersediaan yang lebih tinggi. Bagian ini menjelaskan teknologi utama yang digunakan dalam tutorial ini.

Gemma

Gemma adalah serangkaian model kecerdasan buatan (AI) generatif dan ringan yang tersedia secara terbuka yang dirilis dengan lisensi terbuka. Model AI ini tersedia untuk berjalan di aplikasi, hardware, perangkat seluler, atau layanan yang dihosting. Anda dapat menggunakan model Gemma untuk pembuatan teks, tetapi Anda juga dapat menyesuaikan model ini untuk tugas khusus.

Untuk mempelajari lebih lanjut, lihat dokumentasi Gemma.

TPU

TPU adalah sirkuit terintegrasi khusus aplikasi (ASIC) Google yang dikembangkan secara khusus dan digunakan untuk mempercepat model machine learning dan AI yang dibangun menggunakan framework seperti TensorFlow, PyTorch, dan JAX.

Sebelum menggunakan TPU di GKE, sebaiknya selesaikan jalur pembelajaran berikut:

  1. Pelajari ketersediaan versi TPU saat ini dengan arsitektur sistem Cloud TPU.
  2. Pelajari TPU di GKE.

Tutorial ini membahas cara menyajikan model Gemma 7B. GKE men-deploy model pada node TPUv5e host tunggal dengan topologi TPU yang dikonfigurasi berdasarkan persyaratan model untuk menyajikan perintah dengan latensi rendah.

JetStream

JetStream adalah framework penayangan inferensi open source yang dikembangkan oleh Google. JetStream memungkinkan inferensi berperforma tinggi, throughput tinggi, dan yang dioptimalkan untuk memori pada TPU dan GPU. Layanan ini menyediakan pengoptimalan performa lanjutan, termasuk teknik kuantisasi dan pengelompokan berkelanjutan, untuk memfasilitasi deployment LLM. JetStream memungkinkan penayangan TPU PyTorch/XLA dan JAX untuk mencapai performa yang optimal.

Untuk mempelajari pengoptimalan ini lebih lanjut, lihat repositori project JetStream PyTorch dan JetStream MaxText.

MaxText

MaxText adalah implementasi LLM JAX yang berperforma tinggi, skalabel, dan adaptif, yang dibangun di library JAX open source seperti Flax, Orbax, dan Optax. Implementasi LLM khusus decoder MaxText ditulis dalam Python. Platform ini sangat memanfaatkan compiler XLA untuk mencapai performa tinggi tanpa perlu mem-build kernel kustom.

Untuk mempelajari lebih lanjut model dan ukuran parameter terbaru yang didukung MaxText, lihat repositori project MaxtText.

Tujuan

Tutorial ini ditujukan bagi pelanggan AI Generatif yang menggunakan JAX, pengguna GKE baru atau yang sudah ada, ML Engineer, engineer MLOps (DevOps), atau administrator platform yang tertarik menggunakan kemampuan orkestrasi container Kubernetes untuk menyalurkan LLM.

Tutorial ini membahas langkah-langkah berikut:

  1. Siapkan GKE Autopilot atau cluster Standar dengan topologi TPU yang direkomendasikan berdasarkan karakteristik model.
  2. Men-deploy komponen JetStream di GKE.
  3. Mendapatkan dan memublikasikan model yang telah disesuaikan dengan instruksi Gemma 7B.
  4. Menayangkan dan berinteraksi dengan model yang dipublikasikan.

Arsitektur

Bagian ini menjelaskan arsitektur GKE yang digunakan dalam tutorial ini. Arsitekturnya terdiri dari cluster GKE Autopilot atau Standard yang menyediakan TPU dan menghosting komponen JetStream untuk men-deploy dan menyalurkan model.

Diagram berikut menunjukkan komponen arsitektur ini:

Arsitektur cluster GKE dengan pool node TPU host tunggal yang berisi komponen Maxengine dan Max HTTP.

Arsitektur ini mencakup komponen berikut:

  • GKE Autopilot atau cluster regional Standar.
  • Dua node pool slice TPU host tunggal yang menghosting deployment JetStream.
  • Komponen Layanan menyebarkan traffic masuk ke semua replika JetStream HTTP.
  • JetStream HTTP adalah server HTTP yang menerima permintaan sebagai wrapper ke format yang diperlukan JetStream dan mengirimkannya ke klien GRPC JetStream.
  • Maxengine adalah server JetStream yang melakukan inferensi dengan pengelompokan berkelanjutan.

Sebelum memulai

  • Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  • Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  • Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  • Enable the required API.

    Enable the API

  • Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  • Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  • Enable the required API.

    Enable the API

  • Pastikan Anda memiliki peran berikut di project: roles/container.admin, roles/iam.serviceAccountAdmin

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.
  • Pastikan Anda memiliki kuota yang cukup untuk delapan chip PodSlice Lite TPU v5e. Dalam tutorial ini, Anda menggunakan instance sesuai permintaan.
  • Buat akun Kaggle, jika Anda belum memilikinya.

Mendapatkan akses ke model

Untuk mendapatkan akses ke model Gemma untuk deployment ke GKE, Anda harus menandatangani perjanjian izin lisensi terlebih dahulu.

Anda harus menandatangani perjanjian izin untuk menggunakan Gemma. Ikuti petunjuk berikut:

  1. Akses halaman izin model Gemma di Kaggle.com.
  2. Masuk ke Kaggle jika Anda belum melakukannya.
  3. Klik Minta Akses.
  4. Di bagian Choose Account for Consent, pilih Verify via Kaggle Account untuk menggunakan akun Kaggle Anda untuk mendapatkan izin.
  5. Setujui Persyaratan dan Ketentuan model.

Membuat token akses

Untuk mengakses model melalui Kaggle, Anda memerlukan token API Kaggle.

Ikuti langkah-langkah berikut untuk membuat token baru jika Anda belum memilikinya:

  1. Di browser, buka setelan Kaggle.
  2. Di bagian API, klik Create New Token.

File bernama kaggle.json telah didownload.

Menyiapkan lingkungan

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell dilengkapi dengan software bawaan yang akan Anda perlukan untuk tutorial ini, termasuk kubectl dan gcloud CLI.

Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, luncurkan sesi Cloud Shell dengan mengklik Ikon aktivasi Cloud Shell Activate Cloud Shell di Google Cloud Console. Tindakan ini akan meluncurkan sesi di panel bawah Konsol Google Cloud.

  2. Tetapkan variabel lingkungan default:

    gcloud config set project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export CLUSTER_NAME=CLUSTER_NAME
    export BUCKET_NAME=BUCKET_NAME
    export REGION=REGION
    export LOCATION=LOCATION
    

    Ganti nilai berikut:

    • PROJECT_ID: project ID Google Cloud Anda.
    • CLUSTER_NAME: nama cluster GKE Anda.
    • BUCKET_NAME: nama bucket Cloud Storage Anda. Anda tidak perlu menentukan awalan gs://.
    • REGION_NAME: region tempat cluster GKE, bucket Cloud Storage, dan node TPU berada. Region ini berisi zona tempat jenis mesin TPU v5e tersedia (misalnya, us-west1, us-west4, us-central1, us-east1, us-east5, atau europe-west4).
    • (Khusus cluster standar) LOCATION: zona tempat resource TPU tersedia (misalnya, us-west4-a). Untuk cluster Autopilot, Anda tidak perlu menentukan zona, melainkan hanya region.

Membuat dan mengonfigurasi resource Google Cloud

Ikuti petunjuk berikut untuk membuat materi yang diperlukan.

Membuat cluster GKE

Anda dapat menayangkan Gemma di TPU dalam GKE Autopilot atau cluster Standar. Sebaiknya gunakan cluster Autopilot untuk mendapatkan pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai dengan beban kerja Anda, lihat Memilih mode operasi GKE.

Autopilot

Jalankan perintah berikut di Cloud Shell:

gcloud container clusters create-auto ${CLUSTER_NAME} \
  --project=${PROJECT_ID} \
  --region=${REGION} \
  --release-channel=rapid \
  --cluster-version=1.29

GKE membuat cluster Autopilot dengan node CPU dan TPU seperti yang diminta oleh workload yang di-deploy.

Standar

  1. Buat cluster GKE Standard regional yang menggunakan Workload Identity Federation for GKE.

    gcloud container clusters create ${CLUSTER_NAME} \
        --enable-ip-alias \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --release-channel=rapid \
        --workload-pool=${PROJECT_ID}.svc.id.goog \
        --location=${REGION}
    

    Pembuatan cluster memerlukan waktu beberapa menit.

  2. Jalankan perintah berikut guna membuat kumpulan node untuk cluster Anda:

    gcloud container node-pools create gemma-7b-tpu-nodepool \
      --cluster=${CLUSTER_NAME} \
      --machine-type=ct5lp-hightpu-8t \
      --project=${PROJECT_ID} \
      --num-nodes=2 \
      --region=${REGION} \
      --node-locations=${LOCATION}
    

    GKE membuat node pool TPU v5e dengan topologi 2x4 dan dua node.

Membuat bucket Cloud Storage

Jalankan perintah berikut di Cloud Shell:

gcloud storage buckets create gs://${BUCKET_NAME} --location=${REGION}

Langkah ini menghasilkan bucket Cloud Storage untuk menyimpan file model yang Anda download dari Kaggle.

Mengupload token akses ke Cloud Shell

Di Cloud Shell, Anda dapat mengupload token API Kaggle ke project Google Cloud:

  1. Di Cloud Shell, klik More > Upload.
  2. Pilih File dan klik Choose Files.
  3. Buka file kaggle.json.
  4. Klik Upload.

Membuat Rahasia Kubernetes untuk kredensial Kaggle

Di Cloud Shell, lakukan hal berikut:

  1. Konfigurasi kubectl untuk berkomunikasi dengan cluster Anda:

    gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}
    
  2. Buat Rahasia untuk menyimpan kredensial Kaggle:

    kubectl create secret generic kaggle-secret \
        --from-file=kaggle.json
    

Mengonfigurasi akses beban kerja menggunakan Workload Identity Federation for GKE

Tetapkan Kubernetes ServiceAccount ke aplikasi dan konfigurasikan ServiceAccount Kubernetes tersebut agar berfungsi sebagai akun layanan IAM.

  1. Buat akun layanan IAM untuk aplikasi Anda:

    gcloud iam service-accounts create wi-jetstream
    
  2. Tambahkan binding kebijakan IAM untuk akun layanan IAM Anda guna mengelola Cloud Storage:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member "serviceAccount:wi-jetstream@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/storage.objectUser
    
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member "serviceAccount:wi-jetstream@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/storage.insightsCollectorService
    
  3. Izinkan Kubernetes ServiceAccount untuk meniru identitas akun layanan IAM dengan menambahkan binding kebijakan IAM antara dua akun layanan. Dengan binding ini, Kubernetes ServiceAccount dapat bertindak sebagai akun layanan IAM:

    gcloud iam service-accounts add-iam-policy-binding wi-jetstream@${PROJECT_ID}.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${PROJECT_ID}.svc.id.goog[default/default]"
    
  4. Anotasi akun layanan Kubernetes dengan alamat email akun layanan IAM:

    kubectl annotate serviceaccount default \
        iam.gke.io/gcp-service-account=wi-jetstream@${PROJECT_ID}.iam.gserviceaccount.com
    

Mengonversi checkpoint model

Di bagian ini, Anda membuat Tugas untuk melakukan hal berikut:

  1. Download checkpoint Orbax pangkalan dari Kaggle.
  2. Upload checkpoint ke bucket Cloud Storage.
  3. Konversi checkpoint menjadi checkpoint yang kompatibel dengan MaxText.
  4. Hapus pemindaian checkpoint yang akan digunakan untuk menyajikan.

Men-deploy Tugas konversi checkpoint model

Ikuti petunjuk ini untuk mendownload dan mengonversi file checkpoint model Gemma 7B.

  1. Buat manifes berikut sebagai job-7b.yaml.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: data-loader-7b
    spec:
      ttlSecondsAfterFinished: 30
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: inference-checkpoint
            image: us-docker.pkg.dev/cloud-tpu-images/inference/inference-checkpoint:v0.2.0
            args:
            - -b=BUCKET_NAME
            - -m=google/gemma/maxtext/7b-it/2
            volumeMounts:
            - mountPath: "/kaggle/"
              name: kaggle-credentials
              readOnly: true
            resources:
              requests:
                google.com/tpu: 8
              limits:
                google.com/tpu: 8
          nodeSelector:
            cloud.google.com/gke-tpu-topology: 2x4
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
          volumes:
          - name: kaggle-credentials
            secret:
              defaultMode: 0400
              secretName: kaggle-secret
    
  2. Terapkan manifes:

    kubectl apply -f job-7b.yaml
    
  3. Melihat log dari Job:

    kubectl logs -f jobs/data-loader-7b
    

    Setelah Tugas selesai, output-nya akan tampak seperti berikut:

    Successfully generated decode checkpoint at: gs://BUCKET_NAME/final/unscanned/gemma_7b-it/0/checkpoints/0/items
    + echo -e '\nCompleted unscanning checkpoint to gs://BUCKET_NAME/final/unscanned/gemma_7b-it/0/checkpoints/0/items'
    
    Completed unscanning checkpoint to gs://BUCKET_NAME/final/unscanned/gemma_7b-it/0/checkpoints/0/items
    

Men-deploy JetStream

Di bagian ini, Anda akan men-deploy container JetStream untuk menyalurkan model Gemma.

Ikuti petunjuk ini untuk men-deploy model yang telah disesuaikan instruksi Gemma 7B.

  1. Buat manifes jetstream-gemma-deployment.yaml berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: maxengine-server
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: maxengine-server
      template:
        metadata:
          labels:
            app: maxengine-server
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-topology: 2x4
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
          containers:
          - name: maxengine-server
            image: us-docker.pkg.dev/cloud-tpu-images/inference/maxengine-server:v0.2.0
            args:
            - model_name=gemma-7b
            - tokenizer_path=assets/tokenizer.gemma
            - per_device_batch_size=4
            - max_prefill_predict_length=1024
            - max_target_length=2048
            - async_checkpointing=false
            - ici_fsdp_parallelism=1
            - ici_autoregressive_parallelism=-1
            - ici_tensor_parallelism=1
            - scan_layers=false
            - weight_dtype=bfloat16
            - load_parameters_path=gs://BUCKET_NAME/final/unscanned/gemma_7b-it/0/checkpoints/0/items
            ports:
            - containerPort: 9000
            resources:
              requests:
                google.com/tpu: 8
              limits:
                google.com/tpu: 8
          - name: jetstream-http
            image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-http:v0.2.0
            ports:
            - containerPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: jetstream-http-svc
    spec:
      selector:
        app: maxengine-server
      ports:
      - protocol: TCP
        port: 8000
        targetPort: 8000
    

    Manifes menyetel properti utama berikut:

    • tokenizer_path: jalur ke tokenizer model Anda.
    • load_parameters_path: jalur di bucket Cloud Storage tempat checkpoint Anda disimpan.
    • per_device_batch_size: ukuran batch decoding per perangkat, ketika satu chip TPU sama dengan satu perangkat.
    • max_prefill_predict_length: panjang maksimum untuk pengisian otomatis saat melakukan autoregresi.
    • max_target_length: panjang urutan maksimum.
    • model_name: nama model (gemma-7b).
    • ici_fsdp_parallelism: jumlah shard untuk paralelisme data dengan sharding (FSDP).
    • ici_tensor_parallelism: jumlah shard untuk paralelisme tensor.
    • ici_autoregressive_parallelism: jumlah shard untuk paralelisme autoregresif.
    • scan_layers: scan layers boolean flag (boolean).
    • weight_dtype: jenis data berat (bfloat16).
  2. Terapkan manifes:

    kubectl apply -f jetstream-gemma-deployment.yaml
    
  3. Verifikasi Deployment:

    kubectl get deployment
    

    Outputnya mirip dengan hal berikut ini:

    NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
    maxengine-server                  2/2     2            2           ##s
    
  4. Lihat log server HTTP untuk memeriksa apakah model telah dimuat dan dikompilasi. Server mungkin membutuhkan waktu beberapa menit untuk menyelesaikan operasi ini.

    kubectl logs deploy/maxengine-server -f -c jetstream-http
    

    Outputnya mirip dengan hal berikut ini:

    kubectl logs deploy/maxengine-server -f -c jetstream-http
    
    INFO:     Started server process [1]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
    
  5. Lihat log MaxEngine dan pastikan kompilasi telah selesai.

    kubectl logs deploy/maxengine-server -f -c maxengine-server
    

    Outputnya mirip dengan hal berikut ini:

    2024-03-29 17:09:08,047 - jax._src.dispatch - DEBUG - Finished XLA compilation of jit(initialize) in 0.26236414909362793 sec
    2024-03-29 17:09:08,150 - root - INFO - ---------Generate params 0 loaded.---------
    

Menyalurkan model

Di bagian ini, Anda akan berinteraksi dengan model.

Menyiapkan penerusan port

Anda dapat mengakses Deployment JetStream melalui Layanan ClusterIP yang dibuat pada langkah sebelumnya. Layanan ClusterIP hanya dapat dijangkau dari dalam cluster. Oleh karena itu, untuk mengakses Layanan dari luar cluster, selesaikan langkah-langkah berikut:

Untuk membuat sesi penerusan port, jalankan perintah berikut:

kubectl port-forward svc/jetstream-http-svc 8000:8000

Berinteraksi dengan model menggunakan curl

  1. Pastikan Anda dapat mengakses server HTTP JetStream dengan membuka terminal baru dan menjalankan perintah berikut:

    curl --request POST \
    --header "Content-type: application/json" \
    -s \
    localhost:8000/generate \
    --data \
    '{
        "prompt": "What are the top 5 programming languages",
        "max_tokens": 200
    }'
    

    Permintaan awal dapat memerlukan waktu beberapa detik untuk diselesaikan karena pemanasan model. Outputnya mirip dengan hal berikut ini:

    {
        "response": "\nfor data science in 2023?\n\n**1. Python:**\n- Widely used for data science due to its simplicity, readability, and extensive libraries for data wrangling, analysis, visualization, and machine learning.\n- Popular libraries include pandas, scikit-learn, and matplotlib.\n\n**2. R:**\n- Statistical programming language widely used for data analysis, visualization, and modeling.\n- Popular libraries include ggplot2, dplyr, and caret.\n\n**3. Java:**\n- Enterprise-grade language with strong performance and scalability.\n- Popular libraries include Spark, TensorFlow, and Weka.\n\n**4. C++:**\n- High-performance language often used for data analytics and machine learning models.\n- Popular libraries include TensorFlow, PyTorch, and OpenCV.\n\n**5. SQL:**\n- Relational database language essential for data wrangling and querying large datasets.\n- Popular tools"
    }
    

(Opsional) Berinteraksi dengan model melalui antarmuka chat Gradio

Di bagian ini, Anda akan mem-build aplikasi chat web yang memungkinkan Anda berinteraksi dengan model yang telah disesuaikan dengan petunjuk.

Gradio adalah library Python yang memiliki wrapper ChatInterface yang membuat antarmuka pengguna untuk chatbot.

Men-deploy antarmuka chat

  1. Di Cloud Shell, simpan manifes berikut sebagai gradio.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gradio
      labels:
        app: gradio
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gradio
      template:
        metadata:
          labels:
            app: gradio
        spec:
          containers:
          - name: gradio
            image: us-docker.pkg.dev/google-samples/containers/gke/gradio-app:v1.0.3
            resources:
              requests:
                cpu: "512m"
                memory: "512Mi"
              limits:
                cpu: "1"
                memory: "512Mi"
            env:
            - name: CONTEXT_PATH
              value: "/generate"
            - name: HOST
              value: "http://jetstream-http-svc:8000"
            - name: LLM_ENGINE
              value: "max"
            - name: MODEL_ID
              value: "gemma"
            - name: USER_PROMPT
              value: "<start_of_turn>user\nprompt<end_of_turn>\n"
            - name: SYSTEM_PROMPT
              value: "<start_of_turn>model\nprompt<end_of_turn>\n"
            ports:
            - containerPort: 7860
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: gradio
    spec:
      selector:
        app: gradio
      ports:
        - protocol: TCP
          port: 8080
          targetPort: 7860
      type: ClusterIP
    
  2. Terapkan manifes:

    kubectl apply -f gradio.yaml
    
  3. Tunggu hingga deployment tersedia:

    kubectl wait --for=condition=Available --timeout=300s deployment/gradio
    

Menggunakan antarmuka chat

  1. Jalankan perintah berikut di Cloud Shell:

    kubectl port-forward service/gradio 8080:8080
    

    Tindakan ini akan membuat penerusan port dari Cloud Shell ke layanan Gradio.

  2. Klik tombol Ikon Web Preview Web Preview yang dapat ditemukan di kanan atas taskbar Cloud Shell. Klik Preview on Port 8080. Tab baru akan terbuka di browser Anda.

  3. Berinteraksi dengan Gemma menggunakan antarmuka chat Gradio. Tambahkan perintah, lalu klik Kirim.

Memecahkan masalah

  • Jika Anda mendapatkan pesan Empty reply from server, penampung mungkin belum selesai mendownload data model. Periksa log Pod lagi untuk menemukan pesan Connected yang menunjukkan bahwa model siap ditayangkan.
  • Jika Anda melihat Connection refused, pastikan penerusan port aktif.

Pembersihan

Agar tidak dikenakan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource-nya.

Menghapus resource yang di-deploy

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang Anda buat dalam panduan ini, jalankan perintah berikut dan ikuti petunjuknya:

gcloud container clusters delete ${CLUSTER_NAME} --region=${REGION}

gcloud iam service-accounts delete wi-jetstream@PROJECT_ID.iam.gserviceaccount.com

gcloud storage rm --recursive gs://BUCKET_NAME

Langkah selanjutnya