Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스
Vertex Pipelines: Qwik Start
실습
1시간 30분
universal_currency_alt
크레딧 5개
show_chart
중급
Pipelines는 ML 워크플로를 자동화하고 재현하는 데 도움을 줍니다. Vertex AI는 Google Cloud 전반의 ML 제품을 원활한 개발 환경으로 통합합니다. 예전에는 AutoML로 학습된 모델과 커스텀 모델은 별도의 서비스를 통해 액세스할 수 있었습니다. Vertex AI는 이 두 가지를 다른 새로운 제품과 함께 모두 단일 API로 결합합니다. 또한 Vertex AI에는 Vertex Pipelines와 같은 다양한 MLOps 제품이 포함되어 있습니다. 이 실습에서는 Vertex Pipelines를 사용하여 ML 파이프라인을 만들고 실행하는 방법을 배웁니다.
ML 파이프라인이 유용한 이유
자세히 알아보기 전에 먼저 파이프라인을 사용하려는 이유를 생각해 보겠습니다. 데이터 처리, 모델 학습, 하이퍼파라미터 튜닝, 평가, 모델 배포가 포함된 ML 워크플로를 빌드한다고 상상해 보세요. 각 단계에는 다양한 종속 항목이 있을 수 있어 전체 워크플로를 모놀리식으로 처리하면 관리가 힘들 수 있습니다. ML 프로세스를 확장하기 시작할 때 팀원이 워크플로를 실행하고 코드 개발에 참여하도록 팀원과 ML 워크플로를 공유하려는 경우를 생각해 보겠습니다. 신뢰할 수 있고 재현 가능한 프로세스가 없으면 이 작업이 어려워질 수 있습니다. 파이프라인을 사용하면 ML 프로세스의 각 단계는 자체 컨테이너가 됩니다. 이를 통해 단계를 독립적으로 개발하고 재현 가능한 방식으로 각 단계의 입력 및 출력을 추적할 수 있습니다. 새로운 학습 데이터가 제공되는 경우와 같이 Cloud 환경의 다른 이벤트를 기반으로 파이프라인 실행을 예약하거나 트리거할 수도 있습니다.
목표
이 실습에서는 다음을 수행하는 방법에 대해 알아봅니다.
Kubeflow Pipelines SDK를 사용하여 확장 가능한 ML 파이프라인 빌드
텍스트 입력을 사용하는 3단계 인트로 파이프라인 만들기 및 실행
AutoML 분류 모델을 학습, 평가, 배포하는 파이프라인 만들기 및 실행
사전 빌드된 구성요소를 사용하여 google_cloud_pipeline_components 라이브러리를 통해 제공되는 Vertex AI 서비스와 상호작용
Cloud Scheduler로 파이프라인 작업 예약
설정 및 요건
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머에는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지 표시됩니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
실습을 완료하기에 충분한 시간---실습을 시작하고 나면 일시중지할 수 없습니다.
참고: 계정에 추가 요금이 발생하지 않도록 하려면 개인용 Google Cloud 계정이나 프로젝트가 이미 있어도 이 실습에서는 사용하지 마세요.
실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다.
왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.
Google Cloud 콘솔 열기 버튼
남은 시간
이 실습에 사용해야 하는 임시 사용자 인증 정보
필요한 경우 실습 진행을 위한 기타 정보
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.
다음을 클릭합니다.
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
이후에 표시되는 페이지를 클릭하여 넘깁니다.
이용약관에 동의합니다.
임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
무료 체험판을 신청하지 않습니다.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
작업 1. Vertex 노트북 인스턴스 만들기
탐색 메뉴를 클릭합니다.
Vertex AI로 이동한 다음, Workbench로 이동합니다.
노트북 인스턴스 페이지에서 사용자 관리형 노트북 탭으로 이동하여 ai-notebook이 완전히 생성될 때까지 기다립니다.
참고: 노트북이 완전히 생성되는 데 몇 분 정도 걸립니다.
인스턴스가 생성되면 JupyterLab 열기를 선택합니다.
노트북이 생성되었는지 확인
작업 2. Vertex Pipelines 설정
Vertex Pipelines를 사용하려면 몇 가지 추가 라이브러리를 설치해야 합니다.
Kubeflow Pipelines: 파이프라인을 빌드하는 데 사용되는 SDK입니다. Vertex Pipelines는 Kubeflow Pipelines 또는 TFX를 사용하여 빌드된 파이프라인 실행을 지원합니다.
Google Cloud 파이프라인 구성요소: 이 라이브러리는 파이프라인 단계에서부터 Vertex AI 서비스와 더 쉽게 상호작용하도록 해주는 사전 빌드된 구성요소를 제공합니다.
1단계: Python 노트북 생성 및 라이브러리 설치하기
노트북 인스턴스의 런처 메뉴에서 Python 3을 선택하여 노트북을 생성합니다.
노트북 인스턴스 왼쪽 상단의 + 기호를 클릭하여 런처 메뉴에 액세스할 수 있습니다.
이 실습에 필요한 서비스를 둘 다 설치하려면 먼저 노트북 셀에 사용자 플래그를 설정합니다.
USER_FLAG = "--user"
노트북에서 다음을 실행합니다.
!pip3 install {USER_FLAG} google-cloud-aiplatform==1.59.0
!pip3 install {USER_FLAG} kfp google-cloud-pipeline-components==0.1.1 --upgrade
!pip3 uninstall -y shapely pygeos geopandas
!pip3 install shapely==1.8.5.post1 pygeos==0.12.0 geopandas>=0.12.2
!pip3 install google-cloud-pipeline-components
참고: 버전에 관한 경고와 오류가 표시될 수 있지만 무시해도 괜찮습니다.
다음 패키지를 설치한 후 커널을 다시 시작해야 합니다.
import os
if not os.getenv("IS_TESTING"):
# Automatically restart kernel after installs
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
마지막으로 패키지를 올바르게 설치했는지 확인하세요. KFP SDK 버전은 1.6 이상이어야 합니다.
이 실습 전체에서 Cloud 프로젝트 ID와 이전에 만든 버킷을 참조합니다. 다음으로는 이들 각각의 변수를 만듭니다.
프로젝트 ID를 모르는 경우 다음을 실행하여 프로젝트 ID를 확인할 수 있습니다.
import os
PROJECT_ID = ""
# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
PROJECT_ID = shell_output[0]
print("Project ID: ", PROJECT_ID)
그런 다음, 버킷 이름을 저장할 변수를 만듭니다.
BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"
3단계: 라이브러리 가져오기
다음을 추가하여 이 실습에서 사용할 라이브러리를 가져옵니다.
from typing import NamedTuple
import kfp
from kfp import dsl
from kfp.v2 import compiler
from kfp.v2.dsl import (Artifact, Dataset, Input, InputPath, Model, Output,
OutputPath, ClassificationMetrics, Metrics, component)
from kfp.v2.google.client import AIPlatformClient
from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip
4단계: 상수 정의하기
파이프라인을 빌드하기 전에 마지막으로 상수 변수를 정의해 보겠습니다. PIPELINE_ROOT는 파이프라인에서 생성된 아티팩트가 작성될 Cloud Storage 경로입니다. 여기에서 을(를) 리전으로 사용하고 있지만, 버킷을 만들 때 다른 region을 사용했다면 아래 코드에서 REGION 변수를 업데이트하세요.
위의 코드를 실행한 후에는 파이프라인의 루트 디렉터리가 표시되어야 합니다. 이는 파이프라인의 아티팩트가 작성될 Cloud Storage 위치이며 형식은 gs://<bucket_name>/pipeline_root/입니다.
작업 3. 첫 번째 파이프라인 만들기
KFP SDK를 사용하여 간단한 파이프라인을 만듭니다. 이 파이프라인은 ML과 관련된 어떤 작업도 수행하지 않지만(곧 ML 관련 작업도 다룰 예정이니 걱정하지 마세요), 이 연습을 통해 다음을 배울 수 있습니다.
KFP SDK로 커스텀 구성요소를 만드는 방법
Vertex Pipelines에서 파이프라인을 실행하고 모니터링하는 방법
제품 이름과 이모티콘 설명이라는 두 가지 출력을 사용하여 문장을 출력하는 파이프라인을 만들어 보겠습니다. 이 파이프라인은 다음 3가지 구성요소로 이루어집니다.
product_name: 이 구성요소는 제품 이름을 입력으로 사용하고 해당 문자열을 출력으로 반환합니다.
emoji: 이 구성요소는 이모티콘의 텍스트 설명을 이모티콘으로 변환합니다. 예를 들어 ✨의 텍스트 코드는 'sparkles'입니다. 이 구성요소는 이모티콘 라이브러리를 사용하여 파이프라인에서 외부 종속 항목을 관리하는 방법을 보여줍니다.
build_sentence: 이 마지막 구성요소는 앞의 두 구성요소의 출력을 바탕으로 이모티콘을 사용하는 문장을 빌드합니다. 예를 들어 'Vertex Pipelines는 ✨'와 같은 결과가 출력될 수 있습니다.
1단계: Python 함수 기반 구성요소 만들기
KFP SDK를 사용하여 Python 함수를 기반으로 구성요소를 만들 수 있습니다. 먼저, 문자열을 입력으로 받아 해당 문자열을 반환하는 product_name 구성요소를 빌드해 보겠습니다.
노트북에 다음을 추가합니다.
@component(base_image="python:3.9", output_component_file="first-component.yaml")
def product_name(text: str) -> str:
return text
여기에서 문법을 자세히 살펴보세요.
@component 데코레이터는 파이프라인이 실행될 때 이 함수를 구성요소로 컴파일합니다. 커스텀 구성요소를 작성할 때마다 이 함수를 사용할 수 있습니다.
base_image 파라미터는 이 구성요소가 사용할 컨테이너 이미지를 지정합니다.
output_component_file 파라미터는 선택사항이며 컴파일된 구성요소를 작성할 yaml 파일을 지정합니다. 셀을 실행한 후에는 해당 파일이 노트북 인스턴스에 작성된 것을 확인할 수 있습니다. 이 구성요소를 다른 사용자와 공유하려면 생성된 yaml 파일을 다른 사용자에게 전송하고 다음을 사용하여 해당 파일을 로드하도록 하면 됩니다.
위에서 정의한 구성요소 정의는 파이프라인 정의에서 단계를 생성하는 데 사용할 수 있는 팩토리 함수를 만들었습니다.
파이프라인을 설정하려면 @dsl.pipeline 데코레이터를 사용하여 파이프라인의 이름과 설명을 지정하고 파이프라인의 아티팩트가 작성될 루트 경로를 제공하세요. 아티팩트란 파이프라인에서 생성된 모든 출력 파일을 의미합니다. 이 인트로 파이프라인에서는 아무 파일도 생성되지 않지만, 다음 파이프라인에서는 파일이 생성됩니다.
다음 코드 블록에서는 intro_pipeline 함수를 정의합니다. 여기서는 초기 파이프라인 단계에 대한 입력 및 단계가 서로 연결되는 방식을 지정합니다.
product_task는 제품 이름을 입력으로 사용합니다. 이 예에서는 'Vertex Pipelines'를 전달하지만 이는 사용자가 원하는 대로 변경할 수 있습니다.
emoji_task는 이모티콘의 텍스트 코드를 입력으로 사용하며 이것도 원하는 대로 변경할 수 있습니다. 예를 들어 'party_face'는 🥳 이모티콘을 나타냅니다. 이 구성요소와 product_task 구성요소 모두 입력을 제공하는 단계가 없기 때문에 파이프라인 정의 시 입력을 수동으로 지정해야 합니다.
파이프라인의 마지막 단계인 consumer_task에는 3가지 입력 파라미터가 있습니다.
product_task의 출력입니다. 이 단계에서는 출력이 하나만 생성되므로 product_task.output을 통해 이를 참조할 수 있습니다.
emoji_task 단계의 emoji 출력입니다. 위에서 정의한 emoji 구성요소에서 출력 파라미터의 이름을 지정한 부분을 참고하세요.
마찬가지로 emoji_text라고 이름을 지정한 emoji 구성요소의 출력입니다. 파이프라인에 이모티콘과 일치하지 않는 텍스트가 전달될 경우 이 텍스트를 사용하여 문장을 구성합니다.
@dsl.pipeline(
name="hello-world",
description="An intro pipeline",
pipeline_root=PIPELINE_ROOT,
)
# You can change the `text` and `emoji_str` parameters here to update the pipeline output
def intro_pipeline(text: str = "Vertex Pipelines", emoji_str: str = "sparkles"):
product_task = product_name(text)
emoji_task = emoji(emoji_str)
consumer_task = build_sentence(
product_task.output,
emoji_task.outputs["emoji"],
emoji_task.outputs["emoji_text"],
)
4단계: 파이프라인 컴파일 및 실행하기
파이프라인이 정의되었으므로 파이프라인을 컴파일할 준비가 되었습니다. 다음과 같이 파이프라인을 실행하는 데 사용할 JSON 파일을 생성합니다.
response = api_client.create_run_from_job_spec(
job_spec_path="intro_pipeline_job.json",
# pipeline_root=PIPELINE_ROOT # this argument is necessary if you did not specify PIPELINE_ROOT as part of the pipeline definition.
)
파이프라인을 실행하면 콘솔에서 실행되는 파이프라인을 볼 수 있는 링크가 생성되며, 완료 시 다음과 같이 표시됩니다.
이 파이프라인은 실행되는 데 5~6분이 걸립니다. 완료되면 build-sentence 구성요소를 클릭하여 최종 출력을 확인할 수 있습니다.
KFP SDK와 Vertex Pipelines의 작동 방식에 익숙해졌다면, 이제 다른 Vertex AI 서비스를 사용하여 ML 모델을 생성하고 배포하는 파이프라인을 빌드할 수 있습니다.
이모티콘 파이프라인이 완료되었는지 확인
작업 4. 엔드 투 엔드 ML 파이프라인 만들기
첫 ML 파이프라인을 빌드해 볼 시간입니다. 이 파이프라인에서는 UCI Machine Learning Dry Beans 데이터 세트(출처: Computers and Electronics in Agriculture, 174, 105507. DOI.에 게재된 KOKLU, M. and OZKAN, I.A., (2020), "Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques"를 사용합니다.
참고: 이 파이프라인은 완료하는 데 2시간 이상 걸립니다. 따라서 실습을 완료하기 위해 파이프라인의 전체 기간을 기다릴 필요는 없습니다. 파이프라인 작업이 시작될 때까지 단계를 따르세요.
이 테이블 형식 데이터 세트는 파이프라인에서 특성에 따라 beans를 7가지 유형으로 분류하는 AutoML 모델을 학습시키고, 평가하고, 배포하는 데 사용됩니다.
이 파이프라인의 기능은 다음과 같습니다.
Vertex AI에서 데이터 세트를 생성합니다.
AutoML로 테이블 형식 분류 모델을 학습시킵니다.
이 모델에 대한 평가 측정항목을 가져옵니다.
평가 측정항목에 따라 Vertex Pipelines에서 조건부 로직을 사용하여 모델을 배포할지 여부를 결정합니다.
Vertex Prediction을 사용하여 엔드포인트에 모델을 배포합니다.
설명된 각 단계가 구성요소가 됩니다. 대부분의 파이프라인 단계는 이번 실습에서 앞서 가져온 google_cloud_pipeline_components 라이브러리를 통해 Vertex AI 서비스의 사전 빌드된 구성요소를 사용합니다.
이 섹션에서는 먼저 커스텀 구성요소 1개를 정의하겠습니다. 그런 다음에는 사전 빌드된 구성요소를 사용하여 나머지 파이프라인 단계를 정의해 보겠습니다. 사전 빌드된 구성요소를 사용하면 모델 학습, 배포와 같은 Vertex AI 서비스에 더 쉽게 액세스할 수 있습니다.
이 단계에서는 대부분의 시간이 이 파이프라인의 AutoML 학습에 소요되며, 약 1시간 정도가 걸립니다.
1단계: 모델 평가용 커스텀 구성요소
정의할 커스텀 구성요소는 모델 학습이 완료된 후 파이프라인이 끝날 때까지 사용됩니다 이 구성요소의 몇 가지 기능은 다음과 같습니다.
학습된 AutoML 분류 모델에서 평가 측정항목을 가져옵니다.
측정항목을 파싱하여 Vertex Pipelines UI에서 렌더링합니다.
측정항목을 임곗값과 비교하여 모델 배포 여부를 결정합니다.
구성요소를 정의하기 전에 입력 및 출력 파라미터를 이해해야 합니다. 이 파이프라인은 Cloud 프로젝트에 대한 메타데이터, 결과로 생성되는 학습 모델(이 구성요소는 나중에 정의할 예정), 모델의 평가 측정항목, 그리고 thresholds_dict_str을 입력으로 받습니다.
thresholds_dict_str은 파이프라인을 실행할 때 정의합니다. 이 분류 모델의 경우에는 모델을 배포해야 하는 AUC(ROC 곡선 아래 영역) 값입니다. 예를 들어 0.95를 전달하면 측정항목이 95%를 상회하는 경우에만 파이프라인에서 모델을 배포하도록 하겠다는 의미입니다.
평가 구성요소는 모델 배포 여부를 나타내는 문자열을 반환합니다.
이 커스텀 구성요소를 생성하려면 노트북 셀에 다음을 추가하세요.
@component(
base_image="gcr.io/deeplearning-platform-release/tf2-cpu.2-3:latest",
output_component_file="tables_eval_component.yaml", # Optional: you can use this to load the component later
packages_to_install=["google-cloud-aiplatform"],
)
def classif_model_eval_metrics(
project: str,
location: str, # "region",
api_endpoint: str, # "region-aiplatform.googleapis.com",
thresholds_dict_str: str,
model: Input[Model],
metrics: Output[Metrics],
metricsc: Output[ClassificationMetrics],
) -> NamedTuple("Outputs", [("dep_decision", str)]): # Return parameter.
"""This function renders evaluation metrics for an AutoML Tabular classification model.
It retrieves the classification model evaluation generated by the AutoML Tabular training
process, does some parsing, and uses that info to render the ROC curve and confusion matrix
for the model. It also uses given metrics threshold information and compares that to the
evaluation results to determine whether the model is sufficiently accurate to deploy.
"""
import json
import logging
from google.cloud import aiplatform
# Fetch model eval info
def get_eval_info(client, model_name):
from google.protobuf.json_format import MessageToDict
response = client.list_model_evaluations(parent=model_name)
metrics_list = []
metrics_string_list = []
for evaluation in response:
print("model_evaluation")
print(" name:", evaluation.name)
print(" metrics_schema_uri:", evaluation.metrics_schema_uri)
metrics = MessageToDict(evaluation._pb.metrics)
for metric in metrics.keys():
logging.info("metric: %s, value: %s", metric, metrics[metric])
metrics_str = json.dumps(metrics)
metrics_list.append(metrics)
metrics_string_list.append(metrics_str)
return (
evaluation.name,
metrics_list,
metrics_string_list,
)
# Use the given metrics threshold(s) to determine whether the model is
# accurate enough to deploy.
def classification_thresholds_check(metrics_dict, thresholds_dict):
for k, v in thresholds_dict.items():
logging.info("k {}, v {}".format(k, v))
if k in ["auRoc", "auPrc"]: # higher is better
if metrics_dict[k] < v: # if under threshold, don't deploy
logging.info(
"{} < {}; returning False".format(metrics_dict[k], v)
)
return False
logging.info("threshold checks passed.")
return True
def log_metrics(metrics_list, metricsc):
test_confusion_matrix = metrics_list[0]["confusionMatrix"]
logging.info("rows: %s", test_confusion_matrix["rows"])
# log the ROC curve
fpr = []
tpr = []
thresholds = []
for item in metrics_list[0]["confidenceMetrics"]:
fpr.append(item.get("falsePositiveRate", 0.0))
tpr.append(item.get("recall", 0.0))
thresholds.append(item.get("confidenceThreshold", 0.0))
print(f"fpr: {fpr}")
print(f"tpr: {tpr}")
print(f"thresholds: {thresholds}")
metricsc.log_roc_curve(fpr, tpr, thresholds)
# log the confusion matrix
annotations = []
for item in test_confusion_matrix["annotationSpecs"]:
annotations.append(item["displayName"])
logging.info("confusion matrix annotations: %s", annotations)
metricsc.log_confusion_matrix(
annotations,
test_confusion_matrix["rows"],
)
# log textual metrics info as well
for metric in metrics_list[0].keys():
if metric != "confidenceMetrics":
val_string = json.dumps(metrics_list[0][metric])
metrics.log_metric(metric, val_string)
# metrics.metadata["model_type"] = "AutoML Tabular classification"
logging.getLogger().setLevel(logging.INFO)
aiplatform.init(project=project)
# extract the model resource name from the input Model Artifact
model_resource_path = model.uri.replace("aiplatform://v1/", "")
logging.info("model path: %s", model_resource_path)
client_options = {"api_endpoint": api_endpoint}
# Initialize client that will be used to create and send requests.
client = aiplatform.gapic.ModelServiceClient(client_options=client_options)
eval_name, metrics_list, metrics_str_list = get_eval_info(
client, model_resource_path
)
logging.info("got evaluation name: %s", eval_name)
logging.info("got metrics list: %s", metrics_list)
log_metrics(metrics_list, metricsc)
thresholds_dict = json.loads(thresholds_dict_str)
deploy = classification_thresholds_check(metrics_list[0], thresholds_dict)
if deploy:
dep_decision = "true"
else:
dep_decision = "false"
logging.info("deployment decision is %s", dep_decision)
return (dep_decision,)
2단계: Google Cloud의 사전 빌드된 구성요소 추가하기
이 단계에서는 나머지 파이프라인 구성요소를 정의하고 이들 구성요소가 서로 어떻게 결합하는지 살펴보겠습니다.
먼저 타임스탬프를 사용하여 파이프라인 실행의 표시 이름을 정의합니다.
import time
DISPLAY_NAME = 'automl-beans{}'.format(str(int(time.time())))
print(DISPLAY_NAME)
먼저, 이전 파이프라인에서와 마찬가지로 이 파이프라인에서 사용하는 입력 파라미터를 정의합니다. 이러한 파라미터는 파이프라인 내 다른 단계의 출력에 종속되지 않으므로 수동으로 설정해야 합니다.
나머지 파이프라인은 Vertex AI 서비스와의 상호작용을 위해 사전 빌드된 몇 가지 구성요소를 사용합니다.
TabularDatasetCreateOp는 Cloud Storage 또는 BigQuery의 데이터 세트 소스를 바탕으로 Vertex AI에서 테이블 형식의 데이터 세트를 만듭니다. 이 파이프라인에서는 BigQuery 테이블 URL을 통해 데이터를 전달합니다.
AutoMLTabularTrainingJobRunOp는 테이블 형식 데이터 세트의 AutoML 학습 작업을 시작합니다. 모델 유형(이 경우 분류), 열의 데이터 일부, 학습을 실행할 시간, 데이터 세트에 대한 가이드 등 몇 가지 구성 파라미터를 이 구성요소에 전달합니다. 데이터 세트를 이 구성요소에 전달하기 위해 dataset_create_op.outputs["dataset"]를 통해 이전 구성요소의 출력을 제공하고 있음을 알 수 있습니다.
ModelDeployOp는 주어진 모델을 Vertex AI의 엔드포인트에 배포합니다. 사용 가능한 추가 구성 옵션이 있지만 여기서는 배포하려는 엔드포인트 머신 유형, 프로젝트, 모델을 제공합니다. 파이프라인 내 학습 단계의 출력에 액세스하여 모델을 전달하고 있습니다.
또한 이 파이프라인은 조건부 로직을 활용합니다. 이 Vertex Pipelines 기능을 통해 조건을 정의하고 해당 조건의 결과에 따라 다양한 브랜치를 정의할 수 있습니다. 파이프라인을 정의할 때 thresholds_dict_str 파라미터를 전달했던 것을 기억하시나요? 이는 모델을 엔드포인트에 배포할지 여부를 결정하는 데 사용하는 정확성 임곗값입니다. 이를 구현하기 위해서는 KFP SDK의 Condition 클래스를 활용해야 합니다. 전달된 조건은 이 실습 앞부분에서 정의한 커스텀 평가 구성요소의 출력입니다. 이 조건이 참인 경우 파이프라인은 계속해서 deploy_op 구성요소를 실행합니다. 정확성이 사전 정의된 임곗값을 충족하지 않는 경우 파이프라인은 여기서 멈추고 모델을 배포하지 않습니다.
위에서 셀을 실행한 후에 표시되는 링크를 클릭하여 콘솔에서 파이프라인을 확인합니다. 이 파이프라인은 실행하는 데 한 시간이 조금 넘게 걸립니다. 대부분의 시간이 AutoML 학습 단계에서 소비됩니다. 완성된 파이프라인은 다음과 같습니다.
상단의 '아티팩트 펼치기' 전환 버튼을 사용하면 파이프라인에서 만든 여러 아티팩트의 세부정보를 볼 수 있습니다. 예를 들어 dataset 아티팩트를 클릭하면 생성된 Vertex AI 데이터 세트에 대한 세부정보를 확인할 수 있습니다. 여기서 링크를 클릭하여 해당 데이터 세트의 페이지로 이동할 수 있습니다.
마찬가지로 커스텀 평가 구성요소의 결과 측정항목 시각화를 보려면 metricsc라는 아티팩트를 클릭합니다. 대시보드 오른쪽에서 이 모델의 혼동 행렬을 확인할 수 있습니다.
이 파이프라인 실행에서 생성된 모델과 엔드포인트를 보려면 모델 섹션으로 이동하여 automl-beans라는 모델을 클릭합니다. 여기서는 이 모델이 엔드포인트에 배포된 것을 확인할 수 있습니다.
파이프라인 그래프에서도 endpoint 아티팩트를 클릭하여 이 페이지에 액세스할 수 있습니다.
콘솔에서 파이프라인 그래프를 보는 것 외에 계보 추적에도 Vertex Pipelines를 사용할 수 있습니다.
계보 추적이란 파이프라인 전체에서 생성된 아티팩트를 추적하는 것을 의미합니다. 이렇게 하면 아티팩트가 어디에서 생성되었는지, 그리고 ML 워크플로 전체에서 어떻게 사용되고 있는지 이해하는 데 도움이 됩니다. 예를 들어 이 파이프라인에서 생성된 데이터 세트의 계보 추적을 확인하려면 데이터 세트 아티팩트, 계보 보기를 차례로 클릭합니다.
다음과 같이 아티팩트가 사용되고 있는 모든 위치가 표시됩니다.
참고: 파이프라인에서 학습 작업이 시작될 때까지 기다렸다가 아래에서 진행률을 확인하세요. 학습 작업은 이 실습에 할당된 시간보다 더 오래 걸리지만 학습 작업을 성공적으로 제출하면 만점을 받을 수 있습니다.
엔드 투 엔드 ML 파이프라인 학습 작업이 시작되었는지 확인
4단계: 파이프라인 실행 전체의 측정항목 비교하기(선택사항)
이 파이프라인을 여러 번 실행하는 경우 실행 전체의 측정항목을 비교해야 할 수 있습니다. 이때 aiplatform.get_pipeline_df() 메서드를 사용하면 실행 메타데이터에 액세스할 수 있습니다. 여기서는 이 파이프라인의 모든 실행에 대한 메타데이터를 구한 다음 Pandas DataFrame에 로드할 예정입니다.
Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.
설명서 최종 업데이트: 2024년 10월 7일
실습 최종 테스트: 2024년 10월 7일
Copyright 2025 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.
Labs create a Google Cloud project and resources for a fixed time
Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
On the top left of your screen, click Start lab to begin
Use private browsing
Copy the provided Username and Password for the lab
Click Open console in private mode
Sign in to the Console
Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
Accept the terms, and skip the recovery resource page
Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project
현재 이 콘텐츠를 이용할 수 없습니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
감사합니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
One lab at a time
Confirm to end all existing labs and start this one
Use private browsing to run the lab
Use an Incognito or private browser window to run this lab. This
prevents any conflicts between your personal account and the Student
account, which may cause extra charges incurred to your personal account.