oxide-rt
Описание
OxideRT — это экспериментальный runtime для инференса AI-моделей, созданный для демонстрации подхода "System Software in AI Era".
Языки
- Rust64,5%
- Python11,9%
- Cuda9,2%
- Just5,6%
- JavaScript4%
- C2%
- Остальные2,8%
OxideRT: Высокопроизводительный AI-рантайм на Rust
OxideRT — это экспериментальный runtime для инференса AI-моделей, созданный для демонстрации подхода "System Software in AI Era".
Проект является практической частью доклада:
🎤 "Будущее системного ПО в эпоху AI: компиляторы, рантаймы и наш путь к OxideRT на Rust"
Этот репозиторий доказывает, что переход с Python на Rust в критических узлах ML-инфраструктуры позволяет кардинально снизить TCO (Total Cost of Ownership) и повысить утилизацию GPU.
⚡ Проблема и Решение
В докладе мы рассматриваем три уровня ценности, которые реализует этот код:
- Экономическая (TCO):
- Проблема: "Пустой" процесс PyTorch потребляет сотни МБ RAM и имеет долгий холодный старт.
- Решение: OxideRT запускается за <50мс и потребляет ~15 МБ RAM, позволяя плотнее размещать модели.
- Техническая (GPU Utilization):
- Проблема: Фрагментация VRAM и
при динамических запросах.CUDA Out Of Memory - Решение: Ручное управление памятью через RAII и кастомные аллокаторы (PagedAttention).
- Проблема: Фрагментация VRAM и
- Архитектурная (Safety):
- Проблема: Ошибки в C++/CUDA коде часто приводят к Segfault в проде.
- Решение: Изоляция
кода и строгая типизация Rust.unsafe
🏗 Архитектура
Проект построен по принципу "Безопасный фасад над небезопасным ядром":
- Async World (Tokio): Обработка HTTP, JSON, конфигурации. Полностью безопасно.
- Sync World (OS Threads): Тяжелые вычисления, блокирующие операции, FFI вызовы к CUDA.
- Hardware Layer (C++/CUDA): Кастомные ядра (Fused Ops, Attention) для максимальной производительности.
📂 Структура репозитория
Проект организован как Cargo Workspace. Каждая директория отвечает за свой слой ответственности (PBC — Packaged Business Capability):
oxide-rt/
├── .github/ # CI/CD Workflows
│ └── workflows/
│ ├── ci-cpu.yml # Быстрые тесты на каждый коммит
│ └── ci-gpu.yml # Тесты на self-hosted раннерах с GPU
├── .gitignore # Настроенный под Rust, Python, C++
├── .dockerignore
├── Cargo.toml # Workspace-манифест (ROOT)
├── Justfile # Task Runner (Связующее звено языков)
├── README.md # Документация на русском
├── rust-toolchain.toml # Фиксация версии Rust
│
├── assets/ # Картинки для README (Слайды)
│
├── benchmarks/ # [PBC: Performance Validation] (Python/Shell)
│ ├── README.md
│ ├── requirements.txt
│ ├── scripts/
│ │ ├── flamegraph.sh
│ │ └── load_test_k6.js
│ └── src/
│ ├── baseline_pytorch.py
│ └── memory_fragmentation.py
│
├── crates/ # [PBC: Core Business Logic] (Rust)
│ │
│ ├── oxidert_core/ # --> Capability: Runtime Engine
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── backend/ # CPU/GPU traits
│ │ ├── memory/ # Allocators, VRAM
│ │ ├── tensor/ # Tensor views
│ │ └── lib.rs
│ │
│ ├── oxidert_loader/ # --> Capability: Model Management
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── graph/ # Optimization passes
│ │ ├── onnx/ # ONNX parser
│ │ └── lib.rs
│ │
│ ├── oxidert_server/ # --> Capability: Inference Service
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── config.rs # Typed config
│ │ ├── scheduler.rs # Batching logic
│ │ ├── worker.rs # Tokio tasks
│ │ └── main.rs
│ │
│ ├── oxidert_sys/ # --> Capability: Hardware Interop (Unsafe Layer)
│ │ ├── Cargo.toml
│ │ ├── build.rs # Компиляция CUDA ядер
│ │ ├── wrapper.h # C headers
│ │ └── src/
│ │ └── lib.rs # Generated bindings
│ │
│ └── oxidert_telemetry/ # --> Capability: Observability
│ ├── Cargo.toml
│ └── src/
│ └── lib.rs # Tracing setup
│
├── examples/ # Примеры использования (Rust)
│ ├── simple_inference.rs
│ └── custom_kernel.rs
│
├── infra/ # [PBC: Deployment & Ops]
│ ├── docker/
│ │ └── Dockerfile.multistage
│ └── k8s/
│ └── deployment.yaml
│
└── kernels/ # [PBC: Hardware Acceleration] (C++/CUDA)
├── include/
│ └── common.cuh # Error handling macros
├── src/
│ ├── attention/
│ │ └── paged_attn.cu # Custom kernels
│ └── ops/
│ └── fused_gelu.cu # Operator Fusion
└── CMakeLists.txt # Если вдруг понадобится собирать отдельно
🚀 Быстрый старт
Мы используем (современный аналог ) для унификации команд.
Предварительные требования
- Rust: 1.75+ (
)rustup update - CUDA Toolkit: 12.x (для GPU режима, опционально)
- Python: 3.10+ (для запуска бенчмарков)
Основные команды
Docker (Production Ready)
Сборка минималистичного образа:
📊 Результаты замеров
Данные получены на AWS g4dn.xlarge (T4 GPU)
| Метрика | PyTorch (Python) | OxideRT (Rust) | Комментарий |
|---|---|---|---|
| Cold Start | ~2.4 sec | <0.05 sec | Мгновенный старт подов в K8s |
| Idle RAM | ~350 MB | ~15 MB | Экономия ресурсов на оркестрацию |
| Docker Image | ~4 GB | <100 MB | Быстрый пулл образов |
| Safety | Runtime Errors | Compile Errors | Отлов багов на этапе сборки |
🛠 Разработка
Работа с CUDA
Если у вас нет GPU, автоматически соберется в режиме Mock, используя CPU-заглушки для CUDA-вызовов. Это позволяет запускать тесты и логику сервера на любом ноутбуке (CI CPU).
Тестирование
📜 Лицензия
MIT License. Код предоставлен в образовательных целях.
Автор: Андрей Носов
Репозиторий: gitverse.ru/Andrei_No/oxide-rt