Обучение и развертывание модели TensorFlow - Azure Machine Learning

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Из этой статьи вы узнаете, как выполнять сценарии обучения TensorFlow в масштабе с помощью машинное обучение Azure.

В этом примере производится обучение и регистрация модели TensorFlow для классификации рукописных цифр с помощью глубокой нейронной сети (DNN).

Независимо от того, разрабатываете ли вы модель TensorFlow с нуля или используете существующую модель в облаке, вы можете использовать машинное обучение Azure для масштабирования заданий обучения с открытым исходным кодом для создания, развертывания, контроля версий и мониторинга моделей производственного уровня.

Предварительные условия

Запустите этот код в любой из этих сред:

Настройка эксперимента

В этом разделе выполняется настройка обучающего эксперимента путем загрузки требуемых пакетов Python, инициализации рабочей области, создания целевого объекта вычислений и определения среды обучения.

Импорт пакетов

Сначала импортируйте необходимые библиотеки Python.

Python

import os import urllib import shutil import azureml  from azureml.core import Experiment from azureml.core import Workspace, Run  from azureml.core.compute import ComputeTarget, AmlCompute from azureml.core.compute_target import ComputeTargetException 

Инициализация рабочей области

Машинное обучение Azure Рабочая область — это ресурс верхнего уровня для службы. Она предоставляет централизованное расположение для работы со всеми создаваемыми артефактами. В пакете SDK для Python можно получить доступ к артефактам рабочей области, создав workspace объект.

Создайте объект рабочей области из config.json файла, созданного в разделе Предварительные требования.

Python

ws = Workspace.from_config() 

Создание файлового набора данных

Объект FileDataset ссылается на один или несколько файлов в хранилище данных рабочей области или общедоступных URL-адресов. Это могут быть файлы любого формата, и с помощью этого класса вы сможете скачивать их или подключать к вычислительной среде. Создавая FileDataset, вы одновременно создаете ссылку на расположение источника данных. Любые преобразования, примененные к такому набору данных, будут сохранены и в исходном наборе данных. Данные хранятся только в исходном расположении, а значит не потребуется лишних расходов на хранение. Дополнительные сведения см. в соответствующем практическом руководстве по пакету Dataset.

Python

from azureml.core.dataset import Dataset  web_paths = [             'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',             'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',             'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',             'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'             ] dataset = Dataset.File.from_files(path=web_paths) 

Используйте register() метод, чтобы зарегистрировать набор данных в рабочей области, чтобы предоставить общий доступ другим пользователям, повторно использовать их в различных экспериментах и называть их по имени в обучающем скрипте.

Python

dataset = dataset.register(workspace=ws,                            name='mnist-dataset',                            description='training and test dataset',                            create_new_version=True)  # list the files referenced by dataset dataset.to_path() 

Создание целевого объекта вычислений

Создайте целевой объект вычислений для выполнения задания TensorFlow. В этом примере создайте кластерный Машинное обучение Azure вычислений с поддержкой GPU.

Python

cluster_name = "gpu-cluster"  try:     compute_target = ComputeTarget(workspace=ws, name=cluster_name)     print('Found existing compute target') except ComputeTargetException:     print('Creating a new compute target...')     compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',                                                             max_nodes=4)      compute_target = ComputeTarget.create(ws, cluster_name, compute_config)      compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20) 

Примечание

Вы можете использовать низкоприоритетные виртуальные машины для выполнения части или всех рабочих нагрузок. Узнайте, как создать низкоприоритетную виртуальную машину.

Дополнительные сведения о целевых объектах вычислений см. в статье что такое целевые показатели вычислений .

Определение среды

Чтобы определить среду машинного обучения Azure, в которой будут инкапсулированы зависимости сценария обучения, можно определить пользовательскую среду или использовать среду, проверенную в машинном обучении Azure.

Создание пользовательской среды

Определите среду машинного обучения Azure, в которой инкапсулируются зависимости сценария обучения.

Сначала определите зависимости conda в файле YAML. в этом примере файл называется conda_dependencies.yml .

YAML

