자습서: 이미지 분류를 위한 Azure Machine Learning 파이프라인 빌드

적용 대상:Python SDK azureml v1

참고 항목

SDK v2를 사용하여 파이프라인을 빌드하는 자습서는 자습서: Jupyter Notebook에서 Python SDK v2를 사용하여 프로덕션 ML 워크플로에 ML 파이프라인 사용을 참조하세요.

이 자습서에서는 데이터를 준비하고 기계 학습 모델을 학습시키는 Azure Machine Learning 파이프라인을 빌드하는 방법에 대해 알아봅니다. 기계 학습 파이프라인은 속도, 이식성 및 재사용을 통해 워크플로를 최적화하므로 인프라 및 자동화 대신 기계 학습에 집중할 수 있습니다.

이 예제에서는 Fashion MNIST 데이터 세트의 이미지를 분류하도록 간단한 Keras 나선형 신경망을 학습시킵니다.

이 자습서에서는 다음 작업을 완료합니다.

  • 작업 영역 구성
  • 작업을 보관할 실험 만들기
  • 작업을 수행할 ComputeTarget 프로비전
  • 압축된 데이터를 저장할 데이터 세트 만들기
  • 학습용 데이터를 준비하는 파이프라인 단계 만들기
  • 학습을 수행할 런타임 환경 정의
  • 신경망을 정의하고 학습을 수행하는 파이프라인 단계 만들기
  • 파이프라인 단계에서 파이프라인 작성
  • 실험에서 파이프라인 실행
  • 단계 및 학습된 신경망의 출력 검토
  • 추가 사용을 위해 모델 등록

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다. 지금 Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.

필수 조건

  • 아직 Azure Machine Learning 작업 영역이 없다면 시작하려면 리소스 만들기를 완료합니다.
  • azureml-coreazureml-pipeline 패키지를 모두 설치한 Python 환경. 이 환경은 Azure Machine Learning 리소스를 정의하고 제어하기 위한 환경이며 학습을 위해 런타임에 사용되는 환경과 별개입니다.

Important

현재 azureml-pipeline과 호환되는 최신 Python 릴리스는 Python 3.8입니다. azureml-pipeline 패키지를 설치하는 데 어려움이 있는 경우 python --version이 호환되는 릴리스인지 확인합니다. 지침은 Python 가상 환경 관리자(venv, conda 등)의 설명서를 참조하세요.

대화형 Python 세션 시작

이 자습서에서는 Azure Machine Learning용 Python SDK를 사용하여 Azure Machine Learning 파이프라인을 만들고 제어합니다. 이 자습서에서는 Python REPL 환경 또는 Jupyter Notebook에서 코드 조각을 대화형으로 실행한다고 가정합니다.

  • 이 자습서는 Azure Machine Learning 예제 리포지토리의 python-sdk/tutorial/using-pipelines 디렉터리에 있는 image-classification.ipynb Notebook을 기반으로 합니다. 단계 자체에 대한 소스 코드는 keras-mnist-fashion 하위 디렉터리에 있습니다.

가져오기 형식

이 자습서에 필요한 모든 Azure Machine Learning 형식을 가져옵니다.

import os
import azureml.core
from azureml.core import (
    Workspace,
    Experiment,
    Dataset,
    Datastore,
    ComputeTarget,
    Environment,
    ScriptRunConfig
)
from azureml.data import OutputFileDatasetConfig
from azureml.core.compute import AmlCompute
from azureml.core.compute_target import ComputeTargetException
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.core import Pipeline

# check core SDK version number
print("Azure Machine Learning SDK Version: ", azureml.core.VERSION)

Azure Machine Learning SDK 버전은 1.37 이상이어야 합니다. 그렇지 않은 경우 pip install --upgrade azureml-core를 사용하여 업그레이드합니다.

작업 영역 구성

기존 Azure Machine Learning 작업 영역에서 작업 영역 개체를 만듭니다.

workspace = Workspace.from_config()

Important

이 코드 조각은 작업 영역 구성이 현재 디렉터리 또는 부모 디렉터리에 저장될 것으로 예상합니다. 작업 영역 만들기에 대한 자세한 내용은 작업 영역 리소스 만들기를 참조하세요. 파일에 구성 저장에 대한 자세한 내용은 작업 영역 구성 파일 만들기를 참조 하세요.

