Expand description
§OptiRS Core - Advanced ML Optimization Built on SciRS2
Version: 0.1.0 Status: Stable Release - Production Ready
optirs-core provides state-of-the-art optimization algorithms for machine learning,
built exclusively on the SciRS2 scientific computing ecosystem.
§Dependencies
scirs2-core0.1.1 - Required foundation
§Quick Start
use optirs_core::optimizers::{Adam, Optimizer};
use scirs2_core::ndarray::Array1;
// Create optimizer
let mut optimizer = Adam::new(0.001);
// Prepare parameters and gradients
let params = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0]);
let grads = Array1::from_vec(vec![0.1, 0.2, 0.15, 0.08]);
// Perform optimization step
let updated_params = optimizer.step(¶ms, &grads)?;§Features
§19 State-of-the-Art Optimizers
First-Order Methods:
- SGD - Stochastic Gradient Descent with optional momentum
- SimdSGD - SIMD-accelerated SGD (2-4x faster)
- Adam - Adaptive Moment Estimation
- AdamW - Adam with decoupled weight decay
- AdaDelta - Adaptive LR without manual tuning ⭐ NEW!
- AdaBound - Smooth Adam→SGD transition ⭐ NEW!
- Ranger - RAdam + Lookahead combination ⭐ NEW!
- RMSprop - Root Mean Square Propagation
- Adagrad - Adaptive Gradient Algorithm
- LAMB - Layer-wise Adaptive Moments for Batch training
- LARS - Layer-wise Adaptive Rate Scaling
- Lion - Evolved Sign Momentum
- Lookahead - Look ahead optimizer wrapper
- RAdam - Rectified Adam
- SAM - Sharpness-Aware Minimization
- SparseAdam - Adam optimized for sparse gradients
- GroupedAdam - Adam with parameter groups
Second-Order Methods:
- L-BFGS - Limited-memory BFGS
- K-FAC - Kronecker-Factored Approximate Curvature
- Newton-CG - Newton Conjugate Gradient ⭐ NEW!
§Performance Optimizations (Phase 2 Complete)
§SIMD Acceleration (2-4x speedup)
use optirs_core::optimizers::{Optimizer, SimdSGD};
use scirs2_core::ndarray::Array1;
let params = Array1::from_elem(100_000, 1.0f32);
let grads = Array1::from_elem(100_000, 0.001f32);
let mut optimizer = SimdSGD::new(0.01f32);
let updated = optimizer.step(¶ms, &grads)?;§Parallel Processing (4-8x speedup)
use optirs_core::optimizers::{Adam, Optimizer};
use optirs_core::parallel_optimizer::parallel_step_array1;
use scirs2_core::ndarray::Array1;
let params_list = vec![
Array1::from_elem(10_000, 1.0),
Array1::from_elem(20_000, 1.0),
];
let grads_list = vec![
Array1::from_elem(10_000, 0.01),
Array1::from_elem(20_000, 0.01),
];
let mut optimizer = Adam::new(0.001);
let results = parallel_step_array1(&mut optimizer, ¶ms_list, &grads_list)?;§Memory-Efficient Operations
use optirs_core::memory_efficient_optimizer::GradientAccumulator;
use scirs2_core::ndarray::Array1;
let mut accumulator = GradientAccumulator::<f32>::new(1000);
// Accumulate gradients from micro-batches
for _ in 0..4 {
let micro_grads = Array1::from_elem(1000, 0.1);
accumulator.accumulate(µ_grads.view())?;
}
let avg_grads = accumulator.average()?;§Production Metrics & Monitoring
use optirs_core::optimizer_metrics::{MetricsCollector, MetricsReporter};
use optirs_core::optimizers::{Adam, Optimizer};
use scirs2_core::ndarray::Array1;
use std::time::{Duration, Instant};
let mut collector = MetricsCollector::new();
collector.register_optimizer("adam");
let mut optimizer = Adam::new(0.001);
let params = Array1::from_elem(1000, 1.0);
let grads = Array1::from_elem(1000, 0.01);
let params_before = params.clone();
let start = Instant::now();
let params = optimizer.step(¶ms, &grads)?;
let duration = start.elapsed();
collector.update(
"adam",
duration,
0.001,
&grads.view(),
¶ms_before.view(),
¶ms.view(),
)?;
println!("{}", collector.summary_report());§Learning Rate Schedulers
- ExponentialDecay - Exponential learning rate decay
- StepDecay - Step-wise reduction
- CosineAnnealing - Cosine annealing schedule
- LinearWarmupDecay - Linear warmup with decay
- OneCycle - One cycle learning rate policy
§Advanced Features
- Parameter Groups - Different learning rates per layer
- Gradient Accumulation - Micro-batch training for large models
- Gradient Clipping - Prevent exploding gradients
- Regularization - L1, L2, weight decay
- Privacy-Preserving - Differential privacy support
- Distributed Training - Multi-GPU and TPU coordination
- Neural Architecture Search - Automated architecture optimization
§Architecture
§SciRS2 Foundation
OptiRS-Core is built exclusively on the SciRS2 ecosystem:
- Arrays: Uses
scirs2_core::ndarray(NOT direct ndarray) - Random: Uses
scirs2_core::random(NOT direct rand) - SIMD: Uses
scirs2_core::simd_opsfor vectorization - Parallel: Uses
scirs2_core::parallel_opsfor multi-core - GPU: Built on
scirs2_core::gpuabstractions - Metrics: Uses
scirs2_core::metricsfor monitoring - Error Handling: Uses
scirs2_core::error::Result
This integration ensures:
- Type safety across the ecosystem
- Consistent performance optimizations
- Unified error handling
- Simplified dependency management
§Module Organization
optimizers- Core optimizer implementationsschedulers- Learning rate schedulingsimd_optimizer- SIMD-accelerated optimizersparallel_optimizer- Multi-core processingmemory_efficient_optimizer- Memory optimizationgpu_optimizer- GPU accelerationoptimizer_metrics- Performance monitoringgradient_processing- Gradient manipulationregularizers- Regularization techniquessecond_order- Second-order methodsdistributed- Distributed trainingprivacy- Privacy-preserving optimization
§Performance
§Benchmarks
All benchmarks use Criterion.rs with statistical analysis:
- optimizer_benchmarks - Compare all 16 optimizers
- simd_benchmarks - SIMD vs scalar performance
- parallel_benchmarks - Multi-core scaling
- memory_efficient_benchmarks - Memory optimization impact
- gpu_benchmarks - GPU vs CPU comparison
- metrics_benchmarks - Monitoring overhead
Run benchmarks:
cargo bench --package optirs-core§Test Coverage
- 549 unit tests - Core functionality
- 54 doc tests - Documentation examples
- 603 total tests - All passing
- Zero clippy warnings - Production quality
§Examples
See the examples/ directory for comprehensive examples:
basic_optimization.rs- Getting startedadvanced_optimization.rs- Schedulers, regularization, clippingperformance_optimization.rs- SIMD, parallel, GPU accelerationproduction_monitoring.rs- Metrics and convergence detection
§Contributing
When contributing, ensure:
- 100% SciRS2 usage - No direct ndarray/rand/rayon imports
- Zero clippy warnings - Run
cargo clippy - All tests pass - Run
cargo test - Documentation - Add examples to public APIs
§License
Dual-licensed under MIT OR Apache-2.0
Re-exports§
pub use error::OptimError;pub use error::OptimizerError;pub use error::Result;pub use unified_api::OptimizerConfig;pub use unified_api::OptimizerFactory;pub use unified_api::Parameter;pub use unified_api::UnifiedOptimizer;pub use adaptive_selection::AdaptiveOptimizerSelector;pub use adaptive_selection::OptimizerStatistics;pub use adaptive_selection::OptimizerType;pub use adaptive_selection::PerformanceMetrics;pub use adaptive_selection::ProblemCharacteristics;pub use adaptive_selection::ProblemType;pub use adaptive_selection::SelectionNetwork;pub use adaptive_selection::SelectionStrategy;pub use curriculum_optimization::AdaptiveCurriculum;pub use curriculum_optimization::AdversarialAttack;pub use curriculum_optimization::AdversarialConfig;pub use curriculum_optimization::CurriculumManager;pub use curriculum_optimization::CurriculumState;pub use curriculum_optimization::CurriculumStrategy;pub use curriculum_optimization::ImportanceWeightingStrategy;pub use distributed::AveragingStrategy;pub use distributed::CommunicationResult;pub use distributed::CompressedGradient;pub use distributed::CompressionStrategy;pub use distributed::DistributedCoordinator;pub use distributed::GradientCompressor;pub use distributed::ParameterAverager;pub use distributed::ParameterServer;pub use domain_specific::CrossDomainKnowledge;pub use domain_specific::DomainOptimizationConfig;pub use domain_specific::DomainPerformanceMetrics;pub use domain_specific::DomainRecommendation;pub use domain_specific::DomainSpecificSelector;pub use domain_specific::DomainStrategy;pub use domain_specific::LearningRateScheduleType;pub use domain_specific::OptimizationContext;pub use domain_specific::RecommendationType;pub use domain_specific::RegularizationApproach;pub use domain_specific::ResourceConstraints;pub use domain_specific::TrainingConfiguration;pub use gpu_optimizer::GpuConfig;pub use gpu_optimizer::GpuMemoryStats;pub use gpu_optimizer::GpuOptimizer;pub use gpu_optimizer::GpuUtils;pub use gradient_accumulation::AccumulationMode;pub use gradient_accumulation::GradientAccumulator as GradAccumulator;pub use gradient_accumulation::MicroBatchTrainer;pub use gradient_accumulation::VariableAccumulator;pub use memory_efficient_optimizer::ChunkedOptimizer;pub use memory_efficient_optimizer::GradientAccumulator as MemoryEfficientGradientAccumulator;pub use memory_efficient_optimizer::MemoryUsageEstimator;pub use neural_integration::architecture_aware::ArchitectureAwareOptimizer;pub use neural_integration::architecture_aware::ArchitectureStrategy;pub use neural_integration::forward_backward::BackwardHook;pub use neural_integration::forward_backward::ForwardHook;pub use neural_integration::forward_backward::NeuralIntegration;pub use neural_integration::LayerArchitecture;pub use neural_integration::LayerId;pub use neural_integration::OptimizationConfig;pub use neural_integration::ParamId;pub use neural_integration::ParameterManager;pub use neural_integration::ParameterMetadata;pub use neural_integration::ParameterOptimizer;pub use neural_integration::ParameterType;pub use online_learning::ColumnGrowthStrategy;pub use online_learning::LearningRateAdaptation;pub use online_learning::LifelongOptimizer;pub use online_learning::LifelongStats;pub use online_learning::LifelongStrategy;pub use online_learning::MemoryExample;pub use online_learning::MemoryUpdateStrategy;pub use online_learning::MirrorFunction;pub use online_learning::OnlineLearningStrategy;pub use online_learning::OnlineOptimizer;pub use online_learning::OnlinePerformanceMetrics;pub use online_learning::TaskGraph;pub use optimizer_metrics::ConvergenceMetrics;pub use optimizer_metrics::GradientStatistics;pub use optimizer_metrics::MetricsCollector;pub use optimizer_metrics::MetricsReporter;pub use optimizer_metrics::OptimizerMetrics;pub use optimizer_metrics::ParameterStatistics;pub use parallel_optimizer::parallel_step;pub use parallel_optimizer::parallel_step_array1;pub use parallel_optimizer::ParallelBatchProcessor;pub use parallel_optimizer::ParallelOptimizer;pub use plugin::core::create_basic_capabilities;pub use plugin::core::create_plugin_info;pub use plugin::core::OptimizerPluginFactory;pub use plugin::core::PluginCategory;pub use plugin::core::PluginInfo;pub use plugin::sdk::BaseOptimizerPlugin;pub use plugin::sdk::PluginTester;pub use plugin::OptimizerPlugin;pub use plugin::PluginCapabilities;pub use plugin::PluginLoader;pub use plugin::PluginRegistry;pub use plugin::PluginValidationFramework;pub use privacy::AccountingMethod;pub use privacy::ClippingStats;pub use privacy::DifferentialPrivacyConfig;pub use privacy::DifferentiallyPrivateOptimizer;pub use privacy::MomentsAccountant;pub use privacy::NoiseMechanism;pub use privacy::PrivacyBudget;pub use privacy::PrivacyValidation;pub use second_order::HessianInfo;pub use second_order::Newton;pub use second_order::NewtonCG;pub use second_order::SecondOrderOptimizer;pub use second_order::LBFGS as SecondOrderLBFGS;pub use self_tuning::OptimizerInfo;pub use self_tuning::OptimizerTrait;pub use self_tuning::PerformanceStats;pub use self_tuning::SelfTuningConfig;pub use self_tuning::SelfTuningOptimizer;pub use self_tuning::SelfTuningStatistics;pub use self_tuning::TargetMetric;pub use simd_optimizer::should_use_simd;pub use simd_optimizer::SimdOptimizer;pub use streaming::LearningRateAdaptation as StreamingLearningRateAdaptation;pub use streaming::StreamingConfig;pub use streaming::StreamingDataPoint;pub use streaming::StreamingHealthStatus;pub use streaming::StreamingMetrics;pub use streaming::StreamingOptimizer;pub use training_stabilization::AveragingMethod;pub use training_stabilization::ModelEnsemble;pub use training_stabilization::PolyakAverager;pub use training_stabilization::WeightAverager;pub use visualization::ColorScheme;pub use visualization::ConvergenceInfo;pub use visualization::DataSeries;pub use visualization::MemoryStats as VisualizationMemoryStats;pub use visualization::OptimizationMetric;pub use visualization::OptimizationVisualizer;pub use visualization::OptimizerComparison;pub use visualization::PlotType;pub use visualization::VisualizationConfig;pub use optimizers::*;pub use parameter_groups::*;pub use regularizers::*;pub use schedulers::*;pub use gradient_processing::*;
Modules§
- adaptive_
selection - benchmarking
- coordination
- curriculum_
optimization - distributed
- domain_
specific - error
- gpu_
optimizer - GPU-accelerated optimizer operations
- gradient_
accumulation - gradient_
processing - hardware_
aware - memory_
efficient - memory_
efficient_ optimizer - Memory-efficient optimizer operations
- metrics
- neural_
integration - neuromorphic
- online_
learning - optimizer_
composition - optimizer_
metrics - Optimizer performance metrics and monitoring
- optimizers
- parallel_
optimizer - Parallel optimizer operations using scirs2_core
- parameter_
groups - plugin
- privacy
- regularizers
- research
- schedulers
- second_
order - self_
tuning - simd_
optimizer - SIMD-accelerated optimizer operations
- streaming
- training_
stabilization - unified_
api - utils
- visualization
Macros§
- create_
optimizer_ plugin - Macro for creating a simple optimizer plugin
- register_
optimizer_ plugin