Комментарии 35
Прикольная, она не только на русском обучалась, понимает иврит, разговорный и не очень, причём понятия перемешались и ответы её бывают не совсем правильными но верными ;-)
Ну и в интернетах, набралось всякого... Анаграммы сечёт плохо...
Анаграммы и прочие языковые кунштюки оно должно, по идее, совсем не понимать. LLM же не видит ни букв, ни слогов, оно работает с токенами, которые из букв неоднозначно генерируются - а на выходе у LLM ещё и рандомизатор стоит, которому пофиг вообще, что там задумывалось.
Грубо говоря, LLM говорит на своём языке и вопросы, которые меняют правильный ответ при переводе на другой язык, должны быть ей не по зубам.
Так что я не понимаю, как оно иногда справляется это делать или писать рифмы. Скорее всего, просто зубрит наизусть готовые предложения и из них лепит ответ.
Нет, вообще говоря, LLM в состоянии придумывать несуществующие слова, со "здравым смыслом" (https://www.reddit.com/r/ChatGPT/comments/11un4ig/i_asked_chatgpt_to_invent_some_new_english_words/) или с ироничным обыгрыванием похожего звучания (мой пример - https://habr.com/ru/news/742658/comments/#comment_25666962). Можно легко самому убедиться на опыте - LLM в состоянии генерировать анаграммы и подобное к таким несуществующим/негуглящимся словам. Это совсем не слепая зубрёжка.
Ага, вот только даже самые новые модели ChatGPT не способны поиграть в Города дольше 5-10 попыток.
Потому как память заканчивается, у них очень мало памяти и как только диалог переполняет эту память они начинают забывать куски данных что вы им дали чуть раньше.
Что здесь подразумевается под памятью?
Грубо говоря, каждый раз, нейросети передается весь ваш с нею диалог и ваш текущий запрос.
Но это было бы очень много текста, поэтому он общается, чтобы поместиться во входящее окно. Из-за этого со временем он как бы "забывает", что вы ему говорили в начале диалога.
Контекстное окно у большинства актуальных моделей сейчас колеблется в районе 4-32 тысяч токенов, это всё таки намного больше 10-15 названий городов.
Добавьте туда большой кусок текста как вести себя правильно, как она должна работать, правила игры и прочее.
Там где настройки достаточно гибкие, можно важные моменты переводить в гарантированный репит, чтобы не забывали. При правильной настройке там должно играть долго. Но потребуются различные скрипты
Среди ботоводов ходит поверие что чем больше в памяти запросов тем хуже начинает отвечать модель, и они режут память не только по размеру но и по количеству запросов. Отчасти это делается еще и ради экономии токенов, запросы через апи чудовищно дорогие при работе в чат-режиме с большим окном. Если память заполнена то каждый следующий вопрос-ответ будет стоить на всю котлету даже конкретно этот запрос-ответ был коротким. Даже если моделька очень дешевая запросы размером в 30т токенов стоят ощутимых денег, а если это топовые модели то они могут жрать больше доллара на каждый такой запрос в чатик.
Самое главное забыли. Системные требования:
8x H200 (1x H200 node)
16x H100 (2x H100 nodes)
16x A100 80GB (2x A100 80GB nodes)
И примерно 10 киловатт мощности на все вместе.
Даже открытые модели стали незапускаемыми дома.
Это для bfloat16, дома обычно запускают квантованные gguf. И многие считают, что квантованные модели большего размера всё равно лучше работают, чем маленькие модели.
Например, для DeepSeek V2 на 236B квантованную IQ2_XXS (примерно 2.5 бита) занимает 62гб и можно запустить на 64гб памяти (например на linux, которые при запуске не превышают 1гб, скорость будет на уровне 1 t/s, иначе часть файла будет читаться по кругу с диска и скорость упадет до ~0.05 t/s).
Ну я бы не сказал, проверял я 70b 2q против 7b 8q.
Есть ли и есть разница, то она практически ничтожна, а вот по скорости 70b проигрывает катастрофически.
Из личного опыта, всё что ниже 4q мусор и лучше взять 8q, но рангом ниже.
Вообще, опыт мог быть подпорчен первыми квантованными моделями llama3 70B, когда у llama.cpp была ошибка в токенизаторе. После того как это пофиксили, кванты стали лучше себя показывать. А потом была проблема с i-квантами на Windows, которые работали на Linux.
Та же Codestral 22B квантованная IQ3_M будет лучше решать задачи программирования чем llama3 8B, при этом влезая в ~10гб видеопамяти, позволяя запускать себя на 3060 12гб с приемлемой скорость.
И просто хочу показать, что даже 1-битная квантизация это не мусор. Вот задача на логику, с которой не справляется ChatGPT-3.5. Правильный ответ 36 яблок:
У меня есть 10 яблок. Я нахожу 3 золотые монеты на дне реки. Река протекает рядом с большим городом, который как-то связан с тем, на что я могу потратить монеты. Я теряю 4 яблока, но получаю золотую монету. На мой путь выбегают три птицы и роняют по 6 яблок. Я играю в онлайн-игру и выигрываю 6 золотых монет, но мне приходится делить их поровну с двумя моими товарищами по команде. Я покупаю яблоки на все имеющиеся у меня монеты. Цена одного яблока составляет 0,5 монеты. Сколько у меня яблок? И где находится река? Распиши решение шаг за шагом.
Для демонстрации я взял модель quill-72b-instruct.i1-IQ1_M - это 1 битная i-квантизация.
Эта версия и решает задачу, и при 1-битной квантизации пишет даже на нормальном русском:

А llama3 8B в кванте Q8 вообще не может решить эту задачу, она путает всё (как и chatgpt-3.5):

Поэтому новые i-кванты использующие матрицу важности imatrix при низкой квантизации ощутимо повышают качество, что даже 1-битные версии работают. Но это касается только больших моделей, на маленьких это не будет так работать, так как там нет запаса весов.
Хм, возможно вы правы, с ошибкой в квантовании, я игрался с llama3 70b в первые дни их выпуска.
Вот тест, показывающий потери "интеллекта" модели при квантовании, на примере как раз третьей Лламы.

Сам тест спорный, но судя по моим экспериментам близок к правде.
Как правило низкий квант большей модели всегда работает лучше, чем высокий квант меньшей.
Хотя тут конечно надо учитывать размеры:
8В сыпятся ниже 4 кванта,
20-35В ниже 3,
70В ниже 2.
В ходе тестов обнаружил, что низкий квант у 70В модели, как будто отрезает часть датасета, убивая вариативность ответов, при этом почти не трогая "сообразительность".
Например q8 может выдать очень разные в плане креативности ответы на одну и ту же задачу. А вот q2 будет выдавать один и тот же ответ при повторной генерации с другим сидом. И если модель изначально качественная и не сломана при квантовании, то этот единственный ответ q2 будет таким же качественным, как и у q8, поэтому разница для пользователя может быть не заметна.
Картинка вообще печальна для q1 и q2 :)
Я попробовал imatrix, которые как я понимаю занимают меньше, но лучше (i1.q1 = ~q3), но чёрт побери, сколько же им требует вычислительной мощности.
В общем так и не смог распробовать i1-IQ1_M, как упоминали выше. Оно может по качеству и лучше и занимает почти 2 раза меньше, чем q2, но блин скорость, она в 2 раза медленнее q2 всего ~0.5 t/s против 0.98 t/s.
А могли бы подсказать где взять правильно-квантованые 70b? Потому что у меня опыт схожий, где-то ниже 4-5-6 70B была совсем неочень, при том что 8B отрабатывала бодро и весело. 70B 6-7-8кванты - медленно и заметно лучше 8B отвечали
https://huggingface.co/bartowski/Meta-Llama-3-70B-Instruct-GGUF/tree/main
Вообще обычно актуальные модели можно найти у https://huggingface.co/bartowski/
Проверяйте при загрузке модели, чтобы не было такой надписи "GENERATION QUALITY WILL BE DEGRADED! CONSIDER REGENERATING THE MODEL":

