Este tutorial disponibiliza o modelo Qwen/Qwen2-7B-Instruct usando o framework de veiculação de TPU vLLM em uma VM de TPU v6e.
Objetivos
- Prepare o ambiente.
- Execute o vLLM com o Qwen2-7B-Instruct.
- Envie uma solicitação de inferência.
- Execute uma carga de trabalho de comparação.
- Fazer a limpeza.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Antes de seguir este tutorial, siga as instruções na página Configurar o ambiente do Cloud TPU. As instruções orientam você pelas etapas necessárias para criar um Google Cloud projeto e configurá-lo para usar o Cloud TPU. Também é possível usar um projeto Google Cloud atual. Se você escolher essa opção, pule a etapa de criação do Google Cloud projeto e comece com a configuração do ambiente para usar o Cloud TPU.
Você precisa de um token de acesso do Hugging Face para usar este tutorial. Inscreva-se em uma conta sem custo financeiro no Hugging Face. Depois de ter uma conta, gere um token de acesso:
- Na página "Bem-vindo ao Hugging Face", clique no avatar da sua conta e selecione Tokens de acesso.
- Na página Tokens de acesso, clique em Criar novo token.
- Selecione o tipo de token Ler e insira um nome para ele.
- Seu token de acesso será exibido. Salve o token em um local seguro.
Configurar o ambiente
Crie uma VM de Cloud TPU v6e usando a API de recursos em fila. Para o qwen2-7b-instruct, recomendamos o uso de uma 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-tpuv6eVerifique se a VM de TPU está pronta.
gcloud compute tpus queued-resources describe $QR_ID \ --project $PROJECT_ID \ --zone $ZONEPor exemplo, quando o status é
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-zoneConecte-se à VM de TPU.
gcloud compute tpus tpu-vm ssh $TPU_NAME \ --project $PROJECT_ID \ --zone $ZONE
Executar o vLLM com o Qwen2-7B-instruct
Defina seu token do Hugging Face.
export HF_TOKEN="YOUR_HF_TOKEN"Na VM de TPU, execute o contêiner do Docker vLLM no modo desanexado e inicie o servidor vLLM. Esse comando usa um tamanho de memória compartilhada de 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 Qwen/Qwen2-7B-Instruct \ --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_LENVerifique os registros do servidor para confirmar se ele está em execução.
sudo docker logs -f "${CONTAINER_NAME}"Quando o servidor vLLM estiver em execução, você verá uma saída semelhante a esta. Depois que a saída for exibida, pressione
CTRL+Cpara retornar ao terminal.(APIServer pid=7) INFO: Started server process [7] (APIServer pid=7) INFO: Waiting for application startup. (APIServer pid=7) INFO: Application startup complete.
Enviar uma solicitação de inferência
Depois que o servidor vLLM estiver em execução, você poderá enviar solicitações para a API. Para mais informações, consulte a documentação de referência da API vLLM.
Envie uma solicitação de teste para o servidor usando
curl.sudo docker exec -ti "${CONTAINER_NAME}" \ 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 }'
A resposta é retornada no formato JSON.
Executar uma carga de trabalho de comparação
É possível executar comparações com o servidor em execução no segundo terminal.
No contêiner, instale a biblioteca
datasets.sudo docker exec -it "${CONTAINER_NAME}" pip install datasetsNo contêiner, execute o comando
vllm bench serve.sudo docker exec -it "${CONTAINER_NAME}" \ vllm bench serve \ --backend vllm \ --model "Qwen/Qwen2-7B-Instruct" \ --dataset-name random \ --num-prompts 1000 \ --seed 100
Os resultados da comparação são semelhantes a estes:
============ 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
==================================================
Fazer a limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
- No terminal, digite exit para se desconectar da VM de TPU.
Excluir os recursos
É possível excluir o projeto, o que vai excluir todos os recursos, ou manter o projeto e excluir os recursos.
Excluir o projeto
Para excluir o Google Cloud projeto e todos os recursos associados, execute:
gcloud projects delete $PROJECT_ID
Excluir recursos de TPU
Exclua os recursos do Cloud TPU. O comando a seguir exclui a solicitação de recurso em fila e a VM de TPU usando o parâmetro --force.
gcloud alpha compute tpus queued-resources delete $QR_ID \
--project=$PROJECT_ID \
--zone=$ZONE \
--force
A seguir
- Saiba mais sobre o vLLM no Cloud TPU.
- Saiba mais sobre Cloud TPU.