이 튜토리얼에서는 v6e TPU VM에서 vLLM TPU 서빙 프레임워크를 사용하여 Qwen/Qwen2-7B-Instruct 모델을 서빙합니다.
목표
- 환경을 설정합니다.
- Qwen2-7B-Instruct로 vLLM을 실행합니다.
- 추론 요청을 보냅니다.
- 벤치마크 워크로드를 실행합니다.
- 삭제
비용
이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
이 튜토리얼을 진행하기 전에 Cloud TPU 환경 설정 페이지의 안내를 따르세요. 이 안내에서는 Google Cloud프로젝트를 만들고 Cloud TPU를 사용하도록 구성하는 데 필요한 단계를 안내합니다. 기존Google Cloud 프로젝트를 사용할 수도 있습니다. 원하는 경우Google Cloud 프로젝트 만들기 단계를 건너뛰고 Cloud TPU를 사용하도록 환경 설정부터 시작할 수 있습니다.
이 튜토리얼을 사용하려면 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 $ZONETPU VM이 생성되면 큐에 추가된 리소스 요청의 상태가
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 실행
TPU VM 내에서 vLLM Docker 컨테이너를 실행합니다. 이 명령어는 공유 메모리 크기 10GB를 사용합니다.
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}컨테이너 내에서 Hugging Face 토큰을 설정합니다.
YOUR_HF_TOKEN을 Hugging Face 토큰으로 바꿉니다.export HF_HOME=/dev/shm export HF_TOKEN=YOUR_HF_TOKENvllm serve명령어를 사용하여 vLLM 서버를 시작합니다.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_LENvLLM 서버가 실행되면 다음과 같은 출력이 표시됩니다.
(APIServer pid=7) INFO: Started server process [7] (APIServer pid=7) INFO: Waiting for application startup. (APIServer pid=7) INFO: Application startup complete.
추론 요청 보내기
vLLM 서버가 실행되면 새 셸에서 요청을 보낼 수 있습니다.
새 셸을 열고 TPU VM에 연결합니다.
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실행 중인 Docker 컨테이너에서 셸을 엽니다.
sudo docker exec -it $USER-vllm /bin/bashcurl을 사용하여 서버에 테스트 요청을 보냅니다.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라이브러리를 설치합니다.pip install datasetsvllm 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
벤치마크 결과는 다음과 같습니다.
============ 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를 입력하여 vLLM 컨테이너를 종료합니다.
- 두 번째 셸에서 exit 명령어를 입력하여 터미널을 닫습니다.
- 첫 번째 셸에서 Ctrl+C를 입력하여 vLLM 서버를 중지합니다.
- 첫 번째 셸에서 exit를 입력하여 vLLM 컨테이너를 종료합니다.
- 첫 번째 셸에서 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
다음 단계
- Cloud TPU의 vLLM에 대해 자세히 알아보세요.
- Cloud TPU 자세히 알아보기