파이프라인에 대한 인프라 만들기

파이프라인 실행 결과를 보관할 Experiment 개체를 만듭니다.

exp = Experiment(workspace=workspace, name="keras-mnist-fashion")

파이프라인이 실행되는 컴퓨터 리소스를 나타내는 ComputeTarget을 만듭니다. 이 자습서에서 사용되는 간단한 신경망은 CPU 기반 컴퓨터에서도 단 몇 분 만에 학습됩니다. GPU를 학습에 사용하려면 use_gpuTrue로 설정합니다. 일반적으로 컴퓨팅 대상을 프로비전하는 데 약 5분이 걸립니다.

use_gpu = False

# choose a name for your cluster
cluster_name = "gpu-cluster" if use_gpu else "cpu-cluster"

found = False
# Check if this compute target already exists in the workspace.
cts = workspace.compute_targets
if cluster_name in cts and cts[cluster_name].type == "AmlCompute":
    found = True
    print("Found existing compute target.")
    compute_target = cts[cluster_name]
if not found:
    print("Creating a new compute target...")
    compute_config = AmlCompute.provisioning_configuration(
        vm_size= "STANDARD_NC6" if use_gpu else "STANDARD_D2_V2"
        # vm_priority = 'lowpriority', # optional
        max_nodes=4,
    )

    # Create the cluster.
    compute_target = ComputeTarget.create(workspace, cluster_name, compute_config)

    # Can poll for a minimum number of nodes and for a specific timeout.
    # If no min_node_count is provided, it will use the scale settings for the cluster.
    compute_target.wait_for_completion(
        show_output=True, min_node_count=None, timeout_in_minutes=10
    )
# For a more detailed view of current AmlCompute status, use get_status().print(compute_target.get_status().serialize())

참고 항목

GPU 가용성은 Azure 구독 할당량과 Azure 용량에 따라 달라집니다. Azure Machine Learning을 사용하여 리소스 할당량 관리 및 증가를 참조하세요.

Azure에 저장된 데이터에 대한 데이터 세트 만들기

Fashion-MNIST는 10개의 클래스로 구분된 패션 이미지의 데이터 세트입니다. 각 이미지는 28x28 회색조 이미지이며, 60,000개의 학습 이미지와 10,000개의 테스트 이미지가 있습니다. 이미지 분류 문제로서 Fashion-MNIST는 클래식 MNIST 필기 숫자 데이터베이스보다 어렵습니다. 원래 필기 숫자 데이터베이스와 동일한 압축된 이진 형식으로 배포됩니다.

웹 기반 데이터를 참조하는 Dataset를 만들려면 다음을 실행합니다.

data_urls = ["https://data4mldemo6150520719.blob.core.windows.net/demo/mnist-fashion"]
fashion_ds = Dataset.File.from_files(data_urls)

# list the files referenced by fashion_ds
print(fashion_ds.to_path())

이 코드는 빠르게 완료됩니다. 기본 데이터는 data_urls 배열에 지정된 Azure 스토리지 리소스에 남아 있습니다.

데이터 준비 파이프라인 단계 만들기

이 파이프라인의 첫 번째 단계는 fashion_ds의 압축된 데이터 파일을 학습에 사용할 준비가 된 CSV 파일로 구성된 사용자 고유의 작업 영역에 있는 데이터 세트로 변환합니다. 작업 영역에 등록되면 협력자는 자신의 분석, 학습 등을 위해 이 데이터에 액세스할 수 있습니다.

datastore = workspace.get_default_datastore()
prepared_fashion_ds = OutputFileDatasetConfig(
    destination=(datastore, "outputdataset/{run-id}")
).register_on_complete(name="prepared_fashion_ds")

위의 코드에서는 파이프라인 단계의 출력을 기반으로 하는 데이터 세트를 지정합니다. 기본 처리된 파일은 destination에 지정된 경로에 있는 작업 영역의 기본 데이터 저장소의 Blob 스토리지에 배치됩니다. 데이터 세트는 prepared_fashion_ds이라는 이름으로 작업 영역에 등록됩니다.

파이프라인 단계의 원본 만들기

지금까지 실행한 코드는 Azure 리소스를 만들고 제어하는 것이었습니다. 이제는 도메인에서 첫 번째 단계를 수행하는 코드를 작성할 시간입니다.

