Menyajikan LLM menggunakan TPU di GKE dengan JetStream dan PyTorch


Panduan ini menunjukkan cara menayangkan model bahasa besar (LLM) menggunakan Unit Pemrosesan Tensor (TPU) di Google Kubernetes Engine (GKE) dengan JetStream melalui PyTorch. Dalam panduan ini, Anda akan mendownload bobot model ke Cloud Storage dan men-deploynya di cluster GKE Autopilot atau Standard menggunakan penampung yang menjalankan JetStream.

Jika Anda memerlukan skalabilitas, ketahanan, dan efektivitas biaya yang ditawarkan oleh fitur Kubernetes saat men-deploy model di JetStream, panduan ini adalah titik awal yang baik.

Panduan ini ditujukan untuk pelanggan AI Generatif yang menggunakan PyTorch, pengguna baru atau lama GKE, Engineer ML, engineer MLOps (DevOps), atau administrator platform yang tertarik untuk menggunakan kemampuan orkestrasi penampung Kubernetes untuk menayangkan LLM.

Latar belakang

Dengan menayangkan LLM menggunakan TPU di GKE dengan JetStream, Anda dapat membuat solusi penayangan yang andal 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.

Tentang TPU

TPU adalah sirkuit terintegrasi khusus aplikasi (ASIC) Google yang dikembangkan secara khusus dan digunakan untuk mempercepat machine learning dan model AI yang dibuat 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 penayangan berbagai model LLM. GKE men-deploy model di node TPUv5e host tunggal dengan topologi TPU yang dikonfigurasi berdasarkan persyaratan model untuk menayangkan perintah dengan latensi rendah.

Tentang JetStream

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

Pengelompokan Berkelanjutan

Pengelompokan berkelanjutan adalah teknik yang secara dinamis mengelompokkan permintaan inferensi yang masuk ke dalam batch, sehingga mengurangi latensi dan meningkatkan throughput.

Kuantisasi cache KV

Kuantifikasi cache KV melibatkan kompresi cache nilai kunci yang digunakan dalam mekanisme perhatian, sehingga mengurangi persyaratan memori.

Kuantisasi bobot Int8

Kuantisasi bobot Int8 mengurangi presisi bobot model dari floating point 32-bit menjadi bilangan bulat 8-bit, sehingga menghasilkan komputasi yang lebih cepat dan mengurangi penggunaan memori.

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

Tentang PyTorch

PyTorch adalah framework machine learning open source yang dikembangkan oleh Meta dan kini menjadi bagian dari payung Linux Foundation. PyTorch menyediakan fitur tingkat tinggi seperti komputasi tensor dan jaringan neural dalam.

Tujuan

  1. Siapkan cluster GKE Autopilot atau Standard dengan topologi TPU yang direkomendasikan berdasarkan karakteristik model.
  2. Men-deploy komponen JetStream di GKE.
  3. Mendapatkan dan memublikasikan model Anda.
  4. Menayangkan dan berinteraksi dengan model yang dipublikasikan.

Arsitektur

Bagian ini menjelaskan arsitektur GKE yang digunakan dalam tutorial ini. Arsitektur ini mencakup cluster GKE Autopilot atau Standard yang menyediakan TPU dan menghosting komponen JetStream untuk men-deploy dan menayangkan model.

Diagram berikut menunjukkan komponen arsitektur ini:

Arsitektur cluster GKE dengan node pool TPU host tunggal yang berisi komponen JetStream-PyTorch dan JetStream HTTP.

Arsitektur ini mencakup komponen berikut:

  • Cluster regional GKE Autopilot atau Standard.
  • 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 untuk format yang diperlukan JetStream dan mengirimkannya ke klien GRPC JetStream.
  • JetStream-PyTorch adalah server JetStream yang melakukan inferensi dengan pengelompokan berkelanjutan.

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.
  • Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  • Aktifkan API yang diperlukan.

    Mengaktifkan API

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

    Buka pemilih project

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

  • Aktifkan API yang diperlukan.

    Mengaktifkan API

  • Make sure that you have the following role or roles on the project: roles/container.admin, roles/iam.serviceAccountAdmin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.

    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 akan menggunakan instance on-demand.
  • Buat token Hugging Face, jika Anda belum memilikinya.

Mendapatkan akses ke model

Mendapatkan akses ke berbagai model di Hugging Face untuk di-deploy ke GKE

