Menyajikan Llama-3.1-8B dengan vLLM di TPU

Tutorial ini menunjukkan cara menyajikan model meta-llama/Llama-3.1-8B menggunakan framework penyajian TPU vLLM pada VM TPU v6e.

Tujuan

  1. Menyiapkan lingkungan Anda.
  2. Menjalankan vLLM dengan Llama-3.1-8B.
  3. Mengirim permintaan inferensi.
  4. Menjalankan workload benchmark.
  5. Menjalankan pembersihan.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Sebelum memulai

Sebelum mengikuti tutorial ini, ikuti petunjuk di halaman Menyiapkan lingkungan Cloud TPU. Petunjuk ini akan memandu Anda melalui langkah-langkah yang diperlukan untuk membuat Google Cloud project dan mengonfigurasinya agar dapat menggunakan Cloud TPU. Anda juga dapat menggunakan project yang sudah ada Google Cloud . Jika memilih untuk melakukannya, Anda dapat melewati langkah membuat a Google Cloud project dan mulai dengan Menyiapkan lingkungan Anda untuk menggunakan Cloud TPU.

Anda memerlukan token akses Hugging Face untuk menggunakan tutorial ini. Anda dapat mendaftar akun gratis di Hugging Face. Setelah memiliki akun, buat token akses:

  1. Di halaman Welcome to Hugging Face, klik avatar akun Anda dan pilih Access tokens.
  2. Di halaman Access Tokens, klik Create new token.
  3. Pilih jenis token Read dan masukkan nama untuk token Anda.
  4. Token akses Anda akan ditampilkan. Simpan token di tempat yang aman.

Menyiapkan lingkungan Anda

Resource dalam Antrean

Buat VM Cloud TPU v6e menggunakan API resource dalam antrean. Untuk Llama-3.1-8B, sebaiknya gunakan TPU v6e-1.

export PROJECT_ID=<PROJECT>
export TPU_NAME=<TPU_NAME>
export ZONE=<ZONE>
export QR_ID=<QR_ID>
export TPU_TYPE=<TPU_TYPE>

Tetapkan variabel:

  • PROJECT - Nama project Anda.
  • TPU_NAME - Nama mesin VM TPU yang akan Anda buat.
  • ZONE - Zona cloud tempat Anda membuat VM baru.
  • TPU_TYPE - Jenis VM TPU yang Anda buat. Misalnya: v6e-1 atau v6e-4.
  • QR_ID - Nama Resource dalam Antrean yang Anda buat.

Buat permintaan Resource dalam Antrean:

gcloud alpha compute tpus queued-resources create $QR_ID \
 --node-id $TPU_NAME \
 --project $PROJECT_ID \
 --zone $ZONE \
 --accelerator-type $TPU_TYPE \
 --runtime-version v2-alpha-tpuv6e

Periksa untuk memastikan VM TPU Anda sudah siap.

gcloud compute tpus queued-resources describe $QR_ID \
  --project $PROJECT_ID \
  --zone $ZONE

Misalnya, saat statusnya ACTIVE:

name: projects/your-project-id/locations/your-zone/queuedResources/your-queued-resource-id
  state:
  state: ACTIVE
  tpu:
  nodeSpec:
  - node:
      acceleratorType: v6e-1
      bootDisk: {}
      networkConfig:
          enableExternalIps: true
      queuedResource: projects/your-project-number/locations/your-zone/queuedResources/your-queued-resource-id
      runtimeVersion: v2-alpha-tpuv6e
      schedulingConfig: {}
      serviceAccount: {}
      shieldedInstanceConfig: {}
      useTpuVm: true
      nodeId: your-node-id
      parent: projects/your-project-number/locations/your-zone

Reservasi

Buat VM Cloud TPU v6e menggunakan reservasi. Untuk Llama-3.1-8B, sebaiknya gunakan TPU v6e-1. Mulailah dengan menetapkan variabel lingkungan:

export PROJECT_ID="YOUR_PROJECT_ID"
export TPU_NAME="TPU_MACHINE_NAME"
export ZONE="ZONE_NAME"
export TPU_TYPE=v6e-8
export HF_TOKEN="YOUR_HF_TOKEN"
export RESERVATION="RESERVATION_NAME"

Tetapkan variabel:

  • PROJECT - Nama project Anda.
  • TPU_NAME - Nama mesin VM TPU yang akan Anda buat.
  • ZONE - Zona cloud tempat Anda membuat VM baru.
  • TPU_TYPE - Jenis VM TPU yang Anda buat. Misalnya: v6e-1 atau v6e-4.
  • RESERVATION - Nama reservasi dengan TPU Anda.

Buat VM TPU menggunakan reservasi Anda:

gcloud alpha compute tpus tpu-vm create $TPU_NAME \
    --zone=$ZONE \
    --project $PROJECT_ID \
    --accelerator-type=$TPU_TYPE \
    --version=v2-alpha-tpuv6e \
    --provisioning-model=reservation-bound \
    --reservation=$RESERVATION