Azure Machine Learning 예제 리포지토리의 예제를 따르는 경우 원본 파일을 이미 keras-mnist-fashion/prepare.py로 사용할 수 있습니다.

처음부터 작업하는 경우 keras-mnist-fashion/이라는 하위 디렉터리를 만듭니다. 새 파일을 만들고, 다음 코드를 이 파일에 추가하고, 파일 이름을 prepare.py로 지정합니다.

# prepare.py
# Converts MNIST-formatted files at the passed-in input path to a passed-in output path
import os
import sys

# Conversion routine for MNIST binary format
def convert(imgf, labelf, outf, n):
    f = open(imgf, "rb")
    l = open(labelf, "rb")
    o = open(outf, "w")

    f.read(16)
    l.read(8)
    images = []

    for i in range(n):
        image = [ord(l.read(1))]
        for j in range(28 * 28):
            image.append(ord(f.read(1)))
        images.append(image)

    for image in images:
        o.write(",".join(str(pix) for pix in image) + "\n")
    f.close()
    o.close()
    l.close()

# The MNIST-formatted source
mounted_input_path = sys.argv[1]
# The output directory at which the outputs will be written
mounted_output_path = sys.argv[2]

# Create the output directory
os.makedirs(mounted_output_path, exist_ok=True)

# Convert the training data
convert(
    os.path.join(mounted_input_path, "mnist-fashion/train-images-idx3-ubyte"),
    os.path.join(mounted_input_path, "mnist-fashion/train-labels-idx1-ubyte"),
    os.path.join(mounted_output_path, "mnist_train.csv"),
    60000,
)

# Convert the test data
convert(
    os.path.join(mounted_input_path, "mnist-fashion/t10k-images-idx3-ubyte"),
    os.path.join(mounted_input_path, "mnist-fashion/t10k-labels-idx1-ubyte"),
    os.path.join(mounted_output_path, "mnist_test.csv"),
    10000,
)

prepare.py의 코드는 두 개의 명령줄 인수를 사용합니다. 첫 번째 인수는 mounted_input_path에 할당되고 두 번째 인수는 mounted_output_path에 할당됩니다. 해당 하위 디렉터리가 없는 경우 os.makedirs를 호출하여 이를 만듭니다. 그런 다음, 프로그램에서 학습 및 테스트 데이터를 변환하고 쉼표로 구분된 파일을 mounted_output_path에 출력합니다.

파이프라인 단계 지정

파이프라인을 지정하는 데 사용하는 Python 환경으로 돌아가서 다음 코드를 실행하여 준비 코드에 대한 PythonScriptStep을 만듭니다.

script_folder = "./keras-mnist-fashion"

prep_step = PythonScriptStep(
    name="prepare step",
    script_name="prepare.py",
    # On the compute target, mount fashion_ds dataset as input, prepared_fashion_ds as output
    arguments=[fashion_ds.as_named_input("fashion_ds").as_mount(), prepared_fashion_ds],
    source_directory=script_folder,
    compute_target=compute_target,
    allow_reuse=True,
)

파이프라인 단계가 실행될 때 PythonScriptStep을 호출하면 다음과 같이 지정됩니다.

  • script_folder 디렉터리의 모든 파일을 compute_target에 업로드합니다.
  • 업로드된 원본 파일 중 prepare.py 파일을 실행합니다.
  • fashion_dsprepared_fashion_ds 데이터 세트를 compute_target에 탑재하고 디렉터리로 표시합니다.
  • fashion_ds 파일의 경로는 prepare.py에 대한 첫 번째 인수가 됩니다. prepare.py에서 이 인수를 mounted_input_path에 할당합니다.
  • prepared_fashion_ds에 대한 경로는 prepare.py에 대한 두 번째 인수가 됩니다. prepare.py에서 이 인수를 mounted_output_path에 할당합니다.
  • allow_reuseTrue이므로 원본 파일 또는 입력이 변경될 때까지 이를 다시 실행하지 않습니다.
  • PythonScriptStep의 이름을 prepare step으로 지정합니다.

