이 튜토리얼에서는 v6e TPU VM에서 vLLM TPU 서빙 프레임워크를 사용하여 Qwen/Qwen2-7B-Instruct 모델을 서빙합니다.
목표
- 환경을 설정합니다.
- Qwen2-7B-Instruct로 vLLM을 실행합니다.
- 추론 요청을 보냅니다.
- 벤치마크 워크로드를 실행합니다.
- 정리
비용
이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
이 튜토리얼을 진행하기 전에 Cloud TPU 환경 설정 페이지의 안내를 따르세요. 이 안내에서는 프로젝트를 만들고 Cloud TPU를 사용하도록 구성하는 데 필요한 단계를 안내합니다. Google Cloud 기존 Google Cloud 프로젝트를 사용할 수도 있습니다. 기존 프로젝트를 사용하려면 프로젝트 만들기 단계를 건너뛰고 Cloud TPU를 사용하도록 환경 설정부터 시작하면 됩니다.Google Cloud
이 튜토리얼을 사용하려면 Hugging Face 액세스 토큰이 필요합니다. Hugging Face에서 무료 계정을 등록할 수 있습니다. 계정이 있으면 액세스 토큰을 생성합니다.
- Hugging Face 시작하기 페이지에서 계정 아바타를 클릭하고 액세스 토큰을 선택합니다.
- 액세스 토큰 페이지에서 새 토큰 만들기 를 클릭합니다.
- 읽기 토큰 유형을 선택하고 토큰 이름을 입력합니다.
- 액세스 토큰이 표시됩니다. 토큰을 안전한 곳에 저장합니다.
환경 설정
큐에 추가된 리소스 API를 사용하여 Cloud TPU v6e VM을 만듭니다. qwen2-7b-instruct의 경우 v6e-1 TPU를 사용하는 것이 좋습니다.
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-tpuv6eTPU VM이 준비되었는지 확인합니다.
gcloud compute tpus queued-resources describe $QR_ID \ --project $PROJECT_ID \ --zone $ZONE예를 들어 상태가
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-zoneTPU VM에 연결합니다.
gcloud compute tpus tpu-vm ssh $TPU_NAME \ --project $PROJECT_ID \ --zone $ZONE
Qwen2-7B-instruct로 vLLM 실행
Hugging Face 토큰을 설정합니다.
export HF_TOKEN="YOUR_HF_TOKEN"TPU VM 내에서 분리된 모드로 vLLM Docker 컨테이너를 실행하고 vLLM 서버를 시작합니다. 이 명령어는 공유 메모리 크기 10GB를 사용합니다.
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_LEN서버 로그를 확인하여 실행 중인지 확인합니다.
sudo docker logs -f "${CONTAINER_NAME}"vLLM 서버가 실행 중이면 다음과 유사한 출력이 표시됩니다. 출력이 표시되면
CTRL+C을 눌러 터미널로 돌아갑니다.(APIServer pid=7) INFO: Started server process [7] (APIServer pid=7) INFO: Waiting for application startup. (APIServer pid=7) INFO: Application startup complete.
추론 요청 보내기
vLLM 서버가 실행 중이면 API에 요청을 보낼 수 있습니다. 자세한 내용은 vLLM API 참조 문서를 참조하세요.
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 }'
응답은 JSON 형식으로 반환됩니다.
벤치마크 워크로드 실행
두 번째 터미널에서 실행 중인 서버에 대해 벤치마크를 실행할 수 있습니다.
컨테이너 내에서
datasets라이브러리를 설치합니다.sudo docker exec -it "${CONTAINER_NAME}" pip install datasets컨테이너 내에서
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
벤치마크 결과는 다음과 같습니다.
============ 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
==================================================
정리
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
- 터미널에서 exit를 입력하여 TPU VM 연결을 끊습니다.
리소스 삭제
프로젝트를 삭제하여 모든 리소스를 삭제하거나 프로젝트를 유지하고 리소스를 삭제할 수 있습니다.
프로젝트 삭제
프로젝트와 연결된 모든 리소스를 삭제하려면 다음을 실행합니다. Google Cloud
gcloud projects delete $PROJECT_ID
TPU 리소스 삭제
Cloud TPU 리소스를 삭제합니다. 다음 명령어는 --force 매개변수를 사용하여 큐에 추가된 리소스 요청과 TPU VM을 모두 삭제합니다.
gcloud alpha compute tpus queued-resources delete $QR_ID \
--project=$PROJECT_ID \
--zone=$ZONE \
--force