Запустить LLM локально.
От: fk0 Россия https://fk0.name
Дата: 23.02.25 12:50
Оценка: :)
Hello...

Как думаете, какие перспективы запуска LLM, наподобии DeepSeek
(более-менее полноценной, а не урезанной 1.5-битной версии) локально?
В пределах ограничений имеющихся у среднего физ. лица. Т.е. вряд ли
рационально тратить на железо очень крупную сумму (в следующие два
года требования к ресурсам возрастут, а имеющееся железо удастся
только выкинуть если это что-то специализированное, если обычные
компы, то только приспособить для бытовых задач). Подключение
больше пары киловатт мощности требует и охлаждения, и размещения
где-то в отдельном месте, и явно того не стоит, чтоб просто пока
попользоваться LLM как автономным Stack Overflow. Если говорить
о покупке БУ серверов например, то тоже вряд ли осмысленно, т.к.
в квартире не разместить из-за шума.

Во-первых о потенциальной возможности. На Reddit вопрос кажется
уже расмотрели вдоль и поперёк и запускают LLM у себя дома. Если
отдельный дом это более реалистично чем квартира (уходит вопрос
охлаждения, шума и ограничения мощности). Вариантов сходу два:

1) Продаются относительно дёшево БУ сервера. Из них можно собрать
мини-кластер. Кажется там есть какие-то нюансы, почему дёшево,
неплохо бы разбираться. Как вариант дешёвые БУ отработавшие
матплаты от серверов Dell. Их можно ставить в "открытый корпус для EATX"
(см. на Ozon), если вентиляторы и БП тихие. У матплат Dell недостаток,
что только LGA2011-3 и это кажется не годится вообще, т.к.
процессоров с AVX-VNNI под LGA2011-3 -- нет, только под более
новые сокеты, например LGA3647, но под них нет дешёвых матплат.
AVX-VNNI ускоряет BLAS и llama.cpp, как я понимаю, раз в 8.
Т.е. это однозначный must have.

2) GPU. Тут всё не однозначно. Кажется GPU "не масштабируется"
по сравнению с вариантом 1, хоть и имеет сразу большую производительность.
Потенциально возможно конфигурация, когда одна матплата, много GPU.
Но GPU нужны с большим объёмом памяти и их потом никуда не деть,
полезного применения в быту нет, продать только за бесценок.

Дальше моё понимание работы LLM, прошу поправить специалистов.
Общая схема работы LLM такова, что это некий _циклический_ алгоритм,
где на вход подаётся запрос, запрос пропускается _стого_ _в_ _одну_
_сторону_ через несколько десятков слоёв т.н. "trasformer blocks",
затем получившийся на выходе токен формирует часть ответа и рекурсивно
поступает на вход вместе с запросом и следующая порция данных,
включающая в себя запрос и часть ответа, прогоняется через все слои
опять, и опять же _строго_ _в_ _одну_ _сторону_. И так в цикле.

Односторонняя передача данных позволяет устроить "pipeline", когда
данные от N-го слоя поступают на вход N+1 исполняемого на другом
GPU или другом компьютере сети. С одной стороны. Но с другой стороны
общая задержка во всём пайплайне и принципиальная рекурсивность алгоритма
(для N+1 такта нужны выходные данные N-го такта) ограничивают скорость
вычислений. И имеет значение и задержка в вычислениях каждого слоя,
и задержки компьютерной сети/шины связаывающей слои.

