Men-deploy dan menyalurkan model Llama 2 di TPU v5e menggunakan SAX


Tutorial ini akan memandu Anda:

  • Membuat VM Cloud TPU untuk men-deploy Llama 2 kelompok model bahasa besar (LLM), tersedia dalam berbagai ukuran (7B, 13B, atau 70B)
  • Menyiapkan checkpoint untuk model dan men-deploy-nya di SAX
  • Berinteraksi dengan model melalui endpoint HTTP

Penayangan untuk Eksperimen AGI (SAX) adalah sistem eksperimental yang berfungsi Paxml, JAX, dan PyTorch untuk inferensi. Kode dan dokumentasi untuk SAX ada di repositori Git Saxml. Versi stabil saat ini dengan dukungan TPU v5e adalah v1.1.0.

Tentang sel SAX

Sel SAX (atau cluster) adalah unit inti untuk menyalurkan model Anda. Terdiri dari dua bagian utama:

  • Server admin: Server ini melacak server model Anda, menetapkan model ke server model tersebut, dan membantu klien menemukan server model yang tepat berinteraksi.
  • Server model: Server ini menjalankan model Anda. Mereka bertanggung jawab terhadap memproses permintaan masuk dan menghasilkan respons.

Diagram berikut menunjukkan diagram sel SAX:

Sel SAX dengan model dan server admin
server

Gambar 1. Sel SAX dengan server admin dan server model.

Anda dapat berinteraksi dengan sel SAX menggunakan klien yang ditulis dalam Python, C++, atau Go, atau secara langsung melalui server HTTP. Diagram berikut menunjukkan bagaimana komponen klien dapat berinteraksi dengan sel SAX:

Klien eksternal dan endpoint HTTP yang berinteraksi dengan SAX
sel

Gambar 2. Arsitektur runtime klien eksternal yang berinteraksi dengan SAX sel.

Tujuan

  • Menyiapkan resource TPU untuk penayangan
  • Membuat cluster SAX
  • Memublikasikan model Llama 2
  • Berinteraksi dengan model

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Cloud TPU
  • Compute Engine
  • Cloud Storage

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Siapkan project Google Cloud Anda, aktifkan Cloud TPU API, dan buat akun layanan dengan mengikuti petunjuk di Menyiapkan Cloud TPU lingkungan fleksibel.

Membuat TPU

Langkah-langkah berikut menunjukkan cara membuat VM TPU yang akan menyalurkan model Anda.

  1. Buat variabel lingkungan:

    export PROJECT_ID=PROJECT_ID
    export ACCELERATOR_TYPE=ACCELERATOR_TYPE
    export ZONE=ZONE
    export RUNTIME_VERSION=v2-alpha-tpuv5-lite
    export SERVICE_ACCOUNT=SERVICE_ACCOUNT
    export TPU_NAME=TPU_NAME
    export QUEUED_RESOURCE_ID=QUEUED_RESOURCE_ID

    Deskripsi variabel lingkungan

    PROJECT_ID
    : ID project Google Cloud Anda.
    ACCELERATOR_TYPE
    Jenis akselerator menentukan versi dan ukuran Cloud TPU yang ingin Anda buat. Ukuran model Llama 2 yang berbeda memiliki persyaratan ukuran TPU yang berbeda:
    • 7B: v5litepod-4 atau lebih besar
    • 13B: v5litepod-8 atau lebih besar
    • 70B: v5litepod-16 atau lebih besar
    ZONE
    Zona tempat Anda ingin membuat yang disebut Cloud TPU.
    SERVICE_ACCOUNT
    Akun layanan yang ingin Anda lampirkan ke Cloud TPU.
    TPU_NAME
    Nama untuk Cloud TPU Anda.
    QUEUED_RESOURCE_ID
    ID untuk permintaan resource dalam antrean.
  2. Tetapkan project ID dan zona di konfigurasi Google Cloud CLI Anda yang aktif:

    gcloud config set project $PROJECT_ID  && gcloud config set compute/zone $ZONE
    
  3. Buat VM TPU:

    gcloud compute tpus queued-resources create ${QUEUED_RESOURCE_ID} \
      --node-id ${TPU_NAME} \
      --project ${PROJECT_ID} \
      --zone ${ZONE} \
      --accelerator-type ${ACCELERATOR_TYPE} \
      --runtime-version ${RUNTIME_VERSION} \
      --service-account ${SERVICE_ACCOUNT}
    
  4. Pastikan TPU aktif:

    gcloud compute tpus queued-resources list --project $PROJECT_ID --zone $ZONE
    

