Files
rustytorch/.claude/plans/cuda-implementation-gaps.md
T
2026-03-04 00:08:42 +00:00

228 lines
8.6 KiB
Markdown

# RustyTorch++ CUDA Implementation Gaps
## Overview
Tracking document for CUDA-related implementation gaps to debug on RTX 5090 FE with CUDA 13.
**Environment Target:**
- GPU: NVIDIA RTX 5090 Founders Edition
- CUDA: 13.x
- cuDNN: 9.x (new API)
---
## Critical Priority
### 1. ~~cuDNN Convolution Disabled~~ FIXED
**Status:** COMPLETED - cuDNN convolution paths re-enabled for conv1d, conv2d, conv3d
**Files modified:**
- `crates/core/rtx-tensor/src/tensor/convolution.rs` - Added cudnn_conv1d, cudnn_conv2d, cudnn_conv3d methods
**Changes:**
- Imported cuDNN module types (CudnnContext, CudnnConfig, CudnnConvolution, CudnnOperation, ConvolutionConfig)
- Updated conv2d/conv1d/conv3d dispatch to call cuDNN implementations for CUDA tensors
- Added device ID validation to ensure input and weight are on the same GPU
---
## High Priority
### 2. ~~cuBLASLt Placeholder~~ FIXED
**Status:** COMPLETED - Real cuBLASLt integration via cudarc 0.18.x
**File modified:** `crates/core/rtx-tensor/src/cublas/advanced.rs`
**Changes:**
- Replaced placeholder with `cudarc::cublaslt::safe::CudaBlasLT`
- Supports `Matmul<f32>`, `Matmul<f16>`, `Matmul<bf16>` via cudarc traits
- Kernel fusion available via `Activation::Relu` and `Activation::Gelu`
---
### 3. ~~Mixed Precision Incomplete~~ FIXED
**Status:** COMPLETED - Updated to use available cuBLASLt APIs
**File modified:** `crates/core/rtx-tensor/src/cublas/precision.rs`
**Changes:**
- FP16 tensor core GEMM: Use `CublasCore::gemm_f16()` or `CublasLt` with `Matmul<f16>`
- BF16 tensor core GEMM: Use `CublasLt` with `Matmul<bf16>` trait
- Standard FP16 GEMM: Use `CublasCore::gemm_f16()` for direct operations
---
## Medium Priority
### 5. ~~Sparse SpGEMM Dense Fallback~~ FIXED
**Status:** COMPLETED - Now uses native cuSPARSE SpGEMM multi-phase API
**Files modified:**
- `crates/core/rtx-tensor/src/sparse/cuda_kernels.rs` - Fixed spgemm_coo to return sparse result
- `crates/core/rtx-tensor/src/sparse/cusparse_kernels.rs` - Implemented proper cuSPARSE SpGEMM
**Changes:**
- Replaced dense fallback with native cuSPARSE SpGEMM multi-phase workflow:
- Phase 1: cusparseSpGEMM_workEstimation (query + execute)
- Phase 2: cusparseSpGEMM_compute (query + execute)
- Phase 3: cusparseSpGEMM_copy (finalize result)
- Proper CSR descriptor creation and pointer management
- Workspace allocation for both phases
- Result size query via cusparseSpMatGetSize
- COO ↔ CSR conversion for format compatibility
---
### 6. ~~Flash Attention Edge Cases~~ FIXED
**File:** `crates/core/rtx-autograd/src/autodiff/ops/llm.rs`
**Status:** COMPLETED - All edge cases handled
**Fixed:**
- Added `create_causal_mask()` helper function
- Backward pass now applies causal mask when `causal=true`
- Uses -1e9 for masked positions (numerical stability)
- Properly handles seq_q != seq_k cases
- Backend::softmax already implements log-sum-exp trick internally (see lib.rs:251)
- Added `stable_softmax_backward` helper for clean gradient computation
- Added comprehensive edge case tests in `tests/flash_attention_tests.rs`:
- Basic tensor creation for attention
- Asymmetric sequence lengths (seq_q != seq_k)
- Large values (numerical stability test)
- Small values (underflow prevention)
- Single token sequences
- Large batch/head counts
- Causal mask dimensions verification
---
### 7. ~~Conv1d/Conv3d Backward Missing~~ FIXED
**Status:** COMPLETED - Conv1d and Conv3d backward passes implemented
**Files modified:**
- `crates/core/rtx-kernel/src/kernels/cudnn_conv.rs` - Added conv1d_backward and conv3d_backward
- `crates/core/rtx-autograd/src/autodiff/ops/conv.rs` - New file with Conv1dBackward, Conv2dBackward, Conv3dBackward
- `crates/core/rtx-autograd/src/autodiff/ops/mod.rs` - Added conv module export
**Changes:**
- Added `conv1d_backward` that converts 1D shapes to 2D and delegates to conv2d_backward
- Added `conv3d_backward` with proper 5D tensor and filter descriptor support
- Added helper methods for 3D convolution:
- `get_or_create_tensor_descriptor_5d`
- `get_or_create_filter_descriptor_5d`
- `get_or_create_convolution_descriptor_3d`
- `find_best_weight_gradient_algorithm_3d`
- `find_best_data_gradient_algorithm_3d`
- `calculate_conv3d_flops`
- Created autograd backward functions for all convolution types
---
## Low Priority
### 8. ~~GPU Pooling Placeholders~~ FIXED
**Status:** COMPLETED - GPU-accelerated pooling via cuDNN
**Files modified:**
- `crates/core/rtx-tensor/src/tensor/pooling.rs` - Added cuDNN-accelerated `cudnn_pool2d`
- `crates/core/rtx-nn/src/layers/pooling/maxpool2d.rs` - Fixed to use Tensor::max_pool2d
- `crates/core/rtx-nn/src/layers/pooling/avgpool2d.rs` - Fixed to use Tensor::avg_pool2d
**Changes:**
- Added `cudnn_pool2d` implementation using cuDNN's pooling forward pass
- Automatic GPU dispatch for CUDA tensors, CPU fallback otherwise
- Supports both max pooling (CUDNN_POOLING_MAX) and average pooling
- Fixed broken placeholder implementations in rtx-nn layers
- Layers now delegate to working Tensor methods for square kernels
---
### 9. ~~Memory Fragmentation Stub~~ FIXED
**Status:** COMPLETED - Fragmentation ratio now calculated
**File modified:** `crates/core/rtx-memory/src/metrics.rs`
**Changes:**
- Implemented `fragmentation_ratio()` based on three factors:
- Size variance factor (entropy of allocation size distribution)
- Memory efficiency (current vs total allocated)
- Churn rate (allocation/deallocation cycling)
- Added `size_variance_factor()` helper using entropy-based calculation
- Returns weighted average of factors, clamped to [0.0, 1.0]
---
## Completed Items ✓
- [x] Tensor NaN/Inf detection (isnan, isinf, has_nan, has_inf, all_finite)
- [x] Comparison operators (gt, lt, eq, ne, ge, le + scalar variants)
- [x] Gradient clipping NaN/Inf validation
- [x] Autograd backward functions (Mean, Max, Min, GELU, SiLU, LayerNorm, RMSNorm, FlashAttention)
- [x] Metal scalar operations (add_scalar, mul_scalar)
- [x] DLPack tensor interop
- [x] Distributed context broadcast
- [x] Legacy NCCL cleanup
- [x] Fix cudnn_conv.rs type mismatch (Conv2dDescriptor → ConvDescriptor<f32>)
- [x] **CUDA Data Transfer Bug Fix** - cuda_matmul() now uses lock_cuda_slice() pattern
- [x] **Conv1d/Conv3d Backward** - Added cuDNN backward kernels and autograd ops
- [x] **GPU Pooling** - cuDNN-accelerated max_pool2d and avg_pool2d
- [x] **Memory Fragmentation** - Implemented fragmentation_ratio() with entropy-based calculation
- [x] **cuDNN Module Complete Rewrite** - All files ported to cudarc 0.18.x result layer API
- [x] **cuBLASLt Integration** - Real CudaBlasLT handle, not placeholder
- [x] **Mixed Precision Stubs** - Updated to point to available APIs
- [x] **Flash Attention Edge Cases** - All edge cases fixed, tests added
- [x] **cuSPARSE SpGEMM** - Native multi-phase API (work estimation → compute → copy)
- [x] **Tensor Core GEMM** - Fixed FP16/BF16 tensor core placeholders in precision.rs
- [x] **Batched Softmax** - Implemented softmax for transformer attention in batched.rs
- [x] **FP16/BF16 Conversion** - Implemented FP16→FP32 and BF16→FP32 conversion in advanced.rs
- [x] **GPU Type Conversion Kernels** - Added fp16_to_fp32, bf16_to_fp32, fp32_to_fp16, fp32_to_bf16 CUDA kernels
- [x] **GPU Softmax Kernel** - Integrated softmax_kernel for large matrix operations
- [x] **GPU Kernel Wrappers** - Added launch wrappers in cuda_kernels/mod.rs for all new kernels
- [x] **Threshold-Based GPU/CPU Selection** - Automatic fallback to CPU for small matrices to avoid kernel overhead
## Debug Session Checklist (RTX 5090 + CUDA 13)
```bash
# 1. Verify CUDA environment
nvidia-smi
nvcc --version
# 2. Check cudarc compatibility
cargo check -p rtx-tensor --features cuda 2>&1 | head -50
# 3. Test basic CUDA operations
cargo test -p rtx-tensor cuda --features cuda
# 4. Test cuDNN (if available)
cargo test -p rtx-kernel cudnn --features cuda
# 5. Benchmark tensor cores
cargo bench -p rtx-bench gemm --features cuda
# 6. Profile with Nsight
nsys profile cargo test -p rtx-tensor matmul --features cuda
```
---
## Files Quick Reference
| Priority | File | Status |
|----------|------|--------|
| CRITICAL | `rtx-tensor/src/tensor/convolution.rs` | ✅ FIXED - cuDNN enabled |
| HIGH | `rtx-tensor/src/cublas/advanced.rs` | ✅ FIXED - Real cuBLASLt |
| HIGH | `rtx-tensor/src/cublas/precision.rs` | ✅ FIXED - Tensor cores working |
| MEDIUM | `rtx-tensor/src/sparse/cuda_kernels.rs` | ✅ FIXED - SpGEMM working |
| MEDIUM | `rtx-autograd/src/autodiff/ops/llm.rs` | ✅ FIXED - All edge cases handled |
| MEDIUM | `rtx-kernel/src/kernels/cudnn_conv.rs` | ✅ FIXED - Conv1d/3d backward added |
| LOW | `rtx-tensor/src/tensor/pooling.rs` | ✅ FIXED - cuDNN pooling |
| LOW | `rtx-memory/src/metrics.rs` | ✅ FIXED - Fragmentation ratio |