Google Cloud 파이프라인 구성요소 사용

Google Cloud 파이프라인 구성요소(GCPC)를 사용할 때는 다음 Vertex AI 및 Google Cloud 기능을 사용하여 구성요소 및 아티팩트를 보호할 수 있습니다.

구성요소의 서비스 계정 지정

구성요소를 사용할 때는 선택적으로 서비스 계정을 지정할 수 있습니다. 구성요소가 실행되고 이 서비스 계정의 권한으로 작동합니다. 예를 들어 다음 코드를 사용하여 ModelDeploy 구성요소의 서비스 계정을 지정할 수 있습니다.

model_deploy_op = ModelDeployOp(model=training_job_run_op.outputs["model"],
    endpoint=endpoint_op.outputs["endpoint"],
    automatic_resources_min_replica_count=1,
    automatic_resources_max_replica_count=1,
    service_account="SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com")

다음을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정의 ID
  • PROJECT_ID: 프로젝트의 ID입니다.

Vertex AI 파이프라인에서 사용할 커스텀 서비스 계정 사용서비스 계정 구성에 대해 자세히 알아보세요.

VPC 서비스 제어를 사용하여 데이터 무단 반출 방지

VPC 서비스 제어는 Vertex AI 파이프라인에서 데이터 무단 반출 위험을 완화하는 데 도움을 줍니다. VPC 서비스 제어를 사용하여 서비스 경계를 만들면 Vertex AI 파이프라인과 Google Cloud 파이프라인 구성요소가 생성하는 리소스와 데이터가 자동으로 보호됩니다. 예를 들어 VPC 서비스 제어를 사용하여 파이프라인을 보호하면 다음 아티팩트는 서비스 경계를 벗어날 수 없습니다.

  • AutoML 모델의 학습 데이터
  • 사용자가 만든 모델
  • 일괄 예측 요청의 결과

Vertex AI를 통한 VPC 서비스 제어에 대해 자세히 알아보세요.

VPC 네트워크 피어링 설정

추가 매개변수를 제공하여 Google Cloud 파이프라인 구성요소를 Virtual Private Cloud와 피어링하도록 구성할 수 있습니다. 예를 들어 다음 코드를 사용하여 EndpointCreate 구성요소의 VPC 네트워크를 지정할 수 있습니다.

endpoint_create_op = EndpointCreateOp(
    project="PROJECT_ID",
    location="REGION",
    display_name="endpoint-display-name",
    network="NETWORK")

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트의 ID
  • REGION: Vertex AI를 사용하는 리전
  • NETWORK: VPC 네트워크(예: "projects/12345/global/networks/myVPC")

Vertex AI의 VPC 네트워크 피어링에 대해 자세히 알아보세요.

고객 관리 암호화 키(CMEK) 사용

기본적으로 Google Cloud는 Google에서 관리하는 암호화 키를 사용하여 자동으로 저장 데이터를 암호화합니다. 데이터를 보호하는 키와 관련된 특정 규정 준수 또는 규제 요구사항이 있으면 리소스에 고객 관리 암호화 키(CMEK)를 사용할 수 있습니다. 고객 관리 암호화 키를 사용하기 전에 Vertex AI에서 CMEK의 이점현재 CMEK 지원 리소스를 알아보세요.

CMEK로 구성요소 구성

Cloud Key Management Service에서 키링과 키를 만들고 키에 대한 Vertex AI 암호화 및 복호화 권한을 부여하면 생성 매개변수 중 하나로 키를 지정하여 새 CMEK 지원 구성요소를 만들 수 있습니다. 예를 들어 다음 코드를 사용하여 ModelBatchPredict 구성요소의 키를 지정할 수 있습니다.

model_batch_predict_op = ModelBatchPredictOp(project="PROJECT_ID",
    model=model_upload_op.outputs["model"],
    encryption_spec_key_name="projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME")

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID
  • LOCATION_ID: 유효한 위치 또는 리전 식별자(예시: us-central1)
  • KEY_RING_NAME: CMEK의 키링의 이름. 키링에 대한 자세한 내용은 Cloud KMS 리소스를 참조하세요.
  • KEY_NAME: CMEK 키 이름

참고: Vertex AI 구성요소가 아닌 Google Cloud 구성요소에는 추가 권한이 필요할 수 있습니다. 예를 들어 BigQuery 구성요소에 암호화 및 복호화 권한이 필요할 수 있습니다. 또한 CMEK 키의 위치는 구성요소 위치와 동일해야 합니다. 예를 들어 BigQuery 구성요소가 멀티 리전 미국 위치를 기반으로 하는 데이터 세트에서 데이터를 로드하는 경우 CMEK 키는 멀티 리전 미국 위치에도 있어야 합니다.

구성요소에서 아티팩트 사용 또는 생성

Google Cloud 파이프라인 구성요소 SDK는 구성요소 입력 및 출력 역할을 하는 ML 메타데이터 아티팩트 유형 집합을 정의합니다. 일부 Google Cloud 파이프라인 구성요소는 이러한 아티팩트를 입력으로 사용하거나 출력으로 생성합니다.

이 페이지에서는 이러한 아티팩트를 사용하고 생성하는 방법을 설명합니다.

ML 아티팩트 사용

구성요소 YAML에서 아티팩트 사용

아티팩트의 메타데이터는 구성요소에 대한 입력으로 작동할 수 있습니다. 입력으로 사용할 아티팩트를 준비하려면 아티팩트를 추출하여 구성요소 YAML 파일에 넣어야 합니다.

예를 들어 ModelUploadOp 구성요소는 ModelDeployOp 구성요소에서 사용할 수 있는 google.VertexModel 아티팩트를 생성합니다. 구성요소 YAML 파일에 다음 코드를 사용하여 입력(참조)에서 Vertex AI Model 리소스를 검색합니다.

"model": "',"{{$.inputs.artifacts['model'].metadata['resourceName']}}", '"'

아티팩트 메타데이터의 전체 스키마는 Kubeflow GitHub 저장소의 artifact_types.py 파일을 참조하세요.

경량형 Python 구성요소에서 아티팩트 사용

from kfp.dsl import Artifact, Input

@dsl.component
def classification_model_eval_metrics(
    project: str,
    location: str,  # "us-central1",
    model: Input[Artifact],
) :
   # Consumes the `resourceName` metadata
   model_resource_path = model.metadata["resourceName"]

Vertex ML Metadata 아티팩트 유형을 사용하는 방법의 예시는 테이블 형식 데이터 및 Vertex AI AutoML을 사용하여 분류 모델 학습을 참조하세요.

ML 아티팩트 만들기

다음 코드 예시는 GCPC 구성요소가 입력으로 허용할 수 있는 Vertex ML Metadata 아티팩트를 만드는 방법을 보여줍니다.

Importer 노드 사용

다음 예시에서는 Vertex ML Metadata에 새 아티팩트 항목을 등록하는 Importer 노드를 만듭니다. Importer 노드는 아티팩트의 URI 및 메타데이터를 기본 요소로 사용하여 아티팩트로 패키징합니다.

from google_cloud_pipeline_components import v1
from google_cloud_pipeline_components.types import artifact_types
from kfp.components import importer_node
from kfp import dsl

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():
  # Using importer and UnmanagedContainerModel artifact for model upload
  # component.
  importer_spec = importer_node.importer(
      artifact_uri='gs://managed-pipeline-gcpc-e2e-test/automl-tabular/model',
      artifact_class=artifact_types.UnmanagedContainerModel,
      metadata={
          'containerSpec': {
              'imageUri':
                  'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
          }
      })

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=importer_spec.outputs['artifact'])

Python 함수 기반 구성요소 사용

다음 예시에서는 Python 구성요소에서 직접 Vertex ML Metadata 아티팩트를 출력하는 방법을 보여줍니다.

from google_cloud_pipeline_components import v1
from kfp.components import importer_node
from kfp import dsl

@dsl.component(
    base_image='python:3.9',
    packages_to_install=['google-cloud-aiplatform'],
)
# Note currently KFP SDK doesn't support outputting artifacts in `google` namespace.
# Use the base type dsl.Artifact instead.
def return_unmanaged_model(model: dsl.Output[dsl.Artifact]):
  model.metadata['containerSpec'] = {
      'imageUri':
          'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
  }
  model.uri = f'gs://automl-tabular-pipeline/automl-tabular/model'

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():

  unmanaged_model_op = return_unmanaged_model()

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=unmanaged_model_op.outputs['model'])

자체 컨테이너 기반 구성요소 사용

다음 예시에서는 artifact_types.py 유틸리티 클래스를 사용하여 컨테이너 기반 구성요소의 출력으로 VertexBatchPredictionJob 아티팩트를 생성하는 방법을 보여줍니다.

bp_job_artifact = VertexBatchPredictionJob(
    'batchpredictionjob', vertex_uri_prefix + get_job_response.name,
    get_job_response.name, get_job_response.output_info.bigquery_output_table,
    get_job_response.output_info.bigquery_output_dataset,
    get_job_response.output_info.gcs_output_directory)

    output_artifacts = executor_input_json.get('outputs', {}).get('artifacts', {})
    executor_output['artifacts'] = bp_job_artifact.to_executor_output_artifact(output_artifacts[bp_job_artifact.name])