Свидетели Градиента
635 subscribers
161 photos
31 files
71 links
Этот канал предназначен для общения и обсуждений среди тех, кто как и я, хочет видеть что происходит под капотом у нейросетей, и старается развивать интуицию об их природе и свойствах.

Для связи: @kraidiky
Download Telegram
Я прикручивал к modded-nanogpt загрузку сохраненного состояния, а оно загружаться не хотело и орало про неожиданный тип. Ошибку удалось локализовать в torch.optim.Optimizer.load_state_dict от которого ее наследует NorMuon, Библиотечный метод из своих вредительских соображений скрыто кастит тип загружаемого содержимого, приводя его в соответствие с типом соответствующего этому стейту параметра, полагаю чтобы не усложнять жизнь тем, у кого лапки, и он за всем этим самостоятельно следить не способен.

Параметр, например:
'blocks.1.attn.attn_gate.weight': (torch.Size([6, 12]), torch.bfloat16),
Ты грузишь сохранённый стейт какой-то такой:
{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.float32)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},

А получаешь в состоянии оптимизатора:

{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.bfloat16)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},

Здравствуй несоответствие типа, а если вручную привести тип ещё раз, то потеря точности при загрузке.

И я бы ещё долго проверял и перепроверял свой код, если бы это не была уже вторая найденная мной потеря точности при загрузке сохранённых моделей с помощью родных классов pytorch
👍1
Приключения с modded-nanogpt продолжаются.

_cum_lengths = torch.full((max_num_docs,), num_tokens_local)

Переводить переводчиком не очень понятные названия переменных было не самой хорошей идеей. Если вы ещё не поняли прикола, прошу вас - НЕ ПЫТАЙТЕСЬ ЕГО ПОНЯТЬ.


Или не жалуйтесь потом....
😁2
Подписался на материалы митапа, который проводили эти ребята, и это, конечно, очень большой стимул, показывающий на сколько я, пока, отстаю от переднего края, хотя именно мне, работающему в одиночку над довольно масштабными в плане кода проектами это всё, по идее, должно быть наиболее полезно. Сам я пока остановился в своём развитии на том чтобы скопировать кусок кода в окно чата, что лишь частично обхясняется тем, что я работаю, в основном, с пропритарным кодом.
👍1😁1
Forwarded from AI и грабли
Реальные кейсы про ИИ в разработке

Уже много раз говорили, что основной блокер адопшена ИИ для разработки – крутая кривая входа: скачать Курсор и написать промпт – легко. А чтобы этот промпт сделал что от него реально ожидают, еще и на существующей кодовой базе – сложно.

Инфа о работающих подходах обычно скапливается в головах у энтузиастов, у кого есть время и ресурсы на эксперименты и обмен практиками с другими энтузиастами. В итоге, к зиме 2025го приходим к ситуации, что все уже плюс минус приняли – ИИ может ускорять разработку. Но почти никто не понимает, как это сделать в реальности.

Мы с @the_ai_architect и @max_about_ai решили устроить глобальное переопыление – собираем с сообщества реальные кейсы, а потом обезличенно делимся со всеми, кто оставил осмысленную инфу

- Как конкретно настроили свои инструменты
- Какие подходы успешны, и что, наоборот, не оправдало ожиданий
- В каких задачах самый большой прирост, а что пока лучше делать руками
- ...

Чем больше инфы соберем, тем больше ценность для каждого участника. Так что, если у вас есть чатики с людьми, чьи подходы вам любопытны или мнение которых уважаете – перешлите, пожалуйста, пост. Им, наверняка, тоже будет интересно посмотреть результаты

А если пошерите этот пост в канале на 100+ человек, добавим ссылку на ваш канал в страницу с итогами 🤗

Ссылка на участие
👍2
Обычно бытует представление, что языковые модели, обучающиеся на одной эпохе не переобучаются. Но если задать вопрос - "тоесть они только обощают?" любой, кто хоть сколько-то с ними общался начинает возмущённо размахивать руками и аргументированно возражать. Причём возражают всё включая Суцкивера и ЛеКуна. Получается, что в головах людей живут явно взамоисключающие пункты, и им норм. Интересно, что при этом у людей много занимающихся языковыми сетями начисто отсутствуют мысли о том, как с переобучением бороться. Вплоть до того, что они говорят, вот все данные кончатся, мы их пять-шесть эпох прогоним и все умрём. Максимум у людей включён weight_decay = 0.1 ну и то это с давних времён значение по умолчанию, и никто даже не проверяет оптимально ли это значение.

Так на сколько же на самом деле переобучается зяыковая модель? Собирать train_loss по вполне очевидным причинам бесполезно - модель эти данные впервые видит точно так же как и свой валидейшен. А что будет если мы попробуем посмотреть лосс на пакете данных которые модель уже только что прошла train[-2560:], для простоты назову их train[-1], И на тех данных, с которых когда-то давно начиналось обучение, и которые модель должна была уже изрядно подзабыть train[:2560], обозначим их просто train[0]
Для малюсенькой GPT-2 от Карпаты, обученной на небольшой части опенвеба имеем примерно такое:

val_loss:3.2793
train[-1].loss:3.1503
train[0].loss:3.2809

Не скажу, что это прямо большое откровение, конечно, но наблюдение небезинтересное...
🔥3🤔31
https://vkvideo.ru/video454832249_456267605
Ашманов про ИИ-комапанейщину. Уже смотрели? Интересно мнение аудитории, которая глубоко погружена в тему. Я прикреплю опрос, а если есть желание прокомментировть по пунктам с удовольствием выслушаю и выскажу своё мнение, если будет что сказать.
А тем временем наш паровоз вперёд летит, и если вы вдруг по какому-то недоразумению не подписаны на @data_secrets-ы немедленно прекращайте. Это один из двух или парочки каналов, который мне приходится репостить своим друзьям и знакомых чаще чем всё остальное вместе взятое.
🥴2
Forwarded from Data Secrets
Самый крутой скачок GPT-5.2 произошел, пожалуй, на ARC-AGI

На ARC-AGI 1 модель достала 86.2% (GPT-5.1 берет 72.8%, Gemini 3 Pro – 75). Это серьезный рост.

При этом GPT-5.2 Pro с повышенным уровнем ризонинга X-High скорит уже 90.5% при стоимости $11.64/задачу. Всего год назад сотой считалась нерелизнутая o3-High с результатом 88% и $4.5k/задачу. Это означает, что за год эффективность выросла в 390 раз.

На ARC-AGI 2 все еще интереснее. Там скачок произошел с 17.6 до 52.9%! Самый близкий по скору конкурент – Claude Opus 4.5 – выбивает всего 37.6%. Просто напоминаем, что между релизами GPT-5.1 и 5.2 прошел месяц 😐

GPT 5.2 Pro X-High точно скорит еще больше, но организаторы бенчмарка пишут, что пока не смогли достоверно проверить ее результаты из-за API timeouts. Средний уровень человека на ARC-AGI 2 – около 60%. Интересно, побьет ли.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2
Слушал тут подкаст Семихатова и Сурдина с автором N+1 - Коняевым, и сформулировал одну простую мысль к которой сводится всё то из-за чего у меня подгорало и хотелось прокомментировать. Мысль такая:

"Всё важное и интересное в нейросетях - это то, что выходит за рамки интерполяционной задачи."

P.S. Парадоксальным образом гроккинг может оказаться неинтересным, если окажется просто способом решать интерполяционную задачу на одном слое идеально. Не хотелось бы, с одной стороны, с другой - если понять как - было бы неплохо...
🤔6👍3
modded-nanogpt по дефолту запускается на 8xH100-ой силы. Арендовал себе тоже H100-ого немножко чтобы гонять эксперементы с с нормальной скоростью. Не 8 конечно, но тем не менее.
То чувство когда у твоего компьютера зарплата больше чем у тебя.... :))
😁15🔥1
Уходящий год был годом подготовки прорывам и решительным изменениям, когда в принципе уже ясно, что вот сейчас оно и выстрелит, и изменится и переродится, и не только в нейросетях, и в связи с этим желаю чтобы все ваши наработки выстрелили и пошли в дело, все догадки показали себя полезными, на все хватило здоровья и прибавилось понимания вообще и нейросетей.
👍10🙏4🎄31
Новогодняя интеллектуальная абстиненция довела меня до простого и столь же очевидного эксперимента, не требующего вообще ничего кроме добрых намерений.

Огромное количество людей всё ещё считают гроккинг случайным процессом, протекающим когда обычное обучение сошло на нет. Чтобы это оправергнуть берём оригинальный экспериментальный ноутбук от @AbstractDL спасибо ему ещё раз,  https://colab.research.google.com/drive/1r3Wg84XECq57fT2B1dvHLSJrJ2sjIDCJ?usp=sharing Снимаем в коде ограничение на размер батчсайза, в половину трейна, и делаем батчсайз как раз размером в весь учебный датасет, то есть 97*98//2 - все, эксперимент готов. Всего через 5 минут гугловский коллаб обогащает нас картинкой, кучей новых знаний и желанием поиграть гиперпараметрами.

P.S. Столкновения с элементами рельефа также привносят некоторые дёргания не случайные, но дёргания.
🔥5🤔1
modded-nanogpt, соответственно всякие пониженные точности, типа bf16 и тому подобное.

val progress: 20/80 spends:09s/34s val_loss:3.3953
val progress: 80/80 spends:35s/35s val_loss:3.3815
step:1750/2315 val_loss:3.3815 train_time:47m:45s/01h:03mms step_avg:1636.20ms

Записал мдель на диск, считал моджель с диска чтобы продолжить с чекпоинта.

val progress: 20/80 spends:09s/34s val_loss:3.3959
val progress: 80/80 spends:34s/34s val_loss:3.3821
step:1750/2315 val_loss:3.3821 train_time:0.914:ms/1.208:msms step_avg:0.91ms

