Тебе врут про скорость локальных LLM. Как я выжал 73 то… — Transcript

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

Key Takeaways

  • Локальные LLM могут конкурировать с платными при правильной настройке.
  • Скорость генерации токенов важнее скорости обработки промпта для пользовательского опыта.
  • Lama CPP предпочтительнее для запуска Qwen 3.6 с MTP для лучшей производительности.
  • Баланс между скоростью, качеством и стабильностью критичен для практического использования.
  • Контекст и квантизация существенно влияют на производительность и качество модели.

Summary

  • Локальные LLM значительно приблизились к платным аналогам, таким как Клод.
  • Важно правильно настраивать модель для баланса скорости, качества и стабильности.
  • Автор использует модель Qwen 3.6 и показывает, как добиться 73 токенов в секунду.
  • Скорость генерации токенов зависит от квантизации, размера контекста и параметров запуска.
  • Рекомендуется запускать модель в Lama CPP или VLM, с предпочтением Lama CPP.
  • Скорость обработки промпта (PP) и скорость генерации токенов (TG) — разные метрики.
  • Генерация токенов — последовательный процесс, зависящий от пропускной способности VRAM.
  • Для Mac есть специальные форматы моделей (MLX, NVFP4), но с ними могут быть проблемы.
  • Качество модели зависит от плотности параметров и квантизации, агрессивные настройки могут снижать стабильность.
  • Автор делится конкретными параметрами запуска и советами по оптимизации для кодинга.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
Всем привет. Я уже много раз говорил о том, что локальные LLM сейчас невероятно сильно приблизились к платным LLM типа Клода. Некоторые люди говорят о том, что локальный LLM не дотягивает до Клода, но у меня есть ощущение, что эти люди
00:16
Speaker A
просто сами не дотягивают до того, чтобы прочитать документацию о том, как правильно запускать эту модель и запустить её. Лично я использую локальную LM для кодинга. Мой стек — это Typescript, Golang. И сейчас, мне кажется, наиболее интересная модель — это Qu27B.
00:34
Speaker A
Она разительно отличается от Н 3,5, у которой были проблемы с тулзами, и её сложно было использовать в агентском режиме. И очень сильно отличается от Н 2,5, которая вообще давала не очень хороший результат по сравнению с последними моделями. Если вы
00:52
Speaker A
используете там 3,5 или 3 или там 2,5, тем более очень рекомендую попробовать последнюю 3,6. Но даже тот факт, что вы выбрали хорошую модель, не говорит о том, что она будет хорошо работать именно с вашими задачами ни в плане
01:07
Speaker A
скорости генерации токенов, ни в плане качества того, что она выдаёт, так как у модели есть огромное количество параметров, и эти параметры оказывают огромное влияние на результат, который выдаёт модель. Вот раньше в майнинге мы просто могли запустить какую-нибудь программу и всё, и она либо работала,
01:27
Speaker A
либо не работала. Если работало, то выдавала какое-то количество хэшей в секунду. Вот сейчас тоже многие меряются просто количеством токенов в секунду, но нужно ещё и настроить модель, чтобы она выдавала вам ещё и качественный результат, плюс ещё и
01:42
Speaker A
стабильный результат, плюс ещё вам должно быть удобно с этим всем работать. И именно поэтому и нужно разбираться во всех вот этих настройках модели.
01:51
Speaker A
Запускать модель можно в разных программах. Я не особо рекомендую в Allama и LM Studio. Я больше рекомендую либо VLM, либо Lama CPP. Мне сейчас больше нравится Lama CPP, именно в нём я и запускаю модель. И вот в этом видео я
02:08
Speaker A
расскажу про конкретные параметры, с которыми я запускаю вот мою модель Quent 3627B. Буквально не так давно для этой модели появилась такая штука, как MTP.
02:20
Speaker A
Это мультик. И изначально я его пробовал в VLM. И там я получил не очень хороший результат. То есть у меня изначально в VLM было примерно 45 токенов в секунду. С этим MTP я получил что-то около 50, что мне
02:37
Speaker A
показалось не очень хорошим результатом, и поэтому я даже не использовал его. А вот недавно я разобрался со всеми этими параметрами и запустил его же, но в Lama CPP и получил что-то около 75 токенов в секунду, что прямо заметно быстрее, мне
02:54
Speaker A
кажется, чем там 45 токенов в секунду. Опять же заранее скажу, что нет смысла говорить о том, сколько у тебя токенов в секунду, потому что на количество токенов в секунду влияет и квантизация, и какой у вас контекст, и много других ещё параметров.
03:12
Speaker A
То есть нет смысла просто говорить цифры. Я покажу параметры, с которыми я запускаю. Я покажу, какую модель именно я запускаю. Но вот нет смысла говорить о том, что у тебя какая-то модель выдаёт сколько-то токенов без уточнения всех остальных
03:31
Speaker A
дополнительных параметров. То есть некоторые говорят о том, что вот у меня на каком-нибудь Nvidia SPAR какая-то модель выдаёт аж целых столько-то токенов в секунду, а потом оказывается, что человек запускает самую заквантованную модель, самую маленькую, и он указывает самый
03:48
Speaker A
маленький контекст и так далее. То есть с этим просто невозможно работать. Ну да, ты запустил это, у тебя какие-то бенчмарки показали красивую цифру, но с этим ты просто не сможешь работать. Если вы, кстати, запускаете на Маке, то рекомендую посмотреть на такую штуку,
04:04
Speaker A
как MLX. Это специальный формат именно для маков, если вы запускаете там на Mac Studio или на чём-то типа того. И на последних видеокартах Blackwell можно смотреть на формат NVFP4.
04:16
Speaker A
Он тоже специально для них сделан, но вот у меня, к сожалению, не очень хороший с ним был опыт. Он только недавно появился. И вот как раз в VLM у меня как-то с ним не пошло, но может у
04:27
Speaker A
вас пойдёт. В общем-то, как уже сказал, будем говорить о скорости, но опять же скажу, что кроме скорости есть ещё три параметра, которые тоже невероятно важны. И, наверное, даже важнее скорости — это качество. Нам важно, чтобы наша модель выдавала хороший код. Мы не
04:46
Speaker A
должны забывать о стабильности. То есть мы можем выставить какие-то параметры сильно агрессивные, и у нас будет постоянно падать именно процесс. С этим тоже невозможно будет работать. И мы не должны ещё забывать про удобство, про наше с вами, потому что с моделью
04:59
Speaker A
должно быть нам удобно работать. Удобство, например, зависит от размера контекста. Стабильность зависит от бенчмарков, а качество зависит от квантизации самой модели. Теперь немножко про скорость, да, которую измеряем. У нас вообще есть два параметра. Один называется PP,
05:18
Speaker A
второй TP. Первый — это средняя скорость обработки промпта, это PP. Вот ради примера у меня он 2800 токенов в секунду. Второй — это TG. Это скорость генерации именно самих токенов. Вот у меня сейчас примерно там 73 токена в
05:36
Speaker A
секунду. Первый параметр PP — это prompt processing, то есть это скорость, с которой наша модель читает наш промпт, который мы ей послали, и осмысливает сам исходный запрос, который мы сделали к ней. И вот эта скорость сильно
05:52
Speaker A
зависит от количества активных ядер GPU. Если вы запускаете просто на процессоре вместе с оперативкой, то есть без участия видеокарты, эта скорость будет невероятно сильно маленькой, и вы будете прямо чувствовать сильную задержку. Это будет где-то 10 токенов в
06:10
Speaker A
секунду или типа того. Поэтому вот на видеокарте это работает практически мгновенно и настолько быстро, что ты практически не ощущаешь вот эту задержку. Поэтому вообще, говоря, вот этот параметр prompt processing, если вы на видеокарте запускаете, на него даже внимания особо не обращаешь,
06:30
Speaker A
потому что он отрабатывает довольно быстро. Мне кажется, что более важный параметр, на который стоит обращать внимание, — это вот как раз Token Generation. Это параметр уже генерации токенов в секунду. То есть пользователь именно ощущает вот этот
06:45
Speaker A
ответ, с которым нейросеть вам выдаёт какой-то результат. Вот вы пишете какой-то запрос, у вас есть какая-то задержка, а потом модель вам начинает отвечать. И вот это та скорость, с которой модель вам отвечает, и есть, собственно, скорость генерации
07:03
Speaker A
токенов. И вот в отличие от PP, вот этот параметр TG — это такой последовательный процесс. То есть модель тут у нас вычисляет токен один за одним. То есть она пока не получила предыдущий токен, не может следующий генерировать.
07:19
Speaker A
Именно поэтому вот эта метрика всегда медленнее, чем PP. И самое главное для этого параметра — это пропускная способность памяти. Вся генерация у нас происходит в VRAM, то есть в памяти видеокарты. И для получения одного какого-то случайного токена она должна
07:39
Speaker A
перемножить все свои веса с текущим состоянием. Также на это ещё влияет размер самой модели, в том числе и качество квантизации модели этой. То есть у нас чем сильнее заквантизована модель, тем больше она, конечно, будет генерировать токенов, но при этом тем
08:00
Speaker A
она будет глупее. Также обычно модели, у которых есть какое-то количество активных параметров, модели, которые называются MOA, они обычно быстрее из-за того, что там не все параметры активны всегда, но обычно такие модели выдают результат хуже, чем
08:19
Speaker A
плотные модели, которые называются. Вот так, например, 27B [откашливается] модель, которая плотная, она выдаёт результат лучше, чем модель 35B А3B. Просто по всем тестам даже она даёт лучшие результаты практически во всём. Также на количество генерации токенов в
08:41
Speaker A
секунду влияет ещё и контекст. То есть это такой интересный момент, что когда у нас диалог с моделью становится длинным, то модели приходится обрабатывать весь предыдущий контекст для того, чтобы его учитывать. И поэтому у нас генерация становится медленней. Но при этом, если
09:00
Speaker A
у нас контекст сильно маленький, то у нас есть риск, что у нас просто всё не уместится в...
09:15
Speaker A
раз сказать, что я буду вообще вот это всё использовать для написания кода. Если вы используете для чего-то другого, то если у вас другие задачи, то вам и параметры нужны будут другие. Я буду говорить вот исключительно о написании кода, там, о рефакторинге и вот таких
09:32
Speaker A
вот задачах. Вообще, э, для этой модели разработчики написали прямо целый гайд. Вы можете его почитать, этот гайд, и по нему тоже уже делать какие-то свои пробы. Я расскажу о том, как я добился какой-то прямо скорости, которая мне прямо нравится, и ээ расскажу о своём
09:52
Speaker A
вот опыте, а вы можете просто играться с параметрами сами. Первое, что я хочу сказать, что у меня модель в квантовании Q8. Ээ это квантованная модель, но не сильно. То есть мы теряем, конечно, от этой модели что-то, но при этом не
10:08
Speaker A
теряем сильно много. У меня модель запускается на двух видеокартах. И, конечно, м там мы должны ещё понимать, что когда мы запускаем какую-то модель на видеокартах, мы ещё должны оставлять довольно много места под QV Cш и под контекст. Контекст я указываю
10:25
Speaker A
максимально возможный. Максимально возможный для этой модели - это 262.144. Самый, наверное, важный параметр - это для комфортной работы. Это вот размер контекста. Это, ну, сильно сильно добавляет вам в удобстве, когда у тебя очень большой контекст. Ты можешь довольно долго с лэмкой вести,
10:48
Speaker A
собственно, беседу, и модель помнит, что ты раньше у неё спрашивал. У тебя не не переполняется этот контекст. Если указать сильно маленький, у вас просто есть риск, что всё не влезет. И это будет печально. Это просто неудобно будет работать с вашей моделью. Этот
11:03
Speaker A
модель, э, этот параметр, конечно же, сильно влияет на скорость работы. Чем больше у вас контекст, тем медленнее генерируются токены. Но опять же, тут выбираем между удобством вашим и, собственно, скоростью генерации. Я всегда выбираю удобство, поэтому я выбираю максимальный контекст. Тут
11:22
Speaker A
смотрите сами. Если вы там не помещаетесь, то можно указать, конечно, меньше. Даже там, если вы в два раза уменьшите, у вас будет 130.000 контекста. Это этого хватит, конечно, для большинства случаев. Зависит, конечно, ещё от проекта, насколько он большой у вас. Второй важный параметр,
11:40
Speaker A
который почему-то многие не указывают - это температура. Температура - это тоже важный параметр. По по умолчанию вот в этой модели, даже в CL 3,627B по температура по умолчанию устанавливается единичкой.
11:54
Speaker A
Но создатели модели всегда говорят, что если вам вы используете модель для кодинга, всегда снижаете температуру.
12:02
Speaker A
Они, например, рекомендуют ставить температуру 0,6. Это прямо есть в документации. Но люди обычно никогда это не установ не устанавливают. А температура - это очень важный вообще параметр для модели, потому что о температура - это такой параметр, чем она выше, то есть она
12:20
Speaker A
может быть от нуля до единички, чем она выше, тем модель более креативная. Чем она ниже, тем модель более строгая. И для программирования как раз нам нужна более строгая модель. Это если вы пишете какие-то креативные тексты, то да, вам
12:36
Speaker A
нужно повышать температуру, но для программирования всегда её опускаете. И это практически со всеми моделями так работает, не только вот конкретно с этой. Всегда смотрите на температуру.
12:47
Speaker A
Температура - это один из таких важнейших параметров при запуске локальной модели. Следующий параметр, который тоже очень важен - это два параметра, которые так смежно идут - это топ K и Top P. Top K нас нам рекомендуют для программирования
13:03
Speaker A
устанавливать в 20. Этот параметр он отвечает за выбор следующего токена. То есть, когда у нас модель генерирует какой-то следующий токен, она, э, генерирует сразу большое количество этих токенов, который бы мог бы идти следующим, да, и она сортирует их от
13:24
Speaker A
более вероятных к менее вероятным и потом случайно выбирает какой-то из них. И вот, э, если мы указываем число 20, то она будет выбирать из двадцати самых топовых токенов. Если меньше, там, если 10 зададим, то есть десяти. Вот для
13:40
Speaker A
программирования лучше ставить 20. Для более креативных текстов можно ставить больше. Теперь следующий параметр, который похож на предыдущий - это топ P.
13:51
Speaker A
И тут разработчики рекомендуют для программирования указывать 0,95. Этот параметр он похож на предыдущий. Здесь модель, она сортирует все варианты, да, следующего токена по вероятности и берёт какой-то минимальный набор самых вероятных токенов и при этом суммарная вероятность которых должна быть больше
14:13
Speaker A
0,95. То есть получается 5% из самых невероятных они она откидывается. То есть чем больше вот это число, тем больше креатива, но тем выше риск ошибок. И вот 0,95 для программирования она оно считается таким балансом между качеством и разнообразием. Также очень важны два
14:35
Speaker A
параметра для программирования - это presence penalty и repision penalty. Это, э, штраф за уже использованные токены. Модель, э, примерно так считают, что если модель использовала какой-то токен, то его ээ нельзя повторять дальше. Если мы будем повторять, то модель будет как будто бы повторяться,
14:55
Speaker A
использовать то же самое, то есть говорить одними и теми же словами, условно. И если мы генерируем обычный текст, то вот такие вот повторения использования одинаковых слов, оно не очень-то и хорошо в тексте, когда мы используем буквально о одни и те же
15:10
Speaker A
слова. То есть мы должны искать либо синонимы, либо что-то типа того, чтобы просто разнообразить текст. Но в программировании у нас это абсолютно нормальная ситуация, когда у нас повторяется одно и то же часто. Поэтому вот именно этот параметр нужно
15:25
Speaker A
выключать, если вы используете модель для того, чтобы писать код. Поэтому обязательно указываем presence penalty в ноль. По умолчанию этот параметр стоит в 1,5. Ещё у нас есть два параметра, которые тоже важны.
15:40
Speaker A
этоch size и Uch size. И по умолчанию там, по-моему, batch size идёт в 512, а Uge size в 256. И эти параметры, они управляют тем, э, как модель обрабатывает вот токены и упаковывает их внутри GPU во время того, как она
16:01
Speaker A
прогоняет ваш промпт. Сами токены модель обрабатывает не по одному, а она упакует их в такие бетчи. И batch size - это как раз вот размер этого бетча токенов, а ub - это такой micrч внутри бетча. То есть, если коротко, бечge size - это то,
16:19
Speaker A
сколько токенов обрабатывается за один шаг, а Ubatch size - это на какие куски этот будет делиться внутри GPU. И если у вас мощная видеокарта, много памяти, то вот этот параметр можно увеличивать.
16:33
Speaker A
Можно ставить не 512, а там 1.24, например, batch size или 2.48. То есть поставить более э большие куски. Но этот параметр ведёт к тому, что у нас может всё крашиться. То есть, если у вас как-то крашится ваша лэмка, то первое,
16:49
Speaker A
на что обращать внимание стоит - это как раз вот беч size и ub size. Если крашится, то наоборот пытаемся уменьшать эти параметры. А следующие параметры - это параметры для MTP, это Multioken prediction.
17:04
Speaker A
У нас, когда мы пытаемся использовать multitoken prediction, мы можем посмотреть в логи в наши, когда мы сделаем какой-то запрос, и смотреть на такой параметр, который называется Draft Acceptance. Вот у меня, например, Draft Acceptance сейчас 0,74.
17:21
Speaker A
Ну там и дальше цифры. Это говорит о том, что у меня, э, 75% токенов, которые генерируются, они принимаются. Вот, например, когда я раньше запускал эту же модель VLM, у меня почему-то это число сильно было маленькое, то есть типа 5%. То есть это
17:39
Speaker A
говорит о том, что MTP работает там занимает тоже место в памяти, да, пытается вычислить, пытается сделать предикшн, но у него практически это не получается. И именно поэтому он, ну, не имеет смысла, если он у вас сильно маленький. Поэтому вот по меньше 50% это
17:58
Speaker A
считается плохим результатом. Там 60-75% - это нормально, а если больше 80, это считается вообще отличным. Вот у меня как раз параметр 75 - это считается вот нормальным таким параметром. То есть смотрите вот на вот этот параметр и пытайтесь как-то его улучшать. А
18:19
Speaker A
улучшается как раз вот этими э Spectк Type Draft MTP и Spec Draft Nmax. Вот у меня сейчас стоит параметр NX 2. И при этом у меня вот нормальная нормальный предикшн. Если предикшн будет очень хороший, то вот этот вот параметр
18:36
Speaker A
NX можно увеличивать до четвёрки, например. А кроме того, если будете использовать MTP, то нужно обновить ещё и куда. Куда она сейчас вообще вроде как как это называется? Стабильная версия или как это называется? Короче, в Убунте, если вы куду скачаете, то она
18:55
Speaker A
будет двенадцатой версией, стабильная. Но есть уже и тринадцатая версия, но она ещё не не в убунтовских репозиториях, то есть надо подключить другой репозиторий с более свежей кудой и установить тринадцатую версию оттуда. При этом разработчики пишут, что не используйте
19:12
Speaker A
куда 13.2, так как модель может выдавать мусор на выходе. И Nvidia работает над фиксом.
19:21
Speaker A
NVIDIA уже поработала даже над фиксом, и она даже сделала куда 13.3. Поэтому вот, если вы будете использовать MTP, нужно первым делом обновить ДУ. Ээ, кстати, обновить не так уж и сложно.
19:35
Speaker A
Даже чат GPT поможет вам там выполнить все эти команды для того, чтобы обновиться для на 13. И это того стоит. С 133 всё работает отлично, без каких-то проблем. Ещё, если у вас есть несколько видеокарт, есть такой параметр, как ТС. Вот, например, если
19:53
Speaker A
две видеокарты, то вы запускаете параметр TS, потом 1 или 1 2. Этот параметр говорит о том, в каких пропорциях должна должны распределяться слои модели между видеокартами. То есть, если у вас две видеокарты одинаковые, вы можете установить ТС11. Или если вы
20:14
Speaker A
вообще хотите попробовать, чтобы всё было автоматически, вы можете указать ТС00. Тогда, если вы указываете ТS00, тогда всё делается автоматически, и сама ваша lama.CPP распределит слои самостоятельно. Если вы указываете 1, то это просто пропорция один: ОД. Вы можете также написать 1 - это то же самое, как
20:37
Speaker A
1001. То есть это просто пропорция, которую вы указываете. Если у вас сразу несколько видеокарт, и они сильно разные, у вас, например, есть видеокарта на 8 ГБ, на 12, на 16, на 24, вот вот четыре видеокарты, то вам нужно первым
20:52
Speaker A
первым делом посмотреть, какая у вас видеокарта под каким номером вообще в системе. То есть вы можете выполнить команду Nvidio тире SMI тире большая L. Вот эта команда показы покажет, сколько у вас видеокарт и какая видеокарта на каком месте. То
21:09
Speaker A
есть у вас есть ноль GPU, один GPU, 2 GPU, 3 GPU. Вот. И по потом вы увидите, на каком месте какая. То есть, например, у вас на третьем месте видеокарта, у которой 8 ГБ ээ VRAM. И поэтому вы вот и указываете
21:25
Speaker A
параметр там TS и потом, не знаю, 24, 12, 8, 16. Вот как-то так. То есть вот этот параметр, он определяет, как по видеокартам будет размазываться ваша модель. Иногда это нужно указывать, потому что у вас сама Лама, например, может только одну
21:45
Speaker A
видеокарту нагрузить, а вторую совсем чуть-чуть нагрузить или как-то ещё. То есть вот всегда тоже смотрите по логам, какая у вас видеокарта, насколько загружена. Также ещё смотрите на такой параметр, как который называется flash attention. Flash atн называется он. И он
22:03
Speaker A
тоже сильно увеличивает количество токенов, которые генерируются в секунду. Он по умолчанию, по-моему, даже включён, но просто на всякий случай проверяйте, не выключен ли он в ваших параметрах, потому что он сильно вообще увеличивает именно ээ генерацию, то есть вот этот
22:22
Speaker A
вот режим оттеншена. Также ещё есть параметр, который называется параллель. Э и он указывает обычно цифру параллель 1 2 тамчетыре. Если вы используете только в одиночку вашу какую-то лэмку, то, наверное, следует всегда указывать параллель один. То есть, если у вас
22:40
Speaker A
стоит больше цифра, то, наверное, следует её уменьшить. В общем-то, всё. Э, пишите, если есть у вас ещё какие-то советы по тому, как можно ускорить локальную LLM, то пишите, будет интересно почитать. Можете подписаться на мой канал или на мой чатик, где мы
22:58
Speaker A
это всё обсуждаем. Всем пока. M.
Topics:локальные LLMQwen 3.6скорость генерации токеновLama CPPVLMквантизациякодингнастройка моделиMLXNVFP4

Frequently Asked Questions

Почему важно правильно настраивать локальную модель LLM?

Правильная настройка модели влияет на баланс между скоростью генерации токенов, качеством выдаваемого результата и стабильностью работы, что критично для практического использования.

Какие программы автор рекомендует для запуска модели Qwen 3.6?

Автор рекомендует использовать Lama CPP или VLM, при этом Lama CPP предпочтительнее для достижения высокой скорости генерации токенов с MTP.

В чем разница между скоростью обработки промпта и скоростью генерации токенов?

Скорость обработки промпта (PP) — это скорость понимания запроса моделью, а скорость генерации токенов (TG) — это скорость последовательного создания ответных токенов, что важнее для пользовательского опыта.

Get More with the Söz AI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →