Mosec: фреймворк для сервинга моделей машинного обучения

Mosec — это фреймворк для высокопроизводительного сервинга моделей машинного обучения, предлагающий динамическую пакетную обработку и оптимизированные для CPU/GPU пайплайны.

Проект решает задачу эффективного развертывания ML-моделей, позволяя интегрировать их в backend или микросервисы без значительных усилий. В отличие от популярных решений, Mosec построен на Rust для веб-слоя и координации задач, что обеспечивает высокую скорость и оптимальное использование ресурсов. Интерфейс работает на Python, что удобно для разработчиков, уже использующих его в своих проектах.

Запуск осуществляется через PyPI с совместимостью для Anaconda, а также поддерживает динамическую пакетную обработку запросов. Однако стоит учесть, что проект еще находится в разработке и может иметь ограничения по функционалу. Подойдет для команд, которым нужны быстрые и масштабируемые решения для сервинга ML-моделей.

Проект MOSEC (Model Serving made Efficient in the Cloud) представляет собой высокопроизводительный фреймворк для развертывания моделей машинного обучения в виде API-сервисов. Он позволяет легко интегрировать любые обученные модели в облачные и микросервисные архитектуры, обеспечивая эффективное выполнение запросов и распределение нагрузки.

Зачем нужен MOSEC?

MOSEC разрабатывался для упрощения процесса развертывания и обслуживания моделей машинного обучения. Он обеспечивает:

  • Высокую производительность: С помощью Rust обеспечивается быстрая обработка данных и эффективное использование CPU.
  • Простоту использования: Интерфейс разработан на Python, что позволяет легко адаптировать код для онлайн-сервинга, используя те же базовые конструкции, что и для оффлайн-тестирования.
  • Динамическую пакетную обработку: Собирает запросы от разных пользователей для пакетной обработки и возвращает результаты.
  • Гибкость для облака: Поддерживает работу в облачных средах, управляется Kubernetes и другими системами оркестрации контейнеров.

Установка MOSEC

Для установки MOSEC требуется Python версии 3.7 или выше. Установить пакет можно следующими способами:

pip install -U mosec
# или установите с помощью conda
conda install conda-forge::mosec
# или установите с помощью pixi
pixi add mosec

Чтобы собрать проект из исходных кодов, тебе необходимо установить Rust и выполнить команду:

make package

После выполнения команды, в папке dist будет создан wheel-файл для установки.

Как использовать MOSEC

С помощью MOSEC можно развернуть предобученную модель, например, для генерации изображений с текстовыми запросами. Убедись, что установлены библиотеки diffusers и transformers:

pip install --upgrade diffusers[torch] transformers

Затем напиши сервер, унаследовав класс mosec.Worker:

class StableDiffusion(MsgpackMixin, Worker):
    def __init__(self):
        self.pipe = StableDiffusionPipeline.from_pretrained(
            "sd-legacy/stable-diffusion-v1-5", torch_dtype=torch.float16
        )
        self.pipe.enable_model_cpu_offload()
        self.example = ["useless example prompt"] * 4  # warmup (batch_size=4)

    def forward(self, data: list[str]) -> list[memoryview]:
        logger.debug("generate images for %s", data)
        res = self.pipe(data)
        ...

После этого добавь рабочего в сервер и запусти его:

if __name__ == "__main__":
    server = Server()
    server.append_worker(StableDiffusion, num=1, max_batch_size=4, max_wait_time=10)
    server.run()

Ограничения и конфигурация

При работе с MOSEC учти следующие ограничения:

  • Максимальный размер пакетной обработки (max_batch_size) и время ожидания (max_wait_time) могут вызвать проблемы с нехваткой памяти на GPU, если установлены неправильно.
  • Убедись, что время ожидания не превышает время пакетной обработки, чтобы избежать задержек.
  • Если установленные параметры не оптимальны, это может отразиться на производительности сервиса.

MOSEC предоставляет возможность настройки динамической пакетной обработки, что может существенно улучшить пропускную способность в условиях высокой нагрузки.

Заключение

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

Открыть на GitHub: mosecorg/mosec →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте