Обновить

Распределённый инференс и шардирование LLM. Часть 1: настройка GPU, проброс в Proxmox и настройка Kubernetes

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели28K
Всего голосов 45: ↑45 и ↓0+58
Комментарии9

Комментарии 9

Выдающаяся работа. Спасибо!

  • 2–3 видеокарты RTX 3090 (24 ГБ) или хотя бы RTX 3060 (12 ГБ);

Это порядка 72 ГБ. Грубо, если модель bf16, это порядка 30b модели. Т.е. про оригинальную Deepseek-R1 с ее >600b параметрами речи не идет?

Не холивара ради, просто уточняю, в статье ничего про это не нашел, кроме предпосылок для старта сего эксперимента:

После того как я развернул урезанную версию модели на 32 млрд параметров с помощью Ollama, у меня возник вопрос: «А можно ли распределить модель, которая не помещается в видеопамять одной GPU, между несколькими GPU?»

На текущем сетапе конечно не получится запустить оригинальную Deepseek-R1, там в bf16 нужно порядка 1,2Тб памяти, которую надо где то взять)

Для демонстрации можно попробовать сгрузить часть весов на ОЗУ с помощью параметра CPU_OFFLOAD_GB, но в этом случае скорость инференса значительно упадет.

Либо полностью перейти на распределенный запуск на CPU, но это, боюсь, тоже будет медленно и потянет на тему для отдельного исследования)

Вот для примера запустил с CPU_OFFLOAD_GB=16 модель gemma-3-27b-it которая весит около 60Gb, она успешно работает, но скорость мала - порядка 0,2 t/s

Таким же способом можно запустить R1, но работать будет очень медленно.

Остается либо увеличивать количество видеокарт, либо ждать, ну или квантовать для уменьшения потребления ресурсов.

Моя текущая лаборатория — это кластер из 14 серверов.

Пойду пороюсь в чулане, может что-то найду... О, нашёл: 2060-12GB - 1 штука, 4070Super-12GB - 1 штука, Tesla M40-24 GB - 1 штука, да несколько ПК - свой, жены, кошки... а нет, у кошки - старый ноутбук... Ну всё, пошёл кластер разворачивать...

Статья вызвала двоякое ощущение. С одной стороны, тема интересная, расписано всё действительно подробно и качественно, но вот это описание своей "домашней" лаборатории о четырнадцати серверах с каким-то невероятным для простого "юзверя" количеством недешёвых 3090, да в самом приветствии обронённое

...я работаю в Московском кредитном банке...

Вспомнился анекдот про переписку в чате:

- u menya videokarta 4070-TI SUPER

- spasibo, ti tozhe super

Да вы не правы про намек на банк. Сашка - он такой экспериментатор и фанат) Знаю его лично, все оборудование личное. Ну а то что место работы упомянул в профессиональной статье - это добавляет престижу всем. Почему нет?

Я ничуть не против фанатов айти-технологий, сам такой. Просто после первых же строк про описание домашней лаборатории значительная часть читателей нервно отойдёт покурить в сторонку (лично я словил когнитивный диссонанс, знаете ли). Тем более, что в статье говорится, что и на более скромном "полигоне" методика так же хорошо сработает (ок, а какая будет минимальная конфигурация? какие результаты смогут получить те, у кого будет только минимальный набор оборудования?). К сожалению, не каждый фанат-айтишник "сам себе Газпром", далеко не каждый... одна 3060-12 - неплохо, одна 3090 - отлично, но три 3090 и 14 серверов дома... такое может себе позволить далеко не каждый... конечно, если он не работает в Московском кредитном банке!

Ответ на вопрос "можно ли распределить языковую модель между несколькими GPU?", очевидно, "да" (поскольку как-то так работают облачные chat-gpt, deepseek и иже с ними). Обычному пользователю фанату нейросетевых технологий может быть интересно узнать, как эффективнее увеличить вычислительные возможности своей техники.

Что будет, если использовать один сервер с несколькими видеокартами? А если несколько серверов, каждый с одной видеокартой? А если один сервер плюс райзер с видеокартами? А если много удалённых серверов, объединённых с помощью сети (скажем, у меня и у друзей дома стоят достаточно мощные компьютеры, можем мы объединить их вычислительную мощность, не перенося их в одно помещение физически)? Какие результаты можно получить в каждом из этих случаев?

Модели загружаются и разбиваются на части. Каждая часть модели загружается на отдельную видеокарту.

Под это описание подходит как ситуация "1 CPU + 2 GPU" (в случае с двухпроцессорной материнкой процессоров тоже станет два, но какой прирост это может дать?), так и "2 * (CPU+GPU)", не так ли? В статье рассказывается про второй вариант. Как эти два варианта будут различаться по производительности LLM (при условии использования одинаковых видеокарт)?

Для комфортного повторения моих экспериментов вполне достаточно иметь:

  • 2–3 сервера или мощных ПК, совместимых с GPU;

  • 2–3 видеокарты RTX 3090 (24 ГБ) или хотя бы RTX 3060 (12 ГБ);

  • простое сетевое оборудование (1GbE или 10GbE по возможности).

То есть, по сути, эксперимент можно было бы повторить (и показать в этой серии статей) на 2 серверах, каждый из которых имеет на борту по RTX 3060-12, верно?

Спасибо за содержательный комментарий и вопросы!

Моя лаборатория — это скорее рабочий инструмент, а не демонстрация "железа". Она создавалась несколько лет специально для быстрого тестирования энтерпрайз-решений, которые потом идут в продовые сценарии. Это всегда был осознанный выбор в пользу экспериментов: всё собиралось по частям, часто — на вторичном рынке, и в ущерб другим хобби и тратам.

По сути, основные подходы из статьи — распределение моделей, запуск inference на нескольких машинах — одинаково хорошо работают и на более скромных конфигурациях.
Если есть 2–3 ПК с RTX 3060, их можно объединить в кластер через Ray/vLLM и повторить ключевые сценарии (различие будет только в производительности и максимальном размере модели). Один сервер с несколькими GPU — тоже вариант, тут архитектура аналогичная, разница будет в нюансах коммуникации между устройствами.

Для домашних или небольших сетей подойдут и сценарии с объединением мощных ПК через интернет (если позволяют сеть и задержки) — методика та же, ограничения будут только в скорости обмена.

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

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

Буду рад, если статья окажется полезной, и открыт к дальнейшим вопросам!

такой вариант: вместо сетки прицепить несколько карт на сервер через oculink - дёшево и сердито, быстрее чем оптика 10 гбит... Есть pcix 4x16 карты с парой oculink выходов; ssd m2 тоже в дело пойдет; все таки сетка это очень узкий канал. Я предложил бы вариант такой: серверная материнка, амд, 256-521 гигов памяти ( можно ddr4, по цене пониже), и гроздь недорогих видеокарт , штуки 3 - 6, через pcix и окулинк.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
flant.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Александр Лукьянов