Документация / РусскийИсходный текст ↗

Muon и явные группы Muon + AdamW

English | 简体中文 | 日本語 | Deutsch | Русский

Существующая реализация MuonConfig , Muon , MuonState расширена, а не дублирована. Подробную информацию см. в 中文完整契约 .

Использование

```rust,ignore use ruda_optim::{AdamWConfig, MuonAdamWConfig, MuonConfig, MuonMatrixLayout, MuonMomentumMode}; let mut optimizer = MuonAdamWConfig::new() .with_muon(MuonConfig::new() .with_momentum_mode(MuonMomentumMode::Ema) .with_stable_normalization(true) .with_matrix_layout(MuonMatrixLayout::InputOutput)) .with_adamw(AdamWConfig::new().with_epsilon(1e-8).with_weight_decay(0.01)) .init(&model, &[model.hidden.weight.id])?; model = optimizer.try_step_with_lrs(0.02, 0.0003, model, gradients)?;

Явно выберите скрытые непустые **полные 2D-матрицы**. Вложения, заголовки классификаторов, смещения
и параметры нормализации обычно должны использовать AdamW, даже если они двумерные.
Все невыбранные параметры используют существующую реализацию высокого уровня AdamW, а не
дополнительный интерфейс Fused-AdamW. Примеры скорости обучения не являются рекомендациями по настройке.

`Optimizer::step(lr, ...)` использует `lr` для Muon и `lr * adamw_lr_ratio` для AdamW (отношение по умолчанию
0.015). `try_step_with_lrs` допускает независимые расписания. При отсутствии градиентов пропускаются и затухание весов,
и момент импульса. `try_step_or_skip(..., true)` пропускает обе группы без обновления состояния. Сначала проверяются
метаданные обеих групп, но ошибки устройства остаются асинхронными: это не транзакция устройства.
Связанные параметры маршрутизируются один раз по ParamId; нельзя представлять перекрывающиеся веса несвязанными ID.

## Числовой выбор и миграция

Существующие настройки конструктора по умолчанию сохраняют импульс SGD, нормализацию тензора dtype и масштабирование
AsStored. Режим EMA является добровольным: `m = beta*m + (1-beta)*g` , инициализируется нулем; Нестеров использует `(1-beta)*g + beta*m` . Не
меняйте местами буферы контрольных точек EMA и устаревшие SGD без преднамеренного преобразования. Конечный
полином Ньютона-Шульца пятой степени не является точным полярным разложением; точное утверждение единичной матрицы недействительно.

Стабильная нормализация сначала масштабирует по максимальному модулю, затем формирует сумму квадратов. Она включается
явно, поскольку меняет округление, и требует входов и состояния FP32. Она не защищает
от переполнения на всех остальных этапах и не проверяет неконечные значения. Неявное приведение
к BF16 не выполняется. Нативный Muon в PyTorch использует BF16 для NS; вариант
FP32 не эквивалентен побитно. Автоматические мастер-веса FP32 и обновление низкоточной копии модели не предоставляются.

RUDA Linear хранит `[input, output]` , поэтому при необходимости используйте InputOutput для масштабирования
LR в режиме Original. AsStored трактует строки как выходы. MatchRmsAdamW симметричен относительно
транспонирования. Затухание весов использует исходную, а не скорректированную по форме скорость обучения.
Одна конфигурация охватывает выбранную группу Muon; смешанные логические раскладки требуют отдельно настроенных оптимизаторов.

Макрос Config проекта не предоставляет значения по умолчанию для новых полей.
В старые конфигурации JSON необходимо добавить `"momentum_mode":"Sgd"` , `"stable_normalization":false` , `"matrix_layout":"AsStored"`
, чтобы сохранить старые варианты. Программные настройки по умолчанию остаются доступными.
Простая схема тензорной записи Muon не изменилась. Смешанные записи включают версию,
конфигурацию, идентификатор параметра/форму/манифест dtype и оба состояния оптимизатора. Сначала восстановите модель
с исходными идентификаторами. FullPrecisionSettings необходим для точного сравнения продолжений. Измененная группировка/конфигурация отклонена.

Выполняйте масштабирование и внешнюю проверку градиентов перед обновлением, а также синхронизируйте решения о пропуске
между репликами. Этот патч не интегрирует автоматически предыдущую защиту низкоуровневого градиента API. Неявные тензоры
с распределенными метками `step_multi` , Ruda, осколки FSDP/TP, разреженные градиенты и изменение формы четырехмерной
свертки не реализованы. Никогда не ортогонализуйте произвольные фрагменты, как если бы они были полной матрицей.

## Проверка

```bash
cargo run --release --locked -p ruda-optim --example muon-training -- 20
python tools/run_muon_regressions.py --suite oracle
python tools/run_muon_regressions.py --suite reference
python tools/run_muon_regressions.py --suite host
python tools/run_muon_regressions.py --suite build
python tools/run_muon_regressions.py --suite cuda --compiler both

В примере используется тензорный сервер Host, если он не создан с помощью test-cuda. Это не показатель производительности. Эталонный пакет компилирует независимый скалярный оракул только с помощью Rustc; он не проверяет выполнение RUDA. Пакеты хоста и CUDA компилируют и запускают настоящие тензорные/групповые тесты RUDA. Сборка включает проверку отсутствия функций по умолчанию. Недостающие инструменты блокируются; никакие попытки установки/возврата не предпринимаются. Каждая команда имеет явный таймаут и отдельный журнал.

Ссылки: Авторы Muon , официальный интерфейс PyTorch , исправленный исходный код v2.9 .