모듈화 및 재사용은 파이프라인의 주요 이점입니다. Azure Machine Learning은 소스 코드 또는 데이터 세트 변경 내용을 자동으로 확인할 수 있습니다. allow_reuseTrue인 경우 단계를 다시 실행하지 않고 영향을 받지 않은 단계의 출력이 다시 사용됩니다. 단계에서 변경될 수 있는 Azure Machine Learning 외부의 데이터 원본(예: 판매 데이터가 포함된 URL)을 사용하는 경우 allow_reuseFalse로 설정하면 파이프라인이 실행될 때마다 파이프라인 단계가 실행됩니다.

학습 단계 만들기

데이터가 압축된 형식에서 CSV 파일로 변환되면 나선형 신경망을 학습시키는 데 사용할 수 있습니다.

학습 단계의 원본 만들기

더 큰 파이프라인을 사용하는 경우 각 단계의 소스 코드를 별도의 디렉터리(src/prepare/, src/train/ 등)에 배치하는 것이 좋지만, 이 자습서에서는 동일한 keras-mnist-fashion/ 원본 디렉터리에서 train.py 파일을 사용하거나 만들기만 하면 됩니다.

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.utils import to_categorical
from keras.callbacks import Callback

import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from azureml.core import Run

# dataset object from the run
run = Run.get_context()
dataset = run.input_datasets["prepared_fashion_ds"]

# split dataset into train and test set
(train_dataset, test_dataset) = dataset.random_split(percentage=0.8, seed=111)

# load dataset into pandas dataframe
data_train = train_dataset.to_pandas_dataframe()
data_test = test_dataset.to_pandas_dataframe()

img_rows, img_cols = 28, 28
input_shape = (img_rows, img_cols, 1)

X = np.array(data_train.iloc[:, 1:])
y = to_categorical(np.array(data_train.iloc[:, 0]))

# here we split validation data to optimiza classifier during training
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=13)

# test data
X_test = np.array(data_test.iloc[:, 1:])
y_test = to_categorical(np.array(data_test.iloc[:, 0]))


X_train = (
    X_train.reshape(X_train.shape[0], img_rows, img_cols, 1).astype("float32") / 255
)
X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1).astype("float32") / 255
X_val = X_val.reshape(X_val.shape[0], img_rows, img_cols, 1).astype("float32") / 255

batch_size = 256
num_classes = 10
epochs = 10

# construct neuron network
model = Sequential()
model.add(
    Conv2D(
        32,
        kernel_size=(3, 3),
        activation="relu",
        kernel_initializer="he_normal",
        input_shape=input_shape,
    )
)
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), activation="relu"))
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(num_classes, activation="softmax"))

model.compile(
    loss=keras.losses.categorical_crossentropy,
    optimizer=keras.optimizers.Adam(),
    metrics=["accuracy"],
)

# start an Azure ML run
run = Run.get_context()


class LogRunMetrics(Callback):
    # callback at the end of every epoch
    def on_epoch_end(self, epoch, log):
        # log a value repeated which creates a list
        run.log("Loss", log["loss"])
        run.log("Accuracy", log["accuracy"])


history = model.fit(
    X_train,
    y_train,
    batch_size=batch_size,
    epochs=epochs,
    verbose=1,
    validation_data=(X_val, y_val),
    callbacks=[LogRunMetrics()],
)

score = model.evaluate(X_test, y_test, verbose=0)

# log a single value
run.log("Final test loss", score[0])
print("Test loss:", score[0])

run.log("Final test accuracy", score[1])
print("Test accuracy:", score[1])

plt.figure(figsize=(6, 3))
plt.title("Fashion MNIST with Keras ({} epochs)".format(epochs), fontsize=14)
plt.plot(history.history["accuracy"], "b-", label="Accuracy", lw=4, alpha=0.5)
plt.plot(history.history["loss"], "r--", label="Loss", lw=4, alpha=0.5)
plt.legend(fontsize=12)
plt.grid(True)

# log an image
run.log_image("Loss v.s. Accuracy", plot=plt)

# create a ./outputs/model folder in the compute target
# files saved in the "./outputs" folder are automatically uploaded into run history
os.makedirs("./outputs/model", exist_ok=True)

# serialize NN architecture to JSON
model_json = model.to_json()
# save model JSON
with open("./outputs/model/model.json", "w") as f:
    f.write(model_json)
# save model weights
model.save_weights("./outputs/model/model.h5")
print("model saved in ./outputs/model folder")

