적용 대상:Python용 Azure Machine Learning SDK v1
중요합니다
이 문서에서는 Azure Machine Learning SDK v1 사용에 대한 정보를 제공합니다. SDK v1은 2025년 3월 31일부터 더 이상 사용되지 않습니다. 지원은 2026년 6월 30일에 종료됩니다. 해당 날짜까지 SDK v1을 설치하고 사용할 수 있습니다.
2026년 6월 30일 이전에 SDK v2로 전환하는 것이 좋습니다. SDK v2에 대한 자세한 내용은 Azure Machine Learning CLI 및 Python SDK v2란? 및 SDK v2 참조를 참조하세요.
이 문서에서는 Azure Machine Learning 파이프라인의 단계 간에 데이터를 가져오고, 데이터를 변환하고, 데이터를 이동하기 위한 코드를 제공합니다. Azure Machine Learning에서 데이터의 작동 방식에 대한 개요는 Azure Storage 서비스에서 데이터 액세스를 참조하세요. Azure Machine Learning 파이프라인의 이점 및 구조에 대한 자세한 내용은 Azure Machine Learning 파이프라인이란?을 참조하세요.
이 문서는 다음 방법을 안내합니다.
- 기존 데이터에 개체 사용
Dataset
- 단계 내의 데이터 액세스
Dataset
데이터를 학습 및 유효성 검사 하위 집합과 같은 하위 집합으로 분할- 다음 파이프라인 단계로 데이터를 전송하는
OutputFileDatasetConfig
개체 만들기 - 파이프라인 단계에 대한 입력으로
OutputFileDatasetConfig
개체 사용 Dataset
에서 유지하려는 새OutputFileDatasetConfig
개체 만들기
필수 구성 요소
Azure 구독 무료 계정이 없으면 시작하기 전에 계정을 만듭니다. Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.
Python용 Azure Machine Learning SDK 또는 Azure Machine Learning 스튜디오에 대한 액세스 권한
Azure Machine Learning 작업 영역
Azure Machine Learning 작업 영역을 만들거나 Python SDK를 통해 기존 작업 영역을 사용합니다.
Workspace
및Datastore
클래스를 가져오고, 파일config.json
를 사용하여 함수from_config()
로 구독 정보를 로드합니다. 이 함수는 기본적으로 현재 디렉터리에서 JSON 파일을 찾지만 경로를 지정하여 파일을from_config(path="your/file/path")
가리킬 수도 있습니다.import azureml.core from azureml.core import Workspace, Datastore ws = Workspace.from_config()
일부 기존 데이터입니다. 이 문서에서는 Azure BLOB 컨테이너 사용에 대해 간략하게 설명합니다.
선택 사항: Azure Machine Learning SDK를 사용하여 기계 학습 파이프라인 생성 및 실행에 설명된 것과 같은 기존 기계 학습 파이프라인입니다.
기존 데이터에 개체 사용 Dataset
파이프라인으로 데이터를 수집하는 기본 방법은 Dataset 개체를 사용하는 것입니다. Dataset
개체는 작업 영역 전체에서 사용할 수 있는 영구 데이터를 나타냅니다.
Dataset
개체를 만들고 등록하는 방법에는 여러 가지가 있습니다. 테이블 형식 데이터 세트는 하나 이상의 파일에서 사용할 수 있는 구분된 데이터에 대한 것입니다. 파일 데이터 세트는 이미지와 같은 이진 데이터 또는 구문을 분석할 데이터에 대한 것입니다. Dataset
개체를 만드는 가장 간단한 프로그래밍 방식은 작업 영역 스토리지 또는 퍼블릭 URL에서 기존 BLOB을 사용하는 것입니다.
datastore = Datastore.get(workspace, 'training_data')
iris_dataset = Dataset.Tabular.from_delimited_files(DataPath(datastore, 'iris.csv'))
datastore_path = [
DataPath(datastore, 'animals/dog/1.jpg'),
DataPath(datastore, 'animals/dog/2.jpg'),
DataPath(datastore, 'animals/cat/*.jpg')
]
cats_dogs_dataset = Dataset.File.from_files(path=datastore_path)
다양한 옵션을 사용하여 데이터 세트를 만들고, 다른 원본에서 데이터 세트를 만들고, 등록하고, Azure Machine Learning UI에서 검토하고, 데이터 크기가 컴퓨팅 용량과 상호 작용하는 방식을 이해하고, 버전 관리 방법에 대한 자세한 내용은 Azure Machine Learning 데이터 세트 만들기를 참조하세요.
스크립트에 데이터 세트 전달
데이터 세트의 경로를 스크립트로 전달하려면 Dataset
개체의 as_named_input()
메서드를 사용합니다. 결과 개체를 DatasetConsumptionConfig
인수로 스크립트에 전달하거나 inputs
파이프라인 스크립트를 위한 인수를 사용하여 Run.get_context().input_datasets[]
데이터 세트를 검색할 수 있습니다.
명명된 입력을 만든 후에는 해당 액세스 모드(전용 FileDataset
) as_mount()
를 선택할 수 있습니다. 또는 as_download()
. 스크립트가 데이터 세트의 모든 파일을 처리하고 컴퓨팅 리소스의 디스크가 데이터 세트에 충분히 큰 경우 다운로드 액세스 모드를 선택하는 것이 좋습니다. 다운로드 액세스 모드는 런타임 시 데이터 스트리밍의 오버헤드를 방지합니다. 스크립트가 데이터 세트의 하위 집합에 액세스하거나 컴퓨팅에 비해 너무 큰 경우 탑재 액세스 모드를 사용합니다. 자세한 내용은 탑재 및 다운로드를 참조하세요.
파이프라인 단계에 데이터 세트를 전달하려면:
TabularDataset.as_named_input()
개체를 만들려면FileDataset.as_named_input()
또는 사용(끝에DatasetConsumptionConfig
없음).FileDataset
전용:as_mount()
또는as_download()
을(를) 사용하여 액세스 모드를 설정합니다. 에서는TabularDataset
액세스 모드를 설정할 수 없습니다.arguments
또는inputs
을 사용하여 데이터 세트를 파이프라인 단계에 전달합니다.
다음 코드 조각은 PythonScriptStep
(iris_dataset
)을 사용하여 TabularDataset
생성자 내에서 단계를 결합하는 일반적인 패턴을 보여줍니다.
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[iris_dataset.as_named_input('iris')]
)
참고
이러한 모든 인수(즉, "train_data"
, , "train.py"
cluster
및iris_dataset
)의 값을 사용자 고유의 데이터로 바꿔야 합니다.
위의 코드 조각은 통화 형식만 표시하며 Microsoft 샘플의 일부가 아닙니다.
다음과 같은 random_split()
take_sample()
메서드를 사용하여 여러 입력을 만들거나 파이프라인 단계에 전달되는 데이터의 양을 줄일 수도 있습니다.
seed = 42 # PRNG seed
smaller_dataset = iris_dataset.take_sample(0.1, seed=seed) # 10%
train, test = smaller_dataset.random_split(percentage=0.8, seed=seed)
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[train.as_named_input('train'), test.as_named_input('test')]
)
스크립트 내에서 데이터 세트에 액세스
파이프라인 단계 스크립트의 명명된 입력은 Run
개체 내에서 사전으로 사용할 수 있습니다. 를 사용하여 Run
활성 Run.get_context()
개체를 검색한 다음 , 를 사용하여 input_datasets
명명된 입력의 사전을 검색합니다. DatasetConsumptionConfig
인수를 사용하여 arguments
개체를 전달한 경우, 인수 inputs
대신에, ArgumentParser
코드를 사용하여 데이터에 액세스합니다. 다음 코드 조각에서는 두 가지 방법을 모두 보여 줍니다.
파이프라인 정의 스크립트
# Code is for demonstration only: It would be confusing to split datasets between `arguments` and `inputs`
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
# Datasets passed as arguments
arguments=['--training-folder', train.as_named_input('train').as_download()],
# Datasets passed as inputs
inputs=[test.as_named_input('test').as_download()]
)
PythonScriptStep에서 참조된 train.py
스크립트
# In pipeline script
parser = argparse.ArgumentParser()
# Retrieve the dataset passed as an argument
parser.add_argument('--training-folder', type=str, dest='train_folder', help='training data folder mounting point')
args = parser.parse_args()
training_data_folder = args.train_folder
# Retrieve the dataset passed as an input
testing_data_folder = Run.get_context().input_datasets['test']
전달된 값은 데이터 세트 파일 또는 파일의 경로입니다.
등록된 데이터 세트는 작업 영역에서 영구적이고 공유되므로 직접 검색할 수 있습니다.
run = Run.get_context()
ws = run.experiment.workspace
ds = Dataset.get_by_name(workspace=ws, name='mnist_opendataset')
참고
앞의 코드 조각은 호출의 형태를 보여 옵니다. Microsoft 샘플의 일부가 아닙니다. 인수를 사용자 고유의 프로젝트의 값으로 바꿔야 합니다.
중간 데이터에 OutputFileDatasetConfig
사용
Dataset
개체는 영구 데이터만을 나타내지만, OutputFileDatasetConfig
개체는 파이프라인 단계의 임시 데이터 출력뿐 아니라 영구 출력 데이터에도 사용할 수 있습니다. OutputFileDatasetConfig
는 Blob Storage, 파일 공유, Azure Data Lake Storage Gen1 또는 Data Lake Storage Gen2에 데이터 쓰기를 지원합니다. 탑재 모드와 업로드 모드를 모두 지원합니다. 탑재 모드에서 탑재된 디렉터리에 기록된 파일은 파일을 닫을 때 영구적으로 저장됩니다. 업로드 모드에서 출력 디렉터리에 기록된 파일은 작업 종료 시 업로드됩니다. 작업이 실패하거나 취소되면 출력 디렉터리가 업로드되지 않습니다.
OutputFileDatasetConfig
개체의 기본 동작은 작업 영역의 기본 데이터 저장소에 쓰는 것입니다. OutputFileDatasetConfig
개체를 PythonScriptStep
에 arguments
매개 변수를 사용하여 전달합니다.
from azureml.data import OutputFileDatasetConfig
dataprep_output = OutputFileDatasetConfig()
input_dataset = Dataset.get_by_name(workspace, 'raw_data')
dataprep_step = PythonScriptStep(
name="prep_data",
script_name="dataprep.py",
compute_target=cluster,
arguments=[input_dataset.as_named_input('raw_data').as_mount(), dataprep_output]
)
참고
OutputFileDatasetConfig
에 대한 동시 쓰기가 실패하게 됩니다. 동시에 단일 OutputFileDatasetConfig
을 사용하지 마세요. OutputFileDatasetConfig
을 사용하는 경우와 같이 다중 처리 상황에서는 단일 항목을 공유하지 마세요.
학습 단계의 출력으로 OutputFileDatasetConfig
사용
파이프라인 PythonScriptStep
에서 프로그램의 인수를 사용하여 사용 가능한 출력 경로를 검색할 수 있습니다. 이 단계가 첫 번째 단계이고 출력 데이터를 초기화하는 경우 지정된 경로에 디렉터리를 만들어야 합니다. 그런 다음, 원하는 파일을 OutputFileDatasetConfig
에 포함하도록 작성할 수 있습니다.
parser = argparse.ArgumentParser()
parser.add_argument('--output_path', dest='output_path', required=True)
args = parser.parse_args()
# Make directory for file
os.makedirs(os.path.dirname(args.output_path), exist_ok=True)
with open(args.output_path, 'w') as f:
f.write("Step 1's output")
OutputFileDatasetConfig
를 초기 단계가 아닌 단계에 대한 입력으로 읽기
초기 파이프라인 단계에서 일부 데이터를 OutputFileDatasetConfig
경로에 쓰고 초기 단계의 출력이 되면 이후 단계에 대한 입력으로 사용할 수 있습니다.
다음 코드에서:
step1_output_data
는 업로드 액세스 모드에서PythonScriptStep
step1
Data Lake Storage Gen2 데이터 저장소my_adlsgen2
에 출력이 기록되었음을 나타냅니다. Data Lake Storage Gen2 데이터 저장소에 데이터를 다시 쓰기 위해 역할 권한을 설정하는 방법에 대한 자세한 내용은 데이터 저장소를 사용하여 Azure의 스토리지 서비스에 연결을 참조하세요.step1
가 완료되어 출력이step1_output_data
에서 지정한 대상에 기록되면,step2
는step1_output_data
를 입력으로 사용할 준비가 됩니다.
# Get Data Lake Storage Gen2 datastore that's already registered with the workspace
datastore = workspace.datastores['my_adlsgen2']
step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
step1 = PythonScriptStep(
name="generate_data",
script_name="step1.py",
runconfig = aml_run_config,
arguments = ["--output_path", step1_output_data]
)
step2 = PythonScriptStep(
name="read_pipeline_data",
script_name="step2.py",
compute_target=compute,
runconfig = aml_run_config,
arguments = ["--pd", step1_output_data.as_input()]
)
pipeline = Pipeline(workspace=ws, steps=[step1, step2])
팁
Python 스크립트 step2.py
에서 데이터를 읽는 프로세스는 스크립트 내 Access 데이터 세트의 앞부분에서 설명한 프로세스와 동일합니다. 데이터에 액세스하기 위해 스크립트에서 ArgumentParser
인수를 추가하는 데 사용합니다--pd
.
다시 사용할 OutputFileDatasetConfig
개체 등록
실험 기간보다 오랫동안 개체를 OutputFileDatasetConfig
사용할 수 있도록 하려면 작업 영역에 등록하여 실험 간에 공유하고 다시 사용합니다.
step1_output_ds = step1_output_data.register_on_complete(
name='processed_data',
description = 'files from step1'
)
더 이상 필요하지 않은 경우 콘텐츠 삭제 OutputFileDatasetConfig
Azure는 로 작성된 OutputFileDatasetConfig
중간 데이터를 자동으로 삭제하지 않습니다. 많은 양의 불필요한 데이터에 대한 스토리지 요금을 방지하려면 다음 작업 중 하나를 수행해야 합니다.
파이프라인 작업 종료 시 중간 데이터가 더 이상 필요하지 않을 때 프로그래밍 방식으로 삭제합니다.
중간 데이터에 대한 단기 스토리지 정책과 함께 Blob Storage를 사용합니다. ( Azure Blob Storage 액세스 계층을 자동화하여 비용 최적화를 참조하세요.) 이 정책은 작업 영역의 기본이 아닌 데이터 저장소에서만 설정할 수 있습니다. 중간 데이터를 기본값이 아닌 다른 데이터 저장소로 내보내려면
OutputFileDatasetConfig
를 사용합니다.# Get Data Lake Storage Gen2 datastore that's already registered with the workspace datastore = workspace.datastores['my_adlsgen2'] step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
데이터를 정기적으로 검토하고 필요하지 않은 데이터를 삭제합니다.
주의
데이터의 마지막 변경 날짜로부터 30일이 지난 후에만 중간 데이터를 삭제합니다. 이전에 중간 데이터를 삭제하면 파이프라인이 다시 사용할 30일 동안 데이터가 있다고 가정하기 때문에 파이프라인 실행이 실패할 수 있습니다.
자세한 내용은 Azure Machine Learning 비용 관리 계획을 참조하세요.