Ruda — высокопроизводительные вычисления на Rust
English | 简体中文 | 日本語 | Deutsch | Русский
Ruda — библиотека высокопроизводительных вычислений на Rust, создающая полный программный стек: от GPU-ядер, компиляторов и сред выполнения до математических вычислений, тензоров и моделей.
Ruda разрабатывает пути компиляции и выполнения Rust для PTX, HIP и собственных ISA, сохраняя путь компиляции CUDA C++. Контролируемая инкапсуляция unsafe на нижнем уровне в сочетании с системой типов, владением и заимствованием Rust на верхних уровнях обеспечивает баланс между низкоуровневым управлением производительностью и безопасностью памяти на верхних уровнях.
Быстрый старт
Необходимы Git, Rust/Cargo, набор инструментов с компоновщиком, GPU NVIDIA с драйвером и CUDA Toolkit. Подробности установки см. в разделе настройки окружения.
Использование опубликованного крейта
Добавьте бэкенд CUDA в Cargo.toml приложения:
[dependencies]
ruda-driver-cuda = { version = "0.1", features = ["direct-ptx"] }
Следующие примеры запускаются из каталога исходного кода.
Клонирование
git clone https://github.com/shuqi2077/RUDA.git
cd RUDA
Запуск GPU-ядра
Выберите в оболочке компилятор прямой генерации PTX:
# Bash
export RUDA_CUDA_COMPILER=ptx
export RUDA_PTX_VERSION=8.0
# PowerShell
$env:RUDA_CUDA_COMPILER = 'ptx'
$env:RUDA_PTX_VERSION = '8.0'
Затем соберите и запустите пример:
cargo run --release --locked -p ruda-driver-cuda --features direct-ptx --example ptx-runtime
Пример выполняет сложение FP32 на GPU и выводит строки PASS и счётчики кеша компиляции. Выберите версию PTX, поддерживаемую вашим GPU и драйвером.
Генерация текста с ruLLM
Поместите локальную модель Qwen3.5-0.8B в ./models/qwen35 или замените путь ниже каталогом своей модели. Файлы модели не входят в комплект; см. подготовку модели.
cargo run --release --locked -p ruda-llm --features nvidia-ptx --example qwen35_generate -- ./models/qwen35 "The capital of France is" 8 1
Пример выводит сгенерированный текст и идентификаторы токенов. Чтобы вместо этого использовать путь CUDA C++ / NVRTC, перед запуском любого из примеров задайте RUDA_CUDA_COMPILER значение nvrtc.
Использование нативного бэкенда PyTorch
ruda-torch регистрирует устройство PyTorch ruda:0 на одном GPU NVIDIA. Установите PyTorch и setuptools, подготовьте компилятор C++20 и выполните следующие команды из корня репозитория с указанными выше настройками окружения PTX. В Windows используйте оболочку разработчика x64 MSVC.
cargo build --locked -p ruda-torch-native
python -m pip install --no-build-isolation --no-deps -e ./ruda-torch/python
Загрузчик по умолчанию автоматически находит эту debug-сборку. Для release-сборки или другого расположения библиотеки укажите её путь в RUDA_TORCH_LIBRARY. Библиотека Rust и расширение C++ должны использовать ABI 10; пересобирайте их вместе.
import torch
import ruda_torch
x = torch.arange(4, dtype=torch.float32).to("ruda:0")
print((x + x).cpu())
Готовые Windows wheels доступны среди артефактов успешных запусков RUDA Torch Windows build. Скачайте и распакуйте артефакт wheel, затем установите содержащийся в нём файл .whl командой python -m pip install --no-deps. Wheel включает нативную DLL и предназначен для Windows x64, CPython 3.13 и PyTorch 2.13.0+cu130; сначала установите соответствующую сборку PyTorch. Артефакты хранятся семь дней. ruda-torch-native собирается из исходного кода и не является пакетом crates.io.
Организация стека
Один репозиторий, несколько крейтов с чётко разделёнными обязанностями. Стек организован по уровням — от предметных библиотек до высокоуровневых фреймворков — и развивается совместно.
| Уровень | Компоненты |
|---|---|
| Общие контракты | ruda-core |
| Компиляция и ядра | ruda-compiler, ruda-kernel, компоненты макросов |
| Среда выполнения и драйверные бэкенды | ruda, ruda-driver-cuda/cpu/wgpu/hip |
| Предметные библиотеки | ruBLAS, ruDNN, ruPRIM, ruFFT, ruRAND, ruSPARSE |
| Коллективные коммуникации | ruCCL, ruda-communication |
| Тензоры и фреймворки | ruda-tensor*, ruda-autodiff, ruda-fusion |
| Интеграция с PyTorch | ruda-torch-native (Rust), ruda_torch (Python) |
| Модели и данные | ruda-model, ruda-nn, ruda-optim, ruda-store, ruda-dataset |
Нативный GPU-инференс
- Операторы: Нативные матричные операции PyTorch используют ruBLAS. Вычисления с сохранением хранения FP16/BF16, объединённые LayerNorm/RMSNorm по последней оси и параллельные по варпу Softmax/редукции уменьшают число промежуточных тензоров и отдельных запусков ядер.
- Страничные GQA и MLA: Общедоступные ядра ruDNN напрямую читают физические страницы KV для prefill/decode переменной длины.
ruda_torch.PagedAttentionPlanподдерживаетsplits=1..32, объединение частичных результатов в FP32 и повторное использование рабочей памяти; по умолчаниюsplits=1. Запись в общие кеши сохраняет защиту копированием при записи. - MoE: Групповая sigmoid-маршрутизация и сегментированное умножение матриц экспертов используют смещения экспертов на устройстве. Путь FP16/BF16 Tensor Core выбирается явно; существующая точка входа экспертов по умолчанию использует скалярную GPU-стратегию. Веса роутера при фиксированном выборе и проекции экспертов также поддерживают обучение первого порядка; градиенты весов роутера и экспертов — FP32. См. ruDNN и групповой обратный проход.
- Потоки и события:
ruda_torch.Stream,Eventиrecord_streamинтегрированы с нативной средой выполнения. По умолчанию вызовы синхронны; для асинхронной отправки задайтеRUDA_TORCH_ASYNC=1до первого нативного вызова. Явная синхронизация и чтение данных на хост по-прежнему ожидают завершения.
Страничный Attention требует непрерывных тензоров FP32/FP16/BF16 одного типа на одном устройстве и в одной очереди выполнения. Поддерживаются прямой и обратный проход первого порядка, но не произвольные внешние маски или квантованные KV-кеши. PyTorch по умолчанию использует атомарные градиенты истории; backward_strategy="ordered" выбирает путь без атомиков. Кэш строк истории и уплотнение физических страниц включаются явно. MLA/MoE — повторно используемые компоненты; полные адаптеры моделей должны предоставлять проекции, позиционное кодирование, параметры маршрутизации и управление владением кешем.
Пути к оборудованию
- GPU NVIDIA: Путь компиляции по умолчанию — CUDA C++ → NVRTC → PTX. Прямую генерацию IR → PTX также можно выбрать явно. Оба пути выполняются через драйвер NVIDIA.
- Другие бэкенды выполнения: Доступен исходный код бэкендов CPU, WGPU и HIP. Область поддержки описана в разделе совместимости.
Изучение и участие
- Документация Ruda: быстрый старт, руководства по программированию, компиляторы, справочники API и руководства по вычислительным библиотекам.
- Демонстрация NVIDIA: знакомство с примером и его требованиями.
- Руководство для участников: участие в разработке операторов, компиляторов, сред выполнения и фреймворков.
Если вам интересны Rust, GPU-ядра, компиляторы или высокопроизводительные вычисления, присоединяйтесь к развитию и ускорению этого стека.
Происхождение и лицензирование
Уведомления о сторонних компонентах
Оригинальный программный код Ruda, который проект вправе лицензировать, доступен по Apache License 2.0. Сторонние файлы сохраняют исходные лицензии; корневая лицензия не отменяет декларации MIT OR Apache-2.0 в перенесённых компонентах.