AI 플랫폼에서 컨테이너 사용

이 가이드에서는 AI Platform에서 작업을 실행하도록 커스텀 컨테이너를 빌드하는 방법을 설명합니다.

컨테이너 사용과 관련된 단계

다음은 커스텀 컨테이너를 사용한 학습을 위한 기본 프로세스를 보여주는 단계입니다.

  1. Google Cloud Platform 프로젝트와 로컬 환경을 설정합니다.
  2. 커스텀 컨테이너를 만듭니다.
    1. AI Platform에서 사용할 컨테이너를 설정하고 학습 애플리케이션에 필요한 종속 항목을 포함하는 Dockerfile을 작성합니다.
    2. Docker 컨테이너를 로컬에서 빌드 및 테스트합니다.
  3. 컨테이너를 Container Registry로 내보냅니다.
  4. 커스텀 컨테이너에서 실행하는 학습 작업을 제출합니다.

초매개변수 미세 조정 또는 GPU를 사용하려면 약간의 조정이 필요하지만 기본 프로세스는 동일합니다.

시작하기 전에

Cloud Shell을 사용하거나 Cloud SDK가 설치된 다른 환경을 사용합니다.

다음 단계에 따라 GCP 계정을 설정하고, 필요한 API를 사용 설정하고, Cloud SDK를 설치 및 활성화합니다.

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. GCP Console에서 리소스 관리 페이지로 이동하고 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. AI Platform ("Cloud Machine Learning Engine"), Compute Engine and Container Registry APIs를 사용 설정합니다.

    APIs 사용 설정

  5. Cloud SDK 설치 및 초기화.
  6. gcloud beta를 설치합니다.
    gcloud components install beta
  7. Docker를 설치합니다.

    Ubuntu나 Debian과 같은 Linux 기반 운영체제를 사용하는 경우, sudo를 사용하지 않고 Docker를 실행할 수 있도록 사용자 이름을 docker 그룹에 추가합니다.

    sudo usermod -a -G docker ${USER}

    자신을 docker 그룹에 추가하고 나면 시스템을 다시 시작해야 할 수도 있습니다.

  8. Docker를 엽니다. Docker가 실행 중인지 확인하려면 다음 Docker 명령어를 실행합니다. 현재 시간과 날짜가 반환됩니다.
    docker run busybox date
  9. Docker의 사용자 인증 정보 도우미로 gcloud를 사용합니다.
    gcloud auth configure-docker
  10. 선택사항: GPU를 사용하여 컨테이너를 로컬에서 실행하려면 nvidia-docker를 설치합니다.

커스텀 컨테이너 만들기

커스텀 컨테이너를 만들려면 Dockerfile을 작성하여 학습 작업에 사용할 Docker 이미지를 설정해야 합니다. 그런 다음 이미지를 로컬에서 빌드 및 테스트합니다.

AI Platform용 Dockerfile 기본사항

커스텀 컨테이너 생성 시 Dockerfile을 사용하여 이미지를 빌드하는 데 필요한 모든 명령어를 지정합니다.

이 섹션에서는 Dockerfile의 일반적인 예를 살펴봅니다. 각 커스텀 컨테이너 가이드 및 관련 샘플에서 특정 예를 확인할 수 있습니다.

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

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

필요에 따라 Dockerfile에 추가 논리를 포함할 수 있습니다. Dockerfiles 작성 방법 및 각 특정 명령어에 대한 자세한 내용을 보려면 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"] 학습 코드를 실행할 진입점을 설정합니다. ["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"]

Docker 컨테이너를 로컬에서 빌드 및 테스트

  1. 환경 변수를 사용하여 올바른 이미지 URI를 만든 후 Docker 이미지를 빌드합니다. -t 플래그는 원하는 IMAGE_REPO_NAMEIMAGE_TAG로 이미지의 이름과 태그를 지정합니다. 이미지에 다른 이름과 태그를 선택할 수 있습니다.

    export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    export IMAGE_REPO_NAME=example_custom_container_image
    export IMAGE_TAG=example_image_tag
    export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG
    
    docker build -f Dockerfile -t $IMAGE_URI ./
    
  2. 로컬에서 실행하여 이미지를 확인합니다. --epochs 플래그가 트레이너 스크립트에 전달됩니다.

    docker run $IMAGE_URI --epochs 1
    

