Развертывание сервиса на основе Docker-образа
DataSphere позволяет разворачивать и эксплуатировать сервисы на основе произвольного Docker-образа.
В этом практическом руководстве с помощью ноды из Docker-образа вы развернете сервис обнаружения объектов на изображении, основанный на NVIDIA Triton Inference Server
- Подготовьте инфраструктуру.
- Подготовьте Docker-образ для развертывания сервиса.
- Разверните сервис в DataSphere.
- Проверьте работу развернутого сервиса.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость развертывания сервиса на основе Docker-образа входят:
- плата за постоянно запущенные инстансы ноды (см. тарифы DataSphere);
- плата за запуск ячеек с кодом для проверки работы развернутого сервиса;
- объем хранилища, занятый данными Yandex Container Registry (см. тарифы Container Registry).
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Создайте каталог
Создайте каталог, в котором вы развернете всю необходимую инфраструктуру, а ваш сервис будет хранить логи.
Примечание
В примере инфраструктура Yandex Cloud и развернутый сервис работают в одном каталоге Yandex Cloud, однако это не обязательно.
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например
data-folder
. - Нажмите кнопку Создать.
Создайте реестр Container Registry
DataSphere может создать ноду из Docker-образа, который хранится в Yandex Container Registry. Чтобы загрузить образ, создайте реестр:
- Перейдите в каталог
data-folder
. - В списке сервисов выберите Container Registry.
- Нажмите кнопку Создать реестр.
- Задайте имя реестра, например
datasphere-registry
, и нажмите кнопку Создать реестр.
Создайте сервисный аккаунт для проекта DataSphere
-
Перейдите в каталог
data-folder
. -
В списке сервисов выберите Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта, например
sa-for-datasphere
. -
Нажмите Добавить роль и назначьте сервисному аккаунту роли:
container-registry.images.puller
— чтобы разрешить DataSphere скачивать ваш Docker-образ для создания ноды.vpc.user
— для работы с сетью DataSphere.- (опционально)
datasphere.user
— чтобы отправлять запросы в ноду.
-
Нажмите кнопку Создать.
Создайте авторизованный ключ для сервисного аккаунта
Чтобы сервисный аккаунт мог аутентифицироваться в Yandex Container Registry, создайте авторизованный ключ.
Примечание
Срок жизни авторизованных ключей не ограничен, но вы всегда можете получить новые авторизованные ключи и повторить процедуру аутентификации, если что-то пошло не так.
-
Перейдите в каталог
data-folder
. -
В списке сервисов выберите Identity and Access Management.
-
На панели слева выберите
Сервисные аккаунты. -
В открывшемся списке выберите сервисный аккаунт
sa-for-datasphere
. -
Нажмите кнопку Создать новый ключ на верхней панели.
-
Выберите пункт Создать авторизованный ключ.
-
Выберите алгоритм шифрования.
-
Задайте описание ключа, чтобы потом было проще найти его в консоли управления.
-
Сохраните открытый и закрытый ключи: закрытый ключ не сохраняется в Yandex Cloud, открытый ключ нельзя будет посмотреть в консоли управления.
Совет
Вы можете сохранить файл с ключом на свой компьютер. Его содержимое понадобится позднее при создании секрета для доступа DataSphere в Container Registry.
Подготовьте Docker-образ для развертывания сервиса
Если у вас еще нет Docker, установите
Создайте Docker-образ сервиса
-
Создайте папку, в которой будет храниться конфигурация Docker-образа, например
/home/docker-images
. -
Создайте и сохраните текстовый файл без расширения с именем
Dockerfile
.Triton Dockerfile
# syntax=docker/dockerfile:1 FROM nvcr.io/nvidia/tritonserver:22.01-py3 RUN mkdir -p /models/resnet152_640x640/1/model.savedmodel/ &&\ curl --location "https://tfhub.dev/tensorflow/faster_rcnn/resnet152_v1_640x640/1?tf-hub-format=compressed" |\ tar -zxvC /models/resnet152_640x640/1/model.savedmodel/ &&\ mkdir -p /models/inception_resnet_v2_640x640/1/model.savedmodel/ &&\ curl --location "https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_640x640/1?tf-hub-format=compressed" |\ tar -zxvC /models/inception_resnet_v2_640x640/1/model.savedmodel/ ENTRYPOINT ["/opt/tritonserver/nvidia_entrypoint.sh",\ "tritonserver",\ "--model-repository=/models",\ "--strict-model-config=false"]
-
Запустите Docker Desktop
. -
В командной оболочке перейдите в папку, где хранится созданный вами Dockerfile.
cd docker-images
-
Соберите Docker-образ:
docker build -t triton-docker --platform linux/amd64 .
Загрузите Docker-образ в Container Registry
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Задайте каталог
data-folder
каталогом по умолчанию:yc config set folder-name data-folder
-
Аутентифицируйтесь в Container Registry.
- Получите IAM-токен для своего пользовательского аккаунта:
yc iam create-token
В ответе будет IAM-токен. Если вы аутентифицируетесь от имени федеративного аккаунта, CLI перенаправит вас в консоль управления для аутентификации, а после этого пришлет IAM-токен.
Примечание
У IAM-токена короткое время жизни — не более 12 часов. Поэтому такой способ подойдет для приложений, которые будут запрашивать IAM-токен автоматически.
- Выполните команду, подставив вместо
<IAM-токен>
значение токена, которое вы получили на предыдущем шаге:
docker login \ --username iam \ --password <IAM-токен> \ cr.yandex
-
Получите список реестров каталога
data-folder
:yc container registry list
Идентификатор реестра понадобится вам на следующем шаге. Пример вывода команды:
+----------------------+---------------------+----------------------+ | ID | NAME | FOLDER ID | +----------------------+---------------------+----------------------+ | crp86bmgl1da******** | datasphere-registry | b1g4bh24c406******** | +----------------------+---------------------+----------------------+
-
Загрузите Docker-образ в Container Registry. Вместо
<идентификатор_реестра>
подставьте идентификатор вашего реестраdatasphere-registry
:docker tag triton-docker cr.yandex/<идентификатор_реестра>/triton:v1 docker push cr.yandex/<идентификатор_реестра>/triton:v1
Разверните сервис в DataSphere
-
Откройте главную страницу
DataSphere. На панели слева выберите Сообщества. - Выберите сообщество с привязанным платежным аккаунтом.
- Создайте проект
Node from Docker
. - В настройках проекта укажите:
- Каталог по умолчанию —
data-folder
. - Сервисный аккаунт —
sa-for-datasphere
.
- Каталог по умолчанию —
- Создайте секрет
iam-secret
, содержащий IAM-токен вашего пользовательского аккаунта. - Создайте секрет
key-for-sa
, хранящий полное содержимое файла с авторизованным ключом для сервисного аккаунтаsa-for-datasphere
. - Создайте ноду. Для этого на странице проекта в правом верхнем углу нажмите кнопку Создать ресурс. Во всплывающем окне выберите Нода. Укажите настройки ноды:
- В поле Имя введите имя ноды —
triton
. - В блоке Тип:
- Тип — выберите Docker-образ.
- Хранилище Docker-образов — выберите Yandex Container Registry.
- Путь к образу — задайте путь к образу Container Registry вида
cr.yandex/<идентификатор_реестра>/<имя_образа>:<тег>
. Его можно получить в консоли управления, скопировав полное значение на странице репозитория. Также вы можете заполнить поле вручную. Идентификатор реестра можно получить в CLI, выполнив командуyc container registry list
. - Секрет с паролем — выберите
key-for-sa
.
- В блоке Эндпоинт:
- Тип — выберите протокол HTTP.
- Порт — 8000.
- Включите опцию Телеметрия и укажите:
- Тип — выберите Prometheus.
- HTTP-адрес —
/metrics
. - Порт — 8000.
- Включите опцию Проверка и укажите:
- Тип — выберите HTTP.
- Путь —
/v2/health/ready
. - Порт — 8000.
- Таймаут — 1.
- Интервал — 20.
- Неудачные проверки — 3.
- Пройденные проверки — 3.
- В блоке Каталог выберите каталог
data-folder
. - В блоке Обеспечение выберите конфигурацию
g1.1
. - Нажмите кнопку Создать.
- В поле Имя введите имя ноды —
Проверьте работу развернутого сервиса
- Скачайте ноутбук
с кодом проверки и загрузите его в JupyterLab проектаNode from Docker
. - Выполните ячейки блока Preparing environment: выберите ячейки и нажмите Shift + Enter.
- В блоке Authentication заполните информацию для аутентификации в ноде. Замените
<node ID>
и<folder ID>
на идентификаторы нодыtriton
и каталогаdata-folder
. - Выполните ячейки блока Authentication.
- Выполните ячейки блока Test requests. Вы будете обращаться к разным моделям, в ответ на каждый запрос сервис вернет распознанные объекты на изображении.
Удалите созданные ресурсы
При развертывании и эксплуатации моделей вы платите за время работы каждого инстанса ноды — от момента запуска до момента удаления.
Если развернутый сервис вам больше не нужен, удалите ноду.
- Удалите ноду.
- Удалите секреты.
- Удалите авторизованный ключ сервисного аккаунта.
- Удалите Docker-образ и реестр Container Registry.