Gestisci Qwen3-8B-Base con vLLM su TPU

Questo tutorial mostra come pubblicare il modello Qwen/Qwen3-8B-Base utilizzando il framework di pubblicazione vLLM TPU su una VM v6e TPU.

Obiettivi

  1. Configurare l'ambiente.
  2. Esegui vLLM con Qwen3-8B-Base.
  3. Invia una richiesta di inferenza.
  4. Esegui un carico di lavoro di benchmark.
  5. Eseguire la pulizia.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

Prima di iniziare

Prima di seguire questo tutorial, segui le istruzioni nella pagina Configura l'ambiente Cloud TPU. Le istruzioni ti guidano nei passaggi necessari per creare un progetto Google Cloud e configurarlo per l'utilizzo di Cloud TPU. Puoi anche utilizzare un progettoGoogle Cloud esistente. Se scegli di farlo, puoi saltare il passaggio di creazione di un Google Cloud progetto e iniziare con Configura l'ambiente per utilizzare Cloud TPU.

Per utilizzare questo tutorial, è necessario un token di accesso a Hugging Face. Puoi registrarti per un account senza costi su Hugging Face. Una volta creato un account, genera un token di accesso:

  1. Nella pagina Benvenuto in Hugging Face, fai clic sull'avatar del tuo account e seleziona Token di accesso.
  2. Nella pagina Token di accesso, fai clic su Crea nuovo token.
  3. Seleziona il tipo di token Lettura e inserisci un nome per il token.
  4. Viene visualizzato il token di accesso. Salva il token in un luogo sicuro.

Configura l'ambiente

Risorse in coda

Crea una VM Cloud TPU v6e utilizzando l'API Queued Resources. Per Qwen3-8B-Base, ti consigliamo di utilizzare una 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>

Imposta le variabili:

  • PROJECT: il nome del progetto.
  • TPU_NAME: il nome della macchina VM TPU che creerai.
  • ZONE: la zona cloud in cui creare la nuova VM.
  • TPU_TYPE: il tipo di VM TPU che crei. Ad esempio: v6e-1 o v6e-4.
  • QR_ID: il nome della risorsa in coda che crei.

Crea la richiesta di risorsa in coda:

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

Verifica che la VM TPU sia pronta.

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

Ad esempio, quando lo stato è 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

Prenotazione

Crea una VM Cloud TPU v6e utilizzando una prenotazione. Per Qwen3-8B-Base, ti consigliamo di utilizzare una TPU v6e-1. Inizia impostando le variabili di ambiente:

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"

Imposta le variabili:

  • PROJECT: il nome del progetto.
  • TPU_NAME: il nome della macchina VM TPU che creerai.
  • ZONE: la zona cloud in cui creare la nuova VM.
  • TPU_TYPE: il tipo di VM TPU che crei. Ad esempio: v6e-1 o v6e-4.
  • RESERVATION: il nome della prenotazione con le tue TPU.

Crea la VM TPU utilizzando la prenotazione:

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

Connettiti alla VM TPU.

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

Esegui vLLM con Qwen3-8B-Base

  1. Imposta le variabili del token Hugging Face e del nome del modello.

      export HF_TOKEN="YOUR_HF_TOKEN"
      export MODEL_NAME="Qwen/Qwen3-8B-Base"
    
  2. All'interno della VM TPU, esegui il container Docker vLLM in modalità detached e avvia il server vLLM. Questo comando utilizza una dimensione della memoria condivisa di 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. Controlla i log del server per verificare che sia in esecuzione.

    sudo docker logs -f "${CONTAINER_NAME}"

    Quando il server vLLM è in esecuzione, viene visualizzato un output simile al seguente. Dopo la visualizzazione dell'output, premi CTRL+C per tornare al terminale.

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

Inviare una richiesta di inferenza

Una volta in esecuzione, puoi inviare richieste all'API. Per saperne di più, consulta la documentazione di riferimento dell'API vLLM.

  1. Invia una richiesta di test al server utilizzando 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
          }'

La risposta viene restituita in formato JSON.

Esegui un carico di lavoro di benchmark

Puoi eseguire benchmark sul server in esecuzione dal secondo terminale.

  1. All'interno del contenitore, installa la libreria datasets.

    sudo docker exec "${CONTAINER_NAME}" pip install datasets
  2. All'interno del container, esegui il comando vllm bench serve.

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

I risultati del benchmark vengono visualizzati nel seguente modo:

============ 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
==================================================

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Nel terminale, digita exit per disconnetterti dalla VM TPU.

Eliminare le risorse

Puoi eliminare il progetto, il che comporterà l'eliminazione di tutte le risorse, oppure puoi mantenerlo ed eliminare le risorse.

Elimina il progetto

Per eliminare il tuo progetto Google Cloud e tutte le risorse associate, esegui:

    gcloud projects delete $PROJECT_ID

Elimina risorse TPU

Risorse in coda

Elimina le risorse Cloud TPU. Il comando seguente elimina sia la richiesta di risorse in coda sia la VM TPU utilizzando il parametro --force.

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

Prenotazione

Elimina la VM Cloud TPU. Utilizza il seguente comando per terminare la VM, restituendo le TPU alla tua prenotazione.

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

Passaggi successivi