Commit Graph
7 Commits
Author SHA1 Message Date
osobhandClaude Sonnet 5 4aaa36a57a style: cargo fmt --workspace (whitespace/wrapping only, no semantic change)
Whole-workspace rustfmt pass picked up while iterating on Mamba GPU
backward work. Verified formatting-only via diff sampling; no logic
changed.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-10 07:09:36 -07:00
Omar SobhandClaude Sonnet 4.6 4ae0c34537 feat(batch11): WSD LR scheduler, KV CPU offloading, GQA KV head expansion
CI / CI Success (push) Failing after 0s
CI / Format Check (push) Failing after 9s
CI / Build CPU-Only (Explicit) (push) Failing after 1m6s
CI / Clippy Check (push) Failing after 19s
Documentation / Build API Documentation (push) Failing after 10s
GPU Tests / Check GPU Availability (push) Successful in 0s
Documentation / Build User Guide (push) Successful in 11s
Performance Benchmarks / Run Benchmarks (push) Failing after 38s
CI / Build (ubuntu-latest) (push) Failing after 54s
GPU Tests / CUDA Tests (11.8) (push) Has been skipped
GPU Tests / CUDA Tests (12.1) (push) Has been skipped
CI / Build (macos-latest) (push) Failing after 59s
CI / Test (macos-latest) (push) Has been skipped
CI / Test (ubuntu-latest) (push) Has been skipped
CI / Python Bindings (maturin) (macos-latest) (push) Has been skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Has been skipped
CI / WASM Build + Size Check (push) Has been skipped
CI / Distributed Training Tests (push) Has been skipped
GPU Tests / Metal Tests (push) Has been skipped
- WSD scheduler (Warmup-Stable-Decay / trapezoidal): linear warmup → constant
  plateau → cosine/linear/sqrt decay; extend_stable() adds steps mid-run without
  restart; phase_at()/decay_progress() introspection; 26 tests + 2 doctests
- KV CPU offloading: KvCpuOffloadManager LRU-based GPU→CPU page spill with
  on-demand prefetch; insert() auto-offloads when at gpu_page_limit; stats()
  with hit rate and utilization; 14 tests
- GQA KV head expansion: GqaConfig validates num_q_heads/num_kv_heads divisibility;
  expand_kv_heads() tiles KV [batch,kv_heads,seq,dim]→[batch,q_heads,seq,dim];
  gqa_attention_cpu() with numerically stable softmax + causal mask; 15 tests

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 05:28:27 +00:00
Omar SobhandClaude Sonnet 4.6 be3e3965b1 feat(batch10): attention sinks (StreamingLLM), chunked prefill, per-layer LR decay
CI / Format Check (push) Failing after 26s
CI / Build (ubuntu-latest) (push) Failing after 33s
CI / Clippy Check (push) Failing after 34s
CI / Build CPU-Only (Explicit) (push) Failing after 31s
GPU Tests / Check GPU Availability (push) Successful in 0s
GPU Tests / CUDA Tests (12.1) (push) Has been skipped
Documentation / Build API Documentation (push) Failing after 30s
Documentation / Build User Guide (push) Failing after 32s
Performance Benchmarks / Run Benchmarks (push) Successful in 1m10s
GPU Tests / CUDA Tests (11.8) (push) Has been skipped
CI / Build (macos-latest) (push) Failing after 55s
CI / Test (macos-latest) (push) Has been skipped
CI / Test (ubuntu-latest) (push) Has been skipped
CI / Python Bindings (maturin) (macos-latest) (push) Has been skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Has been skipped
CI / WASM Build + Size Check (push) Has been skipped
CI / Distributed Training Tests (push) Has been skipped
CI / CI Success (push) Failing after 0s
GPU Tests / Metal Tests (push) Has been skipped
- Attention sinks (arXiv:2309.17453): AttentionSinkEviction always retains first
  sink_size KV positions + last window_size; evicts middle band in O(evict_count);
  select_evict_positions/should_retain consistent; 15 tests
- Chunked prefill (vLLM arXiv:2309.06180): ChunkedPrefillScheduler splits long
  prompts into chunk_size=512 chunks interleaved with decode steps (max 128 decode
  tokens/step); PrefillChunkState tracks progress/remaining/completion; drain_completed();
  14 tests including 1500-token→3-chunk coverage
