scirs2-autograd
Automatic differentiation engine for Rust, part of the SciRS2 scientific computing ecosystem.
Overview
scirs2-autograd provides PyTorch-style automatic differentiation with lazy tensor evaluation, enabling efficient gradient computation for scientific computing and machine learning. It supports reverse-mode AD (backpropagation), forward-mode AD (JVP), higher-order derivatives, gradient checkpointing, and a rich set of differentiable mathematical operations.
Features
Core Differentiation
- Reverse-mode AD (VJP / backpropagation) via tape-based gradient accumulation
- Forward-mode AD (JVP / Jacobian-vector products)
- Higher-order derivatives: Hessian, Hessian-vector products
- Second-order optimization support
- Dynamic computation graphs (eager-friendly construction)
- Lazy evaluation: build the graph, evaluate only when needed
Gradient Utilities
- Finite difference numerical differentiation (forward, central, backward)
- Richardson extrapolation for improved accuracy
- Gradient checking / verification utilities
- Numerical differentiation as a fallback
Memory and Performance
- Gradient checkpointing (recompute-based; reduces memory by 50-80%)
- Adaptive checkpointing based on tensor size threshold
- Checkpoint groups for multi-output operations
- Memory pooling and in-place operation support
- SIMD-accelerated element-wise operations
- Parallel processing with work-stealing thread pool
Functional Transforms
grad- gradient of a scalar output w.r.t. inputsjacobian- full Jacobian matrix computationhessian- second-order partial derivativesvmap-like vectorized map over batch dimensions- Functional API for composable transforms
Implicit Differentiation
- Implicit function theorem-based differentiation
- Fixed-point iteration gradients
- Bi-level optimization support
Mixed Precision
- FP16 / FP32 mixed precision gradient computation
- Loss scaling for numeric stability
Lazy Evaluation and JIT
- Computation graph construction without immediate execution
- Graph-level optimizations: constant folding, CSE, loop fusion
- JIT-like fusion of element-wise operations
Optimizers (with State Management)
- SGD (with momentum and Nesterov)
- Adam, AdamW
- AdaGrad, RMSprop
- Learning rate schedulers: step, exponential, cosine annealing
- Gradient clipping (norm-based and value-based)
- Namespace-based variable management for multi-model setups
Differentiable Mathematical Operations
- Arithmetic: add, sub, mul, div, pow with broadcasting
- Linear algebra: matmul, batch matmul, matrix inverse, determinant
- Decompositions with gradients: QR, SVD, Cholesky, LU
- Matrix functions: exp, log, sqrt, power, matrix exponential
- Matrix norms: Frobenius, spectral, nuclear
- Reductions: sum, mean, max, min, variance
- Activation functions: ReLU, Sigmoid, Tanh, Softmax, GELU, Swish, Mish
- Loss functions: MSE, cross-entropy, sparse categorical cross-entropy
- Convolution: Conv2D, transposed convolution, max/avg pooling
- Tensor manipulation: reshape, slice, concat, pad, advanced indexing
Debugging and Visualization
- Computation graph visualization (DOT / Graphviz output)
- Gradient tape inspection
- NaN/Inf detection hooks
- Step-by-step execution tracing
Distributed Gradient Computation
- Gradient aggregation across workers
- All-reduce primitives for distributed training
Quick Start
Add to your Cargo.toml:
[]
= "0.4.3"
For OxiBLAS-accelerated matrix operations (recommended):
[]
= { = "0.4.3", = ["blas"] }
Basic Differentiation
use scirs2_autograd as ag;
use tensor_ops as T;
run;
Neural Network Training
use scirs2_autograd as ag;
use *;
use Adam;
Gradient Checkpointing
use scirs2_autograd as ag;
use tensor_ops as T;
run;
JVP and VJP
use ;
// Jacobian-vector product (forward mode)
// jvp(f, inputs, tangents) -> (output, output_tangent)
// Vector-Jacobian product (reverse mode)
// vjp(f, inputs, cotangents) -> (output, input_cotangents)
Feature Flags
| Flag | Description |
|---|---|
blas |
OxiBLAS-accelerated matrix operations (pure Rust BLAS) |
simd |
SIMD-accelerated element-wise operations |
Related Crates
scirs2-neural- Neural network building blocksscirs2-optimize- Optimization algorithms- SciRS2 project
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.