ruCCL Руководство пользователя
English | 简体中文 | 日本語 | Deutsch | Русский
Вычислительные библиотеки · Тензоры и фреймворки · 中文
1. Слои и точки входа
Пакет Cargo — ruCCL, а крейт Rust — ruccl.
ruCCL включает в себя тензорные серверные коллективы, ядро ранга и внутрипроцессные реализации. ruda-communication обеспечивает коммуникационную инфраструктуру. Функция orchestrator включает точки входа оркестрации.
2. Тензорный коллектив API
| Функция | Поведение |
|---|---|
register<B> |
Регистрирует одноранговый узел, устройство и CollectiveConfig. |
all_reduce<B> |
Возвращает участникам уменьшенный результат. |
broadcast<B> |
Отправитель передает Some(тензор); приемники проходят Нет |
reduce<B> |
Снижает до указанного корня; участники без полномочий root получают None |
finish_collective<B> |
Завершает коллективный сеанс однорангового узла. |
reset_collective<B> |
Сбрасывает локальную коллективную службу и отменяет регистрации и состояние выполняемой операции. |
Интерфейсы используют B: ruda_tensor::Backend и B::FloatTensorPrimitive. При интеграции с автоматической дифференциацией зарегистрируйте внутренний Backend; коллективный вызов сам по себе не определяет автоматическое обратное правило.
3. Регистрация и контракты на звонки
Создайте конфигурацию с помощью CollectiveConfig::default(). Используйте with_num_devices для количества локальных участвующих устройств. Настройте стратегии и адреса нескольких узлов с помощью их методов настройки.
Участники должны согласовать количество устройств, использовать уникальные идентификаторы одноранговых узлов и вызывать соответствующие коллективы в одном и том же порядке. Форма, операция приведения, корень и другие параметры должны совпадать. У каждой трансляции должен быть ровно один отправитель.
Для выполнения на нескольких узлах настройте количество узлов, глобальные и локальные адреса, а также порты службы данных.
4. Ошибки и жизненный цикл
CollectiveError охватывает повторяющиеся или отсутствующие регистрации, несоответствия формы, противоречивые операции сокращения или корни, а также неверное количество отправителей широковещательной рассылки.
Для штатного завершения используйте finish_collective. reset_collective забывает текущее состояние; он не завершает операцию, не сохраняет контрольную точку задачи устройства и не обеспечивает восстановление без потерь.
5. Пример CUDA
Функция cuda включает тензорный бэкенд CUDA. Запустите cargo run --locked -p ruCCL --features cuda --example all_reduce для выполнения Ring AllReduce с четырьмя логическими рангами на GPU 0. Он проверяет сумму/среднее по 257 элементам FP32, сохранение входных данных и выход из сеанса.
Адаптеры устройств находятся в папке tensor_device. Интерфейс оптимизатора см. в разделе явное снижение градиента ранга. Передачи включают путь, промежуточный на хосте, а не P2P с нулевой копией.
Источник: коллектив API, конфигурация, ранг и в процессе реализации.
6. Коллективное обучение
Включите collective в ruda-optim. Используя явно принадлежащий коммуникатор ранга, преобразуйте обратные градиенты в GradientsParams, вызывайте grads.all_reduce_with::<InnerBackend>(&communicator, ReduceOperation::Mean)?, затем передайте возвращенные градиенты в optimizer.step. Идентификаторы параметров, формы градиента, dtypes и порядок вызова должны совпадать во всех рангах. Для обучения автодифференциации InnerBackend — это серверная часть без оболочки Autodiff.
Запустите пример двухрангового обучения из дерева исходного кода:
cargo run --locked -p ruda-optim --features collective,cuda --example collective_training -- run ./collective-training-state
cargo run --locked -p ruda-optim --features collective,cuda --example collective_training -- resume ./collective-training-state
run требуется каталог, который еще не существует. Он сохраняет модель и оптимизатор каждого ранга после первого обновления, а затем выполняет второе обновление. resume восстанавливает этот каталог и выполняет второе обновление. При включенном CUDA оба логических ранга в этом примере используют одно и то же устройство по умолчанию.
См. пример коллективного обучения для получения полной последовательности вызовов. Чтобы также сохранить состояние планировщика и ожидающие накопленные градиенты, используйте TrainingRecord из Состояние обучения и сохранения.