# DataSphere Inference

DataSphere предоставляет инструменты для релиза сервисов, доступных для сторонних ресурсов. Вы можете развернуть для эксплуатации не только модель, обученную в DataSphere, но и создать при помощи тех же инструментов полноценный работающий сервис на базе [Docker-образа](https://yandex.cloud/ru-kz/blog/posts/2022/03/docker-containers).

Для публикации сервиса в DataSphere существуют специальные ресурсы — [ноды](#node) и [алиасы](#statuses).

## Ноды {#node}

_Нода_ — это изолированная в собственном контуре группа специально созданных [виртуальных машин](../../../glossary/vm.md) (_инстансов_), между которыми распределяется вычислительная нагрузка. Инстансы ноды создаются с заранее определенным окружением и зафиксированным состоянием интерпретатора. В зависимости от потребностей вы можете выбрать различные [конфигурации](../configurations.md) инстансов.

{% note warning %}

При развертывании и эксплуатации моделей вы платите за время работы каждого инстанса ноды — от момента запуска до момента удаления.

Если развернутый сервис вам больше не нужен, удалите ноду.

{% endnote %}

Для создания ноды укажите [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder) облака вашей организации, в котором нода будет хранить логи.

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

{% note info %}

Максимальный размер запроса и ответа API ноды — 16 МБ.

{% endnote %}

Отправлять запросы в ноду могут пользователи и [сервисные аккаунты](../../../iam/concepts/users/service-accounts.md) с минимальной ролью в проекте `datasphere.community-projects.developer`. Сервисный аккаунт должен быть создан в каталоге, указанном при создании ноды.

### Нода из модели {#models-node}

Ноды из [моделей](../models/index.md) позволяют [развернуть](../../operations/deploy/node-create.md#from-model) сохраненные в DataSphere модели в качестве сервиса и обращаться к нему по API. Ноду можно создать из следующих моделей:

* [LightGBM](https://lightgbm.readthedocs.io)
* [ONNX](https://onnx.ai/)
* [Tensorflow.Keras](https://keras.io)
* [Tensorflow](https://www.tensorflow.org)
* [PyTorch](https://pytorch.org)
* [XGBoost](https://lightgbm.readthedocs.io)

Если вы хотите развернуть модель, которую не поддерживает сервер Triton, вы можете [конвертировать](https://onnx.ai/sklearn-onnx/auto_tutorial/plot_gexternal_catboost.html) ее в формат ONNX или развернуть [модель на основе Docker-образа](#docker-node).

Чтобы [создать ноду](../../operations/deploy/node-create.md#from-model) из модели, обученной не в DataSphere, загрузите модель из файла в переменную в ноутбуке, а затем [создайте](../../operations/data/models.md#create) из этой переменной модель DataSphere.

Для развертывания нод из моделей DataSphere использует [Triton Inference Server](https://developer.nvidia.com/triton-inference-server). Вы можете развернуть несколько моделей, сохраненных в DataSphere, на одной ноде. DataSphere самостоятельно определит входные и выходные параметры, обеспечит работу API модели, а затем — предоставит мониторинг самой ноды и сервера Triton.

{% note info %}

При развертывании моделей PyTorch DataSphere не может автоматически определить входные и выходные параметры.

{% endnote %}

### Нода из произвольного Docker-образа {#docker-node}

Ноды, развернутые из Docker-образа, размещенного в реестре контейнеров, будут полноценным рабочим сервисом. Docker-образ не обязательно должен содержать модель, обученную в DataSphere — вы можете создать любой образ и разместить его в удобном для вас реестре. О том, как загрузить Docker-образ в реестр Yandex Container Registry, смотрите [Загрузить Docker-образ в реестр](../../../container-registry/operations/docker-image/docker-image-push.md).

{% note info %}

Для использования Yandex Container Registry сервисному аккаунту проекта необходима [роль](../../../container-registry/security/index.md#container-registry-images-puller) `container-registry.images.puller`.

{% endnote %}

При [создании ноды из Docker-образа](../../operations/deploy/node-create.md#from-docker) вы сами определяете API создаваемой ноды, порт, который ваш сервис будет использовать, время соединения, формат собираемых метрик и другие параметры. После создания ноды DataSphere будет следить за ее состоянием, поддерживать работу инстансов и, при необходимости, масштабировать ноду в пределах заданного диапазона инстансов. Для инстансов доступны [зоны доступности](../../../overview/concepts/geo-scope.md) — `kz1-a` и `kz1-b`.

Для работы с нодой на основе большой модели или Docker-образа доступно подключение дополнительного диска размером от 10 до 4096 ГБ. Если у ноды есть несколько инстансов, диск будет создан для каждого из них.

### Статусы ноды {#statuses}

Нода DataSphere может находиться в одном из статусов:

* `Healthy` — количество инстансов со статусом `Healthy` в ноде равно минимальному числу требующихся инстансов;
* `Unhealthy` — количество инстансов со статусом `Healthy` в ноде меньше минимально допустимого;
* `Created` — нода только что создана;
* `Suspended` — работа ноды приостановлена;
* `Deleting` — нода в процессе удаления.

### Статусы инстанса {#instance-statuses}

Инстансы ноды могут иметь один из следующих статусов:

* `Healthy` – инстанс здоров и доступен для балансировки;
* `Unhealthy` – с инстансом возникли проблемы, он исключен из балансировки;
* `Created` – для инстанса создана ВМ;
* `Started` – с ВМ инстанса установлена связь;
* `Preparing` – инстанс подготавливается к обслуживанию запросов;
* `Deleting` – инстанс находится в процессе удаления;
* `Undefined` – начальное состояние инстанса, ВМ еще не создана.

## Алиас {#alias}

_Алиас_ — специальный ресурс для публикации и обновления сервиса, который позволяет незаметно для пользователей заменять ноды и обновлять развернутый сервис во время работы.

[Создайте алиас](../../operations/deploy/alias-create.md) и используйте его в качестве эндпоинта сервиса. Вы можете изменять связанные с ним ноды, балансировать нагрузку между ними и убирать устаревшие версии Docker-образа незаметно для пользователя.

Алиас может быть публичным или приватным. Публичный алиас доступен всем пользователям, авторизованным в Yandex Cloud. Приватный алиас доступен только аккаунтам, которые имеют следующие роли:

* Пользователи с минимальной ролью `datasphere.community-projects.developer` в проекте.
* Сервисные аккаунты с минимальной ролью `datasphere.community-projects.developer` в проекте либо созданные в каталоге, который был указан при создании алиаса.

## Примеры использования {#examples}

* [Создать ноду](../../operations/deploy/node-create.md)
* [Создать алиас](../../operations/deploy/alias-create.md)
* [Развертывание сервиса из модели ONNX](../../tutorials/node-from-model.md)
* [Развертывание сервиса на основе Docker-образа](../../tutorials/node-from-docker.md)
* [Развертывание сервиса на основе Docker-образа с FastAPI](../../tutorials/node-from-docker-fast-api.md)