Это перевод классной статьи с детальным обзором архитектур главных опенсорсных LLM: очень структурировано, доходчиво и с изумительными картиночками. И такой обзор просто обязан быть на русском языке. Поговорим про DeepSeek V3/R1, OLMo 2, Gemma 3, Mistral Small 3.1, Llama 4, Qwen3, SmolLM3, Kimi K2, GPT-OSS, Grok 2.5, GLM-4.5, Qwen3-Next.
Ну а дальше слово автору:
От DeepSeek-V3 до gpt-oss: взгляд на современное проектирование архитектур больших языковых моделей.
Прошло семь лет с момента разработки оригинальной архитектуры GPT. На первый взгляд, оглядываясь назад на GPT-2 (2019) и вперед на DeepSeek-V3 и Llama 4 (2024-2025), можно удивиться тому, насколько структурно похожими остаются эти модели.
Конечно, позиционные эмбеддинги (positional embeddings) эволюционировали от абсолютных к ротационным (RoPE), многоголовое внимание (Multi-Head Attention) в значительной степени уступило место Grouped-Query Attention, а более эффективная функция активации SwiGLU заменила такие функции активации (activation functions), как GELU. Но за этими незначительными усовершенствованиями — действительно ли мы увидели революционные изменения, или мы просто шлифуем те же самые архитектурные основы?
Сравнивать LLM для определения ключевых ингредиентов, которые способствуют их хорошей (или не очень хорошей) производительности, крайне сложно: исходные датасеты, методы обучения и гиперпараметры сильно различаются и часто плохо задокументированы.
Однако я считаю, что все еще есть большая ценность в изучении структурных изменений самих архитектур, чтобы увидеть, чем занимаются разработчики LLM в 2025 году. (Подмножество из них показано на Рисунке 1 ниже.)

Итак, в этой статье, вместо того чтобы писать о производительности на бенчмарках или алгоритмах обучения, я сосредоточусь на архитектурных разработках, которые определяют сегодняшние флагманские открытые модели.
Если интересно: на странице оригинала в самом начале есть видео, которое представляет собой озвученную и сокращенную версию этой статьи.
1. DeepSeek V3/R1
Как вы, вероятно, уже неоднократно слышали, DeepSeek R1 произвела большое впечатление, когда была выпущена в январе 2025 года. DeepSeek R1 — это модель рассуждений (reasoning model), построенная на основе архитектуры DeepSeek V3, которая была представлена в декабре 2024 года.
Хотя здесь я фокусируюсь на архитектурах, выпущенных в 2025 году, я считаю разумным включить DeepSeek V3, поскольку она получила широкое внимание и признание только после запуска DeepSeek R1 в 2025 году.
В этом разделе я сосредоточусь на двух ключевых архитектурных техниках, представленных в DeepSeek V3, которые улучшили ее вычислительную эффективность и отличают ее от многих других LLM:
Многоголовое латентное внимание (Multi-Head Latent Attention, MLA)
Смесь экспертов (Mixture-of-Experts, MoE)
1.1 Многоголовое латентное внимание
Прежде чем обсуждать многоголовое латентное внимание, давайте кратко рассмотрим некоторую предысторию, чтобы понять, почему оно используется. Для этого начнем с Grouped-Query Attention (GQA), которое в последние годы стало новым стандартом замены многоголового внимания как более эффективная альтернатива с точки зрения вычислений и параметров.
Итак, вот краткое резюме GQA. В отличие от многоголового внимания, где каждая голова также имеет свой собственный набор ключей и значений (keys and values), для уменьшения использования памяти групповое внимание запросов группирует несколько голов для совместного использования одних и тех же проекций ключей и значений.
Например, как показано на Рисунке 2 ниже, если есть 2 группы ключ-значение и 4 головы внимания, то головы 1 и 2 могут совместно использовать один набор ключей и значений, в то время как головы 3 и 4 совместно используют другой. Это уменьшает общее количество вычислений ключей и значений, что приводит к снижению использования памяти и повышению эффективности (без заметного влияния на производительность моделирования, согласно исследованиям абляции).

Итак, основная идея Grouped-Query Attention заключается в уменьшении количества голов ключей и значений путем их совместного использования несколькими головами запросов. Это, во-первых, снижает количество параметров модели и, во-вторых, уменьшает использование пропускной способности памяти для тензоров ключей и значений во время инференса, поскольку нужно хранить и извлекать меньше ключей и значений из KV-кеша (KV cache).
(Если вам интересно, как Grouped-Query Attention выглядит в коде, смотрите мое руководство по конвертации GPT-2 в Llama 3 для версии без KV-кеша и мой вариант с KV-кешем.)
Хотя Grouped-Query Attention в основном является обходным решением для повышения вычислительной эффективности многоголового внимания, исследования абляции (такие как в оригинальной статье о Grouped-Query Attention и статье о Llama 2) показывают, что оно работает сопоставимо со стандартным многоголовым вниманием с точки зрения производительности моделирования LLM.
Теперь многоголовое латентное внимание предлагает другую стратегию экономии памяти, которая также особенно хорошо сочетается с KV-кешированием. Вместо совместного использования голов ключей и значений, как в Grouped-Query Attention, многоголовое латентное внимание сжимает тензоры ключей и значений в пространство меньшей размерности перед их сохранением в KV-кеш.
Во время инференса эти сжатые тензоры проецируются обратно к их исходному размеру перед использованием, как показано на Рисунке 3 ниже. Это добавляет дополнительное матричное умножение, но уменьшает использование памяти.

(В качестве примечания: запросы также сжимаются, но только во время обучения, а не инференса.)
Кстати, MLA не является новшеством в DeepSeek V3, поскольку его предшественник DeepSeek-V2 также использовал (и даже представил) его. Кроме того, статья о V2 содержит несколько интересных исследований абляции, которые могут объяснить, почему команда DeepSeek выбрала MLA вместо Grouped-Query Attention (см. Рисунок 4 ниже).

