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

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 из Состояние обучения и сохранения.