Обновить

Комментарии 10

Привет! Я автор ZeroAgency/ru-big-russian-dataset. Спасибо, что попробовали датасет у себя. Кстати, у нас уже есть расширенные версии ZeroAgency/big-russian-dataset-v2-unfiltered и ZeroAgency/big-russian-dataset-3

Вопрос к вам очень важный. Вы когда SFT делали - маску правильно накладывали? Ну чтобы тренировалось только на ответах ассистента?

Да, маска накладывается так же, как и для других датасетов, тренировка только на последнем ответе ассистента:

full_enc = tokenizer(full_text, ...)
prompt_enc = tokenizer(prompt_text, ...)

input_ids = full_enc["input_ids"]
labels = input_ids.copy()
prompt_len = len(prompt_enc["input_ids"])
labels[:prompt_len] = [-100] * prompt_len 

# SFTDataCollator:
labels = torch.full((batch_size, max_len), -100, dtype=torch.long)

Отличная публикация, рад что наработки по ruGPT3XL пригодились.

Кстати по ходу чтения пришла мысль, можно ведь проинициализировать пустую ruGPT3XL, по аналогии с базовой habrGPT, и обучить на полном датасете, а затем сравнить какая модель покзывает более качественные ответы, полагаю что это будет ruGPT3XL, ведь 0.5B меньше чем 1.3B, но всё же.

Да, это так и будет, я обучал nanochat d24 размером 1.3B и по качеству это несколько уверенных уровней вверх. Правда ценность ruGPT3 в том, что они потратили компьют на 400B (80B*4 + 80B) токенов обучения, а не в архитектуре.

В ruGPT3 архитектура ближе к gpt3 за счет Sparce Attention, но всё равно MHA это тяжелая и прожорливая технология внимания, поэтому обучать GPT2-like архитектуры с нуля сейчас не особо имеет смысл. Даже GPT2-like habrGPT 0.5B я обучал на nanochat только, чтобы был материал про обучение на известном nanochat на ру сцене.

В 2026 современная архитектура это:

  • Mamba-2 (SSM) вместо квадратичного внимания, 75% слоев делают на mamba ради линейного внимания, чтобы вмещать 1м контекста, затраты тут O(n) на обучение и O(1) на инференс. Остальные 25% допустим MLA или GQA.

  • MLA с латентным низкоранговым пространством вместо разреженного внимания, работать с Sparse Attention у которого O(n²) тяжело. У MLA тоже O(n²), но он преобразует полные матрицы в низкоранговое пространство, тем самым экономия получается в разы.

  • GQA с той же сложностью как у Sparse Attention, но эффективнее, позволяет обучать весь контекст без безумных расходов памяти. Сюда же можно добавить Sliding Window, как в Gemma (iSWA), который снизит сложность с квадратичной до линейной, будет намного легче чем Sparse Attention. Обучать проще чем MLA, но тяжелее.

  • Другие современные методы: нормализация Pre-RMSNorm вместо Pre-LayerNorm, FFN активация SwiGLU вместо GELU, RoPE+YaRN, токенизатор на 150к, вместо 50к, для уплотнения на 20-30% информации, добавление SoftCap, чтобы стабилизировать обучение.

  • Value Residual и всё связанное SVFormer, ResFormer, PLE, value_embeds. В случае value_embeds снижение сложности на 50%.

Для самого обучения мало простого torch.compile(), что за счет компиляции ядер triton дает ускорение 50%, нужно добавить ещё разное:

  • Muon вместо чистого AdamW, это снижает расход памяти и стабилизует обучение.

  • Zero gradient checkpointing, для экономии памяти без потерь на forward, позволяет вместить больше батчей или параметров.

  • AdamW делит вычисления на мелкие шаги и для каждой части запускает своё CUDA-ядро. Можно объединять (fused) все эти операции в одно ядро, это сэкономит много памяти и ускорит обучение.

  • Можно объединить RMSNorm и SwiGLU, объединенное ядро для RoPE.

  • Вместо стандартного Cosine Annealing лучше Warmup-Stable-Decay, что создает качество лучше у pretrain.

  • Вместо Warmup-Stable-Decay можно попробовать взять Schedule-Free AdamW, чтобы не подбирать гиперпараметры, или попробовать μP для подбора, у которого подбор гиперпараметров решается математически.

Собрать такую архитектуру замороченее, но не сложнее, по сути это уже реализовано в transformers от huggingface или где-то рядом, что-то хорошо реализовано в Unsloth Train. Можно обучить дома в размере Dense 1.5B с value_embeds или MoE 6B-A0.6B без value_embeds, контекст допустим не 1м, а 32-64к за счет ssm. Тут скорее был бы полноценный датасет.

Дешевле взять готовый современный чекпоинт 1B, чем сжигать киловатты на обучении старой архитектуры с нуля

Ещё бы статью, как правильно собирать датасеты для обучения моделей. Видео же что правильный их подбор и оформление наиважнейшее для получения результата

Да, хороших публичных гайдов по дедупликации и синтетической очистке реально мало, все держат свои скрипты при себе...

Хорошие статьи, интересно читать. Спасибо!

Было бы интересно еще в кодинге что-то. Вроде есть stackoverflow датасеты на русском. Но тут посетила мысль, что такие маленькие модели вряд ли на что-то способны серьезное, тот же терсис на html.. как я думаю проблема в том что если говорить о вайбеодинге - то модель должна хорошо понимать русский язык чтобы понимать задачу и кроме прочего иметь много знаний и по программированию. Сможет ли все это уместиться в миллиард параметров вот вопрос...

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

Такая замечательная статья, и так мало комментариев, странно.
Очень классная проделанная работа, спасибо что так подробно всё документируете, очень любопытно было ознакомиться.

Раз уж вы во всём энтузиаст, подкину интересный найденный ролик, про катастрофическое забывание у маленьких LLM, вдруг вам концепт тоже зайдёт: https://youtu.be/6zwuTqGweJE?si=VIoeb7zrk3EZohOe

Там и ссылка на колаб имеется: https://colab.research.google.com/drive/1nao2tDffdIThxoH0Nd8_pe_5Gc3JfCZQ?usp=sharing

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

Публикации