학습 작업 실행

AI Platform 학습에서는 모델 학습을 비동기(일괄) 서비스로 제공합니다. 이 페이지에서는 명령줄에서 gcloud ai-platform jobs submit training을 실행하거나 projects.jobs.create의 API에 요청을 전송하여 학습 작업을 구성하고 제출하는 방법을 설명합니다.

시작하기 전에

학습 작업을 제출하려면 먼저 애플리케이션을 패키징하고 비정상적인 모든 종속 항목과 해당 패키지를 Cloud Storage 버킷에 업로드해야 합니다. 참고: gcloud 명령줄 도구를 사용하여 작업을 제출하면 같은 단계에서 애플리케이션을 패키징하고 작업을 제출할 수 있습니다.

작업 구성

TrainingInput 리소스의 항목을 포함하는 Job 리소스의 멤버를 설정하여 학습 서비스에 매개변수를 전달합니다.

gcloud 명령줄 도구를 사용하여 학습 작업을 제출하는 경우 다음 작업을 수행할 수 있습니다.

  • 가장 일반적인 학습 매개변수를 gcloud ai-platform jobs submit training 명령어의 플래그로 지정합니다.
  • 나머지 매개변수를 YAML 구성 파일로 전달합니다. 파일 이름은 일반적으로 config.yaml입니다. 구성 파일에는 Job 리소스의 JSON 표현 구조가 반영됩니다. gcloud ai-platform jobs submit training 명령어의 --config 플래그에 구성 파일의 경로를 전달합니다. 따라서 구성 파일의 경로가 config.yaml이면 --config=config.yaml로 설정해야 합니다.

작업 구성 데이터 수집

다음 속성은 작업을 정의하는 데 사용됩니다.

작업 이름(jobId)
작업에 사용할 이름입니다(대소문자가 혼합된 문자, 숫자, 밑줄만 사용, 문자로 시작).
클러스터 구성(scaleTier)
작업을 실행할 처리 클러스터 유형을 지정하는 확장 등급입니다. CUSTOM 확장 등급일 수 있으며, 이 경우 사용할 머신 개수와 유형을 사용자가 명시적으로 지정합니다.
디스크 구성(diskConfig)
각 학습 VM의 부팅 디스크 구성입니다. 이 필드는 선택사항이며 기본적으로 각 VM은 100GB pd-ssd 부팅 디스크로 실행됩니다. 이 필드를 지정하면 추가 디스크 요금이 발생할 수 있습니다.
학습 애플리케이션 패키지(packageUris)
Cloud Storage 위치에서 스테이징된 학습 애플리케이션 패키지입니다. gcloud 명령줄 도구를 사용하는 경우 애플리케이션 패키징 단계는 대부분 자동화되어 있습니다. 자세한 내용은 애플리케이션 패키징 가이드를 참조하세요.
모듈 이름(pythonModule)
패키지에 있는 기본 모듈의 이름입니다. 이 기본 모듈은 애플리케이션을 시작하기 위해 호출하는 Python 파일입니다. gcloud 명령어를 사용하여 작업을 제출하는 경우 --module-name 플래그에 기본 모듈 이름을 지정하세요. 애플리케이션 패키징 가이드를 참조하세요.
리전(region)
Compute Engine 리전은 작업을 실행하려는 위치입니다. 학습 데이터를 저장하는 Cloud Storage 버킷과 동일한 리전에서 학습 작업을 실행해야 합니다. AI Platform Training 서비스에 사용 가능한 리전을 참조하세요.
작업 디렉터리(jobDir)
작업 출력에 사용할 Cloud Storage 위치의 경로입니다. 대부분 학습 애플리케이션은 학습 중에 체크포인트를 저장하고 작업 마지막에 학습된 모델을 파일에 저장합니다. 이러한 파일을 저장할 Cloud Storage 위치가 필요합니다. Google Cloud 프로젝트에 이 버킷에 대한 쓰기 액세스 권한이 있어야 합니다. 학습 서비스는 작업 디렉터리로 설정한 경로를 job_dir이라는 명령줄 인수로 학습 애플리케이션에 자동으로 전달합니다. 이 인수를 애플리케이션의 다른 인수와 함께 파싱하여 코드에서 사용할 수 있습니다. 작업 디렉터리를 사용하면 애플리케이션을 시작하기 전에 학습 서비스가 디렉터리의 유효성을 검사한다는 장점이 있습니다.
런타임 버전(runtimeVersion)
작업에 사용할 AI Platform Training 런타임 버전입니다.
Python 버전(pythonVersion)
작업에 사용할 Python 버전입니다. Python 3.5는 런타임 버전 1.13~1.14에서 사용할 수 있습니다. Python 3.7은 런타임 버전 1.15 이상에서 사용할 수 있습니다.
최대 대기 시간(scheduling.maxWaitTime)
서픽스 s가 있는 최대 대기 시간(초)(예: 3600s)은 작업이 얼마나 QUEUEDPREPARING 상태로 남아 있도록 허용하는지 결정합니다. AI Platform Training은 리소스 제약조건으로 인해 항상 작업을 즉시 실행하지는 않습니다. 작업을 실행할 특정 기간보다 오래 기다리지 않으려면 이 필드를 지정합니다. 제한된 기간은 작업을 만들 때 시작됩니다. 이 기간이 끝날 때까지도 작업이 RUNNING 상태가 되지 않으면 AI Platform Training에서 작업을 취소합니다. 이 필드는 선택사항이며 기본값은 제한 없음입니다. 이 필드를 지정하는 경우 값을 1800s(30분) 이상으로 설정해야 합니다.
최대 실행 시간(scheduling.maxRunningTime)
학습 작업에 대한 서픽스 s(예 : 7200s)의 최대 실행기간(초)입니다. 작업이 RUNNING 상태가 되면 제한된 기간이 시작됩니다. 이 기간이 지나도 작업이 계속 실행 중이면 AI Platform Training에서 작업을 취소합니다. 이 필드는 선택사항이며 기본값은 7일(604800s)입니다.
서비스 계정(serviceAccount)
AI Platform Training에서 학습 애플리케이션을 실행할 때 사용할 서비스 계정의 이메일 주소입니다. 학습 애플리케이션은 이 계정을 통해 Google Cloud 리소스에 직접 액세스할 수 있으므로 프로젝트의 AI Platform Google 관리형 서비스 계정에 직접 액세스 권한을 부여하지 않아도 됩니다. 이 필드는 선택사항입니다. 커스텀 서비스 계정 요구사항에 대해 자세히 알아보세요.