Siapkan node konversi checkpoint

Untuk menjalankan model Llama di cluster SAX, Anda perlu mengonversi model Llama asli checkpoint ke format yang kompatibel dengan SAX.

Konversi memerlukan resource memori yang signifikan, bergantung pada modelnya ukuran:

Model Jenis mesin
7 M Memori 50-60 GB
13 M Memori 120 GB
70 M Memori 500-600 GB (jenis mesin N2 atau M1)

Untuk model 7B dan 13B, Anda dapat menjalankan konversi di VM TPU. Untuk 70B, Anda perlu membuat instance Compute Engine dengan kapasitas disk sekitar 1 TB:

gcloud compute instances create INSTANCE_NAME --project=$PROJECT_ID --zone=$ZONE \
  --machine-type=n2-highmem-128 \
  --network-interface=network-tier=PREMIUM,stack-type=IPV4_ONLY,subnet=default \
  --maintenance-policy=MIGRATE --provisioning-model=STANDARD \
  --service-account=$SERVICE_ACCOUNT \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=http-server,https-server \
  --create-disk=auto-delete=yes,boot=yes,device-name=bk-workday-dlvm,image=projects/ml-images/global/images/c0-deeplearning-common-cpu-v20230925-debian-10,mode=rw,size=500,type=projects/$PROJECT_ID/zones/$ZONE/diskTypes/pd-balanced \
  --no-shielded-secure-boot \
  --shielded-vtpm \
  --shielded-integrity-monitoring \
  --labels=goog-ec-src=vm_add-gcloud \
  --reservation-affinity=any

Baik Anda menggunakan instance TPU atau Compute Engine sebagai server konversi, siapkan server Anda untuk mengonversi checkpoint Llama 2:

  1. Untuk model 7B dan 13B, setel variabel lingkungan nama server dengan nama TPU Anda:

    export CONV_SERVER_NAME=$TPU_NAME
    

    Untuk model 70B, atur variabel lingkungan nama server ke nama instance Compute Engine Anda:

    export CONV_SERVER_NAME=INSTANCE_NAME
  2. Hubungkan ke node konversi menggunakan SSH.

    Jika node konversi Anda adalah TPU, hubungkan ke TPU:

    gcloud compute tpus tpu-vm ssh $CONV_SERVER_NAME --project=$PROJECT_ID --zone=$ZONE
    

    Jika node konversi Anda adalah instance Compute Engine, hubungkan ke VM Compute Engine:

    gcloud compute ssh $CONV_SERVER_NAME --project=$PROJECT_ID --zone=$ZONE
    
  3. Instal paket yang diperlukan di node konversi:

    sudo apt update
    sudo apt-get install python3-pip
    sudo apt-get install git-all
    
    pip3 install paxml==1.1.0
    pip3 install torch
    pip3 install jaxlib==0.4.14
    
  4. Download skrip konversi checkpoint Llama:

    gcloud storage cp gs://cloud-tpu-inference-public/sax-tokenizers/llama/convert_llama_ckpt.py .
    

Download bobot Llama 2

Sebelum mengonversi model, Anda perlu mendownload bobot Llama 2. Untuk ini Anda harus menggunakan bobot Llama 2 asli (misalnya, meta-llama/Llama-2-7b) dan bukan bobot yang telah dikonversi untuk format Transformer Wajah Memeluk (misalnya, meta-llama/Llama-2-7b-hf).

Jika Anda sudah memiliki bobot Llama 2, lanjutkan ke bagian Mengonversi bobot.

Untuk mendownload berat dari hub Wajah Memeluk, Anda harus menyetel token akses pengguna dan meminta akses ke model Llama 2. Untuk meminta akses, ikuti petunjuk pada halaman Wajah Memeluk untuk model yang ingin Anda gunakan, misalnya, meta-llama/Llama-2-7b.

  1. Buat direktori untuk bobot:

    sudo mkdir WEIGHTS_DIRECTORY
  2. Mendapatkan berat Llama2 dari hub Hugging Face:

    1. Instal CLI hub Hugging Face:

      pip install -U "huggingface_hub[cli]"
      
    2. Ubah ke direktori bobot:

      cd WEIGHTS_DIRECTORY
    3. Download file Llama 2:

      python3
      from huggingface_hub import login
      login()
      from huggingface_hub import hf_hub_download, snapshot_download
      import os
      PATH=os.getcwd()
      snapshot_download(repo_id="meta-llama/LLAMA2_REPO", local_dir_use_symlinks=False, local_dir=PATH)

      Ganti LLAMA2_REPO dengan nama repositori Hugging Face yang ingin Anda download dari: Llama-2-7b, Llama-2-13b, atau Llama-2-70b.

