Развертывание и эксплуатация моделей

Как функционирует сервис?

Для использования сервиса необходимы обученная модель (классические ML алгоритмы, нейронные сети) и serving-скрипт на S3 бакете.

Для развертывания модели на сервисе необходимо с помощью любого удобного интерфейса (Jupyter Notebook, API, GUI):

  • Собрать Docker-образ с моделью.

  • Развернуть образ.

Для отправки запросов по API к модели (вручную или со стороны автоматизированной системы клиента) необходимо:

  • Авторизоваться на сервисе и получить токен доступа, если не назначена иная политика доступа через «управление ключами».

  • Отправить HTTP-запрос к развернутой на сервисе модели. См. Развертывание и эксплуатация моделей.

Что делать, если возникает проблема с созданием деплоя?

Если возникает проблема с созданием деплоя — выберите один экземпляр и после этого проверьте логи на предмет ошибки в serving-скрипте.

Сколько регионов доступно при создании деплоев?

Название региона

Описание региона

Christofari.V100

Деплой будет развернут на узлах суперкомпьютера Christofari. Для выбора доступны конфигурации, использующие GPU и CPU.

Cloud.Region.CPU (CPU)

Деплой будет развернут на инстансе Advanced. Для выбора доступны конфигурации, использующие GPU и CPU или только CPU.

Какие существуют способы регулирования расходов?

Можно установить лимит расхода денежных средств, за рамки которого пользователь не сможет выйти в отчетном периоде. В это случае все задачи пользователя будут приостановлены.

Для чего подходит сервис?

Сервис позволяет разворачивать модели искусственного интеллекта на базе инфраструктуры Cloud.ru для дальнейшего обращения к моделям с помощью API-запросов от автоматизированных систем.

Как при деплое поставить несколько рабочих воркеров?

Если для задачи выделен один под и модель заняла память пода не полностью, можно использовать следующий код в скрипте kfserving.py:

import kfserving
import time
import re
import os
import logging
import tornado
from ray import serve

tornado.log.enable_pretty_logging()


class CustomKFServingModel(kfserving.KFModel):
    def __init__(self, name: str):
        super().__init__(name)
        self.name = name
        self.model = None
        self.ready = True

        self.load_state()

    def load_state(self):
        print(f"State loaded for model {self.name}")

    def predict(self, request):
        # curl -X POST <URL>/v1/models/<deployment-name>:predict --data-raw '{"instances": [0]}'
        # You can get it from tab "Test API" in UI
        logging.info(f"INCOME REQUEST: {request}")
        inputs = request["instances"][0]

        time.sleep(int(inputs))

        return {"inputs": inputs}


if __name__ == "__main__":
    # x = re.compile('(kfserving-\d+)').search(os.environ.get('HOSTNAME'))
    name = "kfserving-default"
    # if x:
    #     name = x[0]

    N_WORKERS = 10
    mymodel = serve.deployment(init_args=(name,), num_replicas=N_WORKERS)(CustomKFServingModel)

    kfserving.KFServer().start({name: mymodel})
Масштабная конференция
GoCloud 2024:
облачные грани будущего