Как показано на Рисунке 4 выше, Grouped-Query Attention показывает худшую производительность, чем многоголовое внимание, в то время как MLA обеспечивает лучшую производительность моделирования, чем многоголовое внимание, что, вероятно, объясняет, почему команда DeepSeek выбрала MLA вместо Grouped-Query Attention. (Было бы интересно также увидеть сравнение экономии «KV-кеша на токен» между MLA и Grouped-Query Attention!)
Подводя итог этого раздела, прежде чем перейти к следующему компоненту архитектуры, MLA — это умный прием для уменьшения использования памяти KV-кеша, который даже немного превосходит многоголовое внимание с точки зрения производительности моделирования.
1.2 Смесь экспертов (Mixture-of-Experts, MoE)
Другим важным архитектурным компонентом в DeepSeek, заслуживающим внимания, является использование слоев смеси экспертов. Хотя DeepSeek не изобрела смесь экспертов, она переживает возрождение в этом году, и многие из архитектур, которые мы рассмотрим позже, также используют ее.
Вы, вероятно, уже знакомы со смесью экспертов, но быстрое напоминание может быть полезным.
Основная идея смеси экспертов заключается в замене каждого модуля прямого распространения (FeedForward module) в блоке трансформера несколькими слоями экспертов, где каждый из этих слоев экспертов также является модулем прямого распространения. Это означает, что мы заменяем один блок прямого распространения несколькими блоками прямого распространения, как показано на Рисунке 5 ниже.

Блок прямого распространения внутри блока трансформера (показан как темно-серый блок на рисунке выше) обычно содержит большое количество от общего числа параметров модели. (Обратите внимание, что блок трансформера, и, следовательно, блок прямого распространения, повторяется много раз в LLM; в случае DeepSeek-V3 — 61 раз.)
Таким образом, замена одного блока прямого распространения несколькими блоками прямого распространения (как это сделано в конфигурации смеси экспертов) существенно увеличивает общее количество параметров модели. Однако ключевой трюк заключается в том, что мы не используем («активируем») всех экспертов для каждого токена. Вместо этого маршрутизатор (router) выбирает только небольшое подмножество экспертов для каждого токена. (В интересах экономии времени, или, скорее, места в статье, я рассмотрю маршрутизатор более подробно в другой раз.)
Поскольку одновременно активны только несколько экспертов, модули смеси экспертов часто называют разреженными (sparse), в отличие от плотных (dense) модулей, которые всегда используют полный набор параметров. Однако большое общее количество параметров через смесь экспертов увеличивает емкость LLM, что означает, что она может усваивать больше знаний во время обучения. Разреженность же обеспечивает эффективность инференса, поскольку мы не используем все параметры одновременно.
Например, DeepSeek-V3 имеет 256 экспертов на модуль смеси экспертов и в общей сложности 671 миллиард параметров. Однако во время инференса активны только 9 экспертов одновременно (1 общий эксперт плюс 8, выбранных маршрутизатором). Это означает, что на каждом шаге инференса используется всего 37 миллиардов параметров, а не все 671 миллиард.
Одной из примечательных особенностей дизайна смеси экспертов в DeepSeek-V3 является использование общего эксперта (shared expert). Это эксперт, который всегда активен для каждого токена. Эта идея не нова и уже была представлена в статьях о DeepSeek MoE 2024 года и DeepSpeedMoE 2022 года.

Преимущество наличия общего эксперта впервые было отмечено в статье DeepSpeedMoE, где обнаружили, что это повышает общую производительность моделирования по сравнению с отсутствием общих экспертов. Вероятно, это связано с тем, что общие или повторяющиеся паттерны не нужно изучать нескольким отдельным экспертам, что оставляет им больше возможностей для изучения более специализированных паттернов.
1.3 Резюме DeepSeek
Подводя итог, DeepSeek-V3 — это массивная модель с 671 миллиардом параметров, которая при запуске превзошла другие модели с открытыми весами, включая Llama 3 с 405 миллиардами параметров. Несмотря на больший размер, она гораздо эффективнее во время инференса благодаря архитектуре смеси экспертов, которая активирует только небольшое подмножество (всего 37 миллиардов) параметров на токен.
Другой ключевой отличительной особенностью является использование в DeepSeek-V3 многоголового латентного внимания вместо Grouped-Query Attention. И многоголовое латентное внимание, и Grouped-Query Attention являются эффективными для инференса альтернативами стандартному многоголовому вниманию, особенно при использовании KV-кеширования. Хотя многоголовое латентное внимание сложнее в реализации, исследование в статье DeepSeek-V2 показало, что оно обеспечивает лучшую производительность моделирования, чем Grouped-Query Attention.
2. OLMo 2
Серия моделей OLMo от некоммерческой организации Allen Institute for AI заслуживает внимания благодаря своей прозрачности в отношении обучающих данных и кода, а также относительно подробным техническим отчетам.
Хотя вы, вероятно, не найдете модели OLMo на вершине какого-либо бенчмарка или рейтинга, они довольно качественные и, что более важно, представляют собой отличный образец для разработки LLM благодаря своей прозрачности.
И хотя модели OLMo популярны из-за своей прозрачности, они также неплохи. Фактически, на момент выпуска в январе (до Llama 4, Gemma 3 и Qwen 3) модели OLMo 2 находились на фронте Парето (Pareto frontier) по соотношению вычислений к производительности, как показано на Рисунке 7 ниже.

Как упоминалось ранее в этой статье, я стремлюсь сосредоточиться только на деталях архитектуры LLM (а не на обучении или данных), чтобы сохранить управляемую длину статьи. Итак, какими были интересные архитектурные решения в OLMo 2? В основном это сводится к нормализациям: размещению слоев RMSNorm, а также добавлению QK-нормализации (QK-norm), которую я обсужу ниже.
Еще одна вещь, достойная упоминания, заключается в том, что OLMo 2 все еще использует традиционное многоголовое внимание вместо многоголового латентного внимания или Grouped-Query Attention.
2.1 Размещение слоев нормализации
В целом, OLMo 2 в значительной степени следует архитектуре оригинальной модели GPT, как и другие современные LLM. Однако есть некоторые заслуживающие внимания отклонения. Начнем со слоев нормализации.
Подобно Llama, Gemma и большинству других LLM, OLMo 2 перешла с LayerNorm на RMSNorm.
Но поскольку RMSNorm — это старая шляпа (это, по сути, упрощенная версия LayerNorm с меньшим количеством обучаемых параметров), я пропущу обсуждение RMSNorm против LayerNorm.
Однако стоит обсудить размещение слоя RMSNorm. Оригинальный трансформер (из статьи «Attention is all you need») размещал два слоя нормализации в блоке трансформера после модуля внимания и модуля прямого распространения соответственно.
Это также известно как пост-нормализация (Post-LN или Post-Norm).
GPT и большинство других LLM, которые появились позже, размещали слои нормализации перед модулями внимания и прямого распространения, что известно как пре-нормализация (Pre-LN или Pre-Norm). Сравнение между пост-нормализацией и пре-нормализацией показано на рисунке ниже.