컨테이너를 Container Registry로 내보내기

로컬 실행이 작동하면 프로젝트의 Container Registry로 컨테이너를 내보낼 수 있습니다.

컨테이너를 Container Registry로 내보냅니다. 아직 실행하지 않았다면 먼저 gcloud auth configure-docker를 실행합니다.

docker push $IMAGE_URI

Container Registry 권한 관리

AI Platform에서 학습을 실행하는 데 사용하는 동일한 프로젝트 내에서 Container Registry 이미지를 사용하는 경우 이 가이드의 설명처럼 권한을 추가로 구성할 필요가 없으므로 다음 단계로 넘어가면 됩니다.

Container Registry에 대한 액세스 제어는 백그라운드에서 Cloud Storage 버킷을 기반으로 하므로, Container Registry 권한 구성은 Cloud Storage 권한 구성과 매우 유사합니다.

다른 프로젝트의 Container Registry에서 이미지를 가져오려면 AI Platform 서비스 계정에서 다른 프로젝트의 이미지에 액세스할 수 있도록 해야 합니다.

  • Container Registry 권한에 대한 기본 Cloud Storage 버킷을 찾습니다.
  • AI Platform 서비스 계정에 storage.objects.getstorage.objects.list 권한이 포함된 역할(예: 스토리지 객체 뷰어)을 부여합니다.

AI Platform 학습 작업을 제출하는 데 사용 중인 것과 다른 프로젝트로 docker 이미지를 내보내려면 Container Registry 저장소가 있는 프로젝트의 AI Platform 서비스 계정에 이미지 가져오기 액세스 권한을 부여해야 합니다. 서비스 계정은 service-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com 형식이며 IAM 콘솔에서 확인할 수 있습니다.

다음 명령어는 AI Platform 서비스 계정을 별도의 Container Registry 프로젝트에 추가합니다.

export GCR_PROJ_ID=[YOUR-PROJECT-ID-FOR-GCR]
export CMLE_PROJ_NUM=[YOUR-PROJECT-NUMBER-FOR-CMLE-JOB-SUBMISSION]
export \
SVC_ACCT=service-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding $GCR_PROJ_ID \
    --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent

Container Registry에 대한 액세스 제어를 구성하는 방법을 자세히 알아보세요.

학습 작업 제출

gcloud beta를 사용해 AI Platform에 학습 작업을 제출합니다. --master-image-uri 플래그를 사용하여 URI를 Docker 이미지에 전달합니다.

export BUCKET_NAME=custom_containers
export MODEL_DIR=example_model_$(date +%Y%m%d_%H%M%S)

gcloud components install beta

gcloud beta ai-platform jobs submit training $JOB_NAME \
  --region $REGION \
  --master-image-uri $IMAGE_URI \
  -- \
  --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
  --epochs=10

커스텀 컨테이너로 초매개변수 미세 조정

커스텀 컨테이너로 초매개변수를 미세 조정하려면 다음과 같은 조정이 필요합니다.

  • Dockerfile에서 cloudml-hypertune을 설치합니다.
  • 학습 코드에서 다음을 수행합니다.
    • cloudml-hypertune을 사용하고 도우미 함수 report_hyperparameter_tuning_metric을 호출하여 각 시도 결과를 보고합니다.
    • 각 초매개변수에 대한 명령줄 인수를 추가하고 인수 파싱을 argparse와 같은 인수 파서로 처리합니다.
  • 작업 요청에서 HyperparameterSpecTrainingInput 객체에 추가합니다.

초매개변수 미세 조정과 커스텀 컨테이너를 사용한 학습 예시를 참조하세요.

커스텀 컨테이너와 함께 GPU 사용

GPU 학습을 위해서는 커스텀 컨테이너가 몇 가지 특수한 요구사항을 충족해야 합니다. CPU를 사용한 학습에 사용하는 Docker 이미지와 다른 Docker 이미지를 빌드해야 합니다.

  • 컨테이너에 CUDA 도구와 cuDNN을 사전 설치합니다. 이를 처리하는 권장 방법은 nvidia/cuda 이미지를 기본 이미지로 사용하는 것입니다. CUDA 도구와 cuDNN이 사전 설치되어 있고 관련 환경 변수를 올바르게 설정하는 데 유용하기 때문입니다.
  • wget, curl, pip, 학습 애플리케이션에 필요한 기타 종속 항목을 추가로 설치합니다.