Mengonversi bobot

Edit skrip konversi, lalu jalankan skrip konversi untuk mengonversi model bobot.

  1. Buat direktori untuk menyimpan bobot yang dikonversi:

    sudo mkdir CONVERTED_WEIGHTS
  2. Clone repositori Saxml GitHub di direktori tempat Anda membaca, menulis, dan izin eksekusi:

      git clone https://github.com/google/saxml.git -b r1.1.0
    
  3. Ubah ke direktori saxml:

    cd saxml
    
  4. Buka file saxml/tools/convert_llama_ckpt.py.

  5. Dalam file saxml/tools/convert_llama_ckpt.py, ubah baris 169 dari:

    'scale': pytorch_vars[0]['layers.%d.attention_norm.weight' % (layer_idx)].type(torch.float16).numpy()
    

    Kepada:

    'scale': pytorch_vars[0]['norm.weight'].type(torch.float16).numpy()
    
  6. Jalankan skrip saxml/tools/init_cloud_vm.sh:

    saxml/tools/init_cloud_vm.sh
    
  7. Khusus 70B: Nonaktifkan mode pengujian:

    1. Buka saxml/server/pax/lm/params/lm_cloud.py .
    2. Di kolom saxml/server/pax/lm/params/lm_cloud.py , ubah baris 344 dari:

      return True
      

      Kepada:

      return False
      
  8. Konversi bobot:

    python3 saxml/tools/convert_llama_ckpt.py --base-model-path WEIGHTS_DIRECTORY \
      --pax-model-path CONVERTED_WEIGHTS \
      --model-size MODEL_SIZE

    Ganti kode berikut:

    • WEIGHTS_DIRECTORY: Direktori untuk bobot asli.
    • CONVERTED_WEIGHTS: Jalur target untuk bobot yang dikonversi.
    • MODEL_SIZE: 7b, 13b, atau 70b.

Menyiapkan direktori checkpoint

Setelah Anda mengonversi {i>checkpoint<i}, direktori {i>checkpoint<i} harus memiliki berikut ini:

checkpoint_00000000
  metadata/
      metadata
    state/
        mdl_vars.params.lm*/
        ...
        ...
        step/

Buat file kosong bernama commit_success.txt dan simpan salinannya di Direktori checkpoint_00000000, metadata, dan state. Ini membuat SAX tahu bahwa checkpoint ini sepenuhnya diubah dan siap dimuat:

  1. Ubah ke direktori checkpoint:

    cd CONVERTED_WEIGHTS/checkpoint_00000000
  2. Buat file kosong bernama commit_success.txt:

    touch commit_success.txt
    
  3. Ubah ke direktori metadata dan buat file kosong bernama commit_success.txt:

    cd metadata && touch commit_success.txt
    
  4. Ubah ke direktori status dan buat file kosong bernama commit_success.txt:

    cd .. && cd state && touch commit_success.txt
    

Direktori checkpoint kini seharusnya memiliki struktur berikut:

checkpoint_00000000
    commit_success.txt
metadata/
    commit_success.txt
    metadata
    state/
        commit_success.txt
        mdl_vars.params.lm*/
        ...
        ...
        step/

Membuat bucket Cloud Storage

Anda perlu menyimpan konversi di bucket Cloud Storage, sehingga yang tersedia saat memublikasikan model.

  1. Tetapkan variabel lingkungan untuk nama bucket Cloud Storage Anda:

    export GSBUCKET=BUCKET_NAME
  2. Membuat bucket:

    gcloud storage buckets create gs://${GSBUCKET}
    
  3. Salin file checkpoint yang dikonversi ke bucket Anda:

    gcloud storage cp -r CONVERTED_WEIGHTS/checkpoint_00000000  gs://$GSBUCKET/sax_models/llama2/SAX_LLAMA2_DIR/

    Ganti SAX_LLAMA2_DIR dengan nilai yang sesuai:

    • 7 M: saxml_llama27b
    • 13 M: saxml_llama213b
    • 70 M: saxml_llama270b

