Vertex AI Pipelines에서 Vertex AI 텐서보드 사용

학습 코드를 커스텀 학습 구성요소로 패키징하고 파이프라인 작업에서 실행할 수 있습니다. 텐서보드 로그는 Vertex AI 텐서보드 실험에 자동으로 스트리밍됩니다. Vertex AI 텐서보드가 Cloud Storage에 작성될 때 Vertex AI 텐서보드가 Vertex AI 텐서보드 로그에 스트리밍되므로 이 통합을 사용하여 거의 실시간으로 학습을 모니터링할 수 있습니다.

초기 설정은 Vertex AI 텐서보드 설정을 참조하세요.

학습 스크립트 변경사항

사전 정의된 환경 변수 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에서 커스텀 학습 환경의 환경 변수를 설정하는 방법을 자세히 알아보세요.

파이프라인 빌드 및 실행

다음 예시에서는 Kubeflow Pipelines DSL 패키지를 사용하여 파이프라인을 빌드하고 실행하는 방법을 보여줍니다. 더 많은 예시와 자세한 내용은 Vertex AI Pipelines 문서를 참조하세요.

학습 구성요소 만들기

학습 코드를 커스텀 구성요소로 패키징하고, 코드가 Cloud Storage 버킷에 텐서보드 로그를 작성하도록 구성되어 있는지 확인합니다. 더 많은 예시는 자체 파이프라인 구성요소 빌드를 참조하세요.

from kfp.v2.dsl import component

@component(
    base_image="tensorflow/tensorflow:latest",
    packages_to_install=["tensorflow_datasets"],
)
def train_tensorflow_model_with_tensorboard():
    import datetime, os
    import tensorflow as tf

    (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0

    def create_model():
        return tf.keras.models.Sequential(
            [
                tf.keras.layers.Flatten(input_shape=(28, 28)),
                tf.keras.layers.Dense(512, activation="relu"),
            ]
        )

    model = create_model()
    model.compile(
        optimizer="adam",
        loss="sparse_categorical_crossentropy",
        metrics=["accuracy"]
    )

    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=5,
        validation_data=(x_test, y_test),
        callbacks=[tensorboard_callback],
    )

파이프라인 빌드 및 컴파일

create_custom_training_job_op_from_component의 구성요소 사양을 지정하여 만든 구성요소에서 커스텀 학습 작업을 만듭니다. tensorboard_resource_name을(를) 텐서보드 인스턴스로 설정하고 staging_bucket을(를) API 호출(텐서보드 로그 포함) 동안 아티팩트를 스테이징할 위치로 설정합니다.

그런 다음 이 작업을 포함하도록 파이프라인을 빌드하고 파이프라인을 JSON 파일로 컴파일합니다.

더 많은 예시와 정보는 커스텀 작업 구성요소파이프라인 빌드를 참조하세요.

from kfp.v2 import compiler
from google_cloud_pipeline_components.v1.custom_job.utils import \
    create_custom_training_job_op_from_component
from kfp.v2 import dsl

def create_tensorboard_pipeline_sample(
    project, location, staging_bucket, display_name, service_account, experiment, tensorboard_resource_name
):

    @dsl.pipeline(
        pipeline_root=f"{staging_bucket}/pipeline_root",
        name=display_name,
    )
    def pipeline():
        custom_job_op = create_custom_training_job_op_from_component(
            component_spec=train_tensorflow_model_with_tensorboard,
            tensorboard=tensorboard_resource_name,
            base_output_directory=staging_bucket,
            service_account=service_account,
        )
        custom_job_op(project=project, location=location)

    compiler.Compiler().compile(
        pipeline_func=pipeline, package_path=f"{display_name}.json"
    )

Vertex AI 파이프라인 제출

Vertex AI SDK for Python을 사용하여 파이프라인을 제출합니다. 자세한 내용은 파이프라인 실행을 참조하세요.

Python용 Vertex AI SDK

from typing import Any, Dict, Optional

from google.cloud import aiplatform


def log_pipeline_job_to_experiment_sample(
    experiment_name: str,
    pipeline_job_display_name: str,
    template_path: str,
    pipeline_root: str,
    project: str,
    location: str,
    parameter_values: Optional[Dict[str, Any]] = None,
):
    aiplatform.init(project=project, location=location)

    pipeline_job = aiplatform.PipelineJob(
        display_name=pipeline_job_display_name,
        template_path=template_path,
        pipeline_root=pipeline_root,
        parameter_values=parameter_values,
    )

    pipeline_job.submit(experiment=experiment_name)

  • experiment_name: 실험 이름을 입력합니다.
  • pipeline_job_display_name: 파이프라인 작업의 표시 이름입니다.
  • template_path: 컴파일된 파이프라인 템플릿의 경로입니다.
  • pipeline_root: 파이프라인 서비스 계정이 액세스할 수 있는 Cloud Storage URI를 지정합니다. 파이프라인 실행의 아티팩트는 파이프라인 루트 내에 저장됩니다.
  • parameter_values: 이 실행에 전달할 파이프라인 매개변수입니다. 예를 들어 매개변수 이름을 사전 키로, 매개변수 값을 사전 값으로 하는 dict()을(를) 만듭니다.
  • project: 프로젝트 ID 파이프라인을 실행할 Google Cloud 프로젝트입니다. Google Cloud 콘솔 시작 페이지에서 내 프로젝트 ID를 찾을 수 있습니다.
  • location: 파이프라인을 실행할 위치입니다. 이 위치는 사용 중인 텐서보드 인스턴스와 동일해야 합니다.

다음 단계