- Per-layer LR decay (ULMFiT / discriminative fine-tuning): LayerLrDecayConfig with
  base_lr * decay_rate^(num_layers-1-depth); LayerLrDecayBuilder parses layer/layers/
  h/blocks/bracket notation param names; LayerLrScheduler with outer multiplier for
  cosine/linear schedule composition; 14 tests + 1 doctest

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 04:53:53 +00:00
Omar SobhandClaude Sonnet 4.6 0e1d6a74b6 feat(batch6): windowed acceptance metrics, KV INT8 quant, col/row-parallel linear
CI / Format Check (push) Failing after 6s
GPU Tests / Check GPU Availability (push) Successful in 0s
CI / Clippy Check (push) Failing after 8s
Documentation / Build User Guide (push) Successful in 8s
Documentation / Build API Documentation (push) Failing after 19s
CI / Build (ubuntu-latest) (push) Failing after 53s
Performance Benchmarks / Run Benchmarks (push) Successful in 7m57s
GPU Tests / CUDA Tests (11.8) (push) Has been skipped
GPU Tests / CUDA Tests (12.1) (push) Has been skipped
CI / Build CPU-Only (Explicit) (push) Failing after 1m6s
CI / CI Success (push) Failing after 0s
CI / Build (macos-latest) (push) Failing after 28s
CI / Test (macos-latest) (push) Has been skipped
CI / Test (ubuntu-latest) (push) Has been skipped
CI / Python Bindings (maturin) (macos-latest) (push) Has been skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Has been skipped
CI / WASM Build + Size Check (push) Has been skipped
CI / Distributed Training Tests (push) Has been skipped
GPU Tests / Metal Tests (push) Has been skipped
Windowed acceptance rate (rtx-inference/speculative):
- WindowedAcceptanceTracker: O(1) VecDeque sliding window, p50/p95/min/max
- AcceptanceTrend enum (Rising/Falling/Stable, ±0.05 threshold)
- AcceptanceDashboard aggregator; wired into PerformanceMetrics::update()
  and dashboard(); 13 tests

KV cache INT8 quantization (rtx-inference/cache):
- KvCacheQuantMode { None, Int8 { scale_per_token }, Fp8E4M3 } enum
- KvQuantizer::encode/decode: symmetric per-block INT8 (scale=max_abs/127)
  gives 4× compression vs f32; Fp8E4M3 CPU proxy, GPU path reserved
- QuantizedKvBlock carries data+scale+mode; KvCacheConfig::quant_mode
  defaulting to None; 14 tests

ColParallel + RowParallel linear (rtx-distributed):
- ColParallelLinear: shards weight rows across TP ranks, forward_cpu()
  batch matmul + per-shard bias; no AllReduce (output shards concatenated)
- RowParallelLinear: shards weight cols across TP ranks, forward_cpu()
  partial sum + bias on rank 0 only; async forward() calls ProcessGroup
  AllReduce for real NCCL path; CPU sim is no-op
- TensorParallel::matmul() replaced zeros stub with ColParallelLinear(tp=1)
- col→row roundtrip verified within 1e-3; 9 tests

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 03:54:07 +00:00
Omar SobhandClaude Sonnet 4.6 1eb89c5b2b feat(perf): GPU perf batch 1 — FP8, FA3 Blackwell, CUDA Graphs, SnapKV, prefix cache
CI / Build CPU-Only (Explicit) (push) Failing after 8s
CI / Clippy Check (push) Failing after 12s
GPU Tests / Check GPU Availability (push) Successful in 0s
CI / Format Check (push) Failing after 14s
Performance Benchmarks / Run Benchmarks (push) Failing after 15s
Documentation / Build User Guide (push) Successful in 6s
Documentation / Build API Documentation (push) Failing after 16s
GPU Tests / CUDA Tests (11.8) (push) Has been skipped
GPU Tests / CUDA Tests (12.1) (push) Has been skipped
CI / Build (ubuntu-latest) (push) Failing after 1m20s
CI / Build (macos-latest) (push) Failing after 1m26s
CI / Test (macos-latest) (push) Has been skipped
CI / Test (ubuntu-latest) (push) Has been skipped
CI / Python Bindings (maturin) (macos-latest) (push) Has been skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Has been skipped
CI / WASM Build + Size Check (push) Has been skipped
CI / Distributed Training Tests (push) Has been skipped
CI / CI Success (push) Failing after 0s
GPU Tests / Metal Tests (push) Has been skipped
Item 1 — CUDA Graphs wiring (rtx-transformers)
- Added `enable_cuda_graphs: bool` (default false) + `cuda_graph_warmup_iters: usize`
  (default 3) to `TrainingConfig`