Gemma 7B-it

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

  1. Mengakses halaman izin model Gemma di Hugging Face
  2. Login ke Hugging Face jika Anda belum melakukannya.
  3. Tinjau dan setujui Persyaratan dan Ketentuan model.

Llama 3 8B

Untuk mendapatkan akses ke model Llama 3 untuk di-deploy ke GKE, Anda harus menandatangani perjanjian izin lisensi terlebih dahulu.

  1. Mengakses halaman izin model Llama 3 di Hugging Face
  2. Login ke Hugging Face jika Anda belum melakukannya.
  3. Tinjau dan setujui Persyaratan dan Ketentuan model.

Menyiapkan lingkungan

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan software 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 Aktifkan Cloud Shell di konsol Google Cloud. 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
    export CLUSTER_VERSION=CLUSTER_VERSION
    

    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: region tempat cluster GKE, bucket Cloud Storage, dan node TPU Anda 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). Untuk cluster Autopilot, pastikan Anda memiliki resource zonal TPU v5e yang memadai untuk region pilihan Anda.
    • (Khusus cluster standar) LOCATION: zona tempat resource TPU tersedia (misalnya, us-west4-a). Untuk cluster Autopilot, Anda tidak perlu menentukan zona, hanya region.
    • CLUSTER_VERSION: versi GKE, yang harus mendukung jenis mesin yang ingin Anda gunakan. Perhatikan bahwa versi GKE default mungkin tidak tersedia untuk TPU target Anda. Untuk mengetahui daftar versi GKE minimum yang tersedia berdasarkan jenis mesin TPU, lihat Ketersediaan TPU di GKE.

Membuat dan mengonfigurasi resource Google Cloud

Ikuti petunjuk ini untuk membuat resource yang diperlukan.

Membuat cluster GKE

Anda dapat menayangkan Gemma di TPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.

Autopilot

Buat cluster GKE Autopilot:

gcloud container clusters create-auto CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster-version=CLUSTER_VERSION

Standard

  1. Buat cluster GKE Standar 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 \
        --cluster-version=CLUSTER_VERSION \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --location=REGION
    

    Pembuatan cluster mungkin memerlukan waktu beberapa menit.

  2. Buat node pool TPU v5e dengan topologi 2x4 dan dua node:

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

Membuat bucket Cloud Storage

Buat bucket Cloud Storage untuk menyimpan titik pemeriksaan yang dikonversi:

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

Membuat token Hugging Face CLI di Cloud Shell

Buat token Hugging Face baru jika Anda belum memilikinya:

  1. Klik Profil Anda > Setelan > Token Akses.
  2. Klik New Token.
  3. Tentukan Nama pilihan Anda dan Peran minimal Read.
  4. Klik Generate a token.
  5. Edit izin ke token akses Anda agar memiliki akses baca ke repositori Hugging Face model Anda.
  6. Salin token yang dihasilkan ke papan klip Anda.

Membuat Secret Kubernetes untuk kredensial Hugging Face

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 Secret untuk menyimpan kredensial Hugging Face:

    kubectl create secret generic huggingface-secret \
        --from-literal=HUGGINGFACE_TOKEN=HUGGINGFACE_TOKEN
    

    Ganti HUGGINGFACE_TOKEN dengan token Hugging Face Anda.

Mengonfigurasi akses workload menggunakan Workload Identity Federation for GKE

Tetapkan Kubernetes ServiceAccount ke aplikasi dan konfigurasikan Kubernetes ServiceAccount tersebut untuk bertindak 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 agar dapat 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 ServiceAccount Kubernetes untuk meniru identitas akun layanan IAM dengan menambahkan binding kebijakan IAM antara kedua akun layanan tersebut. 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. Beri anotasi pada 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 akan membuat Tugas untuk melakukan hal berikut:

  1. Download checkpoint dasar dari Hugging Face ke direktori lokal.
  2. Konversikan titik pemeriksaan ke titik pemeriksaan yang kompatibel dengan JetStream-Pytorch.
  3. Upload checkpoint ke bucket Cloud Storage.

Men-deploy Tugas konversi checkpoint model

Gemma 7B-it

