Облачная платформаEvolution

Развертывание модели в Docker RUN с использованием KServe

Эта статья полезна?

С помощью этого руководства вы развернете модель машинного обучения с помощью KServe в сервисе ML Inference. Вы научитесь создавать Docker-образ с моделью, загружать его в реестр Artifact Registry и разворачивать модель в Docker RUN. В результате вы получите готовый инференс на базе модели google/flan-t5-small, доступный через API и совместимый с OpenAI.

Вы будете использовать следующие сервисы и инструменты:

  • ML Inference — сервис для запуска ML-моделей в облаке с использованием GPU.

  • Artifact Registry для хранения, совместного использования и управления Docker-образами, Deb-пакетами, RPM-пакетами, Helm-чартами и файлами любого типа (generic).

  • KServe — инструмент для развертывания и управления ML-моделями на базе Kubernetes.

  • Hugging Face — платформа с открытым исходным кодом и сообщество разработчиков, ориентированное на машинное обучение, обработку естественного языка (NLP) и другие области искусственного интеллекта.

Шаги:

Перед началом работы

  1. Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. На верхней панели слева нажмите Кнопка с изображением девяти точек и убедитесь в том, что сервис ML Inference в разделе AI Factory подключен. Если сервис ML Inference не подключен, оставьте заявку на подключение.

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

  1. Клонируйте репозиторий с примером кода для последующей сборки Docker-образа:

    git clone https://github.com/cloud-ru/evo-docker-run-kserve-lab.git
    cd kserve-example
  2. Скачайте модель google/flan-t5-small:

    mkdir -p models/flan-t5-small
    hf download --local-dir ./models/flan-t5-small google/flan-t5-small

    Если утилита hf не установлена, используйте Python-скрипт:

    from transformers import T5ForConditionalGeneration, T5Tokenizer
    # Load the model and tokenizer
    model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-small")
    tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-small")
    # Save the model and tokenizer
    model.save_pretrained("./models/flan-t5-small")
    tokenizer.save_pretrained("./models/flan-t5-small")
  3. Соберите Docker-образ, содержащий модель и необходимые зависимости для запуска через KServe:

    docker build -t <registry_name>.cr.cloud.ru/kserve-flan-t5-small .

    Где <registry_name> — название реестра, которое вы указывали при создании в Artifact Registry.

2. Загрузите образ в реестр Artifact Registry

  1. Выполните команду для загрузки образа в реестр:

    docker push <registry_name>.cr.cloud.ru/kserve-flan-t5-small

    Где <registry_name> — название реестра, которое вы указывали при его создании в Artifact Registry.

  2. Убедитесь, что образ отображается в личном кабинете на странице Artifact Registry → Артефакты.

3. Разверните модель в ML Inference Docker RUN

  1. В личном кабинете перейдите в раздел AI Factory → ML Inference.

  2. Перейдите на вкладку Docker RUN.

  3. Нажмите Создать.

  4. Заполните параметры для развертывания модели:

    • Название: kserve-flan-t5-small

    • URI Docker-образа: <registry_name>.cr.cloud.ru/kserve-flan-t5-small

      Где <registry_name> — название реестра, которое вы указывали при его создании в Artifact Registry.

    • Порт контейнера: 8080

  5. Нажмите Продолжить.

  6. Настройте параметры масштабирования:

    • Минимальное количество экземпляров: 0

    • Максимальное количество экземпляров: 1

  7. Нажмите Продолжить.

  8. Нажмите Создать.

  9. Дождитесь, когда статус инференса изменится на «Запущен», и появится публичный URL-адрес.

4. Проверьте работоспособность инференса

  1. Скопируйте публичный URL-адрес созданного инференса:

    1. На верхней панели слева нажмите Кнопка с изображением девяти точек и перейдите ML Inference → Model RUN.

    2. Нажмите на название созданного инференса.

    3. В строке Публичный URL нажмите кнопку Копировать.

      ../_images/s__ml-inference__kserve-docker.webp
  2. Отправьте тестовый curl-запрос в формате v1:

    curl -X POST https://<public_url>/v1/models/flan:predict \
    -H "Content-Type: application/json" \
    -d '{"instances": [{"text": "Translate to German: My name is Arthur"}]}'

    Где <public_url> — публичный URL-адрес созданного инференса.

  3. Отправьте тестовый curl-запрос в формате v2:

    curl -X POST https://<public_url>/v2/models/flan/infer \
    -H "Content-Type: application/json" \
    -d '{
    "inputs": [{
    "name": "input-0",
    "shape": [1],
    "datatype": "BYTES",
    "data": ["Translate to German: My name is Arthur"]
    }]
    }'
  4. Убедитесь, что в ответе вы получаете корректный результат:

    {
    "predictions": ["Mein Name ist Arthur"]
    }

Результат

В ходе практической работы вы развернули модель машинного обучения с использованием KServe в сервисе ML Inference. Вы научились создавать Docker-образ с моделью, загружать его в реестр Artifact Registry и разворачивать модель в Docker RUN в облаке Cloud.ru Evolution.