Buat cluster SAX

Untuk membuat cluster SAX, Anda perlu:

Dalam deployment biasa, Anda akan menjalankan server admin di Compute Engine dan server model di TPU atau GPU. Untuk tujuan Anda akan men-deploy server admin dan server model pada TPU yang sama v5e.

Buat server admin

Buat penampung Docker server admin:

  1. Di server konversi, instal Docker:

    sudo apt-get update
    sudo apt-get install docker.io
    
  2. Luncurkan container Docker server admin:

    sudo docker run --name sax-admin-server \
      -it \
      -d \
      --rm \
      --network host \
      --env GSBUCKET=${GSBUCKET} us-docker.pkg.dev/cloud-tpu-images/inference/sax-admin-server:v1.1.0
    

Anda dapat menjalankan perintah docker run tanpa opsi -d untuk melihat log dan memastikan bahwa server admin dimulai dengan benar.

Membuat server model

Bagian berikut menunjukkan cara membuat server model.

model 7b

Luncurkan container Docker server model:

sudo docker run --privileged \
  -it \
  -d \
  --rm \
  --network host \
  --name "sax-model-server" \
  --env SAX_ROOT=gs://${GSBUCKET}/sax-root us-docker.pkg.dev/cloud-tpu-images/inference/sax-model-server:v1.1.0 \
  --sax_cell="/sax/test" \
  --port=10001 \
  --platform_chip=tpuv5e \
  --platform_topology='4'

model 13b

Konfigurasi untuk LLaMA13BFP16TPUv5e tidak ada di lm_cloud.py. Tujuan langkah-langkah berikut menunjukkan cara mengupdate lm_cloud.py dan melakukan commit image Docker baru.

  1. Mulai server model:

    sudo docker run --privileged \
      -it \
      -d \
      --rm \
      --network host \
      --name "sax-model-server" \
      --env SAX_ROOT=gs://${GSBUCKET}/sax-root \
      us-docker.pkg.dev/cloud-tpu-images/inference/sax-model-server:v1.1.0 \
      --sax_cell="/sax/test" \
      --port=10001 \
      --platform_chip=tpuv5e \
      --platform_topology='8'
    
  2. Hubungkan ke container Docker menggunakan SSH:

    sudo docker exec -it sax-model-server bash
    
  3. Instal Vim di image Docker:

    $ apt update
    $ apt install vim
    
  4. Buka file saxml/server/pax/lm/params/lm_cloud.py. Telusuri LLaMA13B. Anda akan melihat kode berikut:

    @servable_model_registry.register
    @quantization.for_transformer(quantize_on_the_fly=False)
    class LLaMA13B(BaseLLaMA):
      """13B model on a A100-40GB.
    
      April 12, 2023
      Latency = 5.06s with 128 decoded tokens. 38ms per output token.
      """
    
      NUM_LAYERS = 40
      VOCAB_SIZE = 32000
      DIMS_PER_HEAD = 128
      NUM_HEADS = 40
      MODEL_DIMS = 5120
      HIDDEN_DIMS = 13824
      ICI_MESH_SHAPE = [1, 1, 1]
    
      @property
      def test_mode(self) -> bool:
        return True
    
  5. Beri komentar atau hapus baris yang diawali dengan @quantization. Setelahnya ubah, file akan terlihat seperti berikut:

    @servable_model_registry.register
    class LLaMA13B(BaseLLaMA):
      """13B model on a A100-40GB.
    
      April 12, 2023
      Latency = 5.06s with 128 decoded tokens. 38ms per output token.
      """
    
      NUM_LAYERS = 40
      VOCAB_SIZE = 32000
      DIMS_PER_HEAD = 128
      NUM_HEADS = 40
      MODEL_DIMS = 5120
      HIDDEN_DIMS = 13824
      ICI_MESH_SHAPE = [1, 1, 1]
    
      @property
      def test_mode(self) -> bool:
        return True
    
  6. Tambahkan kode berikut untuk mendukung konfigurasi TPU.

    @servable_model_registry.register
    class LLaMA13BFP16TPUv5e(LLaMA13B):
    """13B model on TPU v5e-8.
    
    """
    
    BATCH_SIZE = [1]
    BUCKET_KEYS = [128]
    MAX_DECODE_STEPS = [32]
    ENABLE_GENERATE_STREAM = False
    
    ICI_MESH_SHAPE = [1, 1, 8]
    
    @property
    def test_mode(self) -> bool:
      return False
    
  7. Tutup sesi SSH container Docker:

    exit
    
  8. Commit perubahan ke image Docker baru:

    sudo docker commit sax-model-server sax-model-server:v1.1.0-mod
    
  9. Pastikan image Docker baru telah dibuat:

    sudo docker images
    

    Anda dapat memublikasikan image Docker ke Artifact Registry project, tetapi akan dilanjutkan dengan image lokal.

  10. Hentikan server model. Tutorial lainnya akan menggunakan model yang diperbarui server tertentu.

    sudo docker stop sax-model-server
    
  11. Mulai server model menggunakan image Docker yang diupdate. Pastikan untuk menentukan nama gambar yang diperbarui, sax-model-server:v1.1.0-mod:

    sudo docker run --privileged \
      -it \
      -d \
      --rm \
      --network host \
      --name "sax-model-server" \
      --env SAX_ROOT=gs://${GSBUCKET}/sax-root \
      sax-model-server:v1.1.0-mod \
      --sax_cell="/sax/test" \
      --port=10001 \
      --platform_chip=tpuv5e \
      --platform_topology='8'
    

