커스텀 학습에 Vertex AI TensorBoard 사용

커스텀 학습을 사용하여 모델을 학습시키는 경우 Vertex AI 텐서보드 로그를 Vertex AI 텐서보드에 자동으로 업로드하도록 학습 작업을 설정할 수 있습니다.

Vertex AI TensorBoard가 Cloud Storage에 작성될 때 Vertex AI TensorBoard가 Vertex AI TensorBoard 로그에 스트리밍되므로 이 통합을 사용하여 거의 실시간으로 학습을 모니터링할 수 있습니다.

초기 설정은 Vertex AI TensorBoard 설정을 참조하세요.

학습 스크립트 변경사항

사전 정의된 환경 변수 AIP_TENSORBOARD_LOG_DIR을 통해 Vertex AI Training 서비스가 자동으로 제공하는 위치인 Cloud Storage 버킷에 텐서보드 로그를 기록하도록 학습 스크립트를 구성해야 합니다.

일반적으로는 API를 작성하는 오픈소스 텐서보드 로그에 대한 로그 디렉터리로 os.environ['AIP_TENSORBOARD_LOG_DIR']을 제공하여 이 작업을 수행할 수 있습니다. AIP_TENSORBOARD_LOG_DIR의 위치는 일반적으로 staging_bucket 변수로 설정됩니다.

TensorFlow 2.x에서 학습 스크립트를 구성하려면 텐서보드 콜백을 만들고 log_dir 변수를 os.environ['AIP_TENSORBOARD_LOG_DIR'](으)로 설정합니다. 그러면 텐서보드 콜백이 TensorFlow model.fit 콜백 목록에 포함됩니다.

  tensorboard_callback = tf.keras.callbacks.TensorBoard(
       log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
       histogram_freq=1
  )

  model.fit(
       x=x_train,
       y=y_train,
       epochs=epochs,
       validation_data=(x_test, y_test),
       callbacks=[tensorboard_callback],
  )
  

Vertex AI에서 커스텀 학습 환경에 환경 변수를 설정하는 방법을 자세히 알아보세요.

커스텀 학습 작업 만들기

다음 예시에서는 자체 커스텀 학습 작업을 만드는 방법을 보여줍니다.

커스텀 학습 작업을 만드는 방법에 대한 자세한 예시는 Hello 커스텀 학습을 참조하세요. 커스텀 학습 컨테이너를 빌드하는 단계는 학습용 커스텀 컨테이너 이미지 만들기를 참조하세요.

커스텀 학습 작업을 만들려면 Python용 Vertex AI SDK 또는 REST를 사용합니다.

Python

Python

def create_training_pipeline_custom_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 0,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomTrainingJob(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

  • project: 프로젝트 ID 이러한 ID는 Google Cloud 콘솔 시작 페이지에서 찾을 수 있습니다.
  • location: CustomJob을 실행할 리전입니다. 제공된 텐서보드 인스턴스와 동일한 리전이어야 합니다.
  • staging_bucket: 텐서보드 로그를 포함한 API 호출 중에 아티팩트를 스테이징하는 Cloud Storage 버킷입니다.
  • display_name: 커스텀 학습 작업의 표시 이름입니다.
  • script_path: 학습 코드의 진입점인 스크립트의 경로입니다(로컬 파일 시스템의 작업 디렉터리 기준).
  • container_uri: 학습 컨테이너 이미지의 URI는 Vertex AI일 수 있습니다. 사전 빌드된 학습 컨테이너 또는 커스텀 컨테이너입니다.
  • model_serving_container_image_uri: 학습 스크립트로 생성된 모델을 제공하는 데 적합한 모델 제공 컨테이너의 URI입니다.
  • dataset_id: 학습에 사용할 데이터 세트의 ID 번호입니다.
  • model_display_name: 학습된 모델의 표시 이름입니다.
  • args: Python 스크립트로 전달할 명령줄 인수입니다.
  • replica_count: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서는 1로 설정합니다.
  • machine_type: 사용할 VM 유형입니다. 지원되는 VM 목록은 머신 유형을 참조하세요.
  • accelerator_type: 리소스 풀의 각 VM에 연결할 GPU 유형입니다. 지원되는 GPU 목록은 GPU를 참조하세요.
  • accelerator_count: 리소스 풀의 각 VM에 연결할 GPU 수입니다. 기본값은 1입니다.
  • training_fraction_split: 모델 학습에 사용할 데이터 세트의 비율입니다.
  • validation_fraction_split: 모델 검증에 사용할 데이터 세트의 비율입니다.
  • test_fraction_split: 모델을 평가하는 데 사용할 데이터 세트의 비율입니다.
  • sync: 이 메서드를 동기적으로 실행할지 여부입니다.
  • tensorboard_resource_name: CustomJob이 텐서보드 로그를 업로드할 Vertex TensorBoard 인스턴스의 리소스 이름입니다.
  • service_account: 텐서보드로 실행할 때 필요합니다. 필요한 권한이 있는 서비스 계정 만들기를 참조하세요.

REST

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

  • LOCATION_ID: 리전
  • PROJECT_ID: 프로젝트 ID
  • TENSORBOARD_INSTANCE_NAME: (의무) Vertex AI 텐서보드 로그를 저장하는 기존 Vertex AI 텐서보드 인스턴스의 전체 이름:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    참고: 텐서보드 인스턴스가 기존 항목이 아니면 customJobs 생성 시 404가 발생합니다.
  • GCS_BUCKET_NAME: '${PROJECT_ID}-tensorboard-logs-${LOCATION}'
  • USER_SA_EMAIL: (의무) 이전 단계에서 생성한 서비스 계정 또는 사용자의 자체 서비스 계정입니다. 'USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com'
  • TRAINING_CONTAINER: TRAINING_CONTAINER.
  • INVOCATION_TIMESTAMP: '$(date +'%Y%m%d-%H%M%S')'
  • JOB_NAME: 'tensorboard-example-job-${INVOCATION_TIMESTAMP}'
  • BASE_OUTPUT_DIR: (필수) 학습의 모든 출력이 기록되는 Google Cloud 경로입니다. 'gs://$GCS_BUCKET_NAME/$JOB_NAME'

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
  {
    "replicaCount": "1",
     "machineSpec": {
        "machineType": "n1-standard-8",
      },
      "containerSpec": {
        "imageUri": TRAINING_CONTAINER,
      }
    }
  ],

  "base_output_directory": {
  "output_uri_prefix": BASE_OUTPUT_DIR,
   },
  "serviceAccount": USER_SA_EMAIL,
  "tensorboard": TENSORBOARD_INSTANCE_NAME,
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-8"
        },
        "replicaCount": "1",
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "IMAGE_URI"
        }
      }
    ],
    "serviceAccount": "SERVICE_ACCOUNT",
    "baseOutputDirectory": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    },
    "tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "CREATE-TIME",
  "updateTime": "UPDATE-TIME"
}

다음 단계