Dread Pirate Roberts , так ты, все-таки, прикупил себе модифицированную 4090? )
да, я же писалDread Pirate Roberts , так ты, все-таки, прикупил себе модифицированную 4090? )
что 4090 с 48 гигабайтами памяти реально существуют - это инфа 100%, посмотри видео в моём посте выше, плюс на реддите несколько топиков с пруфами, и мне самому она скоро приедет
если не секрет, какая стоимость в американских мертвых президентах?да, я же писал
~3500если не секрет, какая стоимость в американских мертвых президентах?
это же вроде для распознавания изображений? мне именно генерация текста нужна, а не распознавание или генерация картинок.llava юзай лучше, текстовые смысла нет, столько памяти на гп не найдешь для запуска большой версии
And the model we using it's hybrid combination of latest deepseek v3 + r1 model and we use llama v3 vision and hybrid mistral the datasets are 80b parameters
да, оказалось всё очень интересно: нужно сделать несколько настроек биоса и оси, и напрямую указывать лламе, что нужно использовать NUMA.
1) BIOS: enable memory interleaving
у моей конкретной мамки из вариантов только "Auto" и "Disabled", поэтому оставил "Auto".
как вариант, можно делать это на уровне оси, запуская программы через "numactl --interleave=all /path/to/llama-cli -m model -p prompt ...", но в моём случае это выдавало меньше tokens per second, чем просто ./llama-cli.
2) BIOS: set NUMA per socket to NPS4
по умолчанию или в режиме "Auto" этот параметр делает 1 ноду на процессор ("NPS1"), и вся память работает в одно(двух?)канальном режиме, поэтому и скорость генерации текста никакая. нужно выставлять этот режим в максимально возможное значение, в моём случае NPS4.
3) BIOS: set ACPI SRAT L3 as NUMA Domain
это создаёт ещё больше NUMA нод, в моём случае получилось то ли 16, то ли 32, уже не помню, но эта настройка сделала скорость генерации в десятки раз хуже, поэтому я вернул её обратно в Disabled.
4) OS: disable Linux NUMA balancing
а именно выполнить команду "echo 0 > /proc/sys/kernel/numa_balancing". лично я разницы в скорости не заметил, результаты в пределах погрешности, но у вас может сработать.
5) OS: дропать кэши перед запуском llamacpp
"echo 3 > /proc/sys/vm/drop_caches" от рута. так как я запускаю ламу от юзера, а не от рута, то сделал для удобства суидник, выполняющий эту команду.
оказалось, что на скорость генерации влияет "пустота" оперативной памяти - если не очистить память от старой модели перед загрузкой новой, то скорость генерации новой модели будет медленнее, чем предыдущей.
6) OS: запускать llamacpp с опцией "--numa distribute"
типа "./llama-cli --numa distribute -m Llama-3.3-70B-Instruct-Q4_K_M.gguf"
7) OS: уменьшить количество потоков llamacpp -t NN
если у процессора очень много ядер - 64 или больше - то начиная с определённого количества потоков лламы они начнут мешать друг другу. тридцатидвухъядерным это не грозит.
ещё очень желательно выключить в биосе виртуальные ядра - "HyperThreading" у интела или "SMT" у амд.
текстовые смысла нет, столько памяти на гп не найдешь для запуска большой версии
Добиться максимального быстродействия на локалке можно только если использовать видеокарты.
2x3090, 2x4090 , Китайскую разработку 4090 48Гб, или просто использовать модель меньшего размера оптимизированную под конкретную задачу. Хотя, подозреваю, что и система с двумя Тесла P40 будет быстрее работать с большой моделью, чем вариант с использованием процессора и памяти
4090 (48) is a cool video card, but it is very expensive. If you use two such video cards, you can load a 96 GB model, with one such card the advantages are not so obvious.
Idea: With llama.cpp and derivatives like koboldcpp, you offload entire LAYERS typically. Layers are comprised of various attention tensors, feed forward network (FFN) tensors, gates and outputs. Within each transformer layer, from what I gather, attention tensors are GPU heavy and smaller benefiting from parallelization, while FFN tensors are VERY LARGE tensors that use more basic matrix multiplication that can be done on CPU. You can use the --overridetensors flag in koboldcpp or -ot in llama.cpp to selectively keep certain TENSORS on the cpu.
10.61 TPS vs 3.95 TPS using the same amount of VRAM, just offloading tensors instead of entire layers:
Offloading layers baseline:Код:python ~/koboldcpp/koboldcpp.py --threads 10 --usecublas --contextsize 40960 --flashattention --port 5000 --model ~/Downloads/MODELNAME.gguf --gpulayers 65 --quantkv 1 --overridetensors "\.[13579]\.ffn_up|\.[1-3][13579]\.ffn_up=CPU" [18:44:54] CtxLimit:39294/40960, Amt:597/2048, Init:0.24s, Process:68.69s (563.34T/s), Generate:56.27s (10.61T/s), Total:124.96s
So, really how to?? Look at your GGUF's model info. For example, let's use: https://huggingface.co/MaziyarPanahi/QwQ-32B-GGUF/tree/main?show_file_info=QwQ-32B.Q3_K_M.gguf and look at all the layers and all the tensors in each layer.Код:python ~/koboldcpp/koboldcpp.py --threads 6 --usecublas --contextsize 40960 --flashattention --port 5000 --model ~/Downloads/MODELNAME.gguf --gpulayers 59 --quantkv 1 [18:53:07] CtxLimit:39282/40960, Amt:585/2048, Init:0.27s, Process:69.38s (557.79T/s), Generate:147.92s (3.95T/s), Total:217.29s
In this example, overriding tensors ffn_down at a higher Q5 to CPU would save more space on your GPU that fnn_up or fnn_gate at Q3. My regex from above only targeted ffn_up on layers 1-39, every other layer, to squeeze every last thing I could onto the GPU. I also alternated which ones I kept on CPU thinking maybe easing up on memory bottlenecks but not sure if that helps.Код:Tensor Size Quantization blk.1.ffn_down.weight [27 648, 5 120] Q5_K blk.1.ffn_gate.weight [5 120, 27 648] Q3_K blk.1.ffn_norm.weight [5 120] F32 blk.1.ffn_up.weight [5 120, 27 648] Q3_K
Ключевое слово обсуждаютна реддите обсуждают
а дальше третьего слова читал?Ключевое слово обсуждают
к сожалению, даже минимальное участие CPU в инференсе больших (по размеру) моделей настолько сильно роняет скорость, что я решил запускать только маленькие модели, которые полностью влезают в VRAM.а с твоей картой должно быть и подавно
Этой штуке года 2 уже. С той частотой выхода новых моделей, которая есть, подобная экономия памяти, работающая только на старых моделях выглядит не нужной.на реддите обсуждают
koboldcpp
koboldcpp - это запускатор БЯМ, как llamacpp, или ollama, или vLLM, или десяток других софтин. ты сам решаешь, насколько старую модель с её помощью загружать.Этой штуке года 2 уже. С той частотой выхода новых моделей, которая есть, подобная экономия памяти, работающая только на старых моделях выглядит не нужной.
и всё это относится к обсуждают, Реализация - это рабочий софта дальше третьего слова читал?в районе 20-го слова написано, что другие люди подтверждают ускорение, а примерно через 200 слов написано, как определить, какие слои оставлять на CPU.
к сожалению, даже минимальное участие CPU в инференсе больших (по размеру) моделей настолько сильно роняет скорость,
для меня всё что помещается в 48gb - относительно большая модель,а так как хочется запускать и относительно большие модели, то я решил не мелочиться и купить ещё одну видеокарту,