Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНЯЕТСЯ К:Пакет SDK машинного обучения Azure версии 1 для Python
Это важно
В этой статье содержатся сведения об использовании пакета SDK машинного обучения Azure версии 1. Пакет SDK версии 1 устарел с 31 марта 2025 г. Поддержка будет завершена 30 июня 2026 г. Вы можете установить и использовать пакет SDK версии 1 до этой даты.
Рекомендуется перейти на пакет SDK версии 2 до 30 июня 2026 г. Дополнительные сведения о пакете SDK версии 2 см. в статье "Что такое ИНТЕРФЕЙС командной строки Машинного обучения Azure" и пакет SDK для Python версии 2 исправочник по пакету SDK версии 2.
В этой статье содержится код для импорта данных, преобразования данных и перемещения данных между шагами в конвейере машинного обучения Azure. Общие сведения об использовании данных в Машинном обучении Azure см. в статье Доступ к данным в службах хранилища Azure. Сведения о преимуществах и структуре конвейеров машинного обучения Azure см. в статье "Что такое конвейеры машинного обучения Azure?".
В этой статье показано, как сделать следующее:
- Используйте
Dataset
объекты для существующих данных - Получать доступ к данным при выполнении этапов
- Разделять данные
Dataset
на подмножества, например подмножества обучения и проверки - Создавать объекты
OutputFileDatasetConfig
для передачи данных на следующий этап конвейера - Использовать объекты
OutputFileDatasetConfig
в качестве входов для этапов конвейера - Создайте новые объекты
Dataset
изOutputFileDatasetConfig
, которые вы хотите сохранить.
Необходимые компоненты
Подписка Azure. Если у вас нет учетной записи, создайте бесплатную учетную запись перед началом работы. Попробуйте бесплатную или платную версию Машинного обучения Azure.
Пакет SDK Python для Машинного обучения Azure или доступ к Студии машинного обучения Azure.
Рабочая область Машинного обучения Azure.
Создайте рабочую область Машинного обучения Azure или используйте существующую с помощью пакета SDK для Python. Импортируйте классы
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()
Некоторые существующие данные. В этой статье кратко описано использование контейнера больших двоичных объектов (BLOB-объектов) Azure.
Необязательно. Существующий конвейер машинного обучения, например описанный в статье Создание и запуск конвейеров машинного обучения с помощью пакета SDK для машинного обучения Azure.
Используйте Dataset
объекты для существующих данных
Предпочтительный способ приема данных в конвейер — это использование объекта DataSet.
Dataset
объекты представляют постоянные данные, доступные в рабочей области.
Есть много способов создания и регистрации объектов Dataset
. Табличные наборы данных предназначены для разделённых данных, доступных в одном или нескольких файлах. Наборы данных файлов предназначены для двоичных данных (например, изображений) или для данных, которые вы анализируете. Самый простой программный способ создания объектов Dataset
— это использование существующих BLOB-объектов в хранилище рабочей области или общедоступных URL:
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, о том, как размер данных взаимодействует с вычислительной емкостью и их версиями, см. в статье "Создание наборов данных машинного обучения Azure".
Передача наборов данных в сценарий
Чтобы передать путь к набору данных в сценарий, используйте относящийся к объекту 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
объекта -
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
) собственными данными.
Приведенный выше фрагмент просто показывает форму вызова и не является частью примера Майкрософт.
Вы также можете использовать такие методы, как 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
. Оба метода демонстрируются в следующих фрагментах кода:
Скрипт определения конвейера
# 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()]
)
Сценарий train.py
, на который ссылается PythonScriptStep
# 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')
Примечание.
Предыдущие фрагменты кода показывают форму вызовов. Они не являются частью примера Майкрософт. Аргументы необходимо заменить значениями из собственного проекта.
Использование OutputFileDatasetConfig
для промежуточных данных
Хотя Dataset
объекты представляют только постоянные данные, OutputFileDatasetConfig
объекты можно использовать для временных выходных данных из шагов конвейера и для постоянных выходных данных.
OutputFileDatasetConfig
поддерживает запись данных в хранилище BLOB-объектов, общую папку, Azure Data Lake Storage 1-го поколения или Data Lake Storage 2-го поколения. Он поддерживает режим с установкой и режим с загрузкой. В режиме с установкой файлы, записанные в установленный каталог, помещаются на постоянное хранение при закрытии файла. В режиме с загрузкой файлы, записанные в выходной каталог, загружаются по окончании задания. Если задание завершается ошибкой или отменяется, выходной каталог не отправляется.
Поведение 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 второго поколенияmy_adlsgen2
в режиме доступа на загрузку. Сведения о настройке разрешений роли для записи данных в хранилища data Lake Storage 2-го поколения см. в статье "Подключение к службам хранилища в 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])
Совет
Процесс чтения данных в скрипте step2.py
Python совпадает с процессом, описанным ранее в наборах данных 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-объектов с краткосрочной политикой хранения для промежуточных данных. (См. статью "Оптимизация затрат путем автоматизации уровней доступа к хранилищу BLOB-объектов Azure".) Эту политику можно задать только в хранилище данных, отличном от рабочей области. Используется
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".