Hubungkan ke VM TPU.

gcloud compute tpus tpu-vm ssh $TPU_NAME \
  --project $PROJECT_ID \
  --zone $ZONE

Menjalankan vLLM dengan Llama-3.1-8B

  1. Tetapkan variabel nama model dan token Hugging Face Anda.

      export HF_TOKEN="YOUR_HF_TOKEN"
      export MODEL_NAME="meta-llama/Llama-3.1-8B"
    
  2. Di dalam VM TPU, jalankan container Docker vLLM dalam mode terpisah dan mulai server vLLM. Perintah ini menggunakan ukuran memori bersama sebesar 10 GB.

    export DOCKER_URI="vllm/vllm-tpu:v0.18.0"
    export CONTAINER_NAME="${USER}-vllm"
    export MAX_MODEL_LEN=4096
    export TP=1 # number of chips
    
    sudo docker run -d --name "${CONTAINER_NAME}" \
        --privileged --net=host \
        -v /dev/shm:/dev/shm \
        --shm-size 10gb \
        -e "HF_HOME=/dev/shm" \
        -e "HF_TOKEN=${HF_TOKEN}" \
        -p 8000:8000 "${DOCKER_URI}" \
            vllm serve ${MODEL_NAME} \
                --seed 42 \
                --gpu-memory-utilization 0.98 \
                --max-num-batched-tokens 1024 \
                --max-num-seqs 128 \
                --tensor-parallel-size $TP \
                --max-model-len $MAX_MODEL_LEN
  3. Periksa log server untuk mengonfirmasi bahwa server sedang berjalan.

    sudo docker logs -f "${CONTAINER_NAME}"

    Saat server vLLM berjalan, Anda akan melihat output yang menyerupai berikut ini. Setelah output ditampilkan, tekan CTRL+C untuk kembali ke terminal.

    (APIServer pid=7) INFO:     Started server process [7]
    (APIServer pid=7) INFO:     Waiting for application startup.
    (APIServer pid=7) INFO:     Application startup complete.
    

Mengirim permintaan inferensi

Setelah server vLLM berjalan, Anda dapat mengirim permintaan ke API. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API vLLM.

  1. Kirim permintaan pengujian ke server menggunakan curl.

    sudo docker exec "${CONTAINER_NAME}" \
      curl http://localhost:8000/v1/completions \
        -H "Content-Type: application/json" \
        -d '{
            "prompt": "The future of AI is",
            "max_tokens": 200,
            "temperature": 0
          }'

Respons akan ditampilkan dalam format JSON.

Menjalankan workload benchmark

Anda dapat menjalankan benchmark terhadap server yang berjalan dari terminal kedua.

  1. Di dalam container, instal library datasets.

    sudo docker exec "${CONTAINER_NAME}" pip install datasets
  2. Di dalam container, jalankan perintah vllm bench serve.

    sudo docker exec "${CONTAINER_NAME}" \
        vllm bench serve \
            --backend vllm \
            --dataset-name random \
            --num-prompts 1000 \
            --seed 100

Hasil benchmark akan muncul sebagai berikut:

============ Serving Benchmark Result ============
Successful requests:                     1000
Failed requests:                         0
Benchmark duration (s):                  73.97
Total input tokens:                      1024000
Total generated tokens:                  128000
Request throughput (req/s):              13.52
Output token throughput (tok/s):         1730.38
Peak output token throughput (tok/s):    2522.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          15573.42
---------------Time to First Token----------------
Mean TTFT (ms):                          34834.97
Median TTFT (ms):                        34486.19
P99 TTFT (ms):                           70234.40
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          47.30
Median TPOT (ms):                        48.57
P99 TPOT (ms):                           48.60
---------------Inter-token Latency----------------
Mean ITL (ms):                           47.31
Median ITL (ms):                         53.49
P99 ITL (ms):                            54.58
==================================================

Menjalankan 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.

  1. Di terminal Anda, ketik exit untuk memutuskan koneksi dari VM TPU.

Menghapus resource

Anda dapat menghapus project yang akan menghapus semua resource atau Anda dapat menyimpan project dan menghapus resource.

Menghapus project Anda

Untuk menghapus project Anda Google Cloud dan semua resource terkait, jalankan:

    gcloud projects delete $PROJECT_ID

Menghapus resource TPU

Resource dalam Antrean

Hapus resource Cloud TPU Anda. Perintah berikut akan menghapus permintaan resource dalam antrean dan VM TPU menggunakan parameter --force.

gcloud alpha compute tpus queued-resources delete $QR_ID \
  --project=$PROJECT_ID \
  --zone=$ZONE \
  --force

Reservasi

Hapus VM Cloud TPU Anda. Gunakan perintah berikut untuk menghentikan VM, sehingga TPU akan dikembalikan ke reservasi Anda.

gcloud compute tpus tpu-vm delete $TPU_NAME --zone $ZONE --project $PROJECT_ID --quiet

Langkah berikutnya