커스텀 학습 작업 만들기

커스텀 학습 작업(Vertex AI API의 CustomJob 리소스)은 Vertec AI에서 커스텀 머신러닝(ML) 학습 코드를 실행하기 위한 기본 방법입니다.

작업을 제출하기 전에

Vertex AI에서 CustomJob을 만들려면 먼저 Vertex AI에서 실행하려는 학습 코드 및 종속 항목을 정의하기 위해 Python 학습 애플리케이션 또는 커스텀 컨테이너 이미지를 만들어야 합니다.

이 가이드의 후반 섹션에 설명된 Google Cloud CLI의 자동 패키징 기능을 사용해서 로컬 머신의 코드에서 Docker 컨테이너 이미지를 만들고 이 컨테이너 이미지를 Container Registry에 푸시하고, CustomJob을 만드는 작업을 모두 단일 명령어로 실행하는 것이 좋습니다.

그렇지 않으면 Python 학습 애플리케이션 또는 커스텀 컨테이너 이미지를 수동으로 만들어야 합니다.

어떤 옵션을 선택해야 할지 잘 모르겠다면 학습 코드 요구사항을 참조하세요.

커스텀 작업에 포함되는 항목

커스텀 작업을 만들 때는 Vertex AI가 다음과 같은 학습 코드를 실행하는 데 필요한 설정을 지정해 주어야 합니다.

작업자 풀 내에서 다음 설정을 지정할 수 있습니다.

또한 작업 시작 중 새 컴퓨팅 리소스를 만드는 대신 영구 리소스에서 실행되도록 커스텀 작업을 구성할 수 있습니다. 영구 리소스에 대한 자세한 내용은 영구 리소스 개요를 참조하세요.

분산 학습 구성

여러 작업자 풀을 지정하여 분산 학습에 대해 CustomJob을 구성할 수 있습니다.

이 페이지의 대부분 예시에서는 한 개의 작업자 풀이 있는 단일 복제본 학습 작업을 보여줍니다. 분산형 학습을 위해 수정하려면 다음 안내를 따르세요.

  • 첫 번째 작업자 풀을 사용하여 기본 복제본을 구성하고 복제본 카운트를 1로 설정합니다.
  • 머신러닝 프레임워크가 분산형 학습에 이러한 추가 클러스터 태스크를 지원하는 경우 작업자 복제본, 매개변수 서버 복제본 또는 평가자 복제본을 구성하는 작업자 풀을 추가합니다.

분산형 학습 사용에 대해 자세히 알아보세요.

CustomJob 만들기

CustomJob을 만들려면 사용하려는 도구에 따라 다음 탭 중 하나의 안내를 따르세요. gcloud CLI를 사용하는 경우 단일 명령어를 사용해서 로컬 머신의 학습 코드를 Docker 컨테이너 이미지에 자동 패키징하고, 컨테이너 이미지를 Container Registry에 푸시하고, CustomJob을 만들 수 있습니다. 다른 옵션의 경우에는 Python 학습 애플리케이션 또는 커스텀 컨테이너 이미지가 이미 생성되었다고 가정합니다.

gcloud

다음 예시에서는 gcloud ai custom-jobs create 명령어를 사용합니다.

학습 코드가 로컬 컴퓨터에 있으면 자동 패키징 사용 섹션을 따르는 것이 좋습니다. 또는 이미 Python 학습 애플리케이션 또는 커스텀 컨테이너 이미지를 만든 경우에는 자동 패키징 사용 안함 섹션으로 건너뜁니다.

자동 패키징 사용

로컬 컴퓨터에 학습 코드가 있는 경우 단일 명령어를 사용하여 다음을 수행할 수 있습니다.

  • 코드를 기반으로 커스텀 Docker 이미지를 빌드합니다.
  • 이미지를 Container Registry로 내보내기
  • 이미지를 기반으로 CustomJob을 시작합니다.

결과는 다른 커스텀 컨테이너를 사용하여 CustomJob을 만드는 것과 비슷합니다. 워크플로상 편리할 경우 이 버전의 명령어를 사용할 수 있습니다.

시작하기 전에

이 버전의 명령어는 Docker 이미지를 빌드하고 푸시하므로 로컬 컴퓨터에서 다음 구성을 수행해야 합니다.

  1. Docker Engine을 설치합니다.

  2. Linux를 사용하는 경우 sudo 없이 실행할 수 있도록 Docker를 구성합니다.

  3. Container Registry API 사용 설정

    API 사용 설정

  4. Docker 인증을 구성하면 Docker 이미지를 Container Registry로 푸시할 수 있습니다.

    gcloud auth configure-docker
    

