2 минут чтения
8 декабря 2021 г.
How to: Yandex Datasphere
Yandex DataSphere — среда для ML-разработки, которая сочетает в себе привычный интерфейс Jupyter Notebook, технологию бессерверных вычислений и возможность бесшовного использования разных конфигураций вычислительных ресурсов.
Большую часть информации, которой мы с вами поделимся, мы почерпнули из закрытого практикума, который проводила команда Яндекса, куда был также приглашен спикер Александр Волков из компании Glowbyte. В процессе работы мы опирались на запись практикума, который был посвящен нюансам работы в Yandex DataSphere, а также задавали вопросы Александру и специалистам Яндекса напрямую, когда заходили в тупик и нуждались в помощи профессионала.
Теперь, пройдя долгий и сложный путь от задумки до реализации, мы готовы рассказать, как задеплоить модель с помощью одного из сервисов Yandex.Cloud – DataSphere.
Создание проекта и ноутбук
1. Для начала, создаем проект DataSphere в Yandex.Cloud.
2. В проекте создаем ноутбук
В целом, работа с ноутбуками в DataSphere будет интуитивно понятна, если вы уже сталкивались, например, с Jupyter Notebook. Стоит лишь отметить, что можно выбрать конфигурацию машины, на которой будет работать ваш ноутбук. По дефолту стоит самая простая.
Еще, в начале использования сервиса важно понимать, как происходит тарификация. Если коротко, то размер оплаты зависит от времени использования сервиса и от мощности выбранной машины. При прогоне ячеек учитывается только время, затраченное на вычисления, при развертывании — время от создания деплоя до его удаления (даже если сервис простаивает). После регистрации Yandex.Cloud предлагает пробный период, которого вполне хватит для тестовых проектов. А дальше, конечно, придется платить.
Загрузка модели
Мы будем использовать модель-заглушку для демонстрации работоспособности деплоя, но для начала нам хотелось бы отдельно остановиться на нюансах загрузки обученной модели в проект DataSphere.
Можно воспользоваться, например, Яндекс.Диском. Для этого надо зарегистрировать приложение в Яндекс ID, после запомнить его ID и пароль.
Для безопасности пароль можно положить в “секреты проекта”.
Для загрузки файлов модели можно воспользоваться следующим кодом:
!mkdir model
import os
from cloud_ml.storage.api import Storage
disk = Storage.ya_disk(application_id=,
application_secret=os.environ[])
disk.get_dir(, ‘./model’)
Если же необходимые вам файлы лежат в Github-репозитории, то все еще проще — надо только выполнить в ноутбуке команду:
!git clone ‘<github-repository-url>’
Код модели
Давайте сделаем простой генератор случайных целых чисел, принимающий на вход границы:
input_data = {‘left_bound’: 1, ‘right_bound’: 5}
from random import randint
def generate_value(input_data):
return {‘generated_value’: randint(input_data[‘left_bound’],
input_data[‘right_bound’])}
output_data = generate_value(input_data)
Первую строку вынесем в отдельную ячейку (это нужно для деплоя).
При необходимости, вы можете загрузить специальные библиотеки/версии библиотек с помощью команды %pip install…
Деплой
Для начала, нужно создать Docker-образ. Стоит отметить несколько моментов:
- Build path — это необязательное поле, но при этом его значение не выставлено по дефолту, так что советуем указать хотя бы ‘.’. Docker file будет сгенерирован за вас, однако, вы можете его дополнить так: Скопировать файлы из своего проекта в Docker-образ.
- Например, команда ADD model model скопирует файлы из папки model (первый аргумент) в вашем проекте в директорию /model/ (первый слэш важен!) в Docker-образе (второй аргумент). Команду стоит прописать вне блока RUN.
- Затем нужно создать реестр для хранения Docker-образов (если у вас его еще нет). Для этого переходим в рабочий каталог в облаке, выбираем сервис Container Registry и там создаем реестр.
- Далее нужно провести аутентификацию в Container Registry (если вы этого еще не сделали). Это можно сделать разными способами, которые описаны в документации
- Мы воспользуемся способом аутентификации через сервисный аккаунт с помощью авторизованных ключей. Не забудьте его создать дополнительно, если решите использовать тот же способ. Процесс аутентификации достаточно прост:
- Сначала нужно сгенерировать ключи с помощью Yandex.Cloud CLI:
yc iam key create —service-account-name -o key.json
- Затем провести авторизацию с помощью этих ключей (Docker должен быть запущен):
cat key.json | docker login —username json_key —password-stdin cr.yandex
Полезные ссылки по работе с YC CLI и сервисными аккаунтами:
Работа с командной строкой
Работа с сервисными аккаунтами
После этого можно запушить Docker-образ в реестр. Для этого нужно выполнить следующую команду в ноутбуке (да-да, решетка в начале, все верно):
#!:docker-publish <datasphere-image-name>:<datasphere-image-tag> cr.yandex/<cloud-registry-path>:<tag>
Где:
<datasphere-image-name> – Репозиторий, указанный при создании Docker-образа
<datasphere-image-tag> – Тег, указанный при создании Docker-образа
<cloud-registry-path> – Идентификатор реестра, который можно посмотреть в Container Registry
<tag> – Тег, который вы можете придумать сами
Вам предложат ввести Registry username и Secret name of password. Если вы проводили аутентификацию тем способом, что был описан выше, то сначала нужно ввести json_key, а затем название секрета, в котором было сохранено содержимое файла key.json. После этого в реестре должен появиться ваш загруженный образ.
Остается создать ноду из ячейки с кодом.
Важные моменты:
- Прогоните все необходимые ячейки с кодом перед сохранением контрольной точки. Если вам нужна определенная конфигурация машины, пропишите это в ячейке, которую будете деплоить, например #!g1.1 (иначе будет использоваться дефолтная конфигурация c1.4). Для нашего примера при создании ноды в Output variables необходимо указать name: output_data, type: dict. Аналогично для Input variables. Необходимо указать Kernel Docker Image
- Image path— путь до загруженного в реестр образа (можно нажать на тег образа в реестре, и путь будет скопирован).
- Username и Password secret — то, что мы указывали, когда пушили образ в реестр.
- После создания у ноды должен быть статус Active, но придется немного подождать, пока можно будет к ней обращаться — в ноде должен быть указан инстанс со статусом HEALTHY (или несколько статусов, если вы выбрали такую конфигурацию).
- Image path— путь до загруженного в реестр образа (можно нажать на тег образа в реестре, и путь будет скопирован).
Обращение к модели
Обращаться к ноде можно с помощью IAM-токена или API-ключа. Пример кода для обращения к ноде можно посмотреть в GitHub Стоит отметить, что в функции call_nodeесть небольшой дефект: переменная dataдолжна заполняться следующим образом:
data = {
«folder_id»: folder_id,
«node_id»: node_id,
«input»: {‘input_data’: input_params}
}
Значение для заполнения переменной node_id можно найти сразу после имени ноды, если выбрать ее из списка на вкладке Nodes. folder_id — идентификатор каталога, в котором был создан проект.
Если вам не надо менять окружение, загруженное в Docker-образ, то вы можете задеплоить другой код, т.е. повторно выполнить только пункт 6 предыдущего раздела.
[ Рекомендации ]
Читайте также
[ Связаться ]
Давайте раскроем потенциал вашего бизнеса вместе
Заполните форму на бесплатную консультацию