В 2020 году Xiong и соавторы показали, что пре-нормализация приводит к более управляемым градиентам при инициализации. Кроме того, исследователи отметили, что пре-нормализация даже хорошо работает без тщательного прогрева скорости обучения (learning rate warm-up), который в противном случае является критически важным инструментом для пост-нормализации.
Теперь я упоминаю это потому, что OLMo 2 приняла форму пост-нормализации (но с RMSNorm вместо LayerNorm, поэтому я называю это Post-Norm).
В OLMo 2, вместо размещения слоев нормализации перед слоями внимания и прямого распространения, они размещают их после, как показано на рисунке выше. Однако обратите внимание, что в отличие от оригинальной архитектуры трансформера, слои нормализации все еще находятся внутри остаточных связей (residual layers, или skip connections).
Итак, почему они изменили положение слоев нормализации? Причина в том, что это помогло со стабильностью обучения, как показано на рисунке ниже.

К сожалению, этот рисунок показывает результаты переупорядочивания вместе с QK-нормализацией, которая является отдельной концепцией. Поэтому трудно сказать, насколько само по себе переупорядочивание слоев нормализации внесло вклад.
2.2 QK-нормализация
Поскольку в предыдущем разделе уже упоминалась QK-нормализация, и другие LLM, которые мы обсудим позже, такие как Gemma 2 и Gemma 3, также используют QK-нормализацию, давайте кратко обсудим, что это такое.
QK-нормализация — это, по сути, еще один слой RMSNorm. Он размещается внутри модуля многоголового внимания и применяется к запросам (q) и ключам (k) перед применением RoPE. Чтобы проиллюстрировать это, ниже приведен фрагмент слоя Grouped-Query Attention, который я написал для своей реализации Qwen3 с нуля (применение QK-нормализации в Grouped-Query Attention аналогично многоголовому вниманию в OLMo):
```python
### class GroupedQueryAttention(nn.Module):
def __init__(
self, d_in, num_heads, num_kv_groups,
head_dim=None, qk_norm=False, dtype=None
):
# ...
if qk_norm:
self.q_norm = RMSNorm(head_dim, eps=1e-6)
self.k_norm = RMSNorm(head_dim, eps=1e-6)
else:
self.q_norm = self.k_norm = None
def forward(self, x, mask, cos, sin):
b, num_tokens, _ = x.shape
# Применить проекции
queries = self.W_query(x)
keys = self.W_key(x)
values = self.W_value(x)
# ...
# Опциональная нормализация
if self.q_norm:
queries = self.q_norm(queries)
if self.k_norm:
keys = self.k_norm(keys)
# Применить RoPE
queries = apply_rope(queries, cos, sin)
keys = apply_rope(keys, cos, sin)
# Расширить K и V для соответствия количеству голов
keys = keys.repeat_interleave(self.group_size, dim=1)
values = values.repeat_interleave(self.group_size, dim=1)
# Внимание
attn_scores = queries @ keys.transpose(2, 3)
# ...
```
Как упоминалось ранее, вместе с пост-нормализацией, QK-нормализация стабилизирует обучение. Обратите внимание, что QK-нормализация не была изобретена OLMo 2, а восходит к статье 2023 года Scaling Vision Transformers.
2.3 Резюме OLMo 2
Короче говоря, заслуживающие внимания архитектурные решения OLMo 2 — это в первую очередь размещение RMSNorm: RMSNorm после, а не до модулей внимания и прямого распространения (вариант пост-нормализации), а также добавление RMSNorm для запросов и ключей внутри механизма внимания (QK-нормализация), что вместе помогает стабилизировать потери при обучении (training loss).
Ниже приведен рисунок, который дополнительно сравнивает OLMo 2 с Llama 3 бок о бок; как можно увидеть, архитектуры в остальном относительно похожи, за исключением того факта, что OLMo 2 все еще использует традиционное многоголовое внимание вместо Grouped-Query Attention. (Однако команда OLMo 2 выпустила вариант на 32 миллиарда параметров 3 месяца спустя, который использует Grouped-Query Attention.)

3. Gemma 3
Модели Gemma от Google всегда были действительно хороши, и я думаю, что они всегда были немного недооценены по сравнению с другими популярными моделями, такими как серия Llama.
Одним из отличительных аспектов Gemma является довольно большой размер словаря (для лучшей поддержки нескольких языков) и более сильный фокус на размере 27 миллиардов параметров (в отличие от 8 или 70 миллиардов). Но обратите внимание, что Gemma 2 также выпускается в меньших размерах: 1, 4 и 12 миллиардов параметров.
Размер 27 миллиардов параметров попадает в действительно хорошую золотую середину: модель гораздо более способна, чем модель на 8 миллиардов, но не такая ресурсоемкая, как модель на 70 миллиардов, и она прекрасно работает локально на моем Mac Mini.
Итак, что еще интересного в Gemma 3? Как обсуждалось ранее, другие модели, такие как Deepseek-V3/R1, используют архитектуру смеси экспертов для уменьшения требований к памяти при инференсе при фиксированном размере модели. (Подход смеси экспертов также используется несколькими другими моделями, которые мы обсудим позже.)
Gemma 3 использует другой «трюк» для снижения вычислительных затрат, а именно внимание со скользящим окном (sliding window attention).
3.1 Внимание со скользящим окном
С помощью внимания со скользящим окном (первоначально представленного в статье LongFormer в 2020 году и уже использованного в Gemma 2), команда Gemma 3 смогла значительно сократить требования к памяти в KV-кеше, как показано на рисунке ниже.

Итак, что такое внимание со скользящим окном? Если мы думаем об обычном самовнимании как о глобальном механизме внимания, поскольку каждый элемент последовательности может получить доступ к любому другому элементу последовательности, то мы можем думать о внимании со скользящим окном как о локальном внимании, потому что здесь мы ограничиваем размер контекста вокруг текущей позиции запроса. Это проиллюстрировано на рисунке ниже.

Обратите внимание, что внимание со скользящим окном может использоваться как с многоголовым вниманием, так и с Grouped-Query Attention (Gemma 3 использует его).
Как упоминалось выше, внимание со скользящим окном также называют локальным вниманием, потому что локальное окно окружает текущую позицию запроса и движется вместе с ней. В отличие от этого, обычное внимание является глобальным, поскольку каждый токен может получить доступ ко всем другим токенам.
Теперь, как кратко упоминалось выше, архитектура-предшественник Gemma 2 также использовала внимание со скользящим окном ранее. Разница в Gemma 3 заключается в том, что они скорректировали соотношение между глобальным (обычным) и локальным (скользящим) вниманием.
Например, Gemma 2 использует гибридный механизм внимания, который сочетает внимание со скользящим окном (локальное) и глобальное внимание в соотношении 1:1. Каждый токен может обращаться к окну из 4 тысяч токенов близлежащего контекста.
В то время как Gemma 2 использовала внимание со скользящим окном в каждом втором слое, Gemma 3 теперь имеет соотношение 5:1, что означает, что есть только 1 слой полного внимания на каждые 5 слоев локального внимания со скользящим окном; более того, размер скользящего окна был уменьшен с 4096 (Gemma 2) до всего лишь 1024 (Gemma 3). Это смещает фокус модели в сторону более эффективных локализованных вычислений.
Согласно их исследованию абляции, использование внимания со скользящим окном имеет минимальное влияние на производительность моделирования, как показано на рисунке ниже.

Хотя внимание со скользящим окном является наиболее заметным архитектурным аспектом Gemma 3, я также хочу кратко рассмотреть размещение слоев нормализации в качестве продолжения предыдущего раздела об OLMo 2.
3.2 Размещение слоев нормализации в Gemma 3
Небольшая, но интересная деталь, которую стоит выделить, заключается в том, что Gemma 3 использует RMSNorm как в пре-нормализации, так и в пост-нормализации вокруг модуля Grouped-Query Attention.
Это похоже на Gemma 2, но все же заслуживает внимания, поскольку отличается от (1) пост-нормализации, использованной в оригинальном трансформере («Attention is all you need»), (2) пре-нормализации, которая была популяризирована GPT-2 и использовалась во многих других архитектурах впоследствии, и (3) варианта пост-нормализации в OLMo 2, который мы видели ранее.

Я думаю, что это размещение слоев нормализации является относительно интуитивным подходом, поскольку оно получает лучшее из обоих миров: пре-нормализации и пост-нормализации. На мой взгляд, немного дополнительной нормализации не помешает. В худшем случае, если дополнительная нормализация избыточна, это добавляет немного неэффективности через избыточность. Однако на практике, поскольку RMSNorm относительно дешев в общей картине, это не должно иметь заметного влияния.
3.3 Резюме Gemma 3
Gemma 3 — это хорошо работающая LLM с открытыми весами, которая, на мой взгляд, немного недооценена в кругах открытого исходного кода. Самой интересной частью является использование внимания со скользящим окном для повышения эффективности (будет интересно объединить его со смесью экспертов в будущем).
Также Gemma 3 имеет уникальное размещение слоев нормализации, размещая слои RMSNorm как до, так и после модулей внимания и прямого распространения.
3.4 Бонус: Gemma 3n
Через несколько месяцев после выпуска Gemma 3 Google поделилась Gemma 3n, которая представляет собой модель Gemma 3, оптимизированную для эффективной работы на небольших устройствах с целью запуска на телефонах.
Одним из изменений в Gemma 3n для достижения лучшей эффективности является так называемый слой параметров послойных эмбеддингов (Per-Layer Embedding, PLE). Ключевая идея здесь заключается в том, чтобы хранить в памяти GPU только подмножество параметров модели. Специфичные для токенов-слоев эмбеддинги, такие как для текстовых, аудио и визуальных модальностей, затем передаются потоком из CPU или SSD по требованию.
Рисунок ниже иллюстрирует экономию памяти благодаря послойным эмбеддингам, указывая 5,44 миллиарда параметров для стандартной модели Gemma 3. Вероятно, это относится к варианту Gemma 3 на 4 миллиарда параметров.

Расхождение между 5,44 и 4 миллиардами параметров объясняется тем, что у Google интересный способ подсчета параметров в LLM. Они часто исключают параметры эмбеддингов, чтобы модель выглядела меньше, за исключением таких случаев, как этот, когда удобно включить их, чтобы модель выглядела больше. Это не уникально для Google, поскольку такой подход стал распространенной практикой в этой области.
Другой интересный прием — это концепция MatFormer (сокращение от Matryoshka Transformer). Например, Gemma 3n использует единую общую архитектуру LLM (трансформер), которую можно разделить на более мелкие, независимо используемые модели. Каждая часть обучается функционировать самостоятельно, поэтому во время инференса мы можем запустить только ту часть, которая нужна (вместо большой модели).
4. Mistral Small 3.1
Mistral Small 3.1 24B, которая была выпущена в марте вскоре после Gemma 3, заслуживает внимания тем, что превосходит Gemma 3 27B по нескольким бенчмаркам (за исключением математики), будучи при этом быстрее.
Причины более низкой задержки инференса у Mistral Small 3.1 по сравнению с Gemma 3, вероятно, связаны с их пользовательским токенизатором, а также с уменьшением KV-кеша и количества слоев. В остальном это стандартная архитектура, как показано на рисунке ниже.

Интересно, что более ранние модели Mistral использовали внимание со скользящим окном, но они, похоже, отказались от него в Mistral Small 3.1, если рассматривать настройку по умолчанию ("sliding_window": null) в официальном файле конфигурации Model Hub. Также карточка модели (model card) не упоминает об этом.
Итак, поскольку Mistral использует обычное Grouped-Query Attention вместо Grouped-Query Attention со скользящим окном, как в Gemma 3, возможно, есть дополнительная экономия вычислений при инференсе благодаря возможности использовать более оптимизированный код (например, FlashAttention). Например, я предполагаю, что хотя внимание со скользящим окном уменьшает использование памяти, оно не обязательно снижает задержку инференса, на чем сфокусирована Mistral Small 3.1.
5. Llama 4
Обширное вводное обсуждение смеси экспертов ранее в этой статье снова оказывается полезным. Llama 4 также использует подход смеси экспертов и в остальном следует относительно стандартной архитектуре, которая очень похожа на DeepSeek-V3, как показано на рисунке ниже. (Llama 4 включает встроенную мультимодальную поддержку, аналогично таким моделям, как Gemma и Mistral. Однако, поскольку эта статья фокусируется на языковом моделировании, мы сосредоточимся только на текстовой модели.)

