Menyajikan 3 model terbuka Llama 3 menggunakan Cloud TPU multi-host di Vertex AI Prediction dengan Saxml

Llama 3 adalah project open source model bahasa (LLM) dari Meta. Panduan ini menunjukkan cara menyalurkan LLM Llama 3 menggunakan multi-host Tensor Processing Unit (TPU) aktif Vertex AI Prediction dengan Saxml.

Dalam panduan ini, Anda akan mengunduh tokenizer model Llama 3 70B dan men-deploynya di Vertex AI Prediction yang menjalankan Saxml di TPU.

Sebelum memulai

Sebaiknya gunakan VM yang dioptimalkan untuk memori M2 untuk mendownload model dan mengonversinya ke Saxml. Hal ini karena model ini proses konversi membutuhkan banyak memori dan mungkin akan gagal jika Anda memilih yang tidak memiliki cukup memori.

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

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Vertex AI and Artifact Registry.

    Mengaktifkan API

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

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API Vertex AI and Artifact Registry.

    Mengaktifkan API

  8. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  9. Ikuti dokumentasi Artifact Registry untuk Menginstal Docker.
  10. Pastikan Anda memiliki kuota yang cukup untuk 16 chip TPU v5e untuk Prediksi Vertex AI.

Tutorial ini mengasumsikan bahwa Anda menggunakan Cloud Shell untuk berinteraksi dengan Google Cloud. Jika Anda ingin menggunakan shell yang berbeda, bukan Cloud Shell, lakukan konfigurasi tambahan berikut:

  1. Menginstal Google Cloud CLI.
  2. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init

Jika Anda menggunakan shell yang berbeda, bukan Cloud Shell untuk model deployment, pastikan versi Google Cloud CLI adalah lebih dari 475.0.0. Anda dapat mengupdate Google Cloud CLI dengan menjalankan Update komponen gcloud perintah.

Jika Anda men-deploy model menggunakan Vertex AI SDK, pastikan Anda memiliki versi 1.50.0 atau yang lebih baru.

Dapatkan akses ke model dan download bobot model

Langkah-langkah berikut adalah untuk instance Vertex AI Workbench yang memiliki VM yang dioptimalkan untuk memori M2. Untuk mengetahui informasi tentang cara mengubah jenis mesin Vertex AI Workbench instance, lihat Mengubah jenis mesin instance Vertex AI Workbench.

  1. Buka halaman Halaman izin model Llama.

  2. Pilih Llama 3, isi formulir izin, lalu setujui persyaratannya, lalu kondisi tertentu.

  3. Periksa kotak masuk Anda untuk menemukan email yang berisi URL yang ditandatangani.

  4. Unduh Skrip download.sh dari GitHub dengan menjalankan perintah berikut:

    wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh
    chmod +x download.sh
    
  5. Untuk mendownload bobot model, jalankan skrip download.sh yang telah Anda didownload dari GitHub.

  6. Jika diminta, masukkan URL yang ditandatangani dari email yang Anda terima di bagian sebelumnya.

  7. Saat diminta mendownload model, masukkan 70B.

Mengonversi bobot model ke format Saxml

  1. Jalankan perintah berikut untuk mendownload Saxml:

    git clone https://github.com/google/saxml.git
    
  2. Jalankan perintah berikut untuk mengonfigurasi lingkungan virtual Python:

    python -m venv .
    source bin/activate
    
  3. Jalankan perintah berikut untuk menginstal dependensi:

    pip install --upgrade pip
    
    pip install paxml
    
    pip install praxis
    
    pip install torch
    
  4. Untuk mengonversi bobot model ke format Saxml, jalankan perintah berikut:

    python3 saxml/saxml/tools/convert_llama_ckpt.py \
        --base PATH_TO_META_LLAMA3 \
        --pax PATH_TO_PAX_LLAMA3 \
        --model-size llama3_70b
    

    Ganti kode berikut:

    • PATH_TO_META_LLAMA3: jalur ke direktori yang berisi bobot model yang didownload
    • PATH_TO_PAX_LLAMA3: jalur ke direktori tempat menyimpan bobot model yang dikonversi

    Model yang dikonversi akan dimasukkan ke dalam Folder $PATH_TO_PAX_LLAMA3/checkpoint_00000000.

  5. Salin file tokenizer dari direktori asli ke subfolder bernama vocabs sebagai berikut:

    cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    
  6. Tambahkan file commit_success.txt kosong di folder $PATH_TO_PAX_LLAMA3 serta subfolder metadata dan state dalam folder tersebut sebagai berikut:

    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt
    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt
    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt
    

    Folder $PATH_TO_PAX_LLAMA3 sekarang berisi folder dan file:

    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt
    $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    

Membuat bucket Cloud Storage

Membuat bucket Cloud Storage untuk menyimpan bobot model yang dikonversi.

  1. Di Cloud Shell, jalankan perintah dengan mengganti PROJECT_ID dengan project ID Anda:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Untuk membuat bucket, jalankan perintah berikut:

    gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
    

    Ganti WEIGHTS_BUCKET_NAME dengan nama yang Anda inginkan yang akan digunakan untuk bucket.

Menyalin bobot model ke bucket Cloud Storage

Untuk menyalin bobot model ke bucket, jalankan perintah berikut:

gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive

Upload model

Container Saxml bawaan tersedia di us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest.

Untuk mengupload resource Model ke Vertex AI Prediction menggunakan bawaan container Saxml, jalankan Perintah gcloud ai models upload sebagai berikut:

gcloud ai models upload \
    --region=LOCATION \
    --display-name=MODEL_DISPLAY_NAME \
    --container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
    --artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
    --container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
    --container-args='--platform_chip=tpuv5e' \
    --container-args='--platform_topology=4x4' \
    --container-args='--ckpt_path_suffix=checkpoint_00000000' \
    --container-deployment-timeout-seconds=2700 \
    --container-ports=8502 \
    --project=PROJECT_ID

Lakukan penggantian berikut:

  • LOCATION: wilayah tempat Anda menggunakan Vertex AI. Perlu diperhatikan bahwa TPU hanya tersedia di us-west1.
  • MODEL_DISPLAY_NAME: nama tampilan yang Anda inginkan untuk model Anda
  • PROJECT_ID: ID project Google Cloud Anda

Membuat endpoint prediksi online

Untuk membuat endpoint, jalankan perintah berikut:

gcloud ai endpoints create \
    --region=LOCATION \
    --display-name=ENDPOINT_DISPLAY_NAME \
    --project=PROJECT_ID

Ganti ENDPOINT_DISPLAY_NAME dengan nama tampilan yang Anda inginkan endpoint Anda.

Men-deploy model ke endpoint

Setelah endpoint siap, deploy model ke endpoint.

Dalam tutorial ini, Anda akan men-deploy model Llama 3 70B yang di-sharding selama 16 detik Chip Cloud TPU v5e menggunakan topologi 4x4. Namun, Anda dapat menentukan berikut ini adalah topologi Cloud TPU multi-host yang didukung:

Jenis Mesin Topologi Jumlah TPU chip Jumlah Host
ct5lp-hightpu-4t 4x4 16 2
ct5lp-hightpu-4t 4x8 32 4
ct5lp-hightpu-4t 8x8 64 8
ct5lp-hightpu-4t 8x16 128 16
ct5lp-hightpu-4t 16x16 256 32

Jika Anda menerapkan model Llama berbeda yang ditentukan dalam Repo GitHub Saxml, pastikan bahwa itu dipartisi agar sesuai dengan jumlah perangkat yang Anda dan Cloud TPU memiliki memori yang cukup untuk memuat model.

Untuk mengetahui informasi tentang cara men-deploy model pada Cloud TPU dengan host tunggal, lihat Men-deploy model.

Untuk mengetahui informasi selengkapnya tentang jenis Cloud TPU v5e, lihat TPU v5e.

  1. Dapatkan ID endpoint untuk endpoint prediksi online:

    ENDPOINT_ID=$(gcloud ai endpoints list \
        --region=LOCATION \
        --filter=display_name=ENDPOINT_NAME \
        --format="value(name)")
    
  2. Dapatkan ID model untuk model Anda:

    MODEL_ID=$(gcloud ai models list \
        --region=LOCATION \
        --filter=display_name=DEPLOYED_MODEL_NAME \
        --format="value(name)")
    
  3. Deploy model ke endpoint:

    gcloud ai endpoints deploy-model $ENDPOINT_ID \
        --region=LOCATION \
        --model=$MODEL_ID \
        --display-name=DEPLOYED_MODEL_NAME \
        --machine-type=ct5lp-hightpu-4t \
        --tpu-topology=4x4 \
        --traffic-split=0=100
    

    Ganti DEPLOYED_MODEL_NAME dengan nama untuk yang di-deploy. Nama ini dapat sama dengan nama tampilan model (MODEL_DISPLAY_NAME).

    Waktu operasi deployment mungkin habis.

    Perintah deploy-model menampilkan ID operasi yang dapat digunakan untuk memeriksa ketika operasi selesai. Anda dapat menanyakan status operasi hingga respons menyertakan "done": true. Gunakan perintah berikut untuk lakukan polling status:

    gcloud ai operations describe \
    --region=LOCATION \
    OPERATION_ID
    

    Ganti OPERATION_ID dengan ID operasi yang ditampilkan oleh perintah sebelumnya.

Mendapatkan prediksi online dari model yang di-deploy

Untuk mendapatkan prediksi online dari endpoint Vertex AI Prediction, jalankan gcloud ai endpoints predict baris perintah.

  1. Jalankan perintah berikut untuk membuat file request.json yang berisi contoh permintaan prediksi:

    cat << EOF > request.json
    {"instances": [{"text_batch": "the distance between Earth and Moon is "}]}
    EOF
    
  2. Untuk mengirim permintaan prediksi online ke endpoint, jalankan perintah berikut berikut:

    gcloud ai endpoints predict $ENDPOINT_ID \
        --project=PROJECT_ID \
        --region=LOCATION \
        --json-request=request.json
    

Pembersihan

Agar tidak menimbulkan Vertex AI lebih lanjut biaya, hapus resource Google Cloud yang Anda buat selama tutorial ini:

  1. Untuk membatalkan deployment model dari endpoint dan menghapus endpoint, jalankan perintah berikut:

    ENDPOINT_ID=$(gcloud ai endpoints list \
       --region=LOCATION \
       --filter=display_name=ENDPOINT_NAME \
       --format="value(name)")
    
    DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \
       --region=LOCATION \
       --format="value(deployedModels.id)")
    
    gcloud ai endpoints undeploy-model $ENDPOINT_ID \
      --region=LOCATION \
      --deployed-model-id=$DEPLOYED_MODEL_ID
    
    gcloud ai endpoints delete $ENDPOINT_ID \
       --region=LOCATION \
       --quiet
    
  2. Untuk menghapus model, jalankan perintah berikut:

    MODEL_ID=$(gcloud ai models list \
       --region=LOCATION \
       --filter=display_name=DEPLOYED_MODEL_NAME \
       --format="value(name)")
    
    gcloud ai models delete $MODEL_ID \
       --region=LOCATION \
       --quiet