Типичный поток операций с использованием платформы DLaaS выглядит следующим образом:

  1. Создайте модель глубокого обучения, используя одну из поддерживаемых платформ (Caffe, Tensorflow, PyTorch)
  2. Загрузить тренировочные данные в Cloud Object Storage
  3. Укажите метаданные модели, конфигурацию вычислений и расположение обучающих данных
  4. Начать обучение
  5. Отслеживание обучения и журналов выборки
  6. Получить обученную модель и развернуть ее
  7. Использовать модель для логического вывода

Все вышеперечисленные шаги можно выполнить с помощью простого интерфейса командной строки (некоторые из них также можно выполнить через браузер), что мы увидим в следующих разделах. Для простоты мы будем использовать веб-интерфейс IBM Bluemix для некоторых операций, чтобы лучше объяснить их.

Теперь мы проработаем простой сценарий обучения модели на DLaaS. В качестве примера мы создадим простой классификатор для набора данных MNIST[2]. Для этого мы настроим нашу среду, загрузим данные, которые будут использоваться для обучения, создадим простую модель сверточной нейронной сети и отправим задание для обучения этой сети. Как только это будет сделано, мы будем отслеживать статус задания, и когда модель будет обучена, мы развернем ее для использования.

1. Настройка среды

Для начала нам нужно настроить нашу среду и установить некоторые пакеты. Но перед этим нам нужна учетная запись IBM Bluemix. Итак, идите к

https://cloud.ibm.com/

и создайте учетную запись.

Затем установите интерфейс командной строки ibmcloud:

curl -sL https://ibm.biz/idt-installer | bash

Убедитесь, что все было установлено гладко:

ibmcloud dev help

Вы должны увидеть список доступных команд. Затем установите плагин машинного обучения:

ibmcloud plugin install machine-learning -r Bluemix

Наконец, войдите в IBM CLOUD.

ibmcloud login

2. Создание экземпляра машинного обучения

Затем нам нужно создать экземпляр машинного обучения в Bluemix, который будет отвечать за запуск и управление заданиями машинного обучения в облаке. Мы будем использовать браузер для создания экземпляра ML, хотя мы можем сделать то же самое и через командную строку. Войдите в свою консоль Bluemix (cloud.ibm.com) и создайте службу машинного обучения.

После того, как мы создали экземпляр ML, перейдите на вкладку «Учетные данные службы» и создайте новый набор учетных данных. Получите учетные данные, нажав "Просмотр учетных данных", и задайте их в переменных среды:

export ML_INSTANCE=your_instance_id
export ML_USERNAME=your_username
export ML_PASSWORD=your_password
export ML_ENV=https://ibm-watson-ml.mybluemix.net

Введение в IBM Cloud Object Storage

Теперь, когда мы создали среду машинного обучения для выполнения наших заданий, нам нужно получить данные обучения в облаке. Для этой цели мы будем использовать облачное хранилище объектов IBM (COS), которое позволяет загружать и скачивать данные в облаке, а также ряд других функций.

COS позволяет хранить данные в сегментах, которые можно рассматривать как отдельные разделы хранилища в облаке в нашем экземпляре облачного хранилища. Нет ограничений на количество создаваемых сегментов, только на объем данных, которые могут храниться в них и загружаться/выгружаться в соответствии с вашим планом. Ваш код глубокого обучения будет читать и писать в эти корзины. В нашем примере мы предположим, что обучающие данные вместе с метками классов доступны в файле рассола, mnist.pkl, локально.

Настройка IBM Cloud Object Storage:

  1. Перейдите на https://cloud.ibm.com/ и создайте ресурс типа Object Storage.
  2. Дайте ему имя и выберите план для начала.
  3. Создайте учетные данные службы для доступа к службе с параметром {"HMAC":true}в «Встроенных параметрах конфигурации».

4.После создания запишите учетные данные COS, нажавПросмотреть учетные данные. Это очень важно.

5. Чтобы действительно хранить данные, нам нужно создать сегменты, которые действуют как независимые разделы хранилища. Мы создадим две корзины, одну для входных данных для нашей модели, а другую для записи выходных данных. Имена сегментов должны быть уникальными для разных пользователей. Хорошим соглашением об именах для сегментов может быть что-то вроде UsernameProjectnameTrainingData и UsernameProjectnameResultData . Для нашего примера мы создаем два сегмента: naveenmnisttrainingdata и naveenmnistresultdata.

6. Загрузите mnist.pkl в корзину данных naveenmnisttrainingdata.

3. Написание кода, совместимого с DLaaS

Прежде чем писать какой-либо код, если вы хотите убедиться, что ваша любимая платформа глубокого обучения доступна в облаке, вы можете запустить следующую команду и получить список доступных платформ:

ibmcloud ml list frameworks

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

Однако во время локальной разработки вам не нужно определять эти системные переменные. Следовательно, при написании кода для DLaaS рекомендуется использовать следующее соглашение.

data_dir = os.environ.get(“DATA_DIR”, “./my_local_data_dir”)
result_dir = os.environ.get(“RESULT_DIR”, “./my_result_data_dir”)

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

Помните, ранее мы загрузили файл mnist.pkl? Вот как вы можете прочитать это в своем коде после двух строк выше:

import pickle
import os
import os.path
with open(os.path.join(data_dir, 'mnist.pkl'), 'r') as f:
  trainx, trainy, validx, validy = pickle.load(f)

После этого вы можете создать свою следующую современную модель глубокого обучения (или, если на то пошло, простую CNN [3]), как обычно. Если вы хотите сохранить некоторые выходные данные или сохранить свою модель, вы можете сделать это аналогичным образом, используя путь в переменной result_dir, которая в конечном итоге будет сохранена в COS.

Если вы хотите сохранить модель, во время тренировочного прогона программа обучения должна записать файлы модели в папку result_dir/model. Вот пример кода в Keras для этого:

modelpath = os.path.join(result_dir, "model")
if not os._exists(modelpath):
    os.mkdir(modelpath)
model.save(os.path.join(modelpath, "mnistmodel.h5"))

Теперь вы можете спросить: Но ведь я загрузил mnist.pkl в корзинуnaveenmnisttrainingdata. Как он может прочитать файл, если я не укажу, в какой корзине искать? И как я могу быть уверен, что выходные данные будут записаны в мою корзину результатов,naveenmnistresultdata?

Здесь мы переходим к следующему шагу.

4. Создание определения/спецификации обучения YAML

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

Мы используем файл спецификации в формате YAML, чтобы определить нашу работу по обучению. Вы можете получить образец YAML, выполнив следующую команду:

ibmcloud ml generate-manifest training-definitions

Теперь нам нужно отредактировать этот образец файла и заполнить информацию, соответствующую заданию, которое мы хотим отправить. Ниже приведены некоторые важные свойства, которые следует изменить в образце файла:

  1. Название модели и описание
  2. Фреймворки и среды выполнения
  3. Команда для выполнения
  4. Вычислить конфигурацию
  5. Ссылка на исходные данные (имя сегмента COS и учетные данные) — для ввода
  6. Ссылка на целевые данные (имя сегмента COS и учетные данные) — для вывода

5. Отправка задания

Теперь со сценариями Python и спецификацией YAML мы готовы отправить код для выполнения в облаке. Нам просто нужно заархивировать весь наш код и вызвать консольную команду, указав zip-файл и файл конфигурации YAML, которые будут использоваться.