Хотя архитектура Llama 4 Maverick в целом выглядит очень похожей на DeepSeek-V3, есть некоторые интересные различия, заслуживающие внимания.
Во-первых, Llama 4 использует Grouped-Query Attention, как и ее предшественники, в то время как DeepSeek-V3 использует многоголовое латентное внимание, которое мы обсуждали в начале этой статьи. Теперь, как DeepSeek-V3, так и Llama 4 Maverick — это очень крупные архитектуры, при этом DeepSeek-V3 примерно на 68% больше по общему количеству параметров. Однако с 37 миллиардами активных параметров DeepSeek-V3 имеет более чем в два раза больше активных параметров, чем Llama 4 Maverick (17 миллиардов).
Llama 4 Maverick использует более классическую конфигурацию смеси экспертов с меньшим количеством, но более крупными экспертами (2 активных эксперта со скрытым размером 8192 каждый) по сравнению с DeepSeek-V3 (9 активных экспертов со скрытым размером 2048 каждый). Также DeepSeek использует слои смеси экспертов в каждом блоке трансформера (за исключением первых 3), в то время как Llama 4 чередует модули смеси экспертов и плотные модули в каждом втором блоке трансформера.
Учитывая множество небольших различий между архитектурами, трудно определить их точное влияние на итоговую производительность модели. Однако главный вывод заключается в том, что архитектуры смеси экспертов значительно выросли в популярности в 2025 году.
6. Qwen3
Команда Qwen стабильно выпускает высококачественные LLM с открытыми весами. Когда я помогал соруководить конкурсом по эффективности LLM на NeurIPS 2023, я помню, что все лучшие победившие решения были основаны на Qwen2.
Теперь Qwen3 — это еще одна успешная серия моделей на вершине рейтингов для своих размерных классов. Есть 7 плотных моделей: 0,6B, 1,7B, 4B, 8B, 14B и 32B. И есть 2 модели смеси экспертов: 30B-A3B и 235B-A22B.
(Кстати, обратите внимание, что отсутствие пробела в «Qwen3» — это не опечатка; я просто стараюсь сохранить оригинальное написание, которое выбрали разработчики Qwen.)
6.1 Плотные (Dense) модели Qwen3
Давайте сначала обсудим архитектуру плотных моделей. На момент написания этой статьи модель на 0,6 миллиарда параметров вполне может быть самой маленькой моделью с открытыми весами текущего поколения. И, основываясь на моем личном опыте, она работает действительно хорошо, учитывая ее небольшой размер. Она имеет отличную пропускную способность токенов в секунду и небольшой объем памяти, если вы планируете запускать ее локально. Но более того, ее также легко обучать локально (в образовательных целях) благодаря ее небольшому размеру.
Итак, Qwen3 0,6B заменила для меня Llama 3 1B для большинства целей. Сравнение между этими двумя архитектурами показано ниже.

Показатели вычислительной производительности на рисунке выше основаны на моих реализациях PyTorch с нуля при запуске на GPU A100. Как можно видеть, Qwen3 имеет меньший объем памяти, поскольку это в целом меньшая архитектура, а также использует меньшие скрытые слои и меньше голов внимания. Однако она использует больше блоков трансформера, чем Llama 3, что приводит к более медленному времени выполнения (меньшей скорости генерации токенов в секунду).
6.1 MoE модели Qwen3
Как упоминалось ранее, Qwen3 также выпускается в двух вариантах смеси экспертов: 30B-A3B и 235B-A22B. Почему некоторые архитектуры, такие как Qwen3, выпускаются в обычных (плотных) и вариантах смеси экспертов (разреженных)?
Как упоминалось в начале этой статьи, варианты смеси экспертов помогают снизить затраты на инференс для больших базовых моделей. Предложение как плотных, так и вариантов смеси экспертов дает пользователям гибкость в зависимости от их целей и ограничений.
Плотные модели обычно более просты для дообучения, развертывания и оптимизации на различном оборудовании.
С другой стороны, модели смеси экспертов оптимизированы для масштабирования инференса. Например, при фиксированном бюджете на инференс они могут достичь более высокой общей емкости модели (т.е. усвоения знаний во время обучения благодаря большему размеру) без пропорционального увеличения затрат на инференс.
Выпуская оба типа, серия Qwen3 может поддерживать более широкий спектр случаев использования: плотные модели для надежности, простоты и дообучения, а модели смеси экспертов для эффективного обслуживания в масштабе.
Чтобы завершить этот раздел, давайте сравним Qwen3 235B-A22B (обратите внимание, что A22B означает «22 миллиарда активных параметров») с DeepSeek-V3, который имеет почти в два раза больше активных параметров (37 миллиардов).

Как показано на рисунке выше, архитектуры DeepSeek-V3 и Qwen3 235B-A22B удивительно похожи. Однако заслуживает внимания то, что модель Qwen3 отказалась от использования общего эксперта (более ранние модели Qwen, такие как Qwen2.5-MoE, действительно использовали общего эксперта).
К сожалению, команда Qwen3 не раскрыла никаких причин, почему они отказались от общих экспертов. Если бы мне пришлось гадать, возможно, это просто не было необходимо для стабильности обучения в их конфигурации, когда они увеличили количество экспертов с 2 (в Qwen2.5-MoE) до 8 (в Qwen3). И тогда они смогли сэкономить дополнительные вычислительные затраты/память, используя только 8 вместо 8+1 экспертов. (Однако это не объясняет, почему DeepSeek-V3 все еще сохраняет своего общего эксперта.)
Обновление. Цзюньян Линь (Junyang Lin), один из разработчиков Qwen3, ответил следующим образом: На тот момент мы не обнаружили достаточно значительных улучшений от общего эксперта, и нас беспокоила оптимизация для инференса, вызванная общим экспертом. Честно говоря, прямого ответа на этот вопрос нет.
7. SmolLM3
SmolLM3, возможно, не настолько популярна, как другие LLM, рассмотренные в этой статье, но я подумал, что это все еще интересная модель для включения, поскольку она предлагает действительно хорошую производительность моделирования при относительно небольшом и удобном размере модели в 3 миллиарда параметров, который находится между моделями Qwen3 на 1,7 и 4 миллиарда параметров, как показано на рисунке ниже.
Более того, она также поделилась многими деталями обучения, подобно OLMo, что редко встречается и всегда ценится!