Model 70B

Hubungkan ke TPU Anda menggunakan SSH, lalu mulai server model:

gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
 --project ${PROJECT_ID} \
 --zone ${ZONE} \
 --worker=all \
 --command="
   gcloud auth configure-docker \
     us-docker.pkg.dev
   # Pull SAX model server image
   sudo docker pull us-docker.pkg.dev/cloud-tpu-images/inference/sax-model-server:v1.1.0
   # Run model server
   sudo docker run \
     --privileged  \
     -it \
     -d \
     --rm \
     --network host \
     --name "sax-model-server"  \
     --env SAX_ROOT=gs://${GSBUCKET}/sax-root \
     us-docker.pkg.dev/cloud-tpu-images/inference/sax-model-server:v1.1.0 \
     --sax_cell="/sax/test" \
     --port=10001 \
     --platform_chip=tpuv5e \
     --platform_topology='16'
"

Memeriksa log

Periksa log server model untuk memastikan bahwa server model telah dimulai dengan benar:

docker logs -f sax-model-server

Jika server model tidak dimulai, lihat bagian Pemecahan masalah untuk informasi selengkapnya.

Untuk model 70B, ulangi langkah-langkah berikut untuk setiap TPU VM:

  1. Hubungkan ke TPU menggunakan SSH:

    gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
      --project ${PROJECT_ID} \
      --zone ${ZONE} \
      --worker=WORKER_NUMBER

    WORKER_NUMBER adalah indeks berbasis 0, yang menunjukkan VM TPU mana yang ingin Anda hubungkan.

  2. Periksa log:

    sudo docker logs -f sax-model-server
    

    Tiga VM TPU harus menunjukkan bahwa VM tersebut telah terhubung ke instance lain:

    I1117 00:16:07.196594 140613973207936 multi_host_sync.py:152] Received SPMD peer address 10.182.0.3:10001
    I1117 00:16:07.197484 140613973207936 multi_host_sync.py:152] Received SPMD peer address 10.182.0.87:10001
    I1117 00:16:07.199437 140613973207936 multi_host_sync.py:152] Received SPMD peer address 10.182.0.13:10001
    

    Salah satu VM TPU harus memiliki log yang menunjukkan server model yang memulai:

    I1115 04:01:29.479170 139974275995200 model_service_base.py:867] Started joining SAX cell /sax/test
    ERROR: logging before flag.Parse: I1115 04:01:31.479794       1 location.go:141] Calling Join due to address update
    ERROR: logging before flag.Parse: I1115 04:01:31.814721       1 location.go:155] Joined 10.182.0.44:10000
    

Memublikasikan model