이 코드의 대부분은 다음과 같이 ML 개발자에게 익숙해야 합니다.

  • 데이터는 학습을 위한 학습 및 유효성 검사 세트와 최종 채점을 위한 별도의 테스트 하위 집합으로 분할됩니다.
  • 입력 셰이프는 28x28x1(입력이 회색조이므로 하나만)이고 일괄 처리에 256개의 입력이 있고, 10개의 클래스가 있습니다.
  • 학습 Epoch의 수는 10개입니다.
  • 모델에는 최대 풀링 및 드롭아웃이 있는 3개의 나선형 계층이 있으며, 그 뒤에는 dense 계층과 softmax 헤드가 있습니다.
  • 모델은 10 Epoch 동안 적합하고 평가됩니다.
  • 모델 아키텍처는 outputs/model/model.json에 작성되고 가중치는 outputs/model/model.h5에 작성됩니다.

그러나 일부 코드는 Azure Machine Learning으로만 한정됩니다. run = Run.get_context()는 현재 서비스 컨텍스트가 포함된 Run 개체를 검색합니다. train.py 원본은 이 run 개체를 사용하여 해당 이름을 통해 입력 데이터 세트를 검색합니다(스크립트 인수의 argv 배열을 통해 데이터 세트를 검색한 prepare.py의 코드에 대한 대안).

또한 run 개체는 모든 Epoch의 끝에 학습 진행 상황을 기록하고 학습의 끝에 시간이 지남에 따른 손실 및 정확도 그래프를 기록하는 데 사용됩니다.

학습 파이프라인 단계 만들기

학습 단계의 구성은 준비 단계보다 약간 더 복잡합니다. 준비 단계에서는 표준 Python 라이브러리만 사용했습니다. 더 일반적으로 소스 코드가 실행되는 런타임 환경을 수정해야 합니다.

다음 콘텐츠가 포함된 conda_dependencies.yml 파일을 만듭니다.

dependencies:
- python=3.7
- pip:
  - azureml-core
  - azureml-dataset-runtime
  - keras==2.4.3
  - tensorflow==2.4.3
  - numpy
  - scikit-learn
  - pandas
  - matplotlib

Environment 클래스는 기계 학습 작업이 실행되는 런타임 환경을 나타냅니다. 다음을 사용하여 위의 사양을 학습 코드와 연결합니다.

keras_env = Environment.from_conda_specification(
    name="keras-env", file_path="./conda_dependencies.yml"
)

train_cfg = ScriptRunConfig(
    source_directory=script_folder,
    script="train.py",
    compute_target=compute_target,
    environment=keras_env,
)

학습 단계 자체를 만들면 다음과 같이 준비 단계를 만드는 데 사용되는 코드와 비슷한 코드를 사용합니다.

train_step = PythonScriptStep(
    name="train step",
    arguments=[
        prepared_fashion_ds.read_delimited_files().as_input(name="prepared_fashion_ds")
    ],
    source_directory=train_cfg.source_directory,
    script_name=train_cfg.script,
    runconfig=train_cfg.run_config,
)

파이프라인 만들기 및 실행

이제 데이터 입력 및 출력을 지정하고 파이프라인의 단계를 만들었으므로 파이프라인으로 작성하여 실행할 수 있습니다.

pipeline = Pipeline(workspace, steps=[prep_step, train_step])
run = exp.submit(pipeline)

만든 Pipeline 개체는 workspace에서 실행되며 지정한 준비 및 학습 단계로 구성됩니다.

참고 항목

이 파이프라인에는 간단한 종속성 그래프가 있습니다. 즉, 학습 단계는 준비 단계에 종속되고 준비 단계는 fashion_ds 데이터 세트에 종속됩니다. 프로덕션 파이프라인에는 훨씬 더 복잡한 종속성이 있는 경우가 많습니다. 단계는 여러 업스트림 단계에 종속될 수 있으며, 초기 단계의 소스 코드 변경은 광범위한 결과를 초래할 수 있습니다. Azure Machine Learning은 이러한 문제를 추적합니다. steps 배열을 전달하기만 하면 됩니다. 그러면 Azure Machine Learning에서 실행 그래프 계산을 처리합니다.

Experiment를 제출(submit)하기 위한 호출이 빠르게 완료되고 다음과 비슷한 출력이 생성됩니다.

Submitted PipelineRun 5968530a-abcd-1234-9cc1-46168951b5eb
Link to Azure Machine Learning Portal: https://ml.azure.com/runs/abc-xyz...

