Menyajikan model dengan satu GPU di GKE

Tutorial ini menunjukkan cara men-deploy dan menayangkan model bahasa besar (LLM) menggunakan GPU di Google Kubernetes Engine (GKE) dengan NVIDIA Triton Inference Server dan TensorFlow Serving Hal ini memberikan dasar untuk memahami dan mempelajari deployment LLM praktis untuk inferensi di lingkungan Kubernetes terkelola. Anda men-deploy penampung yang telah dibuat sebelumnya ke cluster GKE dengan satu GPU Tensor Core L4 dan Anda menyiapkan infrastruktur GKE untuk melakukan inferensi online.

Tutorial ini ditujukan untuk engineer Machine learning (ML), Admin dan operator platform, serta spesialis Data dan AI yang ingin menghosting model machine learning (ML) terlatih di cluster GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud

Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:

Membuat bucket Cloud Storage

Buat bucket Cloud Storage untuk menyimpan model terlatih yang akan ditayangkan.

Di Cloud Shell, jalankan perintah berikut:

gcloud storage buckets create gs://$GSBUCKET

Konfigurasi cluster Anda untuk mengakses bucket menggunakan Workload Identity Federation for GKE

Agar cluster Anda dapat mengakses bucket Cloud Storage, lakukan langkah berikut:

  1. Buat akun layanan Google Cloud .
  2. Buat Akun Layanan Kubernetes di cluster Anda.
  3. Ikat Akun Layanan Kubernetes ke akun layanan Google Cloud .

Buat akun layanan Google Cloud

  1. Di konsol Google Cloud , buka halaman Create service account:

    Buka Create service account

  2. Di kolom Service account ID, masukkan gke-ai-sa.

  3. Klik Buat dan lanjutkan.

  4. Di daftar Role, pilih peran Cloud Storage > Storage Insights Collector Service.

  5. Klik Add another role.

  6. Dalam daftar Select a role, pilih peran Cloud Storage > Storage Object Admin.

  7. Klik Lanjutkan lalu klik Selesai.

Membuat Akun Layanan Kubernetes di cluster Anda

Di Cloud Shell, lakukan hal berikut:

  1. Membuat namespace Kubernetes:

    kubectl create namespace gke-ai-namespace
    
  2. Buat Akun Layanan Kubernetes dalam namespace:

    kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
    

Ikat Akun Layanan Kubernetes ke akun layanan Google Cloud

Di Cloud Shell jalankan perintah berikut:

  1. Tambahkan binding IAM ke akun layanan Google Cloud :

    gcloud iam service-accounts add-iam-policy-binding gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-ai-namespace/gpu-k8s-sa]"
    

    Flag --member memberikan identitas lengkap Akun Layanan Kubernetes di Google Cloud.

  2. Anotasikan Akun Layanan Kubernetes:

    kubectl annotate serviceaccount gpu-k8s-sa \
        --namespace gke-ai-namespace \
        iam.gke.io/gcp-service-account=gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com
    

Men-deploy server inferensi online

Setiap framework inferensi online mengharapkan untuk menemukan model ML terlatih dalam format tertentu. Bagian berikut menunjukkan cara men-deploy server inferensi, bergantung pada framework yang ingin Anda gunakan:

Triton

  1. Di Cloud Shell, salin model ML terlatih ke dalam bucket Cloud Storage:

    gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
    
  2. Deploy framework menggunakan Deployment. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.:

    envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
    
  3. Pastikan GKE men-deploy framework:

    kubectl get deployments --namespace=gke-ai-namespace
    

    Jika framework sudah siap, output-nya akan mirip dengan berikut ini:

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    triton-deployment    1/1     1            1           5m29s
    
  4. Deploy Layanan untuk mengakses Deployment:

    kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
    
  5. Periksa apakah IP eksternal ditetapkan:

    kubectl get services --namespace=gke-ai-namespace
    

    Outputnya mirip dengan hal berikut ini:

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                        AGE
    kubernetes      ClusterIP      34.118.224.1     <none>          443/TCP                                        60m
    triton-server   LoadBalancer   34.118.227.176   35.239.54.228   8000:30866/TCP,8001:31035/TCP,8002:30516/TCP   5m14s
    

    Catat alamat IP untuk triton-server di kolom EXTERNAL-IP

  6. Pastikan layanan dan deployment berfungsi dengan benar:

    curl -v EXTERNAL_IP:8000/v2/health/ready
    

    Outputnya mirip dengan hal berikut ini:

    ...
    < HTTP/1.1 200 OK
    < Content-Length: 0
    < Content-Type: text/plain
    ...
    