zip dlaas_train.zip ./*
ibmcloud ml train dlaas_train.zip dlaas_train.yml

Результатом этой команды будет идентификатор модели, который является уникальным идентификатором нашей работы в облаке. Запишите идентификатор модели, потому что это то, что мы будем использовать для ссылки и запроса нашей работы.

Starting to train …
OK
Model-ID is ‘model-asf123asd

6. Мониторинг задания

Мы можем найти список всех учебных заданий, которые мы отправили, с помощью следующей команды:

ibmcloud ml list training-definitions

Чтобы получить статус конкретного задания, мы можем использовать идентификатор модели, полученный после отправки на предыдущем шаге:

ibmcloud ml monitor training-runs model-asf123asd

Вывод может выглядеть примерно так:

********************************************************************Starting to fetch ‘status messages and metrics’ for model-id ‘model-asf123asd’
********************************************************************[ — LOGS] training-NVo51RQig:
[ — LOGS] training-NVo51RQig: Training with training/test data at:
...
...

Вы можете отслеживать состояние задания, пока не появится сообщение о том, что задание завершено. Сегмент результатов, указанный вами в файле YAML, будет содержать информацию о выполнении, журналы обучения, обученную модель (если вы ее сохранили) и любые другие выходные данные, которые вы могли сгенерировать. Вот как может выглядеть сегмент COS (обратите внимание на выделенный файл модели .h5, который затем можно развернуть, загрузить или использовать в другом задании):

7. Хранение модели

После завершения обучения мы можем сохранить модель в репозиторий WML:

ibmcloud ml store training-runs model-asf123asd

Вывод может быть примерно таким:

Starting to store the training-run ‘model-asf123asd’…
OK
Model store successful. Model-ID is ‘asf123asd-1234–1234–1234-asf123asd

Обратите внимание на идентификатор модели сохраненной модели.

Чтобы получить список всех ваших сохраненных моделей в репозитории WML, вы можете запустить следующую команду:

ibmcloud ml list models

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

Большинство проектов обычно заканчиваются к этому моменту, и то, как используется обученная модель, различается.

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

ibmcloud ml deploy <model-id> <deployment-name>

Где идентификатор модели — это то, что было выведено во время сохранения модели. Имя развертывания может быть любым идентификатором, который вы хотите использовать для своего развертывания. Вывод содержит важную информацию:

Deploying the model with MODEL-ID ‘asf123asd-1234–1234–1234-asf123asd’..
DeploymentId 123asd123-adf-1234-asdf-3123asd123
Scoring endpoint https://ibm-watson-ml-fvt.stage1.mybluemix.net/v3/wml_instances/...

Вы можете использовать идентификатор развертывания при попытке оценки через интерфейс командной строки ibmcloud или конечную точку оценки в ином случае.

9. Вызов модели для оценки/вывода

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

scoring_payload.json
{
  "modelId": 'asf123asd-1234-1234-1234-asf123asd'.,
  "deploymentId": "123asd123-adf-1234-asdf-3123asd123",
  "payload": {
    "values": [
      <mnist image as numpy array>
    ]
  }
}

Для оценки через интерфейс командной строки выполните следующее:

ibmcloud ml score scoring_payload.json

Для модели Keras вывод может выглядеть так:

Fetching scoring results for the deployment ‘123asd123-adf-1234-asdf-3123asd123’ …
{
  ‘fields’: [‘prediction’, ‘prediction_classes’, ‘probability’],
  ‘values’: [[[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1], 6,
            [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]]
}
OK

Если вам нужна дополнительная информация о развертывании модели и ее использовании для оценки новых данных, ознакомьтесь с официальной документацией: https://dataplatform.cloud.ibm.com/docs/content/analyze-data/ml_dlaas_model_deploy_score_ovr.html.

Резюме

IBM Deep Learning as a Service предоставляет разработчикам и бизнес-пользователям удобный инструмент для создания и реализации моделей глубокого обучения, не беспокоясь о конфигурациях среды, управлении кластером и ресурсами или инструментах и ​​пакетах. Все, что вам нужно сделать, это написать свой код и предоставить необходимые данные, а облачная среда справится с выполнением.

Использованная литература:

  1. IBM Deep Learning: https://www.ibm.com/cloud/deep-learning

2. Набор данных MNIST: http://yann.lecun.com/exdb/mnist/

3. Код Keras CNN для MNIST: https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py