channels: - conda-forge dependencies: - python=3.6.2 - pip:   - azureml-defaults   - tensorflow-gpu==2.2.0 

Создайте среду машинного обучения Azure из этой спецификации среды conda. Среда будет упакована в контейнер DOCKER во время выполнения.

По умолчанию, если базовый образ не указан, Azure ML будет использовать образ ЦП в azureml.core.runconfig.DEFAULT_CPU_IMAGE качестве базового образа. Поскольку в этом примере выполняется обучение на кластере GPU, необходимо указать базовый образ GPU с необходимыми драйверами и зависимостями GPU. Служба машинного обучения Azure поддерживает набор базовых образов, опубликованных в реестре контейнеров Microsoft (мкр), которые можно использовать. Дополнительные сведения см. в репозитории GitHub Azure/AzureML-Containers .

Python

from azureml.core import Environment  tf_env = Environment.from_conda_specification(name='tensorflow-2.2-gpu', file_path='./conda_dependencies.yml')  # Specify a GPU base image tf_env.docker.enabled = True tf_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04' 

Совет

При необходимости можно просто захватить все зависимости непосредственно в пользовательском образе DOCKER или Dockerfile и создать среду из нее. Дополнительные сведения см. в разделе обучение с помощью пользовательского образа.

Дополнительные сведения о создании и использовании сред см. в разделе Создание и использование программных сред в машинное обучение Azure.

Использование проверенной среды

Кроме того, Azure ML предоставляет предварительно созданные и проверенные среды, если вы не хотите создавать собственный образ. В МАШИНном обучении Azure имеется несколько проверенных сред ЦП и GPU для TensorFlow, соответствующих разным версиям TensorFlow. Дополнительные сведения см. здесь.

Если вы хотите использовать проверенную среду, то вместо этого можно выполнить следующую команду:

Python

curated_env_name = 'AzureML-TensorFlow-2.2-GPU' tf_env = Environment.get(workspace=ws, name=curated_env_name) 

Чтобы просмотреть пакеты, входящие в проверенную среду, можно записать зависимости conda на диск:

Python

tf_env.save_to_directory(path=curated_env_name) 

Убедитесь, что проверенная среда включает все зависимости, необходимые для обучающего скрипта. В противном случае необходимо будет изменить окружение, включив недостающие зависимости. Обратите внимание, что при изменении среды потребуется присвоить ей новое имя, так как префикс AzureML зарезервирован для проверенных сред. Если вы изменили файл YAML Dependencies conda, можно создать новое окружение с новым именем, например:

Python

tf_env = Environment.from_conda_specification(name='tensorflow-2.2-gpu', file_path='./conda_dependencies.yml') 

Если вы изменили проверенный объект среды напрямую, вы можете клонировать эту среду с новым именем:

Python

tf_env = tf_env.clone(new_name='tensorflow-2.2-gpu') 

Настройка и отправка учебного запуска

Создание Скриптрунконфиг

Создайте объект скриптрунконфиг , чтобы указать сведения о настройке учебного задания, включая сценарий обучения, используемую среду и целевой объект вычислений. Любые аргументы в скрипте обучения передаются через командную строку, если они указаны в arguments параметре.

Python

from azureml.core import ScriptRunConfig  args = ['--data-folder', dataset.as_mount(),         '--batch-size', 64,         '--first-layer-neurons', 256,         '--second-layer-neurons', 128,         '--learning-rate', 0.01]  src = ScriptRunConfig(source_directory=script_folder,                       script='tf_mnist.py',                       arguments=args,                       compute_target=compute_target,                       environment=tf_env) 

Предупреждение

Машинное обучение Azure запускает скрипты обучения, копируя весь исходный каталог. Если у вас есть конфиденциальные данные, которые не нужно передавать, используйте файл. Ignore или не включайте его в исходный каталог. Вместо этого получите доступ к данным с помощью набора данныхмашинного обучения Azure.

Дополнительные сведения о настройке заданий с помощью Скриптрунконфиг см. в статье Настройка и отправка обучающих запусков.

Предупреждение

