oxide-rt

0

Описание

OxideRT — это экспериментальный runtime для инференса AI-моделей, созданный для демонстрации подхода "System Software in AI Era".

Языки

  • Rust64,5%
  • Python11,9%
  • Cuda9,2%
  • Just5,6%
  • JavaScript4%
  • C2%
  • Остальные2,8%
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md

OxideRT: Высокопроизводительный AI-рантайм на Rust

License: MIT Rust

OxideRT — это экспериментальный runtime для инференса AI-моделей, созданный для демонстрации подхода "System Software in AI Era".

Проект является практической частью доклада:

🎤 "Будущее системного ПО в эпоху AI: компиляторы, рантаймы и наш путь к OxideRT на Rust"

Этот репозиторий доказывает, что переход с Python на Rust в критических узлах ML-инфраструктуры позволяет кардинально снизить TCO (Total Cost of Ownership) и повысить утилизацию GPU.

⚡ Проблема и Решение

В докладе мы рассматриваем три уровня ценности, которые реализует этот код:

  1. Экономическая (TCO):
    • Проблема: "Пустой" процесс PyTorch потребляет сотни МБ RAM и имеет долгий холодный старт.
    • Решение: OxideRT запускается за <50мс и потребляет ~15 МБ RAM, позволяя плотнее размещать модели.
  2. Техническая (GPU Utilization):
    • Проблема: Фрагментация VRAM и
      CUDA Out Of Memory
      при динамических запросах.
    • Решение: Ручное управление памятью через RAII и кастомные аллокаторы (PagedAttention).
  3. Архитектурная (Safety):
    • Проблема: Ошибки в C++/CUDA коде часто приводят к Segfault в проде.
    • Решение: Изоляция
      unsafe
      кода и строгая типизация Rust.

🏗 Архитектура

Проект построен по принципу "Безопасный фасад над небезопасным ядром":

OxideRT Architecture

  • 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 # Если вдруг понадобится собирать отдельно

🚀 Быстрый старт

Мы используем

just
(современный аналог
make
) для унификации команд.

Предварительные требования

  • 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Быстрый пулл образов
SafetyRuntime ErrorsCompile ErrorsОтлов багов на этапе сборки

🛠 Разработка

Работа с CUDA

Если у вас нет GPU,

oxidert_sys
автоматически соберется в режиме Mock, используя CPU-заглушки для CUDA-вызовов. Это позволяет запускать тесты и логику сервера на любом ноутбуке (CI CPU).

Тестирование

📜 Лицензия

MIT License. Код предоставлен в образовательных целях.

Автор: Андрей Носов

Репозиторий: gitverse.ru/Andrei_No/oxide-rt