Inferensi vLLM di TPU v6e

Tutorial ini menunjukkan cara menjalankan inferensi vLLM di TPU v6e. Bagian ini juga menunjukkan cara menjalankan skrip benchmark untuk model Meta Llama-3.1 8B.

Untuk mulai menggunakan vLLM di TPU v6e, lihat panduan memulai vLLM.

Jika Anda menggunakan GKE, lihat juga tutorial GKE.

Sebelum memulai

Anda harus menandatangani perjanjian izin untuk menggunakan keluarga model Llama3 di repo HuggingFace. Buka https://huggingface.co/meta-llama/Llama-3.1-8B, isi perjanjian izin, dan tunggu hingga Anda disetujui.

Bersiap untuk menyediakan TPU v6e dengan 4 chip:

  1. Ikuti panduan Menyiapkan lingkungan Cloud TPU untuk memastikan Anda memiliki akses yang sesuai untuk menggunakan Cloud TPU.

  2. Buat identitas layanan untuk VM TPU.

    gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
  3. Buat akun layanan TPU dan berikan akses ke layanan Google Cloud .

    Akun layanan memungkinkan layanan Google Cloud TPU mengakses layanan Google Cloudlainnya. Akun layanan yang dikelola pengguna direkomendasikan. Anda dapat membuat akun layanan dari Konsol Google Cloud atau melalui perintah gcloud.

    Buat akun layanan menggunakan alat command line gcloud:

    gcloud iam service-accounts create your-service-account-name \
    --description="your-sa-description" \
    --display-name="your-sa-display-name"
    export SERVICE_ACCOUNT_NAME=your-service-account-name

    Buat akun layanan dari konsol Google Cloud:

    1. Buka halaman Akun Layanan di konsol Google Cloud.
    2. Klik Create service account.
    3. Masukkan nama akun layanan.
    4. (Opsional) Masukkan deskripsi akun layanan.
    5. Klik Buat dan lanjutkan.
    6. Pilih peran yang ingin Anda berikan ke akun layanan.
    7. Klik Lanjutkan.
    8. (Opsional) Tentukan pengguna atau grup yang dapat mengelola akun layanan.
    9. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

    Setelah membuat akun layanan, ikuti langkah-langkah berikut untuk memberikan peran akun layanan.

    Peran berikut diperlukan:

    • TPU Admin: Diperlukan untuk membuat TPU
    • Storage Admin: Diperlukan untuk mengakses Cloud Storage
    • Logs Writer
    • Monitoring Metric Writer: Diperlukan untuk menulis metrik ke Cloud Monitoring

    Administrator harus memberi Anda roles/resourcemanager.projectIamAdmin agar Anda dapat menetapkan peran IAM kepada pengguna. Pengguna dengan peran Project IAM Admin roles/resourcemanager.projectIamAdmin juga dapat memberikan peran ini.

    Gunakan perintah gcloud berikut untuk menambahkan peran akun layanan:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/tpu.admin
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/storage.admin
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/logging.logWriter
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/monitoring.metricWriter

    Anda juga dapat menetapkan peran menggunakan konsol Google Cloud.

    Dari konsol Google Cloud, pilih peran berikut:

    1. Pilih akun layanan Anda, lalu klik Tambahkan Akun Utama.
    2. Di kolom New Principals, masukkan alamat email akun layanan Anda.
    3. Di drop-down Select a role, telusuri peran (misalnya, Storage Admin) dan pilih peran tersebut.
    4. Klik Simpan.
  4. Lakukan autentikasi dengan Google Cloud dan konfigurasikan project dan zona default untuk Google Cloud CLI.

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE

Kapasitas aman

Jika Anda sudah siap untuk mendapatkan kapasitas TPU, tinjau halaman kuota untuk mempelajari sistem Kuota Cloud. Jika ada pertanyaan tambahan tentang cara mendapatkan kapasitas, hubungi tim penjualan atau akun Cloud TPU Anda.

Menyediakan lingkungan Cloud TPU

Anda dapat menyediakan VM TPU dengan GKE, dengan GKE dan XPK, atau sebagai resource dalam antrean.

Prasyarat

  • Tutorial ini telah diuji dengan Python 3.10 atau yang lebih baru.
  • Pastikan project Anda memiliki kuota TPUS_PER_TPU_FAMILY yang cukup, yang menentukan jumlah maksimum chip yang dapat Anda akses dalam projectGoogle Cloud .
  • Pastikan project Anda memiliki cukup kuota TPU untuk:
    • Kuota VM TPU
    • Kuota Alamat IP
    • Kuota Hyperdisk Balanced
  • Izin project pengguna