Если вы ранее использовали оценщик TensorFlow для настройки заданий обучения TensorFlow, обратите внимание, что оценивающие будут считаться устаревшими в будущих выпусках пакета Azure ML SDK. С помощью пакета SDK машинного обучения Azure >= 1.15.0, Скриптрунконфиг является рекомендуемым способом настройки заданий обучения, включая те, которые используют платформы DL.

Отправка запроса на выполнение

Объект Run предоставляет интерфейс для журнала выполнения во время выполнения задания и после его завершения.

Python

run = Experiment(workspace=ws, name='tf-mnist').submit(src) run.wait_for_completion(show_output=True) 

Что происходит во время выполнения

При выполнении выполнения он проходит следующие этапы.

  • Подготовка. образ DOCKER создается в соответствии с определенной средой. Образ отправляется в реестр контейнеров рабочей области и кэшируется для последующего выполнения. Журналы также передаются в журнал выполнения и могут быть просмотрены для отслеживания хода выполнения. Если вместо этого указана проверенная среда, то будет использоваться кэшированный образ, в котором выполняется резервное копирование проверенной среды.

  • Масштабирование. Кластер пытается выполнить масштабирование, если кластеру Batch AI требуется больше узлов для выполнения выполнения, чем в настоящее время доступно.

  • Выполняется: все скрипты в папке Script передаются в целевой объект вычислений, хранилища данных подключаются или копируются, и выполняется script . Выходные данные из STDOUT и папки /логс передаются в журнал выполнения и могут использоваться для наблюдения за выполнением.

  • Пост-обработка. папка /Outputs для выполнения копируется в журнал выполнения.

Регистрация или скачивание модели

После обучения модели ее можно зарегистрировать в рабочей области. Регистрация модели позволяет хранить и редактировать версии моделей в рабочей области для упрощения развертывания и управления моделями. Необязательно: путем указания параметров model_framework , model_framework_version и resource_configuration , развертывание модели без кода станет доступным. Это позволяет напрямую развернуть модель в качестве веб-службы из зарегистрированной модели, а ResourceConfiguration объект определяет ресурс вычислений для веб-службы.

Python

from azureml.core import Model from azureml.core.resource_configuration import ResourceConfiguration  model = run.register_model(model_name='tf-mnist',                             model_path='outputs/model',                            model_framework=Model.Framework.TENSORFLOW,                            model_framework_version='2.0',                            resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5)) 

Вы также можете скачать локальную копию модели с помощью объекта Run. В сценарии обучения tf_mnist.py объект TensorFlow хранителя сохраняет модель в локальной папке (локальную для целевого объекта вычислений). Для скачивания копии можно использовать объект Run.

Python

# Create a model folder in the current directory os.makedirs('./model', exist_ok=True) run.download_files(prefix='outputs/model', output_directory='./model', append_prefix=False) 

Распределенное обучение

Машинное обучение Azure также поддерживает распределенные задания TensorFlow с несколькими узлами, чтобы можно было масштабировать рабочие нагрузки для обучения. Вы можете легко выполнять распределенные задания TensorFlow, и МАШИНное обучение Azure будет управлять согласованием.

Azure ML поддерживает выполнение распределенных заданий TensorFlow с помощью встроенного API-интерфейса распределенного обучения хоровод и TensorFlow.

Horovod

Хоровод — это платформа с открытым исходным кодом, которая сокращает структуру для распределенного обучения, разработанного Uber. Она предлагает простой путь для написания распределенного кода TensorFlow для обучения.

Обучающий код должен быть оснащен хоровод для распределенного обучения. Дополнительные сведения об использовании хоровод с TensorFlow см. в документации по хоровод:

Дополнительные сведения об использовании хоровод с TensorFlow см. в документации по хоровод:

Кроме того, убедитесь, что в среде обучения включен пакет хоровод . Если вы используете TensorFlow проверенную среду, хоровод уже включен в качестве одной из зависимостей. Если вы используете собственную среду, убедитесь, что включена зависимость хоровод, например:

YAML