SAX dilengkapi dengan alat command line bernama saxutil, yang menyederhanakan berinteraksi dengan server model SAX. Dalam tutorial ini, Anda menggunakan saxutil untuk memublikasikan model. Untuk mengetahui daftar lengkap perintah saxutil, lihat README Saxml file.

  1. Ubah ke direktori tempat Anda meng-clone repositori GitHub Saxml:

    cd  saxml
    
  2. Untuk model 70B, hubungkan ke server konversi Anda:

    gcloud compute ssh ${CONV_SERVER_NAME} \
      --project ${PROJECT_ID} \
      --zone ${ZONE}
    
  3. Instal Bazel:

    sudo apt-get install bazel
    
  4. Tetapkan alias untuk menjalankan saxutil dengan bucket Cloud Storage Anda:

    alias saxutil='bazel run saxml/bin:saxutil -- --sax_root=gs://${GSBUCKET}/sax-root'
    
  5. Publikasikan model menggunakan saxutil. Proses ini memerlukan waktu sekitar 10 menit di TPU v5litepod-8.

    saxutil --sax_root=gs://${GSBUCKET}/sax-root publish '/sax/test/MODEL' \
        saxml.server.pax.lm.params.lm_cloud.PARAMETERS \
        gs://${GSBUCKET}/sax_models/llama2/SAX_LLAMA2_DIR/checkpoint_00000000/ \
        1

    Ganti variabel berikut:

    Ukuran model Nilai
    7 M MODEL: llama27b
    PARAMETERS: saxml.server.pax.lm.params.lm_cloud.LLaMA7BFP16TPUv5e
    SAX_LLAMA2_DIR: saxml_llama27b
    13 M MODEL: llama213b
    PARAMETERS: saxml.server.pax.lm.params.lm_cloud.LLaMA13BFP16TPUv5e
    SAX_LLAMA2_DIR: saxml_llama213b
    70 M MODEL: llama270b
    PARAMETERS: saxml.server.pax.lm.params.lm_cloud.LLaMA70BFP16TPUv5e
    SAX_LLAMA2_DIR: saxml_llama270b

Menguji deployment

Untuk memeriksa apakah deployment berhasil, gunakan perintah saxutil ls:

saxutil ls /sax/test/MODEL

Deployment yang sukses harus memiliki jumlah replika yang lebih besar dari nol dan terlihat mirip dengan berikut ini:

INFO: Running command line: bazel-bin/saxml/bin/saxutil_/saxutil '--sax_rootmgs://sax-admin2/sax-root is /sax/test/1lama27b

+----------+-------------------------------------------------------+-----------------------------------------------------------------------+---------------+---------------------------+
| MODEL    | MODEL PATH                                            | CHECKPOINT PATH                                                       | # OF REPLICAS | (SELECTED) REPLICAADDRESS |
+----------+-------------------------------------------------------+-----------------------------------------------------------------------+---------------+---------------------------+
| llama27b | saxml.server.pax.lm.params.lm_cloud.LLaMA7BFP16TPUv5e | gs://${MODEL_BUCKET}/sax_models/llama2/7b/pax_7B/checkpoint_00000000/ | 1             | 10.182.0.28:10001         |
+----------+-------------------------------------------------------+-----------------------------------------------------------------------+---------------+---------------------------+

Log Docker untuk server model akan mirip dengan berikut ini:

I1114 17:31:03.586631 140003787142720 model_service_base.py:532] Successfully loaded model for key: /sax/test/llama27b

INFO: Running command line: bazel-bin/saxml/bin/saxutil_/saxutil '--sax_rootmgs://sax-admin2/sax-root is /sax/test/1lama27b

Memecahkan masalah

Jika deployment gagal, periksa log server model:

sudo docker logs -f sax-model-server

Agar deployment berhasil, Anda akan melihat output berikut:

Successfully loaded model for key: /sax/test/llama27b

Jika log tidak menunjukkan bahwa model di-deploy, periksa model dan jalur ke checkpoint model Anda.

Buat respons

Anda dapat menggunakan alat saxutil untuk membuat respons terhadap perintah.

Membuat tanggapan atas pertanyaan:

saxutil lm.generate -extra="temperature:0.2"  /sax/test/MODEL "Q: Who is Harry Potter's mother? A:"

Outputnya akan mirip dengan berikut ini:

INFO: Running command line: bazel-bin/saxml/bin/saxutil_/saxutil '--sax_rootmgs://sax-admin2/sax-root' lm.generate /sax/test/llama27b 'Q: Who is Harry Potter's mother? A: `
+-------------------------------+------------+
| GENERATE                      | SCORE      |
+-------------------------------+------------+
| 1. Harry Potter's mother is   | -20.214787 |
| Lily Evans. 2. Harry Potter's |            |
| mother is Petunia Evans       |            |
| (Dursley).                    |            |
+-------------------------------+------------+

Berinteraksi dengan model dari klien

Repositori SAX berisi klien yang dapat Anda gunakan untuk berinteraksi dengan sel SAX. Klien tersedia di C++, Python, dan Go. Contoh berikut menunjukkan cara membangun klien Python.

  1. Bangun klien Python:

    bazel build saxml/client/python:sax.cc --compile_one_dependency
    
  2. Tambahkan klien ke PYTHONPATH. Contoh ini mengasumsikan bahwa Anda memiliki saxml di direktori {i>home<i} Anda:

    export PYTHONPATH=${PYTHONPATH}:$HOME/saxml/bazel-bin/saxml/client/python/
    
  3. Berinteraksi dengan SAX dari shell Python:

    $ python3
    Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sax
    >>>
    

Berinteraksi dengan model dari endpoint HTTP

Untuk berinteraksi dengan model dari endpoint HTTP, buat klien HTTP:

  1. Membuat VM Compute Engine:

    export PROJECT_ID=PROJECT_ID
    export ZONE=ZONE
    export HTTP_SERVER_NAME=HTTP_SERVER_NAME
    export SERVICE_ACCOUNT=SERVICE_ACCOUNT
    export MACHINE_TYPE=e2-standard-8
    gcloud compute instances create $HTTP_SERVER_NAME --project=$PROJECT_ID --zone=$ZONE \
      --machine-type=$MACHINE_TYPE \
      --network-interface=network-tier=PREMIUM,stack-type=IPV4_ONLY,subnet=default \
      --maintenance-policy=MIGRATE --provisioning-model=STANDARD \
      --service-account=$SERVICE_ACCOUNT \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-server,https-server \
      --create-disk=auto-delete=yes,boot=yes,device-name=$HTTP_SERVER_NAME,image=projects/ml-images/global/images/c0-deeplearning-common-cpu-v20230925-debian-10,mode=rw,size=500,type=projects/$PROJECT_ID/zones/$ZONE/diskTypes/pd-balanced \
      --no-shielded-secure-boot \
      --shielded-vtpm \
      --shielded-integrity-monitoring \
      --labels=goog-ec-src=vm_add-gcloud \
      --reservation-affinity=any
  2. Hubungkan ke VM Compute Engine menggunakan SSH:

    gcloud compute ssh $HTTP_SERVER_NAME --project=$PROJECT_ID --zone=$ZONE
    
  3. Buat clone AI di repositori GitHub GKE:

    git clone https://github.com/GoogleCloudPlatform/ai-on-gke.git
    
  4. Ubah ke direktori server HTTP:

    cd ai-on-gke/tools/saxml-on-gke/httpserver
    
  5. Bangun file Docker:

    docker build -f Dockerfile -t sax-http .
    
  6. Jalankan server HTTP:

    docker run -e SAX_ROOT=gs://${GSBUCKET}/sax-root -p 8888:8888 -it sax-http
    

Uji endpoint dari komputer lokal atau server lain dengan akses ke port 8888 menggunakan perintah berikut:

  1. Ekspor variabel lingkungan untuk alamat IP dan port server Anda:

    export LB_IP=HTTP_SERVER_EXTERNAL_IP
    export PORT=8888
  2. Tetapkan payload JSON, yang berisi model dan kueri:

    json_payload=$(cat  << EOF
    {
      "model": "/sax/test/MODEL",
      "query": "Example query"
    }
    EOF
    )
  3. Kirim permintaan:

    curl --request POST --header "Content-type: application/json" -s $LB_IP:$PORT/generate --data "$json_payload"
    

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.

Setelah selesai mengikuti tutorial ini, ikuti langkah-langkah berikut untuk membersihkan Google Cloud Platform.

  1. Menghapus Cloud TPU.

    $ gcloud compute tpus tpu-vm delete $TPU_NAME  --zone $ZONE
  2. Hapus instance Compute Engine Anda, jika Anda sudah membuatnya.

    gcloud compute instances delete INSTANCE_NAME
  3. Hapus bucket Cloud Storage beserta isinya.

    gcloud storage rm --recursive gs://BUCKET_NAME

Langkah selanjutnya