Пакет SDK для Python Машинное обучение Azure, который позволяет создавать, обучать, развертывать и управлять решениями машинного обучения с помощью Azure. AML SDK позволяет вам выбрать использование локальных или облачных вычислительных ресурсов, одновременно управляя и поддерживая полный рабочий процесс обработки данных из облака.

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

  • Сервер записной книжки Python 3.6 со следующим установленным:
  • Пакет SDK для машинного обучения Azure для Python
  • matplotlib и scikit-learn

Настройте свой собственный сервер ноутбуков Jupyter по этой ссылке.

Настройте свою среду разработки

Все настройки для вашей разработки можно выполнить в записной книжке Python. Настройка включает в себя следующие действия:

  • Импортируйте пакеты Python.
  • Подключитесь к рабочей области, чтобы ваш локальный компьютер мог связываться с удаленными ресурсами.
  • Создайте эксперимент, чтобы отслеживать все ваши пробежки.
  • Создайте цель удаленных вычислений, чтобы использовать ее для обучения.

Импортировать пакеты

Импортируйте пакеты Python, которые вам нужны в этом сеансе.

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import azureml.core
from azureml.core import Workspace

Подключиться к рабочему пространству

Создайте объект рабочей области из существующей рабочей области.

# load workspace configuration from the config.json file in the current folder.
ws = Workspace.from_config()
print(ws.name, ws.location, ws.resource_group, ws.location, sep = '\t')

Создать эксперимент

Создайте эксперимент, чтобы отслеживать пробежки в вашем рабочем пространстве. В рабочем пространстве может быть несколько экспериментов:

experiment_name = 'sklearn-mnist'
from azureml.core import Experiment
exp = Experiment(workspace=ws, name=experiment_name)

Создать или присоединить существующий вычислительный ресурс

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

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

from azureml.core.compute import AmlCompute
from azureml.core.compute import ComputeTarget
import os
# choose a name for your cluster
compute_name = os.environ.get("AML_COMPUTE_CLUSTER_NAME", "cpucluster")
compute_min_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MIN_NODES", 0)
compute_max_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MAX_NODES", 4)
# This example uses CPU VM. For using GPU VM, set SKU to STANDARD_NC6
vm_size = os.environ.get("AML_COMPUTE_CLUSTER_SKU", "STANDARD_D2_V2")

if compute_name in ws.compute_targets:
    compute_target = ws.compute_targets[compute_name]
    if compute_target and type(compute_target) is AmlCompute:
        print('found compute target. just use it. ' + compute_name)
else:
    print('creating a new compute target...')
    provisioning_config = AmlCompute.provisioning_configuration(vm_size = vm_size,
                                                                min_nodes = compute_min_nodes, 
                                                                max_nodes = compute_max_nodes)
    # create the cluster
    compute_target = ComputeTarget.create(ws, compute_name, provisioning_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=20)
    
     # For a more detailed view of current AmlCompute status, use get_status()
    print(compute_target.get_status().serialize())  

Загрузить данные в облако

Теперь сделайте данные доступными удаленно, загрузив эти данные с локального компьютера в Azure. Затем к нему можно будет получить доступ для удаленного обучения. Хранилище данных - это удобная конструкция, связанная с вашим рабочим пространством, где вы можете выгружать или скачивать данные. Вы также можете взаимодействовать с ним с удаленных целей вычислений. Он поддерживается учетной записью хранения BLOB-объектов Azure.

Файлы MNIST загружаются в каталог с именем mnist в корне хранилища данных:

ds = ws.get_default_datastore()
print(ds.datastore_type, ds.account_name, ds.container_name)
ds.upload(src_dir=data_folder, target_path='mnist', overwrite=True, show_progress=True)

Создайте сценарий обучения

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

%%writefile $script_folder/train.py
import argparse
import os
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib
from azureml.core import Run
from utils import load_data
# let user feed in 2 parameters, the location of the data files (from datastore), and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()
data_folder = args.data_folder
print('Data folder:', data_folder)
# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(os.path.join(data_folder, 'train-images.gz'), False) / 255.0
X_test = load_data(os.path.join(data_folder, 'test-images.gz'), False) / 255.0
y_train = load_data(os.path.join(data_folder, 'train-labels.gz'), True).reshape(-1)
y_test = load_data(os.path.join(data_folder, 'test-labels.gz'), True).reshape(-1)
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')
# get hold of the current run
run = Run.get_context()
print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, random_state=42)
clf.fit(X_train, y_train)
print('Predict the test set')
y_hat = clf.predict(X_test)
# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)
run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))
os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

Создать оценщик

Для отправки прогона используется объект оценщика. Создайте свой оценщик, запустив следующий код для определения этих элементов:

  • Имя объекта оценщика est.
  • Каталог, содержащий ваши скрипты. Все файлы в этом каталоге загружаются в узлы кластера для выполнения.
  • Цель вычислений. Используйте созданный вами вычислительный кластер Машинного обучения Azure.
  • Имя обучающего скрипта train.py.
  • Параметры, необходимые из обучающего сценария.
  • Пакеты Python, необходимые для обучения.

В этом руководстве целью является AmlCompute. Все файлы в папке сценария загружаются в узлы кластера для запуска. Папка_данных настроена на использование хранилища данных, ds.path('mnist').as_mount():

Мониторинг удаленного запуска

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

Что происходит, пока вы ждете:

  • Создание образа: создается образ Docker, соответствующий среде Python, указанной оценщиком. Изображение загружено в рабочую область. Создание и загрузка изображения занимает около пяти минут.
  • Этот этап происходит один раз для каждой среды Python, потому что контейнер кэшируется для последующих запусков. Во время создания образа журналы передаются в журнал запусков. С помощью этих журналов вы можете отслеживать процесс создания образа.
  • Масштабирование: если удаленному кластеру требуется больше узлов для выполнения, чем доступно в настоящее время, дополнительные узлы добавляются автоматически. Масштабирование обычно занимает около пяти минут.
  • Выполняется: на этом этапе необходимые сценарии и файлы отправляются в целевой объект вычислений. Затем подключаются или копируются хранилища данных. И затем запускается entry_script. Пока задание выполняется, stdout и каталог ./logs передаются в историю выполнения. С помощью этих журналов вы можете следить за ходом пробежки.
  • Постобработка: каталог ./outputs цикла копируется в историю запусков в вашей рабочей области, поэтому вы можете получить доступ к этим результатам.

Наблюдайте за ходом выполнения с помощью виджета Jupyter. Как и отправка запуска, виджет является асинхронным и предоставляет обновления в реальном времени каждые 10-15 секунд до завершения задания:

from azureml.widgets import RunDetails 
RunDetails(run).show()

Следующие шаги

В этом руководстве по службе машинного обучения Azure вы использовали Python для решения следующих задач:

  • Настройте свою среду разработки.
  • Получите доступ и изучите данные.
  • Обучайте несколько моделей в удаленном кластере с помощью популярной библиотеки машинного обучения scikit-learn.
  • Следите за тренировками с помощью Jupyter Widget.

Вы готовы развернуть эту зарегистрированную модель, следуя инструкциям в следующей части серии руководств:

Https://docs.microsoft.com/en-us/azure/machine-learning/service/tutorial-deploy-models-with-aml