Menyediakan TPU v6e

   gcloud alpha compute tpus queued-resources create QUEUED_RESOURCE_ID \
      --node-id TPU_NAME \
       --project PROJECT_ID \
       --zone ZONE \
       --accelerator-type v6e-4 \
       --runtime-version v2-alpha-tpuv6e \
       --service-account SERVICE_ACCOUNT

Deskripsi flag perintah

Variabel Deskripsi
NODE_ID ID TPU yang ditetapkan pengguna yang dibuat saat permintaan resource dalam antrean dialokasikan.
PROJECT_ID Google Cloud nama project. Gunakan project yang ada atau buat project baru.>
ZONA Lihat dokumen Region dan zona TPU untuk zona yang didukung.
ACCELERATOR_TYPE Lihat dokumentasi Jenis Akselerator untuk jenis akselerator yang didukung.
RUNTIME_VERSION v2-alpha-tpuv6e
SERVICE_ACCOUNT Ini adalah alamat email untuk akun layanan yang dapat Anda temukan di konsol Google Cloud -> IAM -> Service Accounts

Misalnya: tpu-service-account@<your_project_ID>.iam.gserviceaccount.com.com

Gunakan perintah list atau describe untuk membuat kueri status resource yang diantrekan.

   gcloud alpha compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
      --project ${PROJECT_ID} --zone ${ZONE}

Untuk mengetahui daftar lengkap status permintaan resource yang diantrekan, lihat dokumentasi Resource yang Diantrekan.

Menghubungkan ke TPU menggunakan SSH

  gcloud compute tpus tpu-vm ssh TPU_NAME

Menginstal dependensi

  1. Buat direktori untuk Miniconda:

    mkdir -p ~/miniconda3
  2. Download skrip penginstal Miniconda:

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
  3. Instal Miniconda:

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
  4. Hapus skrip penginstal Miniconda:

    rm -rf ~/miniconda3/miniconda.sh
  5. Tambahkan Miniconda ke variabel PATH Anda:

    export PATH="$HOME/miniconda3/bin:$PATH"
  6. Muat ulang ~/.bashrc untuk menerapkan perubahan pada variabel PATH:

    source ~/.bashrc
  7. Buat lingkungan Conda:

    conda create -n vllm python=3.11 -y
    conda activate vllm
  8. Clone repositori vLLM dan buka direktori vLLM:

    git clone https://github.com/vllm-project/vllm.git && cd vllm
    
  9. Bersihkan paket torch dan torch-xla yang ada:

    pip uninstall torch torch-xla -y
    
  10. Instal dependensi build lainnya:

    pip install -r requirements-tpu.txt
    VLLM_TARGET_DEVICE="tpu" python setup.py develop
    sudo apt-get install libopenblas-base libopenmpi-dev libomp-dev
    

Mendapatkan akses ke model

Buat token Hugging Face baru jika Anda belum memilikinya:

  1. Klik Profil Anda > Setelan > Token Akses.
  2. Pilih New Token.
  3. Tentukan Nama pilihan Anda dan Peran dengan setidaknya izin Read.
  4. Pilih Buat token.
  5. Salin token yang dihasilkan ke papan klip Anda, tetapkan sebagai variabel lingkungan, lalu autentikasi dengan huggingface-cli:

    export TOKEN=YOUR_TOKEN
    git config --global credential.helper store
    huggingface-cli login --token $TOKEN

Mendownload data tolok ukur

  1. Buat direktori /data dan download set data ShareGPT dari Hugging Face.

    mkdir ~/data && cd ~/data
    wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
    

Meluncurkan server vLLM

Perintah berikut mendownload bobot model dari Hugging Face Model Hub ke direktori /tmp VM TPU, mengompilasi berbagai bentuk input terlebih dahulu, dan menulis kompilasi model ke ~/.cache/vllm/xla_cache.

Untuk mengetahui detail selengkapnya, lihat dokumen vLLM.

   cd ~/vllm
   vllm serve "meta-llama/Meta-Llama-3.1-8B" --download_dir /tmp --num-scheduler-steps 4 --swap-space 16 --disable-log-requests --tensor_parallel_size=4 --max-model-len=2048 &> serve.log &

Menjalankan benchmark vLLM

Jalankan skrip benchmark vLLM:

   python benchmarks/benchmark_serving.py \
       --backend vllm \
       --model "meta-llama/Meta-Llama-3.1-8B"  \
       --dataset-name sharegpt \
       --dataset-path ~/data/ShareGPT_V3_unfiltered_cleaned_split.json  \
       --num-prompts 1000

Pembersihan

Hapus TPU:

gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \
    --project PROJECT_ID \
    --zone ZONE \
    --force \
    --async