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


Tutorial ini akan memandu Anda:

  • Membuat VM Cloud TPU untuk men-deploy kelompok model bahasa besar (LLM) Llama 2, yang 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 menayangkan model Paxml, JAX, dan PyTorch untuk inferensi. Kode dan dokumentasi untuk SAX ada di repositori Git SAX. Versi stabil saat ini dengan dukungan TPU v5e adalah v1.1.0.

Tentang sel SAX

Sel (atau cluster) SAX 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 untuk berinteraksi.
  • Server model: Server ini menjalankan model Anda. Mereka bertanggung jawab untuk memproses permintaan yang masuk dan menghasilkan respons.

Diagram berikut menunjukkan diagram sel SAX:

Sel SAX dengan server admin dan server
model

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 langsung melalui server HTTP. Diagram berikut menunjukkan cara klien eksternal dapat berinteraksi dengan sel SAX:

Klien eksternal dan endpoint HTTP berinteraksi dengan sel
SAX

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

Tujuan

  • Menyiapkan resource TPU untuk inferensi
  • 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 dalam Menyiapkan lingkungan Cloud TPU.

Membuat TPU

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
    • 70 B: v5litepod-16 atau lebih besar
    ZONE
    Zona tempat Anda ingin membuat 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 alpha 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 sudah aktif:

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

Siapkan node konversi checkpoint

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

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

Model Machine type
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 model 70B, Anda perlu membuat instance Compute Engine dengan ruang 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 menggunakan instance TPU atau Compute Engine sebagai server konversi, siapkan server Anda untuk mengonversi checkpoint Llama 2:

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

    export CONV_SERVER_NAME=$TPU_NAME
    

    Untuk model 70B, tetapkan 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 pada 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. Unduh skrip konversi checkpoint Llama:

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

Unduh beban Llama 2

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

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

Untuk mendownload bobot dari hub Wajah Memeluk, Anda harus menyiapkan token akses pengguna dan meminta akses ke model Llama 2. Untuk meminta akses, ikuti petunjuk di 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. Dapatkan berat Llama2 dari hub Wajah Memeluk:

    1. Instal CLI hub{i> Hugging Face<i}:

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

      cd WEIGHTS_DIRECTORY
      
    3. Unduh 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 Wajah Memeluk 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 bobot model.

  1. Buat direktori untuk menyimpan bobot yang dikonversi:

    sudo mkdir CONVERTED_WEIGHTS
    
  2. Clone repositori GitHub Saxml di direktori tempat Anda memiliki izin baca, tulis, dan 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. Di 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 file saxml/server/pax/lm/params/lm_cloud.py.
    2. Dalam file 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 checkpoint, direktori checkpoint tersebut seharusnya memiliki struktur berikut:

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

Buat file kosong bernama commit_success.txt dan letakkan salinannya di direktori checkpoint_00000000, metadata, dan state. Hal ini memungkinkan SAX mengetahui bahwa checkpoint ini telah sepenuhnya dikonversi 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 sekarang 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 harus menyimpan checkpoint yang dikonversi di bucket Cloud Storage agar 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

Membuat cluster SAX

Untuk membuat cluster SAX, Anda perlu:

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

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 penampung 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 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. Langkah-langkah berikut menunjukkan cara mengupdate lm_cloud.py dan meng-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. Setelah perubahan ini, 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. Keluar dari 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 tutorial ini akan dilanjutkan dengan image lokal.

  10. Hentikan server model. Bagian selanjutnya dari tutorial ini akan menggunakan server model yang telah diupdate.

    sudo docker stop sax-model-server
    
  11. Memulai server model menggunakan image Docker yang diupdate. Pastikan untuk menentukan nama image 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 server model telah dimulai dengan benar:

docker logs -f sax-model-server

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

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

  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 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 lainnya:

    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 dimulai:

    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 yang disebut saxutil, yang menyederhanakan interaksi dengan server model SAX. Dalam tutorial ini, Anda akan menggunakan saxutil untuk memublikasikan model. Untuk daftar lengkap perintah saxutil, lihat file README Saxml.

  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. Setel 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 pada 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 berhasil akan memiliki jumlah replika yang lebih besar dari nol dan terlihat mirip seperti berikut:

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 serupa dengan yang 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 telah di-deploy, periksa konfigurasi model dan jalur ke checkpoint model Anda.

Membuat respons

Anda dapat menggunakan alat saxutil untuk membuat respons terhadap perintah.

Membuat jawaban 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 menyertakan 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 utama:

    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. 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 Anda dari mesin lokal Anda atau server lain yang memiliki akses ke port 8888 menggunakan perintah berikut:

  1. Ekspor variabel lingkungan untuk port dan alamat IP 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. Mengirim permintaan:

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

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.

Setelah menyelesaikan tutorial ini, ikuti langkah-langkah berikut untuk membersihkan resource Anda.

  1. Hapus Cloud TPU Anda.

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

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

    gcloud storage rm --recursive gs://BUCKET_NAME
    

Langkah selanjutnya