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

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: 파이프라인을 실행할 위치입니다. 사용 중인 텐서보드 인스턴스와 동일한 위치에 있어야 합니다.

다음 단계