이 Codelab 정보
1. 소개
개요
이 Codelab에서는 Cloud Run 작업을 사용하여 Cloud Run 작업 GPU를 기반으로 하는 Meta의 Llama 3.2-1b LLM 및 vLLM을 사용하여 일괄 추론을 실행합니다. Cloud Run 볼륨 마운트를 사용하여 결과를 Cloud Storage에 직접 씁니다.
학습할 내용
- Cloud Run 작업 GPU를 사용하여 일괄 추론을 실행하는 방법
- Cloud Run 볼륨 마운트를 사용하여 Cloud Storage에 쓰는 방법
2. 시작하기 전에
API 사용 설정
이 Codelab을 사용하기 전에 다음을 실행하여 다음 API를 사용 설정합니다.
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
GPU 할당량
지원되는 리전의 할당량 상향 요청 Cloud Run Admin API의 할당량은 nvidia_l4_gpu_allocation_no_zonal_redundancy
입니다.
참고: 새 프로젝트를 사용하는 경우 API를 사용 설정하고 이 페이지에 할당량이 표시될 때까지 몇 분 정도 걸릴 수 있습니다.
Hugging Face
이 Codelab에서는 Hugging Face에 호스팅된 모델을 사용합니다. 이 모델을 가져오려면 '읽기' 권한이 있는 Hugging Face 사용자 액세스 토큰을 요청합니다. 이 주소를 나중에 YOUR_HF_TOKEN
로 참조합니다.
또한 모델을 사용하려면 사용 약관에 동의해야 합니다. https://huggingface.co/meta-llama/Llama-3.2-1B
3. 설정 및 요구사항
이 섹션에는 다음 리소스를 설정하는 방법에 관한 안내가 포함되어 있습니다.
- IAM 서비스 계정 및 연결된 IAM 권한
- Hugging Face 토큰을 저장할 Secret Manager 보안 비밀
- 추론 결과를 저장할 Cloud Storage 버킷입니다.
필요한 리소스를 설정하려면 다음 단계를 따르세요.
- 이 Codelab의 환경 변수를 설정합니다.
export PROJECT_ID=<your_project_id>
export REGION=<your_region>
export HF_TOKEN=<YOUR_HF_TOKEN>
export SERVICE_ACCOUNT=inference-service-account
export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
export SECRET_ID=hugging-face-token
export BUCKET_NAME=inference-codelab-${PROJECT_ID} - 다음을 실행하여 서비스 계정을 만듭니다.
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
--display-name="Service account for batch inference codelab" - Secret Manager를 사용하여 Hugging Face 액세스 토큰을 저장합니다.
gcloud secrets create $SECRET_ID \
--replication-policy="automatic"
printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=- - 서비스 계정에 Secret Manager 보안 비밀 접근자 역할을 부여합니다.
gcloud secrets add-iam-policy-binding $SECRET_ID \
--member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role='roles/secretmanager.secretAccessor' - 세부 조정된 모델을 호스팅할 버킷을 만듭니다.
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- 서비스 계정에 버킷에 대한 액세스 권한을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role=roles/storage.objectAdmin - 컨테이너 이미지를 저장할 Artifact Registry 저장소를 만듭니다. 이전에 프로젝트에서 Cloud Run 소스 배포를 사용한 적이 있다면 이 단계를 건너뜁니다.
gcloud artifacts repositories create cloud-run-source-deploy \
--repository-format=docker \
--location=$REGION \
--project=$PROJECT_ID
4. Cloud Run 작업 만들기
이 섹션에서는 다음을 실행하는 코드를 만듭니다.
- Hugging Face에서 Llama 모델을 가져옵니다.
- 모델에서 일괄 추론을 실행합니다. 이 프로세스에서 작업은 단일 L4 GPU를 사용합니다.
- 결과를 로컬 디스크에 씁니다. 이는 볼륨 마운트를 통해 Cloud Storage에 작성됩니다.
Cloud Run 작업과 Dockerfile을 만들려면 다음 단계를 따르세요.
- 미세 조정 작업 코드를 호스팅할 디렉터리를 만듭니다.
mkdir codelab-inference-job
cd codelab-inference-job main.py
라는 파일을 만듭니다.# SPDX-License-Identifier: Apache-2.0
from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
"Cloud Run is",
"The future of AI is",
"The capital of Germany is",
"python as a programming language is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# Create an LLM.
llm = LLM(model="meta-llama/Llama-3.2-1B")
# Generate texts from the prompts. The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
outputs = llm.generate(prompts, sampling_params)
# Save the outputs to disk
with open("/results/output.txt", "w") as f:
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n")
print(f"Wrote {len(outputs)} to disk.")Dockerfile
생성:FROM python:3.12
ADD main.py .
RUN python -m pip install --upgrade pip setuptools
RUN pip install vllm
CMD ["python", "./main.py"]
5. 작업 배포 및 실행
이 단계에서는 Cloud Run 소스 배포를 사용하여 Cloud Run 작업을 만든 다음 실행합니다. 이 단계에는 결과를 저장하는 Cloud Run 볼륨 마운트 플래그도 포함됩니다.
- Cloud Run 작업을 만듭니다.
이 명령어는 소스에서 이미지를 빌드하고 작업을 배포합니다. 완료되기까지 다소 시간이 걸립니다.gcloud beta run jobs deploy inference-job \
--region $REGION \
--source . \
--gpu=1 \
--set-secrets HF_TOKEN=${SECRET_ID}:latest \
--add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \
--add-volume-mount volume=results,mount-path=/results \
--service-account $SERVICE_ACCOUNT_EMAIL - 작업 실행:
작업을 완료하는 데 몇 분 정도 걸립니다. 마지막 명령어의 출력에 제공된 링크를 사용하여 상태를 확인할 수 있습니다.gcloud run jobs execute inference-job --region $REGION --async
성공 확인
작업이 성공적으로 실행되었는지 확인하려면 마지막 명령어의 출력과 같이 작업 로그를 확인합니다.
Cloud Storage 버킷에서 결과를 확인합니다.
Console에서 다음을 수행합니다.
- Cloud Storage로 이동합니다.
inference-codelab
로 시작하는 버킷을 선택합니다.output.txt
를 선택합니다.- 인증된 URL을 클릭하여 브라우저에서 콘텐츠를 봅니다.
파일의 콘텐츠는 4개의 프롬프트와 그 출력이어야 합니다.