Можно также квантовать самостоятельно, для этого есть готовый скрипт в llama.cpp.
Быть может я не туда смотрю, но я не нашел описания у https://huggingface.co/bartowski/, как запускать квантованные модельки от bartowski
Для запуска моделей конвертированных в формат gguf, не важно от кого они, требуется llama.cpp - который и является создателем gguf формата и квантизации для него.
Полный список UI оболочек поверх llama.cpp можно найти тут: https://github.com/ggerganov/llama.cpp
Можете начать с jan или lm-studio - они сами предлагаю скачать модели, или подсунуть им уже скаченные. Или попробовать сразу text-generation-webui, который предоставляет больше различных возможностей.
Еще из интересных ui есть https://github.com/open-webui/open-webui, но сначала вам нужно разобраться как запускать api-сервер, что делается не сложно.
Если у вас современная видеокарта AMD, то lm-studio или ollama из коробки позволяют запускать ускорение на них.
Если у вас rx 6600/6700 или ниже (5000 серия или 500 серия) - то без танцев с бубном запускает пока только https://github.com/YellowRoseCx/koboldcpp-rocm
Интерфейс koboldcpp не особо современный, но koboldcpp сразу запускать api-сервер, поэтому запустив модель тут, вы можете подключиться к этому api и можно использовать более удобный jan или open-webui.
Без квантования модель DeepSeek-V2 236B на AMD EPYC 7402P 24-Core Processor выдаете с коротким промптом 2.5 токена в секунду. программирует хорошо, врубается в тонкости, но местами всравно допускает ошибки.
Например:
Запрос: А можно как-нибудь записать значения, включая пустые, например, в стандартный вывод, в строку разделенную табуляцией или что-то вроде этого?
Ответ модели (нерабочий):
Да, можно вернуть значения из функции через стандартный вывод и разделить их при помощи какого-либо символа (например, табуляции или другого разделителя). Вот пример того, как это можно сделать:
#!/bin/bash
# Функция, которая выводит значения в стандартный вывод, разделенные табуляцией
set_variables() {
local var1=$1
local var2=$2
local var3=$3
echo -e "${var1}\t${var2}\t${var3}"
}
# Вызов функции и чтение её вывода в массив
output=($(set_variables "value1" "" "value3"))
# Присваиваем значения из массива переменным
var1=${output[0]}
var2=${output[1]}
var3=${output[2]}
# Проверка значений
echo "Variable 1: $var1"
echo "Variable 2: $var2"
echo "Variable 3: $var3"
В этом примере функция
set_variables
формирует строку, в которой три переданных ей значения разделены символом табуляции (\t
), и выводит эту строку в стандартный вывод. Затем мы используем команду$(...)
, чтобы захватить этот вывод, который автоматически разбивается на массив по символу табуляции. Элементы массива присваиваются переменнымvar1
,var2
иvar3
.Такой подход позволяет легко возвращать несколько значений, включая пустые, из функции без использования глобальных переменных.
На самом деле, в ответ будет два значения идущих подряд, разделитель не сработает.
С логикой довольно не плохо, просто не знает конкретной ситуации. Я тоже не знаю почему это не работает.
Что касается nematron-4-340B то все зависит от архитектуры. Если там MoE, то можно получить приемлемую скорость и на CPU. Но мне кажется, для nvidia не выгодно делать модель удовлетворительно работающую на CPU :-)
При этом сама модель сказала, что ей нужно 128Гб ОЗУ и 32Гб видеопамяти для локального развертывания)
Даже открытые модели стали незапускаемыми дома.
Интересно, позволяет ли архитектура в принципе делать из такой мега-модели усеченную версию выкинув поддержку ненужных пользователю языков?
Есть разные дома. Как там говорил Олсен «Нет причин, по которым кому-то может понадобиться компьютер в их доме».
Вроде, на частный дом норма 15 кВт, так что, в общем, уже можно. Заодно и отопление.
Потестил немного, навскидку, очень хорошо. Написала мне игру крестики-нолики-звездочки для трех игроков на поле 4х4 для компьютера zx spectrum.
Бомж-вариант q8 + 15 RTX3090. Я даже знаю как можно это посадить на одну материнку :-)
Я запускаю такие огромные модели на CPU (AMD EPYC). 200-500ГБ ОЗУ конечно тоже стоят денег, но это хотя бы посильно, если очень захотеть, в отличие от GPU.
Del
Как и прочие нейросети начинает нести ерунду при недостатке информации, вместо того чтобы честно признаться, что у него нет таких данных.
Nvidia представила открытую LLM модель Nemotron-4 340B