Как показано на рисунке сравнения архитектур ниже, архитектура SmolLM3 выглядит довольно стандартной. Однако, пожалуй, самым интересным аспектом является использование NoPE (No Positional Embeddings, без позиционных эмбеддингов).

7.1 Без позиционных эмбеддингов (NoPE)
NoPE — это, в контексте LLM, более старая идея, которая восходит к статье 2023 года (The Impact of Positional Encoding on Length Generalization in Transformers), направленной на удаление явного внедрения позиционной информации (например, через классические слои абсолютных позиционных эмбеддингов в ранних архитектурах GPT или современный RoPE).
В LLM на основе трансформера позиционное кодирование (positional encoding) обычно необходимо, потому что самовнимание обрабатывает токены независимо от порядка. Абсолютные позиционные эмбеддинги решают эту проблему, добавляя дополнительный слой эмбеддингов, который добавляет информацию к эмбеддингам токенов.

RoPE, с другой стороны, решает это путем вращения векторов запросов и ключей относительно их позиции токена.
Однако в слоях NoPE такой позиционный сигнал вообще не добавляется: ни фиксированный, ни обученный, ни относительный. Ничего.
Несмотря на отсутствие позиционных эмбеддингов, модель все еще знает, какие токены идут раньше, благодаря причинной маске внимания (causal attention mask). Эта маска предотвращает обращение каждого токена к будущим токенам. В результате токен в позиции t может видеть только токены в позициях ≤ t, что сохраняет авторегрессивный порядок (autoregressive ordering).
Таким образом, хотя явно добавленной позиционной информации нет, все еще существует неявное ощущение направления, встроенное в структуру модели, и LLM при обычном обучении на основе градиентного спуска может научиться использовать это, если обнаружит, что это полезно для цели оптимизации. (Ознакомьтесь с теоремами в статье о NoPE для получения дополнительной информации.)
Итак, в целом статья о NoPE не только обнаружила, что внедрение позиционной информации не является необходимым, но также обнаружила, что NoPE имеет лучшее обобщение по длине (length generalization), что означает, что производительность ответов LLM ухудшается меньше с увеличением длины последовательности, как показано на рисунке ниже.

Обратите внимание, что эксперименты, показанные выше, были проведены с относительно небольшой моделью в стиле GPT приблизительно на 100 миллионов параметров и с относительно небольшими размерами контекста. Неясно, насколько хорошо эти выводы обобщаются на более крупные современные LLM.
По этой причине команда SmolLM3, вероятно, только «применила» NoPE (или, скорее, опустила RoPE) в каждом 4-м слое.
8. Kimi K2
Kimi K2 недавно произвела большой резонанс в AI-сообществе благодаря тому, что является моделью с открытыми весами с невероятно хорошей производительностью. Согласно бенчмаркам, она находится наравне с лучшими проприетарными моделями, такими как Gemini от Google, Claude от Anthropic и модели ChatGPT от OpenAI.
Заметным аспектом является использование варианта относительно нового оптимизатора Muon вместо AdamW. Насколько мне известно, это первый случай, когда Muon был использован вместо AdamW для какой-либо производственной модели такого размера (ранее было показано, что он масштабируется только до 16 миллиардов параметров). Это привело к очень хорошим кривым потерь при обучении, что, вероятно, помогло катапультировать эту модель на вершину вышеупомянутых бенчмарков.
Хотя люди комментировали, что потери были исключительно гладкими (из-за отсутствия скачков), я думаю, что они не исключительно гладкие (например, см. кривую потерь OLMo 2 на рисунке ниже; также L2-норма градиента, вероятно, была бы лучшей метрикой для отслеживания стабильности обучения). Однако примечательно то, насколько хорошо убывает кривая потерь.
Однако, как упоминалось во введении к этой статье, методологии обучения — это тема для другого раза.

Сама модель имеет размер в 1 триллион параметров, что действительно впечатляет.
На момент написания это может быть самая большая LLM этого поколения (при условии, что Llama 4 Behemoth не выпущена, проприетарные LLM не считаются, и Switch Transformer от Google на 1,6 триллиона параметров — это архитектура кодировщик-декодировщик (encoder-decoder) из другого поколения).
Это также замыкает круг, поскольку Kimi K2 использует архитектуру DeepSeek-V3, которую мы рассмотрели в начале этой статьи, за исключением того, что они сделали ее больше, как показано на рисунке ниже.

Как показано на рисунке выше, Kimi K2 в основном такая же, как DeepSeek V3, за исключением того, что она использует больше экспертов в модулях смеси экспертов и меньше голов в модуле многоголового латентного внимания.
Kimi K2 не появилась из ниоткуда. Более ранняя модель Kimi 1.5, обсуждавшаяся в статье Kimi k1.5: Scaling Reinforcement Learning with LLMs, также была впечатляющей. Однако ей не повезло, что статья о модели DeepSeek R1 была опубликована точно в ту же дату 22 января. Более того, насколько мне известно, веса Kimi 1.5 никогда не были публично опубликованы.
Таким образом, скорее всего, команда Kimi K2 приняла эти уроки близко к сердцу и поделилась Kimi K2 как моделью с открытыми весами до того, как была выпущена DeepSeek R2. На момент написания Kimi K2 является самой впечатляющей моделью с открытыми весами.
9. GPT-OSS
OpenAI выпустила gpt-oss-120b и gpt-oss-20b, свои первые модели с открытыми весами после GPT-2 в 2019 году, примерно через неделю после того, как я написал эту статью. Поскольку модели OpenAI с открытыми весами так широко ожидались, я обновил эту статью, чтобы включить их. Я буду краток в этом разделе, но написал другую, гораздо более подробную статью, посвященную моделям gpt-oss.
Перед тем как обобщить интересные детали, давайте начнем с обзора двух моделей, gpt-oss-20b и gpt-oss-120b, как показано на Рисунке 26 ниже

Глядя на Рисунок 26, архитектура содержит все знакомые компоненты, которые мы видели в других архитектурах, обсуждавшихся ранее. Например, Рисунок 27 помещает меньшую архитектуру gpt-oss рядом с Qwen3 30B-A3B, которая также является моделью смеси экспертов с похожим количеством активных параметров (gpt-oss имеет 3,6 миллиарда активных параметров, а Qwen3 30B-A3B имеет 3,3 миллиарда).

