From d6fa11ec6ce6f9161e04fb3f5708f9c26895cfbf Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Wed, 18 Mar 2026 08:05:32 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20cudarc=200.19=20API=20fixes=20in=20tests?= =?UTF-8?q?=20=E2=80=94=20CudaDevice=E2=86=92CudaContext,=20no=20Arc=20dou?= =?UTF-8?q?ble-wrap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test code used CudaDevice (cudarc 0.17) instead of CudaContext (0.19), and wrapped Arc::new(CudaContext::new().new_stream()) which double-wraps since new_stream() already returns Arc. 740 tests pass across ml-core, ml-ppo, ml-supervised, ml-ensemble. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../ml-core/src/cuda_autograd/activations.rs | 8 ++--- .../ml-core/src/cuda_autograd/gpu_tensor.rs | 32 +++++++------------ crates/ml-core/src/cuda_autograd/init.rs | 8 ++--- crates/ml-core/src/cuda_autograd/linear.rs | 8 ++--- crates/ml-core/src/cuda_autograd/loss.rs | 8 ++--- crates/ml-core/src/cuda_autograd/optimizer.rs | 8 ++--- crates/ml-core/src/cuda_autograd/var_store.rs | 10 +++--- crates/ml-supervised/src/mamba/loss.rs | 3 +- crates/ml-supervised/src/mamba/mod.rs | 1 + 9 files changed, 34 insertions(+), 52 deletions(-) diff --git a/crates/ml-core/src/cuda_autograd/activations.rs b/crates/ml-core/src/cuda_autograd/activations.rs index aa150f9d2..b280abd13 100644 --- a/crates/ml-core/src/cuda_autograd/activations.rs +++ b/crates/ml-core/src/cuda_autograd/activations.rs @@ -595,12 +595,10 @@ mod tests { use super::*; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) + cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + .new_stream() + .expect("fork stream") } #[test] diff --git a/crates/ml-core/src/cuda_autograd/gpu_tensor.rs b/crates/ml-core/src/cuda_autograd/gpu_tensor.rs index 49336b50c..fc906ba25 100644 --- a/crates/ml-core/src/cuda_autograd/gpu_tensor.rs +++ b/crates/ml-core/src/cuda_autograd/gpu_tensor.rs @@ -892,12 +892,10 @@ mod tests { #[test] fn test_zeros_shape() { - let stream = Arc::new( - cudarc::driver::CudaDevice::new(0) + let stream = cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ); + .new_stream() + .expect("fork stream"); let t = GpuTensor::zeros(&[4, 8], &stream).unwrap(); assert_eq!(t.shape(), &[4, 8]); assert_eq!(t.numel(), 32); @@ -905,12 +903,10 @@ mod tests { #[test] fn test_roundtrip() { - let stream = Arc::new( - cudarc::driver::CudaDevice::new(0) + let stream = cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ); + .new_stream() + .expect("fork stream"); let host_data: Vec = (0..12).map(|i| i as f32).collect(); let t = GpuTensor::from_host(&host_data, vec![3, 4], &stream).unwrap(); let back = t.to_host(&stream).unwrap(); @@ -919,12 +915,10 @@ mod tests { #[test] fn test_shape_mismatch() { - let stream = Arc::new( - cudarc::driver::CudaDevice::new(0) + let stream = cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ); + .new_stream() + .expect("fork stream"); let host_data = vec![1.0_f32; 10]; let result = GpuTensor::from_host(&host_data, vec![3, 4], &stream); assert!(result.is_err()); @@ -932,12 +926,10 @@ mod tests { #[test] fn test_reshape() { - let stream = Arc::new( - cudarc::driver::CudaDevice::new(0) + let stream = cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ); + .new_stream() + .expect("fork stream"); let t = GpuTensor::zeros(&[6, 4], &stream).unwrap(); let t2 = t.reshape(vec![2, 12]).unwrap(); assert_eq!(t2.shape(), &[2, 12]); diff --git a/crates/ml-core/src/cuda_autograd/init.rs b/crates/ml-core/src/cuda_autograd/init.rs index 62fee2844..7791acc1a 100644 --- a/crates/ml-core/src/cuda_autograd/init.rs +++ b/crates/ml-core/src/cuda_autograd/init.rs @@ -141,12 +141,10 @@ mod tests { use super::*; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) + cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + .new_stream() + .expect("fork stream") } #[test] diff --git a/crates/ml-core/src/cuda_autograd/linear.rs b/crates/ml-core/src/cuda_autograd/linear.rs index 39227f15c..46d3a1b9f 100644 --- a/crates/ml-core/src/cuda_autograd/linear.rs +++ b/crates/ml-core/src/cuda_autograd/linear.rs @@ -362,12 +362,10 @@ mod tests { use super::super::var_store::GpuVarStore; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) + cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + .new_stream() + .expect("fork stream") } fn make_cublas(stream: &Arc) -> CudaBlas { diff --git a/crates/ml-core/src/cuda_autograd/loss.rs b/crates/ml-core/src/cuda_autograd/loss.rs index 4969a4d14..023bcd882 100644 --- a/crates/ml-core/src/cuda_autograd/loss.rs +++ b/crates/ml-core/src/cuda_autograd/loss.rs @@ -218,12 +218,10 @@ mod tests { use super::*; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) + cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + .new_stream() + .expect("fork stream") } #[test] diff --git a/crates/ml-core/src/cuda_autograd/optimizer.rs b/crates/ml-core/src/cuda_autograd/optimizer.rs index 74e074f7c..2f1168432 100644 --- a/crates/ml-core/src/cuda_autograd/optimizer.rs +++ b/crates/ml-core/src/cuda_autograd/optimizer.rs @@ -368,12 +368,10 @@ mod tests { use super::super::init; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) + cudarc::driver::CudaContext::new(0) .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + .new_stream() + .expect("fork stream") } #[test] diff --git a/crates/ml-core/src/cuda_autograd/var_store.rs b/crates/ml-core/src/cuda_autograd/var_store.rs index 7e15f9521..703d0ec74 100644 --- a/crates/ml-core/src/cuda_autograd/var_store.rs +++ b/crates/ml-core/src/cuda_autograd/var_store.rs @@ -353,12 +353,10 @@ mod tests { use super::*; fn make_stream() -> Arc { - Arc::new( - cudarc::driver::CudaDevice::new(0) - .expect("CUDA required") - .fork_default_stream() - .expect("fork stream"), - ) + cudarc::driver::CudaContext::new(0) + .expect("CUDA required") + .new_stream() + .expect("fork stream") } #[test] diff --git a/crates/ml-supervised/src/mamba/loss.rs b/crates/ml-supervised/src/mamba/loss.rs index 0ae2cf5eb..bac9e806f 100644 --- a/crates/ml-supervised/src/mamba/loss.rs +++ b/crates/ml-supervised/src/mamba/loss.rs @@ -88,7 +88,8 @@ pub fn directional_mse_loss( #[cfg(test)] mod tests { use super::*; - use cudarc::driver::CudaContext; + use std::sync::Arc; + use cudarc::driver::{CudaContext, CudaStream}; fn test_stream() -> Arc { let ctx = CudaContext::new(0).expect("CUDA context required"); diff --git a/crates/ml-supervised/src/mamba/mod.rs b/crates/ml-supervised/src/mamba/mod.rs index aa8a4e8c0..cf5bfe6ce 100644 --- a/crates/ml-supervised/src/mamba/mod.rs +++ b/crates/ml-supervised/src/mamba/mod.rs @@ -3019,6 +3019,7 @@ impl Clone for Mamba2SSM { mod tests { use super::*; use anyhow::Result; + use cudarc::driver::CudaContext; #[tokio::test] async fn test_mamba_creation() -> Result<()> {