При этом объём памяти каждого слоя может быть очень грубо оценён
примерно как объём модели подделённой на количество слоёв. Из этого
следует, что для DeepSeek, например, в распространённые на рынке GPU
с ценой уже заметно выше среднего вместятся на самом-то деле от силы
пару слоёв. Казалось бы, всё хорошо, и на одном GPU можно последовательно
посчитать все слои. Но тогда нужно из ОЗУ компьютера загрузить все
эти гигабайты в ОЗУ, обсчитать, получить результат передаваемый между
слоями в ОЗУ, и загружать следующий слой. Интерфейс между системной
памятью и GPU здесь начинает быть бутылочным горлышком. GPU включен
в шину PCI express 4.0 и более 30ГБайт/сек ожидать не приходится.
Что в разы меньше чем скорость работы CPU со своей памятью. А если
у нас положим так сделать нужно порядка 60 раз для получения одного
единственного токена, то возникает понимание, что на одном GPU практически
невозможно считать слои последовательно. Можно только на множестве GPU,
где каждый не будет постоянно перегружаться данными нового слоя, а лишь
получать входные и отдавать выходные данные для какого-то небольшого
множества слоёв, в пределе одного слоя для дешёвых GPU. Так ведь?

Следовательно, вариант с GPU имеет достаточно жёсткие ограничения.
Нужно много дорогих GPU, вкратце. Собственно такие конфигурации и
видны на Reddit. И эти GPU потом только продать на avito за 1/10 цены.
Ибо сети следующего поколения там могут начать не умещаться.

У обычных CPU есть преимущества и недостатки. Недостатки, понятно,
массово-параллельно считать не умеют, скорость низкая. Есть AVX-VNNI,
есть Advanced Matrix Extension. Каждое расширение ускоряет в разы,
но доступно только на последних и дорогих Intel CPU. А дешёвые и массово
доступные на рынке CPU, отработавшие уже свой срок в серверах и под
которые нет материнских плат, почему их массово продают -- этого не имеют.

Про десктопные CPU кажется можно сразу забыть. Там всегда ограничение
на возможный объём устанавливаемой памяти (да и число каналов). То же
касается APU (CPU + GPU в одном чипе). Казалось бы выглядит очень перспективно,
но нет. Всегда мало каналов памяти, всегда ограничен объём, есть большие
вопросы о поддержке софтом (кроме видеоигр).

Серверные CPU позволяют подключать много памяти. Это их основное сильное
преимущество. Всё начинает умещаться в память даже на однопроцессорной системе.
Уже нельзя сказать, что условный DeepSeek V5 не уместится. Есть потенциал
для расширения. Кроме того, существует ПО для обсчёта LLM по-частям на
отдельных компьютерах в сети. И при этом требования к объёму памяти каждого
компьютера, грубо, обратно пропорционально количеству компьютеров. Следовательно,
мини-кластер из обычных серверов имеет потенциал для апгрейда в будущем.
Можно и увеличить память в каждом, и нарастить число серверов.

Есть вопросы по применяемой сети для связи компьютеров в кластере, и
кажется Infiniband или PCIe-NTB много лучше, чем 10ГБит ethernet, и кажется
соединение компьютеров через интернет вовсе невозможно (даже миллисекундные
задержки умножат перформанс на ноль). Это, конечно, серьёзная проблема,
потому, что альтернативным и очень интересным способом запуска LLM было бы
распараллеливание на большом количестве компьютеров соединённых через интернет
(по-аналогии с тем, как добываются биткойны).

Потребление энергии. Вариант с CPU кажется малоприменим в первую очередь
из-за очень высокого потребления энергии. Таким частный дом отапливать можно,
а для квартиры -- перебор. GPU в этом смысле горазо эффективней. Если пишут,
что в среднем один сервер даёт токен в секунду, то для сколько-нибудь приемлемого
результата нужно два десятка матплат. А это -- киловатты.

Стоимость. 1) GPU, 2) память (БУ), 3) матплаты (их БУ нет практически), 4) процессоры (БУ).
Но хорошие процессоры с Advanced Matrix Extension настигают GPU по цене. А с AVX-VNNI
ещё нужно поискать. По цене "Регарда", понятно, никакого смысла не имеет. Есть БУ
сервера с LGA3647, но ценообразование мне непонятно. Они явно разукомплектованы, и там
явно не хватает чего-то жизненно важного. Насколько оно нужно для запуска бездисковой
конфигурации. Как минимум там радиаторы на процессор специфические и их нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.