학습용 커스텀 컨테이너 이미지 만들기

커스텀 컨테이너 이미지를 사용하면 Vertex AI에서 가장 유연하게 학습을 수행할 수 있습니다. 커스텀 컨테이너 이미지를 사용하는 방법과 사전 빌드된 컨테이너로 Python 학습 애플리케이션을 사용하는 방법의 차이점은 학습 코드 요구사항을 참조하세요.

이 가이드에서는 다음 단계를 수행합니다.

  1. 커스텀 컨테이너 만들기:
    1. Vertex AI에서 사용할 컨테이너를 설정하고 학습 애플리케이션에 필요한 종속 항목을 포함하는 Dockerfile 작성
    2. Docker 컨테이너를 로컬에서 빌드 및 실행
  2. 컨테이너 이미지를 Artifact Registry에 푸시

시작하기 전에

Artifact Registry API 저장소를 구성하고 개발 환경에서 Docker를 설정하려면 Docker용 Artifact Registry 빠른 시작를 따르세요. 특히 빠른 시작의 다음 단계를 완료해야 합니다.

  • 시작하기 전에
  • 셸 선택
  • Docker 저장소 만들기
  • 인증 구성

커스텀 컨테이너 이미지 만들기

커스텀 컨테이너 이미지를 만들 때 다음 두 가지 가능한 워크플로를 사용하는 것이 좋습니다.

  • 학습 코드를 작성합니다. 그런 다음 Dockerfile을 직접 작성하지 않고 학습 코드를 기반으로 gcloud beta ai custom-jobs local-run 명령어를 사용하여 커스텀 컨테이너 이미지를 빌드하고 테스트합니다.

    Docker에 대해 잘 모른다면 이 워크플로가 더 간단할 수 있습니다. 이 워크플로를 따르는 경우 이 섹션의 나머지 부분을 건너뛸 수 있습니다.

  • 학습 코드를 작성합니다. 그런 다음 Dockerfile을 작성하고 이를 기반으로 컨테이너 이미지를 빌드합니다. 마지막으로 컨테이너를 로컬에서 테스트합니다.

    이 워크플로에서는 컨테이너 이미지를 원하는 만큼 맞춤설정할 수 있으므로 더 유연합니다.

이 섹션의 나머지 부분에서는 후자 워크플로의 예시를 살펴봅니다.

학습 코드

모든 프로그래밍 언어의 종속 항목을 사용하여 학습 코드를 작성할 수 있습니다. 코드가 학습 코드 요구사항을 충족하는지 확인합니다. 초매개변수 조정, GPU 또는 분산 학습을 사용하려는 경우 해당 문서의 해당 섹션을 읽어보세요. 이 섹션에서는 커스텀 컨테이너에 이 기능을 사용하기 위한 구체적인 고려사항을 설명합니다.

Dockerfile 만들기

Dockerfile을 만들어 컨테이너 이미지를 빌드하는 데 필요한 모든 안내를 지정하세요.

이 섹션에서는 커스텀 학습에 사용할 Dockerfile의 일반적인 예시를 만드는 방법을 설명합니다. 컨테이너 이미지 만들기에 대한 자세한 내용은 Docker 문서의 빠른 시작을 참조하세요.

Vertex AI에서 사용하려면 Dockerfile에 다음 작업을 처리하는 명령어가 포함되어 있어야 합니다.

  • 기본 이미지 선택
  • 추가 종속 항목 설치
  • 학습 코드를 이미지에 복사
  • Vertex AI가 학습 코드를 호출하는 진입점 구성

필요에 따라 Dockerfile에 추가 논리를 포함할 수 있습니다. 각기 해당하는 단계에 대한 상세 설명은 Dockerfile 참조에서 확인하세요.

Dockerfile 명령어 설명 예시
FROM image:tag 기본 이미지와 태그를 지정합니다.

태그가 있는 기본 이미지 예시:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory 후속 명령을 실행할 이미지의 디렉터리를 지정합니다. /root
RUN pip install pkg1 pkg2 pkg3 pip를 사용하여 추가 패키지를 설치합니다.

참고: 기본 이미지에 pip가 없으면 다른 패키지를 설치하기 전에 먼저 설치할 명령어를 포함해야 합니다.

패키지 예시:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.py 학습 애플리케이션용 코드를 이미지에 복사합니다. 학습 애플리케이션 구조에 따라 파일 여러 개가 포함될 수 있습니다.

학습 애플리케이션의 파일 이름 예시:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] 학습 코드를 실행할 진입점을 설정합니다. 커스텀 학습을 시작할 때 ContainerSpec에서 command 필드를 지정하여 이 진입점을 재정의할 수 있습니다. 또한 ContainerSpecargs 필드를 지정하여 진입점에 추가 인수를 제공하고 컨테이너 이미지의 CMD 명령어(있는 경우)를 재정의할 수 있습니다. ["python", "task.py"]

Dockerfile의 논리는 필요에 따라 다를 수 있지만 일반적으로 다음과 유사합니다.

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

컨테이너 이미지 빌드

환경 변수를 사용하여 올바른 이미지 URI를 만든 후 Docker 이미지를 빌드합니다.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}

docker build -f Dockerfile -t ${IMAGE_URI} ./

이 명령어에서 다음 항목을 바꿉니다.

  • REPOSITORY_NAME: 시작하기 전에 섹션에서 만든 Artifact Registry 저장소의 이름입니다.
  • IMAGE_NAME: 선택한 컨테이너 이미지의 이름입니다.
  • IMAGE_TAG: 이 버전의 컨테이너에 선택한 태그입니다.

컨테이너 이미지 이름 지정의 Artifact Registry 요구사항에 대해 자세히 알아보세요.

로컬로 컨테이너 실행(선택사항)

컨테이너 이미지를 로컬에서 실행하여 컨테이너 이미지를 확인하세요. Vertex AI에서 실행할 계획보다 작은 데이터 세트 또는 더 적은 반복에서는 학습 코드를 실행하는 것이 좋습니다. 예를 들어 컨테이너 이미지의 진입점 스크립트에서 --epochs 플래그를 취하여 실행되는 에포크 수를 제어하는 경우 다음 명령어를 실행할 수 있습니다.

docker run ${IMAGE_URI} --epochs 1

컨테이너를 Artifact Registry로 푸시합니다.

로컬 실행이 작동하면 컨테이너를 Artifact Registry에 푸시할 수 있습니다.

먼저 개발 환경에서 아직 실행하지 않았다면 gcloud auth configure-docker us-central1-docker.pkg.dev를 실행합니다. 그러고 나서 다음 명령어를 실행합니다.

docker push ${IMAGE_URI}

Artifact Registry 및 Container Registry 권한

Vertex AI를 사용 중인 동일한 Google Cloud 프로젝트의 Artifact Registry 또는 Container Registry 이미지를 사용하는 경우 권한을 추가로 구성할 필요가 없습니다. 컨테이너 이미지를 사용하는 커스텀 학습 작업을 즉시 만들 수 있습니다.

그러나 Vertex AI를 사용하려는 프로젝트와 다른 Google Cloud 프로젝트의 Artifact Registry 또는 Container Registry로 컨테이너 이미지를 푸시한 경우에는 Vertex AI 프로젝트의 Vertex AI 서비스 에이전트에 다른 프로젝트에서 이미지를 가져올 수 있는 권한을 부여해야 합니다. Vertex AI 서비스 에이전트 및 권한 부여 방법에 대해 자세히 알아보세요.

Artifact Registry

Vertex AI 서비스 에이전트에 Artifact Registry 저장소에 대한 액세스 권한을 부여하는 방법은 저장소별 권한 부여에 대한 Artifact Registry 문서를 참조하세요.

Container Registry

Container Registry에 대한 액세스 제어는 백그라운드에서 Cloud Storage 버킷을 기반으로 이루어집니다. Container Registry 액세스 제어 문서의 권한 부여 섹션에 따라 해당 Cloud Storage 버킷에 대한 스토리지 객체 뷰어 역할(roles/storage.objectViewer)을 Vertex AI 서비스 에이전트에 부여합니다.

다음 단계