Cloud Run 작업에서 일괄 추론을 실행하는 방법

Cloud Run 작업에서 일괄 추론을 실행하는 방법

이 Codelab 정보

subject최종 업데이트: 6월 4, 2025
account_circle작성자: Google 직원

1. 소개

이 Codelab에서는 Cloud Run 작업을 사용하여 Cloud Run 작업 GPU를 기반으로 하는 Meta의 Llama 3.2-1b LLMvLLM을 사용하여 일괄 추론을 실행합니다. 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 버킷입니다.

필요한 리소스를 설정하려면 다음 단계를 따르세요.

  1. 이 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}
  2. 다음을 실행하여 서비스 계정을 만듭니다.
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
  3. Secret Manager를 사용하여 Hugging Face 액세스 토큰을 저장합니다.
    gcloud secrets create $SECRET_ID \
         
    --replication-policy="automatic"

    printf $HF_TOKEN
    | gcloud secrets versions add $SECRET_ID --data-file=-
  4. 서비스 계정에 Secret Manager 보안 비밀 접근자 역할을 부여합니다.
    gcloud secrets add-iam-policy-binding $SECRET_ID \
     
    --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role='roles/secretmanager.secretAccessor'
  5. 세부 조정된 모델을 호스팅할 버킷을 만듭니다.
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
  6. 서비스 계정에 버킷에 대한 액세스 권한을 부여합니다.
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
     
    --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role=roles/storage.objectAdmin
  7. 컨테이너 이미지를 저장할 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을 만들려면 다음 단계를 따르세요.

  1. 미세 조정 작업 코드를 호스팅할 디렉터리를 만듭니다.
    mkdir codelab-inference-job
    cd codelab
    -inference-job
  2. 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.")
  3. 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 볼륨 마운트 플래그도 포함됩니다.

  1. 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
    이 명령어는 소스에서 이미지를 빌드하고 작업을 배포합니다. 완료되기까지 다소 시간이 걸립니다.
  2. 작업 실행:
    gcloud run jobs execute inference-job --region $REGION --async
    작업을 완료하는 데 몇 분 정도 걸립니다. 마지막 명령어의 출력에 제공된 링크를 사용하여 상태를 확인할 수 있습니다.

성공 확인

작업이 성공적으로 실행되었는지 확인하려면 마지막 명령어의 출력과 같이 작업 로그를 확인합니다.

Cloud Storage 버킷에서 결과를 확인합니다.

Console에서 다음을 수행합니다.

  1. Cloud Storage로 이동합니다.
  2. inference-codelab로 시작하는 버킷을 선택합니다.
  3. output.txt를 선택합니다.
  4. 인증된 URL을 클릭하여 브라우저에서 콘텐츠를 봅니다.

파일의 콘텐츠는 4개의 프롬프트와 그 출력이어야 합니다.

6. 축하합니다.

Codelab을 완료했습니다. 축하합니다.

Cloud Run 문서를 검토하는 것이 좋습니다.

학습한 내용

  • Cloud Run 작업 GPU를 사용하여 일괄 추론을 실행하는 방법
  • Cloud Run 볼륨 마운트를 사용하여 Cloud Storage에 쓰는 방법

7. 삭제

Cloud Run 작업을 삭제하려면 Cloud Run Cloud 콘솔(https://console.cloud.google.com/run)로 이동하여 inference-job 작업을 삭제합니다.

전체 프로젝트를 삭제하려면 리소스 관리로 이동하여 2단계에서 만든 프로젝트를 선택하고 삭제를 선택합니다. 프로젝트를 삭제하면 Cloud SDK에서 프로젝트를 변경해야 합니다. gcloud projects list를 실행하여 사용 가능한 모든 프로젝트 목록을 볼 수 있습니다.