Penayangan TF

  1. Di Cloud Shell, salin model ML terlatih ke dalam bucket Cloud Storage:

    gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
    
  2. Deploy framework menggunakan Deployment. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.:

    envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
    
  3. Pastikan GKE men-deploy framework:

    kubectl get deployments --namespace=gke-ai-namespace
    

    Jika framework sudah siap, output-nya akan mirip dengan berikut ini:

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    tfserve-deployment   1/1     1            1           5m29s
    
  4. Deploy Layanan untuk mengakses Deployment:

    kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
    
  5. Periksa apakah IP eksternal ditetapkan:

    kubectl get services --namespace=gke-ai-namespace
    

    Outputnya mirip dengan hal berikut ini:

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                        AGE
    kubernetes      ClusterIP      34.118.224.1     <none>          443/TCP                                        60m
    tfserve-server  LoadBalancer   34.118.227.176   35.239.54.228   8500:30003/TCP,8000:32194/TCP                  5m14s
    

    Catat alamat IP untuk tfserve-server di kolom EXTERNAL-IP.

  6. Periksa apakah Layanan dan Deployment berfungsi dengan benar:

    curl -v EXTERNAL_IP:8000/v1/models/mnist
    

    Ganti EXTERNAL_IP dengan alamat IP eksternal Anda.

    Outputnya mirip dengan hal berikut ini:

    ...
    < HTTP/1.1 200 OK
    < Content-Type: application/json
    < Date: Thu, 12 Oct 2023 19:01:19 GMT
    < Content-Length: 154
    <
    {
      "model_version_status": [
            {
            "version": "1",
            "state": "AVAILABLE",
            "status": {
              "error_code": "OK",
              "error_message": ""
            }
          }
        ]
    }
    

Menyajikan model

Triton

  1. Buat lingkungan virtual Python di Cloud Shell.

    python -m venv ./mnist_client
    source ./mnist_client/bin/activate
    
  2. Instal paket Python yang diperlukan.

    pip install -r src/client/triton-requirements.txt
    
  3. Uji server inferensi Triton dengan memuat gambar:

    cd src/client
    python triton_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
    

    Ganti kode berikut:

    • EXTERNAL_IP: Alamat IP eksternal Anda.
    • TEST_IMAGE: Nama file yang sesuai dengan gambar yang ingin Anda uji. Anda dapat menggunakan gambar yang disimpan di src/client/images.

    Bergantung pada gambar yang Anda gunakan, outputnya akan mirip dengan berikut ini:

    Calling Triton HTTP Service      ->      Prediction result: 7
    

Penayangan TF

  1. Buat lingkungan virtual Python di Cloud Shell.

    python -m venv ./mnist_client
    source ./mnist_client/bin/activate
    
  2. Instal paket Python yang diperlukan.

    pip install -r src/client/tfserve-requirements.txt
    
  3. Uji TensorFlow Serving dengan beberapa gambar.

    cd src/client
    python tfserve_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
    

Ganti kode berikut:

  • EXTERNAL_IP: Alamat IP eksternal Anda.
  • TEST_IMAGE: Nilai dari 0 hingga 9. Anda dapat menggunakan gambar yang disimpan di src/client/images.

Bergantung pada gambar yang Anda gunakan, Anda akan mendapatkan output yang mirip dengan ini:

  Calling TensorFlow Serve HTTP Service    ->      Prediction result: 5

Mengamati performa model

Triton

Untuk mengamati performa model, Anda dapat menggunakan integrasi dasbor Triton di Cloud Monitoring. Dengan dasbor ini, Anda dapat melihat metrik performa penting seperti throughput token, latensi permintaan, dan tingkat error.

Untuk menggunakan dasbor Triton, Anda harus mengaktifkan Google Cloud Managed Service for Prometheus, yang mengumpulkan metrik dari Triton, di cluster GKE Anda. Triton mengekspos metrik dalam format Prometheus secara default; Anda tidak perlu menginstal exporter tambahan.

Kemudian, Anda dapat melihat metrik menggunakan dasbor Triton. Untuk mengetahui informasi tentang cara menggunakan Google Cloud Managed Service for Prometheus untuk mengumpulkan metrik dari model Anda, lihat panduan kejelasan Triton dalam dokumentasi Cloud Monitoring.

Penayangan TF

Untuk mengamati performa model, Anda dapat menggunakan integrasi dasbor TF Serving di Cloud Monitoring. Dengan dasbor ini, Anda dapat melihat metrik performa penting seperti throughput token, latensi permintaan, dan tingkat error.

Untuk menggunakan dasbor TF Serving, Anda harus mengaktifkan Google Cloud Managed Service for Prometheus, yang mengumpulkan metrik dari TF Serving, di cluster GKE Anda.

Kemudian, Anda dapat melihat metrik menggunakan dasbor TF Serving. Untuk mengetahui informasi tentang cara menggunakan Google Cloud Managed Service for Prometheus untuk mengumpulkan metrik dari model Anda, lihat panduan kemampuan pengamatan TF Serving dalam dokumentasi Cloud Monitoring.