Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ:
расширение машинного обучения Azure CLI версии 2 (текущее)
Из этой статьи вы узнаете, как создавать и запускать конвейеры машинного обучения с помощью Azure CLI и компонентов. Конвейеры можно создавать без использования компонентов, но компоненты обеспечивают гибкость и возможность повторного использования. Конвейеры машинного обучения Azure можно определить в YAML и запустить из интерфейса командной строки, создать в Python или составить в конструкторе студии машинного обучения Azure с помощью интерфейса перетаскивания. В этой статье внимание сосредоточено на интерфейсе командной строки.
Необходимые компоненты
Подписка Azure. Если у вас нет учетной записи, создайте бесплатную учетную запись перед началом работы. Попробуйте бесплатную или платную версию Машинного обучения Azure.
Расширение Azure CLI для машинного обучения, установленное и настроенное.
Клон репозитория примеров. Эти команды можно использовать для клонирования репозитория:
git clone https://github.com/Azure/azureml-examples --depth 1 cd azureml-examples/cli/jobs/pipelines-with-components/basics
Рекомендуемые материалы для предварительного ознакомления
Создание первого конвейера с компонентами
Сначала вы создадите конвейер с компонентами с помощью примера. Это дает вам первоначальное впечатление о том, как выглядит конвейер и компонент в Машинном обучении Azure.
В каталоге cli/jobs/pipelines-with-components/basics перейдите azureml-examples в подкаталог. В этом каталоге есть три типа файлов. Это файлы, которые необходимо создать при сборке собственного конвейера.
pipeline.yml. Этот ФАЙЛ YAML определяет конвейер машинного обучения. В нем описывается, как разбить полную задачу машинного обучения на многоэтапный рабочий процесс. Например, рассмотрим простую задачу машинного обучения использования исторических данных для обучения модели прогнозирования продаж. Может потребоваться создать последовательный рабочий процесс, содержащий обработку данных, обучение модели и этапы оценки модели. Каждый шаг — это компонент, который имеет хорошо определенный интерфейс и может разрабатываться, тестироваться и оптимизироваться независимо. YAML конвейера также определяет, как дочерние шаги подключаются к другим шагам потока. Например, шаг обучения модели создает файл модели, а файл модели передается на шаг оценки модели.
component.yml. Эти файлы YAML определяют компоненты. Они содержат следующие сведения:
- Метаданные: имя, отображаемое имя, версия, описание, тип и т. д. Метаданные помогают описать компонент и управлять ими.
- Интерфейс: входные и выходные данные. Например, компонент обучения модели принимает данные обучения и количество эпох в качестве входных данных и создает файл обученной модели в качестве выходных данных. После определения интерфейса различные команды могут разрабатывать и тестировать компонент независимо.
- Команда, код и среда: команда, код и среда для запуска компонента. Эта команда — это команда оболочки для запуска компонента. Код обычно относится к каталогу исходного кода. Среда может быть средой машинного обучения Azure (подготовленной или созданной клиентом), образом Docker или средой conda.
component_src. Это каталоги исходного кода для определенных компонентов. Они содержат исходный код, выполняемый в компоненте. Вы можете использовать предпочитаемый язык, включая Python, R и другие. Код должен быть запущен через команду оболочки. Исходный код может принимать несколько входных данных из командной строки оболочки, чтобы управлять выполнением этого шага. Например, этап обучения может принимать обучающие данные, темп обучения и количество эпох, чтобы контролировать процесс обучения. С помощью аргумента команды оболочки входные и выходные данные передаются в код.
Теперь вы создадите 3b_pipeline_with_data конвейер с помощью примера. Каждый файл описан далее в следующих разделах.
Сначала перечислите доступные вычислительные ресурсы с помощью следующей команды:
az ml compute list
Если у вас его нет, создайте кластер, названный cpu-cluster, выполнив следующую команду:
Примечание.
Пропустите этот шаг, чтобы использовать бессерверные вычисления.
az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 10
Теперь создайте задание конвейера, определенное в файле pipeline.yml, выполнив следующую команду. Целевой объект вычислений ссылается в файле pipeline.yml как azureml:cpu-cluster. Если целевой объект вычислений использует другое имя, обязательно обновите его в файле pipeline.yml.
az ml job create --file pipeline.yml
Вы должны получить словарь JSON, содержащий информацию о задаче в конвейере, включая:
| Ключ. | Описание |
|---|---|
name |
Имя задания на основе GUID. |
experiment_name |
Имя, по которому задания будут организованы в студии. |
services.Studio.endpoint |
URL-адрес для мониторинга и просмотра задания конвейера. |
status |
Состояние задания. Это, вероятно, будет Preparing в данный момент. |
Перейдите services.Studio.endpoint по URL-адресу, чтобы просмотреть визуализацию конвейера:
Общие сведения об определении конвейера YAML
Теперь вы увидите определение конвейера в файле 3b_pipeline_with_data/pipeline.yml .
Примечание.
Чтобы использовать бессерверные вычисления, замените default_compute: azureml:cpu-cluster на default_compute: azureml:serverless этот файл.
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: 3b_pipeline_with_data
description: Pipeline with 3 component jobs with data dependencies
settings:
default_compute: azureml:cpu-cluster
outputs:
final_pipeline_output:
mode: rw_mount
jobs:
component_a:
type: command
component: ./componentA.yml
inputs:
component_a_input:
type: uri_folder
path: ./data
outputs:
component_a_output:
mode: rw_mount
component_b:
type: command
component: ./componentB.yml
inputs:
component_b_input: ${{parent.jobs.component_a.outputs.component_a_output}}
outputs:
component_b_output:
mode: rw_mount
component_c:
type: command
component: ./componentC.yml
inputs:
component_c_input: ${{parent.jobs.component_b.outputs.component_b_output}}
outputs:
component_c_output: ${{parent.outputs.final_pipeline_output}}
# mode: upload
В следующей таблице описаны наиболее часто используемые поля схемы YAML конвейера. Дополнительные сведения см. в полной схеме YAML конвейера.
| Ключ. | Описание |
|---|---|
type |
Необходимые. Тип задания. Оно должно быть pipeline для конвейерных заданий. |
display_name |
Отображаемое имя задания конвейера в пользовательском интерфейсе студии. Редактируемый в пользовательском интерфейсе студии. Это не обязательно должно быть уникальным для всех заданий в рабочей области. |
jobs |
Необходимые. Словарь набора отдельных заданий для выполнения в качестве шагов в конвейере. Эти задания считаются дочерними по отношению к заданию родительского конвейера. В текущем выпуске поддерживаемые типы заданий в конвейере — это command и sweep. |
inputs |
Словарь входных данных для задания конвейера. Ключ — это имя входных данных в контексте задания, а значение — входное значение. На эти входные данные конвейера можно ссылаться, используя входные данные отдельного задания шага в конвейере, через выражение ${{ parent.inputs.<input_name> }}. |
outputs |
Словарь выходных конфигураций работы конвейера. Ключ — это имя выходных данных в контексте задания, а значение — выходная конфигурация. Выходные данные конвейера могут быть использованы как выходные данные задания отдельного шага с помощью выражения ${{ parents.outputs.<output_name> }}. |
Пример 3b_pipeline_with_data содержит трехэтапный конвейер.
- Три этапа определяются в разделе
jobs. Все три шага относятся к типуcommand. Определение каждого шага находится в соответствующемcomponent*.ymlфайле. Вы можете увидеть файлы YAML компонента в каталоге 3b_pipeline_with_data .componentA.ymlописано в следующем разделе. - Этот конвейер имеет зависимость данных, которая распространена в реальных конвейерах. Компонент A принимает входные данные из локальной папки
./dataв (строки 18-21) и передает выходные данные компоненту B (строка 29). Выходные данные компонента A можно называть${{parent.jobs.component_a.outputs.component_a_output}}. -
default_computeопределяет вычисления по умолчанию для конвейера. Если компонент подjobsопределяет другую методику вычислений, параметры, относящиеся к компоненту, учитываются.
Чтение и запись данных в конвейере
Одним из распространенных сценариев является чтение и запись данных в конвейере. В Машинном обучении Azure используется одна и та же схема для чтения и записи данных для всех типов заданий (задания конвейера, задания команд и задания очистки). Ниже приведены примеры использования данных в конвейерах для распространенных сценариев:
- Локальные данные
- Веб-файл с общедоступным URL-адресом
- Машинное обучение Azure хранилище данных и путь
- Машинное обучение Azure ресурс данных
Основные сведения о YAML определения компонента
Ниже приведен файл componentA.yml , пример YAML, определяющий компонент:
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command
name: component_a
display_name: componentA
version: 1
inputs:
component_a_input:
type: uri_folder
outputs:
component_a_output:
type: uri_folder
code: ./componentA_src
environment:
image: python
command: >-
python hello.py --componentA_input ${{inputs.component_a_input}} --componentA_output ${{outputs.component_a_output}}
Эта таблица определяет наиболее часто используемые поля компонента YAML. Дополнительные сведения см. в полной схеме YAML компонента.
| Ключ. | Описание |
|---|---|
name |
Необходимые. Имя компонента. Он должен быть уникальным в рабочей области Машинного обучения Azure. Он должен начинаться с строчной буквы. Допустимы строчные буквы, цифры и символы подчеркивания (_). Максимальная длина составляет 255 символов. |
display_name |
Отображаемое имя компонента в пользовательском интерфейсе студии. Он не должен быть уникальным в рабочей области. |
command |
Необходимые. Выполняемая команда |
code |
Локальный путь к каталогу исходного кода, предназначенному для загрузки и использования в компоненте. |
environment |
Необходимые. Среда, используемая для запуска компонента. |
inputs |
Словарь входных данных компонентов. Ключ — это имя входных данных в контексте компонента, а значение — определение входных данных компонента. Вы можете ссылаться на входные данные в команде ${{ inputs.<input_name> }} с помощью выражения. |
outputs |
Словарь выходных данных компонентов. Ключ — это имя выходных данных в контексте компонента, а значение — определение выходных данных компонента. Вы можете ссылаться на выходные данные в команде ${{ outputs.<output_name> }} с помощью выражения. |
is_deterministic |
Следует ли повторно использовать результат предыдущего задания, если входные данные компонента не изменяются. Значение по умолчанию — true. Этот параметр также называется повторно используемым по умолчанию. Общепринятый сценарий при установке false — принудительно перезагрузить данные из облачного хранилища или по URL-адресу. |
В примере в 3b_pipeline_with_data/componentA.yml компонент A имеет один вход данных и один выход данных, который можно подключить к другим шагам родительского конвейера. Все файлы из секции code в YAML компонента будут загружены в Azure Machine Learning при отправке задания на выполнение конвейера. В этом примере файлы под ./componentA_src будут загружены. (Строка 16 в componentA.yml.) Вы можете увидеть отправленный исходный код в пользовательском интерфейсе студии: дважды щелкните шаг компонентаA в графе и перейдите на вкладку "Код ", как показано на следующем снимке экрана. Вы можете увидеть, что это скрипт hello-world, выполняющий простую печать, и что он записывает текущую дату и время в componentA_output путь. Компонент принимает входные данные и предоставляет выходные данные через командную строку. Он обрабатывается в hello.py через argparse.
Входные и выходные данные
Входные и выходные данные определяют интерфейс компонента. Входные и выходные данные могут быть литеральными значениями (типа string, number, integer или boolean) или объектом, содержащим входную схему.
Входные данные объекта (типаuri_file, , uri_foldermltablemlflow_modelилиcustom_model) могут подключаться к другим шагам в родительском задании конвейера для передачи данных или моделей другим шагам. В графе конвейера входные данные типа объекта отображаются как точка подключения.
Входные данные литеральных значений (string, number, integer) boolean— это параметры, которые можно передать компоненту во время выполнения. Вы можете добавить значение по умолчанию для литеральных входных данных в поле default. Для number и integer типов можно также добавлять минимальные и максимальные значения с помощью min полей и max полей. Если входное значение меньше минимального или больше максимального, конвейер не проходит проверку. Проверка проводится перед запуском задачи в конвейере, что может сэкономить время. Проверка работает для интерфейса командной строки, пакета SDK для Python и пользовательского интерфейса конструктора. На следующем снимке экрана показан пример проверки в пользовательском интерфейсе конструктора. Аналогичным образом можно определить допустимые значения в enum полях.
Если вы хотите добавить входные данные в компонент, необходимо внести изменения в три места:
-
inputsПоле в компоненте YAML. -
commandПоле в компоненте YAML. - В исходном коде компонента для обработки входных данных командной строки.
Эти расположения помечены зелеными полями на предыдущем снимке экрана.
Дополнительные сведения о входных и выходных данных см. в статье "Управление входными и выходными данными" для компонентов и конвейеров.
Окружающая среда
Среда — это среда, в которой выполняется компонент. Это может быть среда машинного обучения Azure (курированная или настраиваемая зарегистрированная), образ Docker или среда conda. См. следующие примеры.
-
Зарегистрирован ресурс среды машинного обучения Azure. На окружение ссылаются в компоненте с использованием синтаксиса
azureml:<environment-name>:<environment-version>. - Общедоступный Docker-образ.
- Файл Conda. Файл conda необходимо использовать вместе с базовым изображением.
Регистрация компонента для повторного использования и общего доступа
Хотя некоторые компоненты относятся к конкретному конвейеру, реальная выгода компонентов зависит от повторного использования и совместного использования. Вы можете зарегистрировать компонент в рабочей области Машинного обучения, чтобы сделать его доступным для повторного использования. Зарегистрированные компоненты поддерживают автоматическое управление версиями, чтобы можно было обновить компонент, но убедиться, что конвейеры, требующие более старой версии, будут продолжать работать.
В репозитории azureml-examples перейдите в каталог cli/jobs/pipelines-with-components/basics/1b_e2e_registered_components.
Для регистрации компонента используйте команду az ml component create:
az ml component create --file train.yml
az ml component create --file score.yml
az ml component create --file eval.yml
После выполнения этих команд вы увидите компоненты в студии в разделе "Компоненты ресурсов>":
Выберите компонент. Вы увидите подробные сведения для каждой версии компонента.
На вкладке "Сведения" отображаются основные сведения, такие как имя компонента, создавший его, и версия. Существуют редактируемые поля для тегов и описания. Теги можно использовать для добавления ключевых слов поиска. Поле описания поддерживает форматирование Markdown. Его следует использовать для описания функциональных возможностей компонента и базового использования.
На вкладке "Задания " отображается журнал всех заданий, использующих компонент.
Использование зарегистрированных компонентов в файле YAML задания конвейера
Теперь вы будете использовать 1b_e2e_registered_components в качестве примера использования зарегистрированного компонента в конвейере YAML. Перейдите в каталог 1b_e2e_registered_components и откройте файл pipeline.yml. Ключи и значения в полях inputs и outputs похожи на рассмотренные выше. Единственное существенное отличие — значение поля component в записях jobs.<job_name>.component. Значение component находится в форме azureml:<component_name>:<component_version>. Определение train-job , например, указывает, что следует использовать последнюю версию зарегистрированного компонента my_train :
type: command
component: azureml:my_train@latest
inputs:
training_data:
type: uri_folder
path: ./data
max_epocs: ${{parent.inputs.pipeline_job_training_max_epocs}}
learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate}}
learning_rate_schedule: ${{parent.inputs.pipeline_job_learning_rate_schedule}}
outputs:
model_output: ${{parent.outputs.pipeline_job_trained_model}}
services:
my_vscode:
Управление компонентами
Вы можете проверить сведения о компонентах и управлять ими с помощью интерфейса командной строки версии 2. Используйте az ml component -h для получения подробных инструкций по командам компонентов. В следующей таблице перечислены все доступные команды. Дополнительные примеры см. в справочнике по Azure CLI.
| командование | Описание |
|---|---|
az ml component create |
Создайте компонент. |
az ml component list |
Перечислите компоненты в рабочей области. |
az ml component show |
Отображение сведений о компоненте. |
az ml component update |
Обновите компонент. Только несколько полей (описание, display_name) поддерживают обновление. |
az ml component archive |
Архивируйте контейнер компонентов. |
az ml component restore |
Восстановление архивированного компонента. |
Следующий шаг
- Пример компонента CLI версии 2