구성 매개변수 형식 지정

구성 세부정보를 지정하는 방법은 학습 작업을 시작하는 방법에 따라 다릅니다.

gcloud

gcloud ai-platform jobs submit training 명령어에 작업 구성 세부정보를 제공합니다. 여기에는 두 가지 방법이 있습니다.

  • 명령줄 플래그 사용
  • Job 리소스를 표현하는 YAML 파일 사용. 파일 이름은 원하는 대로 지정할 수 있습니다. 일반적으로 이 이름은 config.yaml입니다.

YAML 파일을 사용하더라도 반드시 특정 세부정보를 명령줄 플래그로 제공해야 합니다. 예를 들면 --module-name 플래그와 함께 --package-path 또는 --packages 중에서 최소한 하나를 제공해야 합니다. --package-path를 사용하는 경우에는 --job-dir 또는 --staging-bucket도 포함해야 합니다. 또한 --region 플래그를 지정하거나 gcloud 클라이언트의 기본 리전을 설정해야 합니다. 이러한 옵션(명령줄 플래그로 제공하는 모든 옵션 포함)은 구성 파일의 해당 옵션 값을 재정의합니다.

예1: 이 예는 사전 구성된 머신 클러스터를 선택하고, 작업을 제출할 때 모든 필수 세부정보를 명령줄 플래그로 제공합니다. 구성 파일은 필요하지 않습니다. 다음 섹션의 작업 제출 가이드를 참조하세요.

예 2: 다음 예시에서는 커스텀 처리 클러스터를 사용한 작업 구성 파일의 내용을 보여줍니다. 작업을 제출할 때 기타 필수 세부정보를 명령줄 플래그로 제공한다고 가정하므로 이 구성 파일에는 구성 세부정보 중 일부만 포함되어 있습니다.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '2.6'
  pythonVersion: '3.7'
  scheduling:
    maxWaitTime: 3600s
    maxRunningTime: 7200s

위의 예시에 지정된 Python 버전 3.7을 사용하려면 AI Platform Training 런타임 버전 1.15 이상을 사용해야 합니다. 또한 작업자 및 매개변수 서버 가상 머신을 구성합니다. TensorFlow 또는 커스텀 컨테이너를 사용하여 분산형 학습을 수행하는 경우에만 이러한 머신을 구성하세요. 머신 유형에 대해 자세히 알아보세요.

Python

Python용 Google API 클라이언트 라이브러리를 사용하여 학습 작업을 제출하는 경우 Job 리소스와 동일한 구조로 사전의 구성을 설정합니다. 구성은 jobIdtrainingInput이라는 키 두 개가 있는 사전 형식을 취하며, 각 키의 데이터는 작업 이름과 TrainingInput 리소스의 객체에 대한 키를 포함하는 두 번째 사전입니다.

다음 예는 커스텀 처리 클러스터가 있는 작업에 대한 작업 표현을 빌드하는 방법을 보여줍니다.

training_inputs = {
    'scaleTier': 'CUSTOM',
    'masterType': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task',
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.6',
    'pythonVersion': '3.7',
    'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}

job_spec = {'jobId': 'my_job_name', 'trainingInput': training_inputs}

training_inputsjob_spec은 임의의 식별자입니다. 사전 이름은 원하는 대로 지정할 수 있습니다. 그러나 사전 키의 이름은 JobTrainingInput 리소스의 이름과 정확히 일치하도록 표시된 대로 지정해야 합니다.

위의 예시에 지정된 Python 버전 3.7을 사용하려면 AI Platform Training 런타임 버전 1.15 이상을 사용해야 합니다. 또한 작업자 및 매개변수 서버 가상 머신을 구성합니다. TensorFlow 또는 커스텀 컨테이너를 사용하여 분산형 학습을 수행하는 경우에만 이러한 머신을 구성하세요. 머신 유형에 대해 자세히 알아보세요.

작업 제출

학습 작업을 제출할 때, 두 가지 플래그 집합을 지정해야 합니다.

  • 작업 구성 매개변수. AI Platform Training이 클라우드에서 리소스를 설정하고 처리 클러스터에서 각 노드의 애플리케이션을 배포하려면 이러한 값이 필요합니다.
  • 사용자 인수 또는 애플리케이션 매개변수. AI Platform Training은 이러한 플래그 값을 애플리케이션에 전달합니다.

작업 만들기:

gcloud

gcloud ai-platform jobs submit training 명령어를 사용하여 학습 작업을 제출합니다.

가장 먼저 구성 세부정보를 포함하는 몇 가지 환경 변수를 정의하면 도움이 됩니다. 다음 코드에서는 모델 이름에 날짜와 시간을 추가하여 작업 이름을 만듭니다.

PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.6"

다음 작업 제출은 위의 구성 예 1에 해당합니다. 여기서 사전 구성된 확장 등급(basic)을 선택하고 모든 구성 세부정보를 명령줄 플래그를 통해 제공합니다. config.yaml 파일은 필요하지 않습니다.

gcloud ai-platform jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

다음 작업 제출은 위의 구성 파일 예 2에 해당합니다. 이 경우에는 구성의 일부가 파일에 있고 기타 세부정보를 명령줄 플래그를 통해 제공합니다.

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

참고:

  • 구성 파일(config.yaml)과 명령줄 플래그 모두에 옵션을 지정하면 명령줄에 있는 값이 구성 파일에 있는 값보다 우선 적용됩니다.
  • -- 플래그는 애플리케이션에 전달하려는 gcloud 관련 플래그의 끝과 USER_ARGS의 시작을 표시합니다.
  • --module-name, --runtime-version, --job-dir 등의 AI Platform Training 관련 플래그는 빈 -- 플래그보다 앞에 와야 합니다. AI Platform Training 서비스가 이러한 플래그를 해석합니다.
  • --job-dir 플래그가 지정된 경우 AI Platform Training이 --job-dir을 사용하여 경로를 검증하므로 이 플래그가 빈 -- 플래그보다 앞에 와야 합니다.
  • --job-dir 플래그가 지정된 경우 애플리케이션에서도 이 플래그를 처리해야 합니다. 또한 플래그가 빈 --보다 앞에 오더라도, --job-dir이 애플리케이션에 명령줄 플래그로 전달됩니다.
  • USER_ARGS는 원하는 만큼 정의할 수 있습니다. AI Platform Training은 --user_first_arg, --user_second_arg 등을 애플리케이션으로 전달합니다.

Python

Python용 Google API 클라이언트 라이브러리를 사용하면 직접 HTTP 요청을 작성하지 않아도 AI Platform Training 및 Prediction API를 호출할 수 있습니다. 다음 코드 샘플을 실행하기 전에 인증을 설정해야 합니다.

  1. API에 필요한 형식('projects/_projectname')으로 프로젝트 ID를 저장합니다.

    project_name = 'my_project_name'
    project_id = 'projects/{}'.format(project_name)
    
  2. AI Platform Training 서비스를 Python 방식으로 표현합니다.

    cloudml = discovery.build('ml', 'v1')
    
  3. 요청을 작성한 후 전송합니다. job_spec구성 매개변수의 형식을 지정한 이전 단계에서 생성되었습니다.

    request = cloudml.projects().jobs().create(body=job_spec,
                  parent=project_id)
    response = request.execute()
    
  4. 모든 HTTP 오류를 확인합니다. 가장 간단한 방법은 위 명령어를 try 블록에 넣는 것입니다.

    try:
        response = request.execute()
        # You can put your code for handling success (if any) here.
    
    except errors.HttpError, err:
        # Do whatever error response is appropriate for your application.
        # For this example, just send some text to the logs.
        # You need to import logging for this to work.
        logging.error('There was an error creating the training job.'
                      ' Check the details:')
        logging.error(err._get_reason())
    

다음 단계