Один аспект, не показанный на Рисунке 27, заключается в том, что gpt-oss использует внимание со скользящим окном (аналогично Gemma 3, но в каждом втором слое вместо использования соотношения 5:1).
9.1 Ширина против глубины
Рисунок 27 показывает, что gpt-oss и Qwen3 используют похожие компоненты. Но если мы внимательно посмотрим на две модели, то увидим, что Qwen3 — это гораздо более глубокая архитектура с 48 блоками трансформера вместо 24.
С другой стороны, gpt-oss — это гораздо более широкая архитектура:
Размерность эмбеддингов 2880 вместо 2048
Промежуточная размерность проекции экспертов (прямого распространения) также 2880 вместо 768
Также стоит отметить, что gpt-oss использует вдвое больше голов внимания, но это не увеличивает напрямую ширину модели. Ширина определяется размерностью эмбеддингов.
Предлагает ли один подход преимущества над другим при фиксированном количестве параметров? Как правило, более глубокие модели более гибкие, но их сложнее обучать из-за проблем с нестабильностью, связанных со взрывающимися и исчезающими градиентами (которые RMSNorm и остаточные связи призваны смягчить).
Более широкие архитектуры имеют преимущество в том, что они быстрее во время инференса (с более высокой пропускной способностью токенов в секунду) благодаря лучшей параллелизации при более высоких затратах памяти.
Что касается производительности моделирования, к сожалению, мне не известно хорошего прямого сравнения (где размер параметров и наборы данных остаются постоянными), за исключением исследования абляции в статье Gemma 2 (Таблица 9), которое обнаружило, что для архитектуры на 9 миллиардов параметров более широкая конфигурация немного лучше, чем более глубокая. По 4 бенчмаркам более широкая модель достигла среднего балла 52,0, а более глубокая модель достигла среднего балла 50,8.
9.2 Несколько крупных экспертов против множества маленьких экспертов
Как показано на Рисунке 27 выше, также заслуживает внимания то, что gpt-oss имеет удивительно небольшое количество экспертов (32 вместо 128) и использует только 4 вместо 8 активных экспертов на токен. Однако каждый эксперт намного больше, чем эксперты в Qwen3.
Это интересно, потому что недавние тенденции и разработки указывают на то, что большее количество меньших моделей является более выгодным. Это изменение при постоянном общем размере параметров хорошо проиллюстрировано на Рисунке 28 ниже из статьи DeepSeekMoE.

Примечательно, что в отличие от моделей DeepSeek, ни gpt-oss, ни Qwen3 не используют общих экспертов.
9.3 Смещение внимания (Attention Bias) и стоки внимания (Attention Sinks)
И gpt-oss, и Qwen3 используют Grouped-Query Attention. Основное различие заключается в том, что gpt-oss ограничивает размер контекста с помощью внимания со скользящим окном в каждом втором слое, как упоминалось ранее.
Однако есть одна интересная деталь, которая привлекла мое внимание. Похоже, что gpt-oss использует блоки смещения (bias units) для весов внимания (attention weights), как показано на Рисунке 29 ниже.

Я не видел, чтобы эти блоки смещения использовались со времен GPT-2, и они обычно считаются избыточными. Действительно, я нашел недавнюю статью, которая математически показывает, что это по крайней мере верно для преобразования ключей (k_proj). Более того, эмпирические результаты показывают, что разница между использованием и неиспользованием блоков смещения невелика (см. Рисунок 30 ниже).

Еще одна деталь, которую вы могли заметить, — это определение sinks на скриншоте кода на Рисунке 30. В обычных моделях стоки внимания — это специальные токены, на которые «всегда обращается внимание», размещенные в начале последовательности для стабилизации внимания, что особенно полезно в сценариях с длинным контекстом. То есть, если контекст становится очень длинным, на этот специальный токен в начале все еще обращается внимание, и он может научиться хранить некоторую общеполезную информацию обо всей последовательности. (Я думаю, это было первоначально предложено в статье Efficient Streaming Language Models with Attention Sinks.)
В реализации gpt-oss стоки внимания — это не настоящие токены во входной последовательности. Вместо этого они являются обученными логитами смещения для каждой головы (per-head bias logits), которые добавляются к оценкам внимания (Рисунок 31). Цель та же, что и с вышеупомянутыми стоками внимания, но без изменения токенизированных входных данных.

10. Grok 2.5
Через несколько недель после того, как эта статья впервые появилась в интернете, xAI опубликовала веса своей модели Grok 2.5 с 270 миллиардами параметров.
Я подумал, что ее стоит включить сюда, поскольку Grok 2.5 была флагманской производственной моделью xAI в прошлом году. До этого момента все модели, которые мы обсуждали, были выпущены как модели с открытыми весами с самого начала. Например, gpt-oss, вероятно, не является клоном GPT-4 с открытыми весами, а скорее пользовательской моделью, обученной специально для сообщества открытого исходного кода.
С Grok 2.5 мы получаем редкий взгляд на реальную производственную систему, даже если она относится к прошлому году.
С архитектурной точки зрения Grok 2.5 в целом выглядит достаточно стандартно (Рисунок 32), но есть несколько деталей, заслуживающих внимания.

Например, Grok 2.5 использует небольшое количество крупных экспертов (восемь), что отражает более старую тенденцию. Как обсуждалось ранее, более поздние разработки, такие как в статье DeepSeekMoE, отдают предпочтение большему количеству более мелких экспертов (это также присутствует в Qwen3).
Еще один интересный выбор — использование того, что фактически является общим экспертом. Дополнительный модуль SwiGLU, показанный слева на Рисунке 32, функционирует как всегда активный общий эксперт. Он не идентичен классическому дизайну с общим экспертом, поскольку его промежуточная размерность удвоена, но идея та же. (Я все еще нахожу интересным, что Qwen3 отказался от общих экспертов, и будет интересно посмотреть, изменится ли это с Qwen4 и более поздними моделями)
11. GLM-4.5
GLM-4.5 — это еще один крупный релиз этого года.
Это гибрид инструкций и рассуждений (instruction/reasoning hybrid), аналогичный Qwen3, но еще лучше оптимизированный для вызова функций (function calling) и контекста в стиле агентов (agent-style contexts).

Как показано на Рисунке 34, GLM-4.5 выпускается в двух вариантах. Флагманская модель с 355 миллиардами параметров превосходит Claude 4 Opus в среднем по 12 бенчмаркам и отстает лишь незначительно от o3 от OpenAI и Grok 4 от xAI. Также есть GLM-4.5-Air, более компактная версия с 106 миллиардами параметров, которая обеспечивает производительность лишь незначительно ниже модели с 355 миллиардами параметров.
Рисунок 34 сравнивает архитектуру с 355 миллиардами параметров с Qwen3.

