(LLM) в продакшене для цели рапараллеливания запросов?
Описание ситуации:
Пытаемся масштабировать LLama2 70B Q4, необходимо обсепечить параллельность работы 30 клиентов при использовании чат-бота.
Аппаратное оснащение: 4 RTX 4090 на каждый из трёх инстансов (физических машин).
Для распараллеливания использовали uvicorn+fastapi, но не взлетело. При запуске каждого воркера требуется 11 Гб с каждой карты дополнительно (столько весит вся модель + эмэддинги для векторного хранилища). Соответственно, 30 воркеров запустить невозможно при таком подходе.
я б думал в сторону взять кафку и rabbitMQ для управления запросами и распределения между инстансами чат-бота, далее - квантизация модели, чтоб уменьшить объём в памяти, ну и смотреть в сторону микросервисной архитектуры в целом. использовать асинхронные запросы, можно пофайнтюнить модель. Так-то поводов для оптимизации найти можно много
А вы не знаете на NPU есть ли оптимизации любые?
Для начала, TensorFlow и PyTorch уже оптимизирован для NPU. А так, в целом, оптимизация всегда плюс/минус одинаковая: профилирование и рефакторинг кода (особенно узких мест), перевод на асинхронность, квантизация, масштабирование батча для более лучшего параллелилзма и улучшения производительности.
Спасибо, можно уточнить тогда. 1. Pytorch gpu устанавливать, там вроде только gpu и only cpu 2. Готовая LLM 4 бит, меньше некуда вроде. Chunk size 1024. Асинхронность нельзя сделать насколько мне известно в этом случае. Всякие cuBLAS не поставить. В итоге 2 минуты выполняется ответ на запрос.
А какое железо? Есть ещё один не сильно популярный способ оптимизации: больше хорошего и нового железа :3
Вот я тут не подскажу сильно, но куча CPU с низкой частотой. Как по мне все что связано с LLM делают только на GPU, NPU вроде для другого, т.е. как туже GPT в несколько потоков запускать непонятно
А в чем проблема инпут батчем подать?
Проблема в том, что на NPU только CPU много и все
Обсуждают сегодня