Docker 이미지 빌드 및 푸시 후 CustomJob 만들기

다음 명령어는 사전 빌드된 학습 컨테이너 이미지 및 로컬 Python 코드를 기반으로 Docker 이미지를 빌드하고 이미지를 Container Registry로 푸시한 후 CustomJob을 만듭니다.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH

다음을 바꿉니다.

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.

  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.

  • MACHINE_TYPE: 머신 유형입니다. 학습에 사용 가능한 머신 유형을 참고하세요.

  • REPLICA_COUNT: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서 이를 1로 설정합니다.

  • EXECUTOR_IMAGE_URI: 제공된 코드를 실행하는 컨테이너 이미지의 URI입니다. 학습에 사용 가능한 사전 빌드된 컨테이너를 참고하세요.

    이 이미지는 이 명령어로 빌드 중인 새 Docker 이미지의 기본 이미지 역할을 합니다.

  • WORKING_DIRECTORY: 학습 코드를 실행하는 진입점 스크립트가 포함된 로컬 파일 시스템의 디렉터리(다음 목록 항목 참조)

    스크립트의 상위 디렉터리 또는 상위 수준의 디렉터리를 사용할 수 있습니다. 정규화된 Python 모듈 이름을 지정하기 위해 상위 수준 디렉터리를 사용할 수 있습니다(다음 목록 항목 참조). requirements.txt 또는 setup.py 파일이 포함된 경우 더 높은 수준의 디렉터리를 사용해야 할 수 있습니다. 자세한 내용은 종속 항목 설치를 참조하세요.

    상위 수준 디렉터리를 지정하더라도 이 명령어는 진입점 스크립트의 상위 디렉터리만 Docker 이미지에 복사합니다.

  • SCRIPT_PATH: 학습 코드의 진입점인 스크립트의 경로입니다(로컬 파일 시스템의 WORKING_DIRECTORY 기준). Python 스크립트(.py로 끝남) 또는 Bash 스크립트일 수 있습니다.

    예를 들어 /hello-world/trainer/task.py를 실행하려고 하고 WORKING_DIRECTORY/hello-world면 이 값에 trainer/task.py를 사용합니다.

    script 대신 python-module 사용

    원하는 경우 script=SCRIPT_PATHpython-module=PYTHON_MODULE로 바꿔 학습의 진입점으로 실행할 WORKING_DIRECTORY의 Python 모듈 이름을 지정할 수 있습니다. 예를 들어 script=trainer/task.py 대신 python-module=trainer.task를 지정할 수 있습니다.

    이 경우 결과 Docker 컨테이너는 스크립트가 아닌 모듈로 코드를 로드합니다. 진입점 스크립트가 WORKING_DIRECTORY에서 다른 Python 모듈을 가져오는 경우 이 옵션을 사용하는 것이 좋습니다.

종속 항목 설치

자동 패키징을 사용할 때는 gcloud CLI의 local-run 명령어를 사용할 때 가능한 방법과 동일한 방법으로 컨테이너에 Python 종속 항목을 설치할 수 있습니다. Python 종속 항목을 설치하기 위한 여러 방법을 알아보려면 local-run 명령어 가이드의 종속 항목 설치 섹션을 참조하세요.

local-run 명령어를 사용할 때와 비교해서 자동 패키징을 사용할 때는 종속 항목 지정 문법이 약간 다릅니다. 명령줄 플래그를 사용하여 종속 항목을 지정하는 대신 --worker-pool-spec 플래그 값의 옵션을 사용해야 합니다. 또한 이러한 옵션 내부의 값을 쉼표 대신 세미콜론으로 구분해야 합니다. 다음 문법을 참조하세요.

  • local-run 명령어의 --local-package-path 플래그 대신 --worker-pool-spec 플래그 값의 local-package-path 옵션을 사용합니다. 이 옵션으로 지정하는 작업 디렉터리에 requirements.txt 또는 setup.py 파일이 포함된 경우 자동 패키징이 이 파일을 기준으로 종속 항목을 설치합니다.

    앞의 예시는 이 문법을 보여줍니다.

  • (선택사항) --requirements 플래그 대신 --worker-pool-spec 플래그 값의 requirements 옵션을 사용합니다. 쉼표 대신 세미콜론을 사용하여 PyPI 종속 항목을 구분합니다.

  • (선택사항) --extra-packages 플래그 대신 --worker-pool-spec 플래그 값의 extra-packages 옵션을 사용합니다. 쉼표 대신 세미콜론을 사용하여 로컬 종속 항목을 구분합니다.

  • (선택사항) --extra-dirs 플래그 대신 --worker-pool-spec 플래그 값의 extra-dirs 옵션을 사용합니다. 쉼표 대신 세미콜론을 사용하여 디렉터리 경로를 구분합니다.

다음 예시에서는 모든 선택적인 기술을 사용해서 종속 항목을 설치하는 방법을 보여줍니다. (이들 중 일부만 지정할 수 있습니다.) 세미콜론 문법을 표시하기 위해 예시에는 각 옵션에 대해 2개 값이 지정되어 있습니다. 예시 길이를 줄이기 위 다른 --worker-pool-spec 옵션은 [...]로 대체되어 있습니다.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2

이러한 자리표시자에 적합한 값을 알아보려면 local-run 명령어 가이드에서 '종속 항목 설치'를 참조하세요.

자동 패키지 사용 안함

자동 패키징을 사용하지 않는 경우 다음 중 하나와 비슷한 명령어를 사용하여 CustomJob을 만들 수 있습니다. Python 학습 애플리케이션 또는 커스텀 컨테이너 이미지 중 무엇을 만들었는지에 따라 다음 탭 중 하나를 선택합니다.

Python 학습 앱

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --python-package-uris=PYTHON_PACKAGE_URIS \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE

다음을 바꿉니다.

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.
  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.
  • PYTHON_PACKAGE_URIS: 학습 프로그램 및 종속 패키지인 Python 패키지 파일을 지정하는 쉼표로 구분된 Cloud Storage URI 목록입니다. 패키지 URI의 최대 개수는 100개입니다.
  • MACHINE_TYPE: 머신 유형입니다. 학습에 사용 가능한 머신 유형을 참고하세요.
  • REPLICA_COUNT: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서 이를 1로 설정합니다.
  • EXECUTOR_IMAGE_URI: 제공된 코드를 실행하는 컨테이너 이미지의 URI입니다. 학습에 사용 가능한 사전 빌드된 컨테이너를 참고하세요.
  • PYTHON_MODULE: 패키지를 설치한 후 실행할 Python 모듈 이름입니다.

커스텀 컨테이너 이미지

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI

다음을 바꿉니다.

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.
  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.
  • MACHINE_TYPE: 머신 유형입니다. 학습에 사용 가능한 머신 유형을 참고하세요.
  • REPLICA_COUNT: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서 이를 1로 설정합니다.
  • CUSTOM_CONTAINER_IMAGE_URI: 각 작업자 복제본에서 실행할 Artifact Registry, Container Registry 또는 Docker Hub의 컨테이너 이미지 URI입니다.

분산형 학습

분산형 학습을 수행하려면 작업자 풀마다 한 번씩 --worker-pool-spec 플래그를 여러 번 지정합니다.

자동 패키징을 사용하는 경우에는 첫 번째 작업자 풀에서 local-package-path, script, 자동 패키징과 관련된 기타 옵션만 지정하면 됩니다. 이후 작업자 풀에서는 학습 코드와 관련된 필드를 생략합니다. 여기에는 모두 자동 패키징으로 작성된 것과 동일한 학습 컨테이너가 사용됩니다.

예를 들어 다음 명령어는 보조 작업자 풀을 사용하도록 이전 자동 패키징 예시를 수정합니다.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT

자동 패키징을 사용하지 않는 경우에는 각 작업자 풀을 완전히 독립적으로 지정합니다. 어떤 필드도 생략하면 안 됩니다.

다음 명령어는 보조 작업자 풀을 사용하도록 이전 예시를 수정합니다.

Python 학습 앱

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --python-package-uris=PYTHON_PACKAGE_URIS \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,executor-image-uri=SECOND_POOL_EXECUTOR_IMAGE_URI,python-module=SECOND_POOL_PYTHON_MODULE

커스텀 컨테이너 이미지

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,container-image-uri=SECOND_POOL_CUSTOM_CONTAINER_IMAGE_URI

고급 구성

앞의 예시에서 사용할 수 없는 구성 옵션을 지정하려면--config 플래그를 사용하여 CustomJobSpec 필드를 포함하는 로컬 환경의 config.yaml 파일에 경로를 지정합니다. 예를 들면 다음과 같습니다.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --config=config.yaml