Вот теперь сиди и думиай, это у меня какая-то ошибка, или это torch.save на столько подель корраптит. :((
😢2
Из очевидного, но почему-то не очевидного....

Мы же знаем, что обучение в ряде случаев вдоль дна оврага происходит экспоненциально после того как сеть в него спустится.
Из-за этого я всегда на всех бухтю, что график loss нужно рисовать в логарифмических координатах, на нём более или менее видно, идёт ли ещё обучение или оно реально остановилось, тоесть наклонная ли линия loss вниз, или она горизонтальна и мы забились между стенками наглухо. И почему-то только сегодня мне пришло в голову, что если так, то ещё более информативным будет график относительной скорости обучения, тоесть изменение loss в отношении к самому loss, и таки да, он реально довольно информативен.
👍7🔥2
Есть такая штука - низкоранговое обучение.

Вы обучаете на саму матрицу 768x3072, например, а лора-адаптер к ней с узким местом в <768x32>(<32x3072>(x)), а по большой матрице градиент даже не собираете. После этого вы регулярно или каждый раз считаете прибавку от такого адаптера к основной ма трице <768x32>@<32x3072> и перекладываете 90% этой прибавки в большую матрицу, а одну из матриц адаптера, соответственно на 0.1 домножаете (чем реже перекладываете, тем хуже точность, что логично). По очевидным причинам скорость такого действа сильно выше. По не менее очевидным причинам точность несколь ниже. Что не очевидно, так это то, что на некоторых этапах обучения ниже она совсем не на много. Если взять modded-nanogpt, и заменить в ней все матрицы MLP то на некоторых первых шагах она может отличаться не сильно, а за счёт экономии времени даже обгонять этот супер-пупер-гипер-оптимизированный по скорости бейзлайн, что вообще-то, титанически сложно сделать.

Дальше нечинаются менее очевидные вещи. Во-первых, экономия по памяти зависит при этом от размеров батча и может быть даже отрицательной. Для вычисления градиентов в дереве вычислений сохраняются активации до матричного умножения. Дальше, в процессе обратного распостранения в этот слой из backward придёт d(loss)/d(logit), и на их основе считается градиент. Вы выигрываете на том, что не храните матрицу градиентов большой матрицы, но в хранении активаций вы проигрываете, вам теперь нужно хранить активации не только 768xBatchsize+32xBatchsize. Если мы возимся с трансформером, у которого размер эмбедингов может быть крайне не маленьким, и занимает львиную долю места в памяти, может получиться так, что память мы не съэкономили, а как раз наоборот.

Вторая более сложная неочевидность в том, что на поздних этапах обучения, более тонких, алгоритм начинает всё больше и больше проигрывать. Казалось бы, мы же знаем, что чем дальше обучение, тем в целом прямее его траектория, разницы между высоко и низко-ранговым обучением должна рассасываться. А вот не тут то было... Я для себя это объясняю тем, что на больее поздних этапах обучения суммарное направление ведёт себя поспокойнее, но складывается оно из того что отдельные семплы начинают тянуть во всё более разные стороны, и вот эта раскоряка, по всей видимости, плохо представима в lora. Что на первый взгляд как будто бы противоречит тому, что LoRA чаще всего используют как раз для доучивания.

В общем тема крайней благодатная. Исследовать её можно долго и с удовольствием. Говорят, за это даже деньги платят. Пока я разобрался ещё очень поверхностно...
🔥8🥰1
Спросили меня тут, а не могу ли я курс репостнуть, а я подумал, а почему бы и нет. О курсе ничено не знаю, но энтузиазм и желание двигать народ это хорошо.
🐉 Открыт набор на Technical AI Safety курс по оценке LLM: подходы, бенчмарки и методология

Evals for AI Safety — это методология измерения качества, надежности и безопасности ИИ-систем. В условиях повсеместного внедрения языковых моделей в продакшн умение корректно оценивать их возможности и риски становится приоритетным навыком.

Как устроен курс:
🔘Анализ методологии evals на основе современных и классических статей в области
🔘Менторы из Apollo research, AI Lab SKOLKOVO, AIRI Institute, Яндекс и др
🔘Обучение в мини-группах, по 4-6 человек
🔘Формат: оффлайн в Москве или онлайн
🔘Ожидаемая нагрузка: 10-15 часов в неделю
🔘Стоимость: бесплатно, отбор на конкурсной основе

Цель курса:
Дать базу для начала карьеры в области оценки ИИ и понимание того, какую роль evals играет в AI Safety. Программа знакомит с основными концепциями evals, учит анализировать существующие бенчмарки, проектировать собственные оценки и разрабатывать дизайн экспериментов в области evals. Участники курса освоят Inspect AI (один из самых популярных фреймворков для оценки LLM).

Кого мы ждем:
🔘Студентов STEM-направлений, планирующих карьеру в области ИИ
🔘IT-специалистов, желающих освоить навык тестирования языковых моделей
🔘Продвинутых и начинающих специалистов в области ML, которые хотят углубиться в методологию оценки моделей

Подробнее: тут
Подать заявку на участие в курсе, а также на фасилитацию можно до 22 февраля: тут

Если вам интересно менторство, преподавание, сотрудничество с курсом или вы хотите задать вопрос, то напишите Юле
Please open Telegram to view this post
VIEW IN TELEGRAM
5