링크를 열어 파이프라인 실행을 모니터링하거나 다음을 실행하여 완료될 때까지 차단할 수 있습니다.

run.wait_for_completion(show_output=True)

Important

첫 번째 파이프라인 실행에는 약 15분이 걸립니다. 모든 종속성을 다운로드해야 하고, Docker 이미지를 만들고, Python 환경을 프로비저닝하고 만듭니다. 파이프라인을 다시 실행하면 해당 리소스를 만드는 대신 다시 사용하므로 이 실행에 걸리는 시간이 크게 줄어듭니다. 그러나 파이프라인의 총 실행 시간은 스크립트의 워크로드 및 각 파이프라인 단계에서 실행되는 프로세스에 따라 달라집니다.

파이프라인이 완료되면 학습 단계에서 기록한 메트릭을 검색할 수 있습니다.

run.find_step_run("train step")[0].get_metrics()

메트릭에 만족하면 모델을 작업 영역에 등록할 수 있습니다.

run.find_step_run("train step")[0].register_model(
    model_name="keras-model",
    model_path="outputs/model/",
    datasets=[("train test data", fashion_ds)],
)

리소스 정리

다른 Azure Machine Learning 자습서를 실행하려면 이 섹션을 수행하지 마세요.

컴퓨팅 인스턴스 중지

컴퓨팅 인스턴스를 사용한 경우 사용하지 않을 때는 해당 VM을 중지하여 비용을 절감합니다.

  1. 작업 영역에서 컴퓨팅을 선택합니다.

  2. 목록에서 컴퓨팅 인스턴스의 이름을 선택합니다.

  3. 중지를 선택합니다.

  4. 서버를 다시 사용할 준비가 되면 시작을 선택합니다.

모든 항목 삭제

자신이 만든 리소스를 사용하지 않으려는 경우 요금이 발생하지 않도록 삭제하세요.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.
  2. 리소스 그룹 목록에서 만든 리소스 그룹을 선택합니다.
  3. 리소스 그룹 삭제를 선택합니다.
  4. 리소스 그룹 이름을 입력합니다. 그런 다음, 삭제를 선택합니다.

또한 리소스 그룹을 유지하면서 단일 작업 영역을 삭제할 수도 있습니다. 작업 영역 속성을 표시한 다음, 삭제를 선택합니다.

다음 단계

이 자습서에서는 다음 형식을 사용했습니다.

  • Workspace는 Azure Machine Learning 작업 영역을 나타냅니다. 이 형식에 포함된 항목은 다음과 같습니다.
    • Experiment - 파이프라인의 학습 실행 결과를 포함합니다.
    • Dataset - Fashion-MNIST 데이터 저장소에 보관된 데이터를 지연 로드합니다.
    • ComputeTarget - 파이프라인 단계가 실행되는 컴퓨터를 나타냅니다.
    • Environment - 파이프라인 단계가 실행되는 런타임 환경입니다.
    • Pipeline - PythonScriptStep 단계를 전체적으로 구성합니다.
    • Model - 학습 프로세스에 만족한 후 등록한 모델입니다.

Workspace 개체에는 이 자습서에서 사용되지 않은 다른 리소스(Notebook, 엔드포인트 등)에 대한 참조가 포함되어 있습니다. 자세한 내용은 Azure Machine Learning 작업 영역이란?을 참조하세요.

OutputFileDatasetConfig는 실행의 출력을 파일 기반 데이터 세트로 승격시킵니다. 데이터 세트 및 데이터 작업에 대한 자세한 내용은 데이터에 액세스하는 방법을 참조하세요.

컴퓨팅 대상 및 환경에 대한 자세한 내용은 Azure Machine Learning에서 컴퓨팅 대상이란?Azure Machine Learning 환경이란?을 참조하세요.

ScriptRunConfigComputeTargetEnvironment를 Python 원본 파일과 연결합니다. PythonScriptStep은 해당 ScriptRunConfig를 가져와서 입력 및 출력을 정의하며, 이 파이프라인에서는 OutputFileDatasetConfig에서 빌드한 파일 데이터 세트입니다.

기계 학습 SDK를 사용하여 파이프라인을 빌드하는 방법에 대한 추가 예제는 예제 리포지토리를 참조하세요.