Дизайны в значительной степени похожи, но GLM-4.5 принимает структурный выбор, впервые представленный DeepSeek V3: 3 плотных слоя предшествуют блокам смеси экспертов. Почему? Начало с нескольких плотных слоев улучшает стабильность сходимости и общую производительность в больших системах смеси экспертов. Если роутинг экспертов вводится немедленно, нестабильность выбора разреженных экспертов может помешать ранней синтаксической и семантической экстракции признаков. Таким образом, можно сказать, что сохранение начальных слоев плотными гарантирует, что модель формирует стабильные низкоуровневые представления до того, как решения маршрутизации начнут формировать обработку высокого уровня.
Также GLM-4.5 использует общего эксперта, аналогично DeepSeek-V3 (и в отличие от Qwen3).
(Интересно, что GLM-4.5 также сохраняет механизм смещения внимания, используемый в GPT-2 и gpt-oss.)
12. Qwen3-Next
11 сентября 2025 года команда Qwen3 выпустила Qwen3 Next 80B-A3B (Рисунок 35), доступную как в вариантах Instruct, так и Thinking. Хотя ее дизайн основан на ранее обсуждавшейся архитектуре Qwen3, я включил ее сюда как отдельную запись, чтобы сохранить последовательную нумерацию рисунков и обратить внимание на некоторые изменения в дизайне.
12.1 Размер и количество экспертов
Новая архитектура Qwen3 Next выделяется тем, что, несмотря на то что она в 3 раза меньше предыдущей модели 235B-A22B (Рисунок 35), она вводит в четыре раза больше экспертов и даже добавляет общего эксперта. Оба этих дизайнерских решения (высокое количество экспертов и включение общего эксперта) были будущими направлениями, которые я выделял до этого релиза, особенно в видеоверсии статьи, ссылку на которую я разместил вверху.

12.2 Гибрид Gated DeltaNet и Gated Attention
Другой важный момент заключается в том, что они заменяют обычный механизм внимания гибридом Gated DeltaNet и Gated Attention, что помогает обеспечить встроенную длину контекста в 262 тысячи токенов с точки зрения использования памяти (предыдущая модель 235B-A22B поддерживала 32 тысячи токенов изначально и 131 тысячу с масштабированием YaRN).
Итак, как работает этот новый гибрид внимания? По сравнению с Grouped-Query Attention, которое все еще является стандартным масштабированным скалярным произведением внимания (совместное использование K/V между группами голов запросов для уменьшения размера KV-кеша и пропускной способности памяти, как обсуждалось ранее, но чьи затраты на декодирование и кеш все еще растут с длиной последовательности), их гибридный механизм смешивает блоки Gated DeltaNet с блоками Gated Attention в соотношении 3:1, как показано на Рисунке 36.

Мы можем думать о блоке gated-внимания (gated attention) как о стандартном масштабированном скалярном произведении внимания, которое может использоваться в Grouped-Query Attention, но с несколькими дополнительными изменениями. Основные различия между gated-вниманием и обычным блоком Grouped-Query Attention:
выходной gate (управляемый сигмоидой, обычно для каждого канала), который масштабирует результат внимания перед его добавлением обратно к остаточной связи;
RMSNorm с нулевым центром для QKNorm, а не стандартный RMSNorm;
частичный RoPE (на подмножестве размерностей).
Обратите внимание, что это по сути просто изменения стабильности в Grouped-Query Attention.
Gated DeltaNet — это более значительное изменение. В блоке DeltaNet q, k, v и два gate (α, β) создаются линейными и легковесными сверточными слоями с нормализацией, и слой заменяет внимание быстрым обновлением весов по правилу дельта.
Однако компромисс заключается в том, что DeltaNet предлагает менее точное извлечение на основе содержимого, чем полное внимание, поэтому один слой gated-внимания остается.
Учитывая, что внимание растет квадратично, компонент DeltaNet был добавлен для помощи с эффективностью памяти. В семействе «линейного времени, без кеша» блок DeltaNet по сути является альтернативой Mamba. Mamba сохраняет состояние с обученным фильтром пространства состояний (по сути динамическая свертка во времени). DeltaNet сохраняет крошечную память с быстрыми весами, обновляемую с помощью α и β, и считывает ее с помощью q, при этом небольшие свертки используются только для помощи в формировании q, k, v, α, β.
12.3 Многотокенное предсказание (Multi-Token Prediction)
Два подраздела выше описывают два дизайнерских решения, направленных на эффективность. Поскольку все хорошее бывает по три, Qwen3 добавил еще один метод сверху: многотокенное предсказание.
Многотокенное предсказание обучает LLM предсказывать несколько будущих токенов вместо одного на каждом шаге. Здесь в каждой позиции t небольшие дополнительные головы (линейные слои) выдают логиты для t+1...t+k, и мы суммируем потери перекрестной энтропии (cross-entropy losses) для этих смещений (в статье о многотокенном предсказании исследователи рекомендовали k=4). Этот дополнительный сигнал ускоряет обучение, а инференс может оставаться по одному токену за раз. Однако дополнительные головы могут использоваться в спекулятивном многотокенном декодировании, что, похоже, и делает Qwen3-Next, однако детали пока немного скудны:
Qwen3-Next представляет встроенный механизм многотокенного предсказания, который не только создает модуль многотокенного предсказания с высоким коэффициентом принятия для спекулятивного декодирования (Speculative Decoding), но также повышает общую производительность. Кроме того, Qwen3-Next специально оптимизирует производительность многошагового инференса многотокенного предсказания, дополнительно улучшая коэффициент принятия спекулятивного декодирования в реальных сценариях посредством многошагового обучения, которое поддерживает согласованность между обучением и инференсом. Пост Qwen3-Next.
Конец
После всех этих лет релизы LLM остаются захватывающими, и мне интересно увидеть, что будет дальше!
Автор достаточно резко завершает свою статью без какого-либо подведения итогов. Принимаем, не осуждаем, понять можно — явно упахался и устал писать ?
Спасибо! Это был перевод (крайне непростой и очень трудозатратный), а вот мои самонаписанные крафтовые статейки (и мой тг-канальчик Agentic World):
March228
Автору большой респект