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 →
RepoRadar