Comments 28
Круто. Но почему просто не сделать отдельную сборку на Mini-ITX или Micro-ATX? В Качестве монитора использовать USB-C монитор мобильный, аля Viewsonic. Для мобильных решений можно какой-нить телефон типа S10. Клавиатуру и мышь блютузные, конечно.
Так, в порядке бреда. Но изыскания класс, интересно было про проброс Thunderbold в тунеле и крепление конструктором к блоку питания.
Да для LLM можно было бы и просто через API работать. Типа Ollama на этом внешнем сервере, а к ней уже какой-нибудь extension (а-ля Continue для VSCode) или AnythingLLM на ноуте. Разве что на ноуте видео не ускорится, в игрушки так не поиграешь, конечно.
Спасибо большое за хороший комментарий! Так как ollama выставляет 1 порт, то действительно можно собрать на отдельном устройстве (мини сервер) и сделать доступ по сети. Быстрая работа с ollama - это конечно большой плюс, но и для повседневных задач мне лично хотелось иметь на рабочем ноутбуке видеокарту побыстрее. После установки работа стала намного комфортнее со всеми приложениями, любящими аппаратное ускорение (Chrome, electron и тп). Еще из важных плюсов то, что встроенная видеокарта на одном кристалле с самим CPU, и когда она перестала использоваться, то температура процессора снизилась.
Плюсанул, потому что "во-первых, это красиво"
Хотя и не понял, как в итоге все-таки подключили. Вроде бы карту в PCIe, который в eGPU адаптер, который по M2 включен не в "ноут", а в дополнительный SSD-шный переходник, который уже стандартно вставляется в ноут (благо Thunderbolt оказался в наличии).
Но тогда почему "также я заказал новую видеокарту" идет уже после "SSD эпопеи? Какая видюха изначально подключалась, когда внутрь ноута пытались подключиться, а он ничего поддерживаемого не обнаружил?
Не то, чтобы было актуально, сам просто Aorus Gaming Box в Thunderbolt втыкаю. Но хинт, что SSDшная коробчонка на самом деле дает полноценный M2, а не только для дисков, восхитил.
Спасибо большое за плюс! Вы все правильно поняли, в китайский адаптер egpu вставлена видеокарта, туда же подключается блок питания ATX. От адаптера egpu идет шлейф M2, в который вставляется в SSD-ный (Nvme) переходник, который в свою очередь имеет порт Thunderbolt, который в итоге вставляется в ноутбук. Изначально тестировал с видеокартой от стационарного домашнего компьютера (старая Nvidia GTX 760), так не был уверен, что все взлетит. Когда все заработало, то уже смело заказал видеокарту. Когда подключал M2 в тот порт под LTE/GPRS модем, адаптер egpu и видеокарта стартовали (вентиляторы на видеокарте начинали крутиться, индикаторы на egpu переключались), но ноутбук зависал с тем информационным сообщением, что я описал.
Возможно ли параллельно подключить таким образом несколько видеокарт. Например, 4 по 8ГБ.
Спасибо большое за отличный вопрос! О каких-то явных ограничениях мне не известно. Порт Thunderbolt не ограничивается подключением одного устройства. Ollama может работать с несколькими ускорителями, docker тоже может прокидывать несколько карт в контейнер. Полагаю, что узким местом может стать пропускная способность Thunderbolt, например при подключении через hub, что возможно скажется на производительности.
Если и можно, это останется 4 карты по 8 ГБ. Модель на 20ГБ все равно не запустится :(
Разве что разные модели параллельно (на одной карте llama, на другой условный starcoder...
В интерфейсе oogabooga есть интересная галочка "row split", вот перевод подсказки:
Разделите модель по строкам по GPU. Это может улучшить производительность нескольких GPU.
Не совсем понимаю, что это означает, но в глубине души очень надеюсь что это то, о чем идет речь.
Знал только что можно часть слоев в VRAM грузить, а часть оставлять в обычной памяти. Может правда научились одну модель распихивать по памяти в разных карточках... Такое радует.
Я не эксперт в этой области, но кажется в теории можно использовать партиционирование(partition), как например в БД. Возможно уже есть решения или они появятся в будущем. Тогда можно было бы в "домашних" наращивать произвольный объем памяти и запускать большие модели.
Я видел
you can run an LLM much larger than your VRAM to answer a yes/no question every 5 seconds on average, for throughput use cases. 1
This is possible with batching and layer-wise inferencing from disk, where we stream an LLM's layers from the hard drive into VRAM, and run each layer against multiple in-progress prompts before moving on to the next layer.
И даже в LM Studio видел выбор, сколько слоев помещать в VRAM. Но это все было в контексте "что не влезло в VRAM доделаем в обычной памяти, пусть и медленно".
А сейчас нашел на реддите пост двухмесячной давности:
So the layers across multiple GPUs doesn’t run in parallel or faster than if the model layers could fit on one single GPU, the water has to flow in sequence through all the layers. Ideally we would all have a GPU with enough memory to fit the big models, but we don’t so we have to split big models across multiple GPUs. The multi GPUs don’t run in parallel and make things magically faster, they run in series.
Если я правильно понял, "второй процессор на GPU" выгоды не даст (сначала отработает на первой карте, потом начнет работать на второй карте). Но вот "продолжение" будет все же работать быстро в VRAM, а не тормозить в обычной памяти.
Так что да, выглядит не идеальным, но вполне приемлемым. При том, что RTX 3090 gaming box aorus (GV-N3090IXEB-24GD) на авито продается за 75-85 тыс. руб, выглядит реалистичным иметь таких две штуки и грузить 40GB модели.
Игрался с таким переходником пару лет назад. вполне прекрасно запитывается от sff БП, через полноценный м.2 в материнке потерь в попугаях почти не было(в пределах погрешности). как испытуемую брал 3070ти.
единственный минус - как и у автора, требуется удлинитель, чтобы красиво спрятать. китайцы постоянно что то новое рожают, поэтому у каждого это свой путь. но это довольно интересная тема, если вы не хотите заводить полноценный системник
Статья отличная, но не могу удержаться от лёгкой душинки
Но отключить в горячем режиме не получится: PCI — не USB, и требует подключения модуля ядра.
USB тоже требует модулей ядра. PCI не позволяет подключать устройства нагорячую, потому что такая возможность не предусмотрена самой шиной, а на программном уровне перечисление устройств происходит один раз на старте системы.
Все верно, спасибо за уточнение!
Разве спецификация PCI-e не поддерживает горячее подключение? Другое дело, конечно, что оно не реализовано (по крайней мере в бытовом железе)
да, вы правы. Вот интересная статья про обработку подключений/отключений в ядре
А на Windows такое можно сделать? У меня в ноуте уже стоит 4060/8, но только я проапгрейдился, как вышел Flux, а ему, гаду, уже минимум 16 подавай
Я думаю можно, поискал, нашел официальную инструкцию у докер через wsl2:
https://docs.docker.com/desktop/gpu/
Плюсик! Получилось красиво.
Но оно достаточно большое получилось и сложное. Для себя я бы просто собрал комп, весь дешёвый, но с видюхой. И раздавал бы LLM по сетке через API. И поддерживать это проще, и собирать, и нет ограничений. И ноут не привязан к проводу, а ходит по вай-фаю. Или не только по вай-фаю, открой порты и раздавай через интернет, и будет тебе своя LLM из кафе и из офиса работать
Да, согласен, тоже отличное решение! В моем же случае мне была еще важна внешняя видеокарта и для обычных повседневных задач, интегрированная карта ноутбука не тянула (большое разрешение, куча программ с аппаратным ускорением и тп). Более того, перестав использовать интегрированную карту (на одном кристалле с CPU) немного остудил CPU.
а что у вас получилось.? есть сравнения по производительности моделей?
Думаю, что тема интересная и заслуживает отдельной статьи с измерениями и большим числом моделей. Я лично не увидел какую-либо корреляцию размера модели с конкретным железом и объемом видеопамяти. Специальных замеров я, к сожалению, не делал, могу только субъективно расставить в порядке производительности, начиная от самой быстрой модели: starcoder2:latest, starcoder2:15b, deepseek-coder:6.7b, codestral:22b.
Внешняя видеокарта backend-разработчика, или как заставить лучшего друга перестать тупить и начать помогать (часть 2)