GPU를 사용한 학습을 위한 Dockerfile 예를 참조하세요.

커스텀 컨테이너를 사용한 분산 학습

커스텀 컨테이너로 분산 학습 작업을 실행하는 경우, 마스터, 작업자, 매개변수 서버로 사용할 이미지를 하나만 지정할 수 있습니다. 또한 마스터, 작업자, 매개변수 서버에 대해 서로 다른 이미지를 빌드하고 지정할 수도 있습니다. 이 경우 세 가지 이미지 모두에서 종속 항목이 같을 수 있으며 각 이미지 내에서 서로 다른 코드 논리를 실행할 수 있습니다.

코드에서 TF_CONFIGCLUSTER_SPEC 환경 변수를 사용할 수 있습니다. 이런 환경 변수는 클러스터의 전체 구조를 나타내며, AI Platform은 학습 클러스터의 각 노드에서 이 환경 변수를 자동으로 채웁니다. CLUSTER_SPEC에 대해 자세히 알아보세요.

작업을 제출할 때 TrainingInput 객체 내에 또는 gcloud beta ai-platform submit training의 해당 플래그를 통해 이미지를 지정할 수 있습니다.

이 예시에서는 각 유형의 머신(마스터, 작업자, 매개변수 서버)마다 별도의 Dockerfile 세 개를 이미 정의했다고 가정합니다. 그런 다음 이미지의 이름을 지정하고 빌드하고 테스트하고 Container Registry에 내보냅니다. 마지막으로, 클러스터의 머신 구성과 함께 서로 다른 이미지를 지정하는 학습 작업을 제출합니다.

아직 실행하지 않았다면 먼저 gcloud auth configure-docker를 실행합니다.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export BUCKET_NAME=custom_containers
export MASTER_IMAGE_REPO_NAME=master_image_name
export MASTER_IMAGE_TAG=master_tag
export MASTER_IMAGE_URI=gcr.io/$PROJECT_ID/$MASTER_IMAGE_REPO_NAME:$MASTER_IMAGE_TAG
export WORKER_IMAGE_REPO_NAME=worker_image_name
export WORKER_IMAGE_TAG=worker_tag
export WORKER_IMAGE_URI=gcr.io/$PROJECT_ID/$WORKER_IMAGE_REPO_NAME:$WORKER_IMAGE_TAG
export PS_IMAGE_REPO_NAME=ps_image_name
export PS_IMAGE_TAG=ps_tag
export PS_IMAGE_URI=gcr.io/$PROJECT_ID/$PS_IMAGE_REPO_NAME:$PS_IMAGE_TAG
export MODEL_DIR=distributed_example_$(date +%Y%m%d_%H%M%S)
export REGION=us-central1
export JOB_NAME=distributed_container_job_$(date +%Y%m%d_%H%M%S)

docker build -f Dockerfile-master -t $MASTER_IMAGE_URI ./
docker build -f Dockerfile-worker -t $WORKER_IMAGE_URI ./
docker build -f Dockerfile-ps -t $PS_IMAGE_URI ./

docker run $MASTER_IMAGE_URI --epochs 1
docker run $WORKER_IMAGE_URI --epochs 1
docker run $PS_IMAGE_URI --epochs 1

docker push $MASTER_IMAGE_URI
docker push $WORKER_IMAGE_URI
docker push $PS_IMAGE_URI

gcloud components install beta

gcloud beta ai-platform jobs submit training $JOB_NAME \
  --region $REGION \
  --master-machine-type complex_model_m \
  --master-image-uri $MASTER_IMAGE_URI \
  --worker-machine-type complex_model_m \
  --worker-image-uri $WORKER_IMAGE_URI \
  --worker-count 9 \
  --parameter-server-machine-type large_model \
  --parameter-server-image-uri $PS_IMAGE_URI \
  --parameter-server-count 3 \
  -- \
  --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
  --epochs=10

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...