Как стать автором
Обновить

Комментарии 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т токенов стоят ощутимых денег, а если это топовые модели то они могут жрать больше доллара на каждый такой запрос в чатик.

Поэтому используется Assistants API. Там не нужно передавать весь промпт. И только поэтому использование openai api выходит существенно дешевле чем у конкурентов.

Обучалась на 50+ естественных языках и 40+ языков программирования

У Хуанга какая-то личная вендетта против программистов? Ну там, прогер жену увёл или в универе незачёт поставили?

Если вас может заменить модель с контекстом 4098 токенов (с учётом того, что print('Hello world') это уже минимум 8 токенов) то проблема не в Хуанге.

P.S. токены через запятую: print,(,',Hello, ,world,',)

Самое главное забыли. Системные требования:

  • 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.

Для запуска моделей конвертированных в формат 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. Я даже знаю как можно это посадить на одну материнку :-)

Расскажите, пожалуйста! Как посадить, сколько линий pci достаётся каждой и как это влияет на производительность (урезанные линии). спасибо!

Я запускаю такие огромные модели на CPU (AMD EPYC). 200-500ГБ ОЗУ конечно тоже стоят денег, но это хотя бы посильно, если очень захотеть, в отличие от GPU.

Как и прочие нейросети начинает нести ерунду при недостатке информации, вместо того чтобы честно признаться, что у него нет таких данных.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости

Истории