config.yaml 파일의 예시를 참조하세요.

콘솔

Google Cloud 콘솔에서는 CustomJob 리소스를 직접 만들 수 없습니다. 하지만 CustomJob을 만드는 TrainingPipeline 리소스를 만들 수 있습니다.

다음 안내에서는 CustomJob을 만들고 다른 작업을 수행하지 않는 TrainingPipeline을 만드는 방법을 설명합니다. 관리형 데이터 세트로 학습 또는 학습 종료 시 Model 리소스 만들기와 같은 추가 TrainingPipeline 기능을 사용하려면 학습 파이프라인 만들기를 참조하세요.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 학습 파이프라인 페이지로 이동합니다.

    학습 파이프라인으로 이동

  2. 만들기를 클릭하여 새 모델 학습 창을 엽니다.

  3. 학습 방법 단계에서 다음 설정을 지정합니다.

    1. 데이터 세트 드롭다운 목록에서 관리형 데이터 세트 없음을 선택합니다.

    2. 커스텀 학습(고급)을 선택합니다.

    계속을 클릭합니다.

  4. 모델 세부정보 단계에서 새 모델 학습 또는 새 버전 학습을 선택합니다. 새 모델 학습을 선택한 경우 모델에 사용할 이름(MODEL_NAME)을 입력합니다. 계속을 클릭합니다.

  5. 학습 컨테이너 단계에서 다음 설정을 지정합니다.

    1. 학습에 사전 빌드된 컨테이너를 사용할지 커스텀 컨테이너를 사용할지 선택합니다.

    2. 선택에 따라 다음 중 하나를 실행합니다.

    3. 모델 출력 디렉터리 필드에서 액세스 권한이 있는 버킷에 있는 디렉터리의 Cloud Storage URI를 지정할 수 있습니다. 아직 디렉터리가 존재하지 않아도 됩니다.

      이 값은 baseOutputDirectory API 필드의 Vertex AI로 전달되어 학습 애플리케이션이 실행되면 액세스할 수 있는 여러 환경 변수를 설정합니다.

    4. 선택사항: 인수 필드에서 학습 코드 실행을 시작할 때 사용할 Vertex AI의 인수를 지정할 수 있습니다. 결합된 모든 인수의 최대 길이는 100,000자입니다. 이 인수의 동작은 사용하는 컨테이너 유형에 따라 달라집니다.

    계속을 클릭합니다.

  6. 초매개변수 미세 조정 단계에서 초매개변수 미세 조정 사용 체크박스가 해제된 것을 확인합니다. 계속을 클릭합니다.

  7. 컴퓨팅 및 가격 책정 단계에서 다음 설정을 지정합니다.

    1. 리전 드롭다운 목록에서 "커스텀 학습을 지원하는 리전"을 선택합니다.

    2. 작업자 풀 0 섹션에서 학습에 사용할 컴퓨팅 리소스를 지정합니다.

      가속기를 지정하는 경우 선택한 가속기를 선택한 리전에서 사용할 수 있는지 확인합니다.

      분산형 학습을 수행하려면 작업자 풀 추가를 클릭하고 원하는 각 추가 작업자 풀에 대해 컴퓨팅 리소스 세트를 추가로 지정합니다.

    계속을 클릭합니다.

  8. 예측 컨테이너 단계에서 예측 컨테이너 없음을 선택합니다.

  9. 학습 시작을 클릭하여 커스텀 학습 파이프라인을 시작합니다.