channels: - conda-forge dependencies: - python=3.6.2 - pip:   - azureml-defaults   - tensorflow-gpu==2.2.0   - horovod==0.19.5 

Чтобы выполнить распределенное задание с использованием MPI или хоровод в МАШИНном обучении Azure, необходимо указать мпиконфигуратион в distributed_job_config параметре конструктора скриптрунконфиг. Приведенный ниже код настроит распределенное задание с 2 узлами, выполняющее один процесс на каждом узле. Если вы также хотите запустить несколько процессов на одном узле (т. е. Если номер SKU кластера имеет несколько GPU), дополнительно укажите process_count_per_node параметр в мпиконфигуратион (значение по умолчанию — 1 ).

Python

from azureml.core import ScriptRunConfig from azureml.core.runconfig import MpiConfiguration  src = ScriptRunConfig(source_directory=project_folder,                       script='tf_horovod_word2vec.py',                       arguments=['--input_data', dataset.as_mount()],                       compute_target=compute_target,                       environment=tf_env,                       distributed_job_config=MpiConfiguration(node_count=2)) 

Полный учебник по запуску распределенных TensorFlow с помощью хоровод в МАШИНном обучении Azure см. в разделе Распределенная TensorFlow с хоровод.

TF. распространение

Если вы используете собственные распределенные TensorFlow в обучающем коде, например TensorFlow 2. x tf.distribute.Strategy , вы также можете запустить распределенное задание с помощью Azure ml.

Для этого укажите тенсорфловконфигуратион в distributed_job_config параметре конструктора скриптрунконфиг. Если используется tf.distribute.experimental.MultiWorkerMirroredStrategy , укажите worker_count в тенсорфловконфигуратион, соответствующем количеству узлов для задания обучения.

Python

import os from azureml.core import ScriptRunConfig from azureml.core.runconfig import TensorflowConfiguration  distr_config = TensorflowConfiguration(worker_count=2, parameter_server_count=0)  model_path = os.path.join("./outputs", "keras-model")  src = ScriptRunConfig(source_directory=source_dir,                       script='train.py',                       arguments=["--epochs", 30, "--model-dir", model_path],                       compute_target=compute_target,                       environment=tf_env,                       distributed_job_config=distr_config) 

В TensorFlow TF_CONFIG для обучения на нескольких компьютерах требуется переменная среды. МАШИНное обучение Azure настроит и установит TF_CONFIG переменную соответствующим образом для каждого рабочего процесса перед выполнением сценария обучения. Вы можете получить доступ TF_CONFIG из обучающего сценария, если вам нужно использовать os.environ['TF_CONFIG'] .

Пример структуры TF_CONFIG Set на рабочем узле главного рабочего узла:

JSON

TF_CONFIG='{     "cluster": {         "worker": ["host0:2222", "host1:2222"]     },     "task": {"type": "worker", "index": 0},     "environment": "cloud" }' 

Если сценарий обучения использует стратегию сервера параметров для распределенного обучения, т. е. для устаревшего TensorFlow 1. x, необходимо также указать количество серверов параметров, которое будет использоваться в задании, например distr_config = TensorflowConfiguration(worker_count=2, parameter_server_count=1) .

Развертывание модели TensorFlow

Руководство по развертыванию содержит раздел, посвященный регистрации моделей, но можно сразу перейти к созданию целевого объекта вычислений для развертывания, так как у вас уже есть Зарегистрированная модель.

Образца Развертывание модели без кода

Вместо традиционного маршрута развертывания можно также использовать функцию развертывания без кода (Предварительная версия) для TensorFlow. Зарегистрировав модель, как показано выше с помощью model_framework параметров, model_framework_version и resource_configuration , можно просто использовать deploy() статическую функцию для развертывания модели.

Python

service = Model.deploy(ws, "tensorflow-web-service", [model]) 

Полное Описание процесса развертывания в машинное обучение Azure более подробно.

Дальнейшие действия

В этой статье вы обучили и зарегистрировали модель TensorFlow и узнали о вариантах развертывания. Дополнительные сведения о Машинное обучение Azure см. в других статьях.


Источник: docs.microsoft.com

Комментарии: