이 튜토리얼에서는 멀티 호스트 Cloud TPU v6e (Trillium) 가속기와 vLLM TorchTPU를 사용하여 Google Kubernetes Engine (GKE)에서 멀티모달 전문가 혼합 모델 Gemma 4 26B (google/gemma-4-26B-A4B-it)를 배포하고 서빙하는 방법을 보여줍니다.
워크로드가 2x4 토폴로지의 여러 TPU 호스트에 걸쳐 있으므로 Kubernetes LeaderWorkerSet API와 Ray를 사용하여 8개의 TPU 칩에서 분산 텐서 병렬 추론을 조정합니다.
목표
- GKE 클러스터와 멀티 호스트 TPU v6e 노드 풀을 설정합니다.
- LeaderWorkerSet를 사용하여 멀티 호스트 vLLM 서버를 배포합니다.
- 텍스트 및 멀티모달 추론 요청을 전송합니다.
- 서빙 벤치마크 워크로드를 실행합니다.
- 삭제
비용
이 문서에서는 비용이 청구될 수 있는Google Cloud구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
이 튜토리얼을 사용하려면 Hugging Face 액세스 토큰이 필요합니다. Hugging Face에서 무료 계정에 가입할 수 있습니다. 계정이 있으면 액세스 토큰을 생성합니다.
- Hugging Face에 오신 것을 환영합니다 페이지에서 계정 아바타를 클릭하고 액세스 토큰을 선택합니다.
- 액세스 토큰 페이지에서 새 토큰 만들기를 클릭합니다.
- 읽기 토큰 유형을 선택하고 토큰 이름을 입력합니다.
- 액세스 토큰이 표시됩니다. 토큰을 안전한 장소에 저장합니다.
튜토리얼을 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- Kubernetes Engine 관리자(
roles/container.admin) - Compute 관리자 (
roles/compute.admin) - 서비스 계정 사용자(
roles/iam.serviceAccountUser)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
환경 변수 설정
환경 변수 설정:
다음을 바꿉니다.
YOUR_PROJECT_ID: Google Cloud프로젝트의 IDYOUR_RESERVATION_NAME: 예약의 이름입니다.YOUR_REGION: GKE 클러스터를 배포하려는 리전입니다.YOUR_ZONE: TPU v6e 노드 풀을 배포하려는 영역입니다.YOUR_CLUSTER_NAME: GKE 클러스터의 이름입니다.YOUR_HF_TOKEN: Hugging Face 액세스 토큰입니다.YOUR_VLLM_TPU_IMAGE: 사용할 vLLM TPU 이미지입니다. 공개 이미지는 vLLM TorchTPU 저장소를 참조하세요.
GKE 클러스터 만들기
GKE 클러스터를 만들고 멀티 호스트 TPU v6e 노드 풀을 연결하려면 다음 단계를 완료합니다.
기본 노드 풀에
e2-standard-4노드를 사용하고2x4토폴로지 (총 8개의 TPU 칩)로 정렬된ct6e-standard-4t노드 2개가 있는 TPU v6e 노드 풀을 사용하는 리전 GKE 클러스터를 만듭니다. 기본 GKE 머신 유형 (e2-medium)은 LeaderWorkerSet 컨트롤러에 충분한 CPU 리소스를 제공하지 않으므로 이 튜토리얼에서는e2-standard-4을 지정합니다.특정 예약을 사용하는 대신 다음 플래그를 전달하여 스팟 용량 또는 Flex-start VM을 사용하여 노드 풀을 만들 수도 있습니다.
- 스팟 VM:
--reservation-affinity및--reservation플래그를--spot로 바꿔 스팟 용량을 사용합니다. 스팟 용량을 사용하는 인스턴스는 노드 풀이 생성된 후 생성되는 데 시간이 걸릴 수 있으며 워크로드 실행 중에 선점될 수 있습니다. 포드를 만드는 데 시간이 걸리거나 실행 중에 워크로드가 중지되는 경우 이 문제가 원인일 수 있습니다. - Flex-start VM:
--flex-start를 전달하여 Flex-start 소비 옵션을 사용하여 노드 풀을 프로비저닝합니다. 자세한 내용은 TPU 및 Flex-start VM으로 소규모 일괄 워크로드 실행을 참조하세요.
- 스팟 VM:
클러스터와 통신하도록
kubectl사용자 인증 정보를 구성합니다.
사용자 인증 정보 구성 및 LeaderWorkerSet 설치
멀티 호스트 배포를 위해 클러스터를 준비하려면 다음 단계를 완료하세요.
Hugging Face 토큰을 내보내고
hf-secret이라는 Kubernetes 보안 비밀을 만듭니다.클러스터에 LeaderWorkerSet CustomResourceDefinition 및 컨트롤러를 설치합니다.
멀티 호스트 vLLM 서버 배포
워크로드 매니페스트 (gemma4-26b-multihost-v6e-2x4.yaml)는 두 가지 리소스를 정의합니다.
2x4TPU 슬라이스의 두ct6e-standard-4t노드에 예약된size: 2(리더 포드 1개와 워커 포드 1개)가 있는 LeaderWorkerSet 리소스 (vllm-tpu-gemma4-26b) 각 포드는--tensor-parallel-size=8,--kv-cache-dtype=fp8,--max-model-len=5248,--max-num-seqs=128플래그를 사용하여 Ray 및 vLLM OpenAI API 서버를 시작하기 전에 Hugging Face에서 인메모리 볼륨으로google/gemma-4-26B-A4B-it모델 가중치를 미리 가져오는 InitContainer를 실행합니다.- 리더 포드에서 포트
8000을 노출하는 ClusterIP 서비스 (vllm-service)
워크로드를 배포하고 모니터링하려면 다음 단계를 완료합니다.
GitHub에서 LeaderWorkerSet 매니페스트를 가져옵니다.
또는 다음 콘텐츠가 포함된
gemma4-26b-multihost-v6e-2x4.yaml파일을 만듭니다.LeaderWorkerSet 매니페스트를 적용합니다.
애플리케이션 시작이 완료될 때까지 리더 포드 상태와 로그를 모니터링합니다.
포드가 모델 가중치를 미리 가져오고, 8개의 TPU 칩 모두에서 2노드 Ray 클러스터를 형성하고, 모델을 컴파일하는 동안 초기 서비스 시작에는 약 9분이 걸립니다. 로그에
Application startup complete가 보고될 때까지 기다린 후 트래픽을 전송합니다.두 번째 터미널 세션에서 로컬 포트
8000을vllm-service에 전달합니다.이 터미널 세션에서 포트 전달을 실행 중인 상태로 둡니다.
추론 요청 전송
첫 번째 터미널 세션으로 돌아가 텍스트 및 멀티모달 채팅 완료 요청을 모두 사용하여 배포된 모델을 테스트합니다.
/v1/chat/completions엔드포인트에 텍스트 채팅 완성 요청을 보냅니다.이미지 URL과 텍스트 프롬프트가 모두 포함된 멀티모달 요청을 전송합니다.
벤치마크 워크로드 실행
배포된 모델을 벤치마킹하려면 다음 명령어를 실행합니다.
삭제
이 튜토리얼에서 사용한 리소스에 대한 추가 비용이 Google Cloud 계정에 청구되지 않도록 하려면 Kubernetes 워크로드, TPU 노드 풀, GKE 클러스터를 삭제합니다.
vLLM 서버 배포 및 Hugging Face 보안 비밀을 삭제합니다.
TPU v6e 노드 풀과 GKE 클러스터를 삭제합니다.
두 번째 터미널 세션으로 돌아가 포트 전달을 중지합니다.
다음 단계
- vLLM TorchTPU에 대해 자세히 알아보세요.
- Cloud TPU 자세히 알아보기