REST

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.
  • PROJECT_ID: 프로젝트 ID
  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.
  • 커스텀 학습 작업을 다음과 같이 정의합니다.
    • MACHINE_TYPE: 머신 유형입니다. 학습에 사용 가능한 머신 유형을 참고하세요.
    • ACCELERATOR_TYPE: (선택사항) 작업에 연결할 가속기의 유형입니다.
    • ACCELERATOR_COUNT: (선택사항) 작업에 연결할 가속기의 수입니다.
    • DISK_TYPE: (선택사항) 작업에 사용할 부팅 디스크의 유형으로 pd-standard(기본값) 또는 pd-ssd입니다. 디스크 유형에 대해 자세히 알아보세요.
    • DISK_SIZE: (선택사항) 작업에 사용할 부팅 디스크의 크기(GB)입니다. 기본값은 100입니다.
    • REPLICA_COUNT: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서 이를 1로 설정합니다.
    • 학습 애플리케이션이 커스텀 컨테이너에서 실행되는 경우 다음을 지정합니다.
      • CUSTOM_CONTAINER_IMAGE_URI: 각 작업자 복제본에서 실행할 Artifact Registry, Container Registry 또는 Docker Hub의 컨테이너 이미지 URI입니다.
      • CUSTOM_CONTAINER_COMMAND: (선택사항) 컨테이너가 시작될 때 호출되는 명령어입니다. 이 명령어는 컨테이너의 기본 진입점을 재정의합니다.
      • CUSTOM_CONTAINER_ARGS: (선택사항) 컨테이너 시작 시 전달될 인수입니다.
    • 학습 애플리케이션이 사전 빌드된 컨테이너에서 실행되는 Python 패키지인 경우 다음을 지정합니다.
      • EXECUTOR_IMAGE_URI: 제공된 코드를 실행하는 컨테이너 이미지의 URI입니다. 학습에 사용 가능한 사전 빌드된 컨테이너를 참고하세요.
      • PYTHON_PACKAGE_URIS: 학습 프로그램 및 종속 패키지인 Python 패키지 파일을 지정하는 쉼표로 구분된 Cloud Storage URI 목록입니다. 패키지 URI의 최대 개수는 100개입니다.
      • PYTHON_MODULE: 패키지를 설치한 후 실행할 Python 모듈 이름입니다.
      • PYTHON_PACKAGE_ARGS: (선택사항) Python 모듈로 전달할 명령줄 인수입니다.
    • 작업 예약 옵션에 대해 알아보세요.
    • TIMEOUT: (선택사항) 작업의 최대 실행 시간입니다.
  • 이 커스텀 작업에 적용할 모든 라벨의 LABEL_NAMELABEL_VALUE를 지정합니다.

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON 요청 본문:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": MACHINE_TYPE,
          "acceleratorType": ACCELERATOR_TYPE,
          "acceleratorCount": ACCELERATOR_COUNT
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

응답에는 사양 및 TRAININGPIPELINE_ID에 대한 정보가 포함됩니다.

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Java 설정 안내를 따르세요. 자세한 내용은 Vertex AI Java API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.ContainerSpec;
import com.google.cloud.aiplatform.v1.CustomJob;
import com.google.cloud.aiplatform.v1.CustomJobSpec;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.WorkerPoolSpec;
import java.io.IOException;

// Create a custom job to run machine learning training code in Vertex AI
public class CreateCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";

    // Vertex AI runs your training application in a Docker container image. A Docker container
    // image is a self-contained software package that includes code and all dependencies. Learn
    // more about preparing your training application at
    // https://cloud.google.com/vertex-ai/docs/training/overview#prepare_your_training_application
    String containerImageUri = "CONTAINER_IMAGE_URI";
    createCustomJobSample(project, displayName, containerImageUri);
  }

  static void createCustomJobSample(String project, String displayName, String containerImageUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-4")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();

      ContainerSpec containerSpec =
          ContainerSpec.newBuilder().setImageUri(containerImageUri).build();

      WorkerPoolSpec workerPoolSpec =
          WorkerPoolSpec.newBuilder()
              .setMachineSpec(machineSpec)
              .setReplicaCount(1)
              .setContainerSpec(containerSpec)
              .build();

      CustomJobSpec customJobSpecJobSpec =
          CustomJobSpec.newBuilder().addWorkerPoolSpecs(workerPoolSpec).build();

      CustomJob customJob =
          CustomJob.newBuilder()
              .setDisplayName(displayName)
              .setJobSpec(customJobSpecJobSpec)
              .build();
      LocationName parent = LocationName.of(project, location);
      CustomJob response = client.createCustomJob(parent, customJob);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Node.js

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Node.js 설정 안내를 따르세요. 자세한 내용은 Vertex AI Node.js API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_K80',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response:\n', JSON.stringify(response));
}
createCustomJob();

Python

Python을 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 참조하세요.

def create_custom_job_with_experiment_autologging_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
    )

다음 단계

  • 보다 빠르고 저렴하게 학습시킬 수 있도록 텐서보드 프로파일러를 사용하여 학습 성능 병목 현상을 찾는 방법을 알아보기
  • 학습 파이프라인 만들기를 참조하여 Vertex AI에서 커스텀 학습 애플리케이션을 실행하기 위한 학습 파이프라인을 만드는 방법 알아보기