Pull to refresh

Comments 15

Здорово! Т.е. можно запустить llm разделив инференс, условно, на пару хотстов с rtx3090, а оставшуюся часть по нескольким ryzen 7950X3D, например. То, что было нужно для запуска моделей размеров от 70b. Наконец можно будет с llama 3.1 405B получит не 0.5 токенов в секунду, а намного больше, запустив на всём доступном оборудтвании.

Получается бекэнды между собой не общаются во время инференса. Это, скорее всего, означает, что 10Gbe-сеть не нужна. Тогда зачем в некоторых фреймворках для распребеленного запуска упоминаются требовпния к сети?

Тогда зачем в некоторых фреймворках для распребеленного запуска упоминаются требовпния к сети?

Думаю это нужно для того чтобы запустить инференс можно было быстрее, так как инференс выполняет только после того как все слои будут выгружены на бэкенды. Иными словами если у есть модель скажем 13B и чекпоинты которой весят кажется 9Гб и есть два бэкенда нужно залить на каждый бэкенд 4.5Гб данных.

Следовательно моя гипотезав в том, что чем быстрее сеть, тем быстрее запустится инференс.

Модели от 70b можно запускать и на обычном ПК. Ну, как обычном... я нашёл материнскую плату, которая поддерживает работу с тремя видеокартами, у меня три разных видеокарты (7900 xtx, 4080 и 4070). Так уж вышло, что они относятся к разным архитектурам, поэтому использую Vulkan через konoldcpp. Квантованная Llama 3.1 70b работает очень хорошо и быстро.

А что по цифрам? Интересно посмотреть, так как и GPU из "гражданской" серии, и сборка интересной получилась.

У самого сейчас лежит без дела 3070Ti (далеко до 4070, но всё же), надо применить её тоже, почему бы и нет

Только что проверил:

Processing Prompt [BLAS] (84 / 84 tokens)
Generating (420 / 512 tokens)
(EOS token triggered! ID:128009)
CtxLimit:504/4096, Amt:420/512, Process:1.76s (20.9ms/T = 47.75T/s), Generate:45.81s (109.1ms/T = 9.17T/s), Total:47.57s (8.83T/s)

Конечно, если бы было три видеокарты, которые работают с CUDA, было бы быстрее, но меня и эта скорость устраивает - текст выводится гораздо быстрее, чем я успеваю его читать)

так как сборку под ARM64 планируется выполнять на x86_64 процессоре.

Осталось дождаться полноценной кросс-платформы (если будет, конечно) для большей производительности и в бой.

А так выглядит классно, как раз задумывался об интеграции llama.
Надо будет попробовать в песочнице.

Любопытства ради: а какова производительность такого подхода? Скажем, 2 GPU в одной системе против 2х систем с 1 GPU? (все GPU одинаковые)

В моих (довольно скромных) экспериметнах бутылочным горлишком, например при inference llama3 q8 70b с помощью CPU был доступ к памяти - на практике выражалось в том, что увеличене потоков больше 2х не увеличивало производитекльность совершено. (Немного другой случай, но, имхо, показательный)

Так же lamma3 f16 8b на tesla p40 быстрее, чем на gtx 3060 Ti + tesla p40

Серъёзных замеров ещё не проводил, поэтому точных цифр дать не смогу, производительность замерял на следующих схемах: 1x RTX 3050, 1x RTX 4090 и пара из этих видекарт соединённых по RPC (сеть 1Гбит), вот gist с замерами.

Это кажется странным, но в режиме RPC инференс либо чуть быстрее, либо такой же как на самой быстрой карте.

UPD. Добавлю, что основная моя цель была не в том, чтобы ускорить инференс (хотя это было бы приятным бонусом), а в том чтобы выпонять его на кластере из маломощных микрокомпьютеров, которые по отдельности не способны на инференс больших моделей, скажем на жмене RaspberryPi CM3.

Ну вообще по поводу быстродействия вопрос вполне себе практичный: как альтернатива, вы можете нафигать в систему ssd до сатурации pci-e по скорости и использовать прямой доступ GPU к этим самым ssd (nvidia gpu это умеют). Другой вопрос сколько это стоить будет, но "не сильно много"... А то llama3 q8 70b на CPU я тоже запустит могу, со скоростью 1.2 token/sec...

на какой машине будет выделяться память под KV-cache? так как для для 128к нужно порядка 16гб памяти только под контекст, а ведь его нужно умножать еще на батчинг, который ускоряется значительно именно в случае испоьзования нескольких нод/видеокарт?!

Если я правильно понял в формате RPC схемы все низовые работы по инференсу происходят на стороне бэкенда, следовательно если мы имеем систему из нескольких серверов работа будет распределена между ними равномерно (с учётом доступной rpc-server RAM или VRAM), следовательно можно предположить, что вся работа с кешем и его хранение будет происходить на бэкенде.

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

А вот как это всё синхронизируется мне пока что непонятно.

жаль автор пока не допилил llama31 поддержку

Занятный проект, судя по коду поддерживается ограниченное количество моделей и предполагается использовать оригинальные веса, без квантизации GGUF или какой бы то ни было ещё, docker-образов нет, плюс смотрю там нет автоматики и все конфигурации будет необходимо прописывать вручную.

Cпасибо за ссылочку, проект пощупаю и сравню с аналогами.

Sign up to leave a comment.

Articles