- Wired 3-phase state machine into `training_loop.rs` (warmup → capture → replay)
  gated on `#[cfg(feature = "cuda")]`; stream plumbing stubbed with TODO pending
  `CudaStreamHandle` threading

Item 2 — FP8 E4M3/E5M2 training infrastructure (rtx-tensor, rtx-transformers)
- `fp8_cast.cu`: dual-path CUDA kernels — SM_89+ uses `<cuda_fp8.h>` native
  `__nv_cvt_*` intrinsics; older SM uses software bit-manipulation fallback
- `fp8_cast.rs`: host-side CPU casting + `#[cfg(feature = "cuda")]` GPU stubs
- `fp8_gemm.rs`: bit-accurate E4M3 decoder/encoder, BF16 round-trip utils, CPU
  reference matmul with cuBLASLt GPU path documented inline; 12 unit tests
- `training_config.rs`: `fp8_training: bool`, `fp8_e4m3_forward: bool`
- `linear.rs` (modular): `fp8_mode: bool` field + forward dispatch stub
- build.rs: registers `fp8_cast.cu` alongside existing `element_wise.cu`
- 22 FP8 unit tests — all pass

Item 3 — FlashAttention-3 Blackwell (WGMMA + TMA + warp specialization)
- `flash_attention_v3_forward.cu`: SM_90+ warp-specialised producer/consumer
  kernel (producer TMA-loads K/V tiles, consumers run WMMA as portable WGMMA
  proxy); SM_89+ FP8 header path; SM<90 standard FA2-style WMMA fallback
- `flash_v3_forward.rs`: NVRTC wrapper (`compile_ptx` via `include_str!`),
  `FlashV3ForwardKernel::new/is_supported/forward`; 6 unit tests
- `backend_selector.rs`: `SdpaBackend::FlashAttentionV3`, `for_compute_capability`,
  `supports_flash_v3` (major >= 9), FA3 scoring (0.98/0.90/0.70), 2× speedup estimate
- `kernels/simple.rs`: `v3_kernel: Option<FlashV3ForwardKernel>` in `FlashCudaKernels`
- Fixed pre-existing `Device::Cpu` cfg-gate bug in `tensor/creation.rs`
- 8 new FA3 backend tests + 6 kernel unit tests; 50 total pass

Item 4 — SnapKV attention-score eviction + prefix caching (rtx-inference, rtx-serving-api)
- `prefix_index.rs`: `PrefixIndex` with 8MB Zobrist hash table (Knuth MMIX LCG seed),
  `compute_hash/lookup/insert/remove/remove_page`; 10 unit tests
- `eviction.rs`: `AttentionScoreEviction` struct — `accumulate_scores` +
  `select_evict_positions` (retain top keep_ratio + last recent_window); 7 unit tests
- `types.rs`: `EvictionPolicy::AttentionScore { keep_ratio, recent_window }` +
  `KvCacheConfig::enable_prefix_caching`
- `paged_kv_cache.rs`: `prefix_index: Option<PrefixIndex>` + `lookup_prefix /
  register_prefix / unregister_prefix_page / prefix_caching_enabled` methods
- `config.rs` (serving-api): `enable_prefix_sharing: true` (was false),
  `snapkv_keep_ratio: 0.6`, `snapkv_recent_window: 32`
- Fixed 12 pre-existing test errors (spurious `.await` on sync constructors)
- 17 SnapKV/prefix tests pass

Total: 918 lib tests pass across rtx-tensor, rtx-flash-attention, rtx-transformers,
rtx-inference. Zero new failures.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-26 19:56:39 +00:00
osobhandClaude Opus 4.6 02d382d5f6 style: apply rustfmt across all crates and demos
Consistent formatting pass: line wrapping, import sorting, trailing
whitespace removal, let-chain indentation, merged derive attributes,
and unsafe block reformatting.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-04-12 07:01:58 -07:00
redclawsystems 4d88dc0584 Initial commit 2026-03-04 00:08:42 +00:00