Melayani LLM menggunakan TPU di GKE dengan JetStream dan PyTorch


Panduan ini menunjukkan cara menyajikan model bahasa besar (LLM) menggunakan Tensor Processing Unit (TPU) di Google Kubernetes Engine (GKE) dengan JetStream melalui PyTorch. Dalam panduan ini, Anda akan mengunduh bobot model ke Cloud Storage dan men-deploy-nya di GKE Autopilot atau Standar menggunakan container yang menjalankan JetStream.

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

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

Latar belakang

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

Tentang TPU

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

Tentang JetStream

JetStream adalah inferensi open source yang sama yang dikembangkan oleh Google. JetStream memungkinkan performa tinggi, dengan throughput tinggi & inferensi yang dioptimalkan untuk memori pada TPU dan GPU. JetStream menyediakan pengoptimalan performa tingkat lanjut, termasuk pengelompokan berkelanjutan, Pengoptimalan cache KV, dan teknik kuantisasi, untuk memfasilitasi LLM deployment. JetStream memungkinkan inferensi PyTorch/XLA dan JAX TPU mencapai tingkat tinggi.

Pengelompokan Berkelanjutan

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

Kuantisasi cache KV

Kuantisasi cache KV melibatkan kompresi cache nilai kunci yang digunakan mekanisme, yang mengurangi kebutuhan memori.

Kuantisasi bobot Int8

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

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

Tentang PyTorch

PyTorch adalah framework machine learning open source yang dikembangkan oleh Meta dan sekarang bagian dari pelindung Linux Foundation. PyTorch menyediakan fitur tingkat tinggi seperti sebagai komputasi tensor dan deep neural network.

Tujuan

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

Arsitektur

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

Diagram berikut menampilkan komponen arsitektur ini:

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

Arsitektur ini mencakup komponen berikut:

  • Cluster regional Standar atau Autopilot GKE.
  • Dua kumpulan node slice TPU host tunggal yang menghosting deployment JetStream.
  • Komponen Service 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

  • 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.

  • Aktifkan API yang diperlukan.

    Mengaktifkan 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.

  • Aktifkan API yang diperlukan.

    Mengaktifkan 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 TPU v5e PodSlice Lite. Dalam tutorial ini, Anda menggunakan instance on-demand.
  • Buat token Wajah Memeluk, jika belum memilikinya.

Mendapatkan akses ke model

Dapatkan akses ke berbagai model di Hugging Face untuk deployment ke GKE

Gemma 7 miliar

Guna 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 Wajah Memeluk
  2. Masuk ke Wajah Memeluk jika belum melakukannya.
  3. Tinjau dan setujui Persyaratan dan Ketentuan model.

Llama 3 8B

Guna mendapatkan akses ke model Llama 3 untuk deployment ke GKE, Anda harus terlebih dahulu menandatangani perjanjian izin lisensi.

  1. Akses halaman izin model Llama 3 di Memeluk Wajah
  2. Masuk ke Wajah Memeluk jika 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 dilengkapi dengan software yang 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 GKE Anda ada cluster, bucket Cloud Storage, dan TPU node. Wilayah 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 zona 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. Perlu diperhatikan bahwa versi GKE default mungkin tidak memiliki ketersediaan untuk TPU target Anda. Untuk daftar versi GKE minimum yang tersedia berdasarkan jenis mesin TPU, lihat ketersediaan TPU di GKE.

Membuat dan mengonfigurasi resource Google Cloud

Ikuti petunjuk berikut untuk membuat resource yang diperlukan.

Membuat cluster GKE

Anda dapat menyalurkan Gemma di TPU dengan Autopilot GKE atau Standard Anda. Sebaiknya gunakan Autopilot untuk pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling cocok 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 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 \
        --cluster-version=CLUSTER_VERSION \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --location=REGION
    

    Pembuatan cluster memerlukan waktu beberapa menit.

  2. Membuat kumpulan node 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 checkpoint yang dikonversi:

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

Membuat token CLI Wajah Memeluk Anda di Cloud Shell

Buat token Wajah Memeluk baru jika belum memilikinya:

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

Membuat Rahasia Kubernetes untuk kredensial Memeluk Wajah

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 Wajah Memeluk:

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

    Ganti HUGGINGFACE_TOKEN dengan token Wajah Memeluk Anda.

Mengonfigurasi akses workload Anda menggunakan Workload Identity Federation for GKE

Menetapkan Kubernetes ServiceAccount ke aplikasi dan mengonfigurasi Kubernetes ServiceAccount tersebut untuk 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 ke mengelola Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:wi-jetstream@PROJECT_ID." \
        --role roles/storage.objectUser
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:wi-jetstream@PROJECT_ID." \
        --role roles/storage.insightsCollectorService
    
  3. Izinkan Kubernetes ServiceAccount untuk meniru identitas akun layanan IAM dengan menambahkan IAM kebijakan mengikat antara dua akun layanan. Binding ini memungkinkan Kubernetes ServiceAccount untuk bertindak sebagai akun layanan IAM:

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

    kubectl annotate serviceaccount default \
        iam.gke.io/gcp-service-account=wi-jetstream@PROJECT_ID.
    

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 checkpoint ke checkpoint yang kompatibel dengan JetStream-Pytorch.
  3. Mengupload checkpoint ke bucket Cloud Storage.

Men-deploy Tugas konversi checkpoint model

Gemma 7 miliar

Download dan konversi 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 konversikan 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 dibuat 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
    

    Output-nya akan serupa dengan berikut ini, ini mungkin perlu 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. Pastikan bahwa Tugas telah diselesaikan dengan melihat log untuk Tugas tersebut:

    kubectl logs -f jobs/checkpoint-converter
    

    Saat Tugas selesai, output-nya akan mirip dengan berikut ini:

    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 menyalurkan model Anda:

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

Gemma 7 miliar

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 kunci 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 dikuantisasi.
  • quantize_kv_cache: apakah cache kv dikuantisasi.
  • tokenizer_path: jalur ke file tokenizer model.
  • checkpoint_path: jalur ke checkpoint.
  1. Ganti BUCKET_NAME dengan GSBucket yang dibuat 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. Server mungkin memerlukan waktu beberapa menit 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 verifikasi bahwa 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.---------
    

Menyajikan model

Di bagian ini, Anda akan berinteraksi dengan model.

Menyiapkan penerusan port

Anda dapat mengakses Deployment JetStream melalui Layanan ClusterIP yang yang telah dibuat di langkah sebelumnya. Layanan ClusterIP hanya dapat dijangkau dari dalam gugus ini. Oleh karena itu, untuk mengakses Service dari luar cluster, 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. Verifikasi bahwa 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 pesan Connected yang menunjukkan bahwa model siap disalurkan.
  • Jika Anda melihat Connection refused, pastikan penerusan port 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 ke 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.

gcloud storage rm --recursive gs://BUCKET_NAME

Langkah selanjutnya