Menyajikan Qwen2-7B-Instruct dengan vLLM di TPU

Tutorial ini menyajikan model Qwen/Qwen2-7B-Instruct menggunakan framework penyajian TPU vLLM di VM TPU v6e.

Tujuan

  1. Siapkan lingkungan Anda.
  2. Jalankan vLLM dengan Qwen2-7B-Instruct.
  3. Kirim permintaan inferensi.
  4. Jalankan workload tolok ukur.
  5. Jalankan 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 mempelajari tutorial ini, ikuti petunjuk di halaman Menyiapkan lingkungan Cloud TPU. Petunjuk ini memandu Anda melalui langkah-langkah yang diperlukan untuk membuat project Google Clouddan mengonfigurasinya agar dapat menggunakan Cloud TPU. Anda juga dapat menggunakan project Google Cloud yang sudah ada. Jika memilih untuk melakukannya, Anda dapat melewati langkah membuat Google Cloud project dan memulai dengan Menyiapkan lingkungan untuk menggunakan Cloud TPU.

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

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

Menyiapkan lingkungan Anda

  1. Buat VM Cloud TPU v6e menggunakan API resource dalam antrean. Untuk qwen2-7b-instruct, sebaiknya gunakan TPU v6e-1.

    export PROJECT_ID=YOUR_PROJECT_ID
    export TPU_NAME=qwen2-7b-instruct-tutorial
    export ZONE=us-east5-a
    export QR_ID=qwen2-7b-instruct-qr
    
    gcloud alpha compute tpus queued-resources create $QR_ID \
     --node-id $TPU_NAME \
     --project $PROJECT_ID \
     --zone $ZONE \
     --accelerator-type v6e-1 \
     --runtime-version v2-alpha-tpuv6e
    
  2. Periksa untuk memastikan VM TPU Anda sudah siap.

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

    Setelah VM TPU Anda dibuat, status permintaan resource yang diantrekan akan ditetapkan ke ACTIVE. Contoh:

    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
    
  3. Hubungkan ke VM TPU.

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

Menjalankan vLLM dengan Qwen2-7B-instruct

  1. Di dalam VM TPU, jalankan container Docker vLLM. Perintah ini menggunakan ukuran memori bersama sebesar 10 GB.

      export DOCKER_URI=vllm/vllm-tpu:latest
    
      sudo docker run -it --rm --name $USER-vllm --privileged --net=host \
        -v /dev/shm:/dev/shm \
        --shm-size 10gb \
        -p 8000:8000 \
        --entrypoint /bin/bash ${DOCKER_URI}
    
  2. Di dalam container, setel token Hugging Face Anda. Ganti YOUR_HF_TOKEN dengan token Hugging Face Anda.

    export HF_HOME=/dev/shm
    export HF_TOKEN=YOUR_HF_TOKEN
    
  3. Mulai server vLLM menggunakan perintah vllm serve.

    export MAX_MODEL_LEN=4096
    export TP=1 # number of chips
    
    vllm serve Qwen/Qwen2-7B-Instruct \
        --seed 42 \
        --disable-log-requests \
        --gpu-memory-utilization 0.98 \
        --max-num-batched-tokens 1024 \
        --max-num-seqs 128 \
        --tensor-parallel-size $TP \
        --max-model-len $MAX_MODEL_LEN
    

    Saat server vLLM berjalan, Anda akan melihat output seperti berikut:

    (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 server tersebut dari shell baru.

  1. Buka shell baru dan hubungkan ke VM TPU Anda.

      export PROJECT_ID=YOUR_PROJECT_ID
      export TPU_NAME=qwen2-7b-instruct-tutorial
      export ZONE=us-east5-a
    
      gcloud compute tpus tpu-vm ssh $TPU_NAME \
        --project $PROJECT_ID \
        --zone=$ZONE
    
  2. Buka shell ke container Docker yang sedang berjalan.

      sudo docker exec -it $USER-vllm /bin/bash
    
  3. Kirim permintaan pengujian ke server menggunakan curl.

      curl http://localhost:8000/v1/completions \
        -H "Content-Type: application/json" \
        -d '{
            "model": "Qwen/Qwen2-7B-Instruct",
            "prompt": "The future of AI is",
            "max_tokens": 200,
            "temperature": 0
          }'
    

Respons ditampilkan dalam format JSON.

Menjalankan workload benchmark

Anda dapat menjalankan tolok ukur terhadap server yang sedang berjalan dari terminal kedua.

  1. Di dalam container, instal library datasets.

    pip install datasets
    
  2. Jalankan perintah vllm bench serve.

    export HF_HOME=/dev/shm
    cd /workspace/vllm
    
    vllm bench serve \
        --backend vllm \
        --model "Qwen/Qwen2-7B-Instruct"  \
        --dataset-name random \
        --num-prompts 1000 \
        --seed 100
    

Hasil benchmark akan terlihat seperti berikut:

============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  45.35
Total input tokens:                      1024000
Total generated tokens:                  126848
Request throughput (req/s):              22.05
Output token throughput (tok/s):         2797.15
Peak output token throughput (tok/s):    4258.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          25377.57
---------------Time to First Token----------------
Mean TTFT (ms):                          21332.46
Median TTFT (ms):                        21330.37
P99 TTFT (ms):                           42436.47
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          37.36
Median TPOT (ms):                        38.56
P99 TPOT (ms):                           38.69
---------------Inter-token Latency----------------
Mean ITL (ms):                           37.35
Median ITL (ms):                         38.55
P99 ITL (ms):                            39.43
==================================================

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 shell kedua, ketik exit untuk keluar dari container vLLM.
  2. Di shell kedua, ketik perintah exit untuk menutup terminal.
  3. Di shell pertama, ketik Ctrl+C untuk menghentikan server vLLM.
  4. Di shell pertama, ketik exit untuk keluar dari container vLLM.
  5. Di shell pertama, 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 Google Cloud project dan semua resource terkait, jalankan:

    gcloud projects delete $PROJECT_ID

Menghapus resource TPU

Hapus resource Cloud TPU Anda. Perintah berikut menghapus permintaan resource yang diantrekan dan VM TPU menggunakan parameter --force.

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

Langkah berikutnya