Download dan konversikan file checkpoint model Gemma 7B:

  1. Simpan manifes berikut sebagai job-checkpoint-converter.yaml:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: checkpoint-converter
    spec:
      ttlSecondsAfterFinished: 30
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: inference-checkpoint
            image: us-docker.pkg.dev/cloud-tpu-images/inference/inference-checkpoint:v0.2.3
            args:
            - -s=jetstream-pytorch
            - -m=google/gemma-7b-it-pytorch
            - -o=gs://BUCKET_NAME/pytorch/gemma-7b-it/final/bf16/
            - -n=gemma
            - -q=False
            - -h=True
            volumeMounts:
            - mountPath: "/huggingface/"
              name: huggingface-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: huggingface-credentials
            secret:
              defaultMode: 0400
              secretName: huggingface-secret

Llama 3 8B

Download dan konversi file checkpoint model Llama 3 8B:

  1. Simpan manifes berikut sebagai job-checkpoint-converter.yaml:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: checkpoint-converter
    spec:
      ttlSecondsAfterFinished: 30
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: inference-checkpoint
            image: us-docker.pkg.dev/cloud-tpu-images/inference/inference-checkpoint:v0.2.3
            args:
            - -s=jetstream-pytorch
            - -m=meta-llama/Meta-Llama-3-8B
            - -o=gs://BUCKET_NAME/pytorch/llama-3-8b/final/bf16/
            - -n=llama-3
            - -q=False
            - -h=True
            volumeMounts:
            - mountPath: "/huggingface/"
              name: huggingface-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: huggingface-credentials
            secret:
              defaultMode: 0400
              secretName: huggingface-secret
  1. Ganti BUCKET_NAME dengan GSBucket yang Anda buat sebelumnya:

    sed -i "s|BUCKET_NAME|BUCKET_NAME|g" job-checkpoint-converter.yaml
    
  2. Terapkan manifes:

    kubectl apply -f job-checkpoint-converter.yaml
    
  3. Tunggu hingga Pod yang menjadwalkan Tugas mulai berjalan:

    kubectl get pod -w
    

    Outputnya akan mirip dengan berikut ini, dan mungkin memerlukan waktu beberapa menit:

    NAME                        READY   STATUS              RESTARTS   AGE
    checkpoint-converter-abcd   0/1     ContainerCreating   0          28s
    checkpoint-converter-abcd   1/1     Running             0          51s
    

    Untuk cluster Autopilot, mungkin perlu waktu beberapa menit untuk menyediakan resource TPU yang diperlukan.

  4. Verifikasi bahwa Tugas telah selesai dengan melihat log untuk Tugas:

    kubectl logs -f jobs/checkpoint-converter
    

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

    Completed uploading converted checkpoint from local path /pt-ckpt/ to GSBucket gs://BUCKET_NAME/pytorch/<model_name>/final/bf16/"
    

Men-deploy JetStream

Deploy container JetStream untuk menayangkan model Anda:

Simpan manifes berikut sebagai jetstream-pytorch-deployment.yaml:

Gemma 7B-it

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jetstream-pytorch-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: jetstream-pytorch-server
  template:
    metadata:
      labels:
        app: jetstream-pytorch-server
      annotations:
        gke-gcsfuse/volumes: "true"
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-topology: 2x4
        cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
      containers:
      - name: jetstream-pytorch-server
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-pytorch-server:v0.2.3
        args:
        - --size=7b
        - --model_name=gemma
        - --batch_size=32
        - --max_cache_length=2048
        - --quantize_weights=False
        - --quantize_kv_cache=False
        - --tokenizer_path=/models/pytorch/gemma-7b-it/final/bf16/tokenizer.model
        - --checkpoint_path=/models/pytorch/gemma-7b-it/final/bf16/model.safetensors
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: gcs-fuse-checkpoint
          mountPath: /models
          readOnly: true
        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.2
        ports:
        - containerPort: 8000
      volumes:
      - name: gcs-fuse-checkpoint
        csi:
          driver: gcsfuse.csi.storage.gke.io
          readOnly: true
          volumeAttributes:
            bucketName: BUCKET_NAME
            mountOptions: "implicit-dirs"
---
apiVersion: v1
kind: Service
metadata:
  name: jetstream-svc
spec:
  selector:
    app: jetstream-pytorch-server
  ports:
  - protocol: TCP
    name: jetstream-http
    port: 8000
    targetPort: 8000

Llama 3 8B

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jetstream-pytorch-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: jetstream-pytorch-server
  template:
    metadata:
      labels:
        app: jetstream-pytorch-server
      annotations:
        gke-gcsfuse/volumes: "true"
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-topology: 2x4
        cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
      containers:
      - name: jetstream-pytorch-server
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-pytorch-server:v0.2.3
        args:
        - --size=8b
        - --model_name=llama-3
        - --batch_size=32
        - --max_cache_length=2048
        - --quantize_weights=False
        - --quantize_kv_cache=False
        - --tokenizer_path=/models/pytorch/llama-3-8b/final/bf16/tokenizer.model
        - --checkpoint_path=/models/pytorch/llama-3-8b/final/bf16/model.safetensors
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: gcs-fuse-checkpoint
          mountPath: /models
          readOnly: true
        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.2
        ports:
        - containerPort: 8000
      volumes:
      - name: gcs-fuse-checkpoint
        csi:
          driver: gcsfuse.csi.storage.gke.io
          readOnly: true
          volumeAttributes:
            bucketName: BUCKET_NAME
            mountOptions: "implicit-dirs"
---
apiVersion: v1
kind: Service
metadata:
  name: jetstream-svc
spec:
  selector:
    app: jetstream-pytorch-server
  ports:
  - protocol: TCP
    name: jetstream-http
    port: 8000
    targetPort: 8000

Manifes menetapkan properti utama berikut:

  • size: ukuran model Anda.
  • model_name: nama model (gemma, llama-3).
  • batch_size: ukuran batch decoding per perangkat, dengan satu chip TPU sama dengan satu perangkat.
  • max_cache_length: panjang maksimum cache kv.
  • quantize_weights: apakah checkpoint dikuantifikasi.
  • quantize_kv_cache: apakah cache kv dikuantifikasi.
  • tokenizer_path: jalur ke file tokenizer model.
  • checkpoint_path: jalur ke checkpoint.
  1. Ganti BUCKET_NAME dengan GSBucket yang Anda buat sebelumnya:

    sed -i "s|BUCKET_NAME|BUCKET_NAME|g" jetstream-pytorch-deployment.yaml
    
  2. Terapkan manifes:

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

    kubectl get deployment
    

    Outputnya mirip dengan hal berikut ini:

    NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
    jetstream-pytorch-server          2/2     2            2           ##s
    

    Untuk cluster Autopilot, mungkin perlu waktu beberapa menit untuk menyediakan resource TPU yang diperlukan.

  4. Lihat log server HTTP untuk memeriksa apakah model telah dimuat dan dikompilasi. Mungkin perlu waktu beberapa menit bagi server untuk menyelesaikan operasi ini.

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

    Outputnya mirip dengan hal berikut ini:

    kubectl logs deploy/jetstream-pytorch-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 server JetStream-PyTorch dan pastikan kompilasi telah selesai:

    kubectl logs deploy/jetstream-pytorch-server -f -c jetstream-pytorch-server
    

    Outputnya mirip dengan hal berikut ini:

    Started jetstream_server....
    2024-04-12 04:33:37,128 - root - INFO - ---------Generate params 0 loaded.---------
    

Menayangkan model

Di bagian ini, Anda akan berinteraksi dengan model.

Menyiapkan penerusan port

Anda dapat mengakses Deployment JetStream melalui Layanan ClusterIP yang Anda buat 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-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": " for data science in 2023?\n\n**1. Python:**\n- Widely used for data science due to its readability, extensive libraries (pandas, scikit-learn), and integration with other tools.\n- High demand for Python programmers in data science roles.\n\n**2. R:**\n- Popular choice for data analysis and visualization, particularly in academia and research.\n- Extensive libraries for statistical modeling and data wrangling.\n\n**3. Java:**\n- Enterprise-grade platform for data science, with strong performance and scalability.\n- Widely used in data mining and big data analytics.\n\n**4. SQL:**\n- Essential for data querying and manipulation, especially in relational databases.\n- Used for data analysis and visualization in various industries.\n\n**5. Scala:**\n- Scalable and efficient for big data processing and machine learning models.\n- Popular in data science for its parallelism and integration with Spark and Spark MLlib."
    }
    
    

Memecahkan masalah

  • Jika Anda mendapatkan pesan Empty reply from server, mungkin penampung 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 Anda aktif.

Pembersihan

Agar tidak perlu membayar 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.

Menghapus resource yang di-deploy

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang dibuat 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