Спасибо, но, думаю, что не хочется жертвовать качеством (я же жертвую качеством с меньшим квантом, верно?) ради пары токенов)
Ещё немного поэкспериментировал сегодня с тремя моделями, всем задавал одну и ту же задачку:
gemma-4-26B-A4B-it-UD-Q4_K_XL (контекст 48k, запускал в мультимодальном режиме с обработкой изображений)
cmoe: 24 t/s
ncmoe=23: 18 t/s
ncmoe=24: 31 t/s
ncmoe=25: 30 t/s
ncmoe=26: 25 t/s
gpt-oss-20b-UD-Q4_K_XL (контекст 64k)
cmoe: 21 t/s
ncmoe=10: 36 t/s
ncmoe=11: 36 t/s
ncmoe=12: 38 t/s
ncmoe=20: 24 t/s
ncmoe=24: 21 t/s
Qwen3.6-35B-A3B-UD-Q4_K_XL (контекст 48k)
cmoe: 9 t/s
ncmoe=31: 20 t/s
ncmoe=32: 27 t/s
ncmoe=33: 22 t/s
ncmoe=34: 20 t/s
ncmoe=35: 18 t/s
ncmoe=40: 11 t/s
И самое интересное, везде прослеживается эта тенденция: загружена только VRAM (вплоть до почти 100%) -- скорость ниже, начинаем залезать в оперативку -- скорость подрастает, но если сильно в неё уходим -- скорость снова падает.
Загрузка видеочипа с cmoe почему-то всегда хилая и очень неровная, в среднем 40-50% или ниже. Как начинаем играться с ncmoe -- нагрузка на чип растёт, всегда выше 80% и зачастую выше 90%.
Шикарный материал (как и предыдущие на ту же тему), спасибо! Благодаря ему даже захотелось вкатиться в эту тему, чего раньше у меня не было)
Если собрать в кучу сведения из текущего материала, а также предыдущий и обсуждения под ним, правильно ли я понял: нет смысла гнаться за степенью заполненности VRAM, главное, условно говоря, насколько в процессе обработки запроса моделька грузит саму GPU (процент её использования)?
Например, у меня 3070Ti на 8 Гб VRAM, 16 (дозаказал ещё 16, на днях поставлю) Гб RAM (DDR4, 3200 Mhz). Вот просто из того железа, что имею на руках (RAM всё равно давно хотел докинуть, так что просто повод нашёлся) хочется выжать максимум.
Взял Qwen3.6-35B-A3B-UD-Q4_K_XL, запустил как есть (по-моему, только -cmoe прописал), контекст поставил 32k вроде (пишу сейчас по памяти, всё равно в итоге на других параметрах остановился). Получил почти полностью забитую VRAM, но использование GPU что-то около 30% (всё как вы и писали) и ~7t/s.
Решил поиграться с -ncmoe, но всё равно целился в то, чтобы VRAM утилизировалась достаточно, в итоге экспериментами дошёл до -ncmoe=35 (не знаю, хорошо ли 35 из 40 слоёв выгружать на CPU, всё равно немного ощущал себя обезьянкой, которая бездумно перебирает чиселки), контекст 48k, скорость получилась порядка 20t/s, GPU грузится на 85-100%, но при этом и VRAM забита, да и в "общую память" (в которой, видимо, 8 Гб настоящей VRAM, и 8 Гб виртуальной, которая на самом деле RAM) на полтора гига забрались. Звоночек тревожный, в общую память не хотелось вылезать, но дальнейшие эксперименты всё равно больше 20 t/s не давали.
Стоит ли продолжать дальше играться с параметрами запуска, пытаться добиться большей скорости, если уже сейчас GPU грузится почти на 100%? Или, возможно, стоит увеличивать размер контекста (вместе с увеличением -ncmoe) для достижения большего качества? И при этом следить за тем, чтобы не вылезать за пределы VRAM?
Сейчас всё тот же криво сформулированный заголовок, о котором я и писал, и который вы процитировали. Я написал "не должен был", потому что ровно так и написано в заголовке.
Вы с своём первом комментарии как раз указали вариант, который, вероятно, пытался вложить в заголовок автор.
Но "оказался таким успешным" и "не должен был оказаться таким успешным" имеет разный смысл, разве не так (даже с припиской "но оказался" лучше не становится)? Чтобы привести его к этому виду с минимальными изменениями, можно просто убрать частицу "не", и получится "Почему никто не ожидал, что механизм «предсказать следующее слово» должен был оказаться так успешен (и оказался)". Но это всё равно кривовато звучит, предложенный вами вариант явно лучше.
Ну и я не писал и даже не намекал, что это признак использования ИИ, я как раз и предположил, что это безграмотность (ну или отсутствие вычитки), хоть явно этого писать и не стал.
Заспойлеренный момент происходит в течение первых 5-7 минут игры. Официальное расспойлеривание (Барни снимает маску и представляется) происходит в течение минуты после встречи с ним.
Здесь никто из главных (да и никаких других) персонажей не умирает, вообще ничего экстраординарного не происходит.
Я сам не люблю спойлеры, но конкретно здесь мне кажется, абсолютно ничего страшного в "спойлере" нет.
Да как бы люди хотят... Вот, второй комментарий к статье как раз про это как будто)
Но по пути однозначно где-то словится связь и можно получить актуализированные веса точек и предложить перестроить маршрут
А при появлении интернета так и будет. Приложение не забывает про наличие онлайна, постоянно проверяется, не вернулась ли сеть и нет ли варианта проехать иначе.
Но вообще обновление пробок или перекрытий именно на межгороде в 99% случаев мало что даст. Всё равно артерий, по которым можно проехать из одного города в другой, очень мало (зачастую вне европейской части России она вообще единственная), поэтому что есть на трассе пробка, что её нет - ехать всё равно придётся по тому же маршруту скорее всего.
Ну т.е идея и цель понятна, но зачем так? Реализация ради реализации?
Я всё-таки не вижу противоречий. Описанная реализация - это, скажем так, последний шанс построить хоть что-то. С нашей точки зрения лучше когда он есть, чем когда его нет.
Извиняюсь за недопонимание. Просто идея про "взять регион и точки вход/выход в нём отметить и строить граф по ним между регионами" - очевидна(опять же на бумажных картах это делалось так).
Естественно, идея очевидная. Хуже она от этого как будто не становится.
пользуюсь 2гис, как сделали мобильное приложение. Т.ч удачи вам.
Но удовольствия от этого вы получите мало, ибо то тут, то там всплывают артефакты эмуляции.
Ну это очень громкое и очень общее заявление.
Полгода назад купил себе Retroid Pocket 4 в основном для PS2, прохожу классику, до которой раньше не добирался по тем или иным причинам и получаю огромное удовольствие. И это на не самом игровом чипе и с не самым свежим портом pcsx2. Притом в x2.5 разрешении.
Разумеется, с некоторыми тайтлами есть проблемы (конкретно в моём случае), где-то из-за железа, где-то из-за устаревшей версии эмулятора, но на свежем pcsx2 и на игровом PC их уже скорее всего не будет совсем или они будут в единичных случаях.
На гифках дейкстра, как я и сказал. Анимации максимально упрощены, чтобы деталями не грузить, но там, естественно, не сам вес ребра учитывается при его извлечении из очереди, а накопленная оценка пути.
Такую штуку кто только ни делал, собственно, название паттерна так и возникло: автор статьи, в которой паттерн был формализован, отметил, что этот паттерн (pattern), основанный на хитром использовании шаблонов (template), является удивительно (curiously) часто повторяющимся (recurring) от кодовой базы к кодовой базе, причем эти кодовые базы зачастую никак не связаны друг с другом. То есть имя паттерна никак не связано с механизмом его реализации, хотя из статьи в статью кочуют попытки расшифровку аббревиатуры притянуть (причем за уши) к реализации. Даже удивительно, что в этой статье это притягивание не возникло, но я думаю, это от небрежности, а не от благого намерения.
Я ждал этого всего по очереди (и ещё думал, что какая-то из жил перебита, а во время дождя контакт восстанавливается), пока не прочитал, что Wi-Fi ловится по воздуху; с этого момента ждал, что из-за намокания/наполнения водой что-то перекрывающее видимость проседает и видимость восстанавливается. Если история реальная, для меня загадка, как об этом можно было не подумать с самого начала...
Так это и есть как в мессенджерах. Позволяешь видеть время своей последней активности - видишь время последней активности собеседников. Запрещаешь видеть своё - перестаёшь видеть у собеседников. По крайней мере, в whatsapp и в телеге так (правда, в телеге за премиум-подписку настройки гибче).
С моей точки зрения, в контексте решаемой задачи только первая (в итоге и выбранная) версия перечисления Token корректна. Токен - это неделимая смысловая единица входного языка; из таких единиц строятся высказывания на этом языке. Поэтому вторая предлагаемая версия - своего рода доведение до абсурда, просто сопоставление каждого символа алфавита некоторому идентификатору; расширив этот вариант до всех 256 символов ASCII, можно гордо заявить, что мы реализовали универсальный токенизатор для любого языка (пусть и без поддержки юникода), только вот толку от него?
Третья же версия - это уже не про лексемы, а про синтаксис. Определять, чему синтаксически соответствует токен, задача не лексера, а парсера. Да, для очень простых языков можно вообще не делать это разделение, но лучше всё-таки делать, это позволит более гибко модифицировать отдельные механизмы в дальнейшем.
А почему вы считаете, что при переводе взгляда обратно на крестик эксперимент не начинается заново? Суть изначального перемещения изображения -- найти такое расстояние, при котором когда взгляд направлен на крестик, кружок бы находился аккурат в зоне слепого пятна. Как только оно найдено, никакие манипуляции не заставят увидеть кружок (если при этом смотреть на крестик), это физически невозможно. Т.е. при удачном стечении обстоятельств можно прямо сразу поместить изображение на нужном расстоянии от глаза, и тогда эксперимент начнется сразу с "отсутствия" кружка.
Спасибо, но, думаю, что не хочется жертвовать качеством (я же жертвую качеством с меньшим квантом, верно?) ради пары токенов)
Ещё немного поэкспериментировал сегодня с тремя моделями, всем задавал одну и ту же задачку:
gemma-4-26B-A4B-it-UD-Q4_K_XL (контекст 48k, запускал в мультимодальном режиме с обработкой изображений)
cmoe: 24 t/s
ncmoe=23: 18 t/s
ncmoe=24: 31 t/s
ncmoe=25: 30 t/s
ncmoe=26: 25 t/s
gpt-oss-20b-UD-Q4_K_XL (контекст 64k)
cmoe: 21 t/s
ncmoe=10: 36 t/s
ncmoe=11: 36 t/s
ncmoe=12: 38 t/s
ncmoe=20: 24 t/s
ncmoe=24: 21 t/s
Qwen3.6-35B-A3B-UD-Q4_K_XL (контекст 48k)
cmoe: 9 t/s
ncmoe=31: 20 t/s
ncmoe=32: 27 t/s
ncmoe=33: 22 t/s
ncmoe=34: 20 t/s
ncmoe=35: 18 t/s
ncmoe=40: 11 t/s
И самое интересное, везде прослеживается эта тенденция: загружена только VRAM (вплоть до почти 100%) -- скорость ниже, начинаем залезать в оперативку -- скорость подрастает, но если сильно в неё уходим -- скорость снова падает.
Загрузка видеочипа с cmoe почему-то всегда хилая и очень неровная, в среднем 40-50% или ниже. Как начинаем играться с ncmoe -- нагрузка на чип растёт, всегда выше 80% и зачастую выше 90%.
Шикарный материал (как и предыдущие на ту же тему), спасибо! Благодаря ему даже захотелось вкатиться в эту тему, чего раньше у меня не было)
Если собрать в кучу сведения из текущего материала, а также предыдущий и обсуждения под ним, правильно ли я понял: нет смысла гнаться за степенью заполненности VRAM, главное, условно говоря, насколько в процессе обработки запроса моделька грузит саму GPU (процент её использования)?
Например, у меня 3070Ti на 8 Гб VRAM, 16 (дозаказал ещё 16, на днях поставлю) Гб RAM (DDR4, 3200 Mhz). Вот просто из того железа, что имею на руках (RAM всё равно давно хотел докинуть, так что просто повод нашёлся) хочется выжать максимум.
Взял Qwen3.6-35B-A3B-UD-Q4_K_XL, запустил как есть (по-моему, только -cmoe прописал), контекст поставил 32k вроде (пишу сейчас по памяти, всё равно в итоге на других параметрах остановился). Получил почти полностью забитую VRAM, но использование GPU что-то около 30% (всё как вы и писали) и ~7t/s.
Решил поиграться с -ncmoe, но всё равно целился в то, чтобы VRAM утилизировалась достаточно, в итоге экспериментами дошёл до -ncmoe=35 (не знаю, хорошо ли 35 из 40 слоёв выгружать на CPU, всё равно немного ощущал себя обезьянкой, которая бездумно перебирает чиселки), контекст 48k, скорость получилась порядка 20t/s, GPU грузится на 85-100%, но при этом и VRAM забита, да и в "общую память" (в которой, видимо, 8 Гб настоящей VRAM, и 8 Гб виртуальной, которая на самом деле RAM) на полтора гига забрались. Звоночек тревожный, в общую память не хотелось вылезать, но дальнейшие эксперименты всё равно больше 20 t/s не давали.
Стоит ли продолжать дальше играться с параметрами запуска, пытаться добиться большей скорости, если уже сейчас GPU грузится почти на 100%? Или, возможно, стоит увеличивать размер контекста (вместе с увеличением -ncmoe) для достижения большего качества? И при этом следить за тем, чтобы не вылезать за пределы VRAM?
*Статья написана при поддержке картеля производителей детских шампуней.
Сейчас всё тот же криво сформулированный заголовок, о котором я и писал, и который вы процитировали. Я написал "не должен был", потому что ровно так и написано в заголовке.
Вы с своём первом комментарии как раз указали вариант, который, вероятно, пытался вложить в заголовок автор.
Но "оказался таким успешным" и "не должен был оказаться таким успешным" имеет разный смысл, разве не так (даже с припиской "но оказался" лучше не становится)? Чтобы привести его к этому виду с минимальными изменениями, можно просто убрать частицу "не", и получится "Почему никто не ожидал, что механизм «предсказать следующее слово» должен был оказаться так успешен (и оказался)". Но это всё равно кривовато звучит, предложенный вами вариант явно лучше.
Ну и я не писал и даже не намекал, что это признак использования ИИ, я как раз и предположил, что это безграмотность (ну или отсутствие вычитки), хоть явно этого писать и не стал.
Да, так должно быть. Я написал, как это читается сейчас)
Заголовок как-то криво сформулирован. "Никто не ожидал, что не должен был" == "всё ожидали, что должен был".
Извините, случайно вам минус поставил.
Заспойлеренный момент происходит в течение первых 5-7 минут игры. Официальное расспойлеривание (Барни снимает маску и представляется) происходит в течение минуты после встречи с ним.
Здесь никто из главных (да и никаких других) персонажей не умирает, вообще ничего экстраординарного не происходит.
Я сам не люблю спойлеры, но конкретно здесь мне кажется, абсолютно ничего страшного в "спойлере" нет.
Вот момент и настал!
https://habr.com/ru/companies/2gis/articles/959712/
Да как бы люди хотят... Вот, второй комментарий к статье как раз про это как будто)
А при появлении интернета так и будет. Приложение не забывает про наличие онлайна, постоянно проверяется, не вернулась ли сеть и нет ли варианта проехать иначе.
Но вообще обновление пробок или перекрытий именно на межгороде в 99% случаев мало что даст. Всё равно артерий, по которым можно проехать из одного города в другой, очень мало (зачастую вне европейской части России она вообще единственная), поэтому что есть на трассе пробка, что её нет - ехать всё равно придётся по тому же маршруту скорее всего.
Я всё-таки не вижу противоречий. Описанная реализация - это, скажем так, последний шанс построить хоть что-то. С нашей точки зрения лучше когда он есть, чем когда его нет.
Естественно, идея очевидная. Хуже она от этого как будто не становится.
Спасибо за лояльность и за пожелание!
Ну это очень громкое и очень общее заявление.
Полгода назад купил себе Retroid Pocket 4 в основном для PS2, прохожу классику, до которой раньше не добирался по тем или иным причинам и получаю огромное удовольствие. И это на не самом игровом чипе и с не самым свежим портом pcsx2. Притом в x2.5 разрешении.
Разумеется, с некоторыми тайтлами есть проблемы (конкретно в моём случае), где-то из-за железа, где-то из-за устаревшей версии эмулятора, но на свежем pcsx2 и на игровом PC их уже скорее всего не будет совсем или они будут в единичных случаях.
На гифках дейкстра, как я и сказал. Анимации максимально упрощены, чтобы деталями не грузить, но там, естественно, не сам вес ребра учитывается при его извлечении из очереди, а накопленная оценка пути.
На гифках для простоты обычный алгоритм Дейкстры, у нас A*, да, частным случаем которого Дейкстра и является.
Примерно с самого появления навигатора, год 2016, если не ошибаюсь.
Такую штуку кто только ни делал, собственно, название паттерна так и возникло: автор статьи, в которой паттерн был формализован, отметил, что этот паттерн (pattern), основанный на хитром использовании шаблонов (template), является удивительно (curiously) часто повторяющимся (recurring) от кодовой базы к кодовой базе, причем эти кодовые базы зачастую никак не связаны друг с другом. То есть имя паттерна никак не связано с механизмом его реализации, хотя из статьи в статью кочуют попытки расшифровку аббревиатуры притянуть (причем за уши) к реализации. Даже удивительно, что в этой статье это притягивание не возникло, но я думаю, это от небрежности, а не от благого намерения.
Я ждал этого всего по очереди (и ещё думал, что какая-то из жил перебита, а во время дождя контакт восстанавливается), пока не прочитал, что Wi-Fi ловится по воздуху; с этого момента ждал, что из-за намокания/наполнения водой что-то перекрывающее видимость проседает и видимость восстанавливается. Если история реальная, для меня загадка, как об этом можно было не подумать с самого начала...
Так это и есть как в мессенджерах. Позволяешь видеть время своей последней активности - видишь время последней активности собеседников. Запрещаешь видеть своё - перестаёшь видеть у собеседников. По крайней мере, в whatsapp и в телеге так (правда, в телеге за премиум-подписку настройки гибче).
Хлопок же...
С моей точки зрения, в контексте решаемой задачи только первая (в итоге и выбранная) версия перечисления Token корректна. Токен - это неделимая смысловая единица входного языка; из таких единиц строятся высказывания на этом языке. Поэтому вторая предлагаемая версия - своего рода доведение до абсурда, просто сопоставление каждого символа алфавита некоторому идентификатору; расширив этот вариант до всех 256 символов ASCII, можно гордо заявить, что мы реализовали универсальный токенизатор для любого языка (пусть и без поддержки юникода), только вот толку от него?
Третья же версия - это уже не про лексемы, а про синтаксис. Определять, чему синтаксически соответствует токен, задача не лексера, а парсера. Да, для очень простых языков можно вообще не делать это разделение, но лучше всё-таки делать, это позволит более гибко модифицировать отдельные механизмы в дальнейшем.
А почему вы считаете, что при переводе взгляда обратно на крестик эксперимент не начинается заново? Суть изначального перемещения изображения -- найти такое расстояние, при котором когда взгляд направлен на крестик, кружок бы находился аккурат в зоне слепого пятна. Как только оно найдено, никакие манипуляции не заставят увидеть кружок (если при этом смотреть на крестик), это физически невозможно. Т.е. при удачном стечении обстоятельств можно прямо сразу поместить изображение на нужном расстоянии от глаза, и тогда эксперимент начнется сразу с "отсутствия" кружка.