
Domain Ml
- 1.2k installs
- 1.3k repo stars
- Updated May 24, 2026
- actionbook/rust-skills
domain-ml is a Rust skill defining ML domain constraints for tensors, GPU inference, and ONNX portability.
About
The domain-ml skill defines Layer 3 domain constraints for machine learning and AI applications in Rust. Rules map large data to zero-copy streaming, GPU acceleration to candle and tch-rs, model portability to ONNX, batch processing to throughput-focused inference, numerical precision to careful f32 and f64 handling, and reproducibility to seeded randomness and versioning. Critical constraints forbid copying large tensors unnecessarily, require batched GPU operations to amortize kernel launch overhead, and emphasize deterministic pipelines where reproducibility matters. Key crates include ndarray, candle, tch-rs, and burn with patterns tracing down to companion concurrency and lifecycle skills for async data loading and resource management in inference services.
- Zero-copy tensor handling to avoid memory bandwidth bottlenecks.
- GPU batching for candle and tch-rs inference efficiency.
- ONNX support for portable model deployment.
- Reproducibility via seeded random and model versioning.
- Traces ML constraints to concurrency and lifecycle companion skills.
Domain Ml by the numbers
- 1,209 all-time installs (skills.sh)
- +49 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #247 of 2,066 Data Science & ML skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
What domain-ml says it does
RULE: Avoid copying large tensors
npx skills add https://github.com/actionbook/rust-skills --skill domain-mlAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.2k |
|---|---|
| repo stars | ★ 1.3k |
| Security audit | 3 / 3 scanners passed |
| Last updated | May 24, 2026 |
| Repository | actionbook/rust-skills ↗ |
What Rust patterns satisfy ML memory, GPU, and reproducibility requirements?
Apply Rust ML domain constraints for tensor memory, GPU batching, and ONNX portability.
Who is it for?
Rust developers building inference services or training pipelines in ML domains.
Skip if: Skip for non-ML Rust services without tensor or model workloads.
When should I use this skill?
User builds Rust ML apps mentioning inference, tensors, candle, or ONNX.
What you get
Constraint-backed ML designs using ndarray, candle, tch-rs, and batched inference.
- ML component design constraints
- Crate and ONNX integration guidance
By the numbers
- References four Rust ML stacks: ndarray, candle, tch-rs, and burn
- Documents ONNX as the standard portability format in constraint tables
Files
Machine Learning Domain
Layer 3: Domain Constraints
Domain Constraints → Design Implications
| Domain Rule | Design Constraint | Rust Implication |
|---|---|---|
| Large data | Efficient memory | Zero-copy, streaming |
| GPU acceleration | CUDA/Metal support | candle, tch-rs |
| Model portability | Standard formats | ONNX |
| Batch processing | Throughput over latency | Batched inference |
| Numerical precision | Float handling | ndarray, careful f32/f64 |
| Reproducibility | Deterministic | Seeded random, versioning |
---
Critical Constraints
Memory Efficiency
RULE: Avoid copying large tensors
WHY: Memory bandwidth is bottleneck
RUST: References, views, in-place opsGPU Utilization
RULE: Batch operations for GPU efficiency
WHY: GPU overhead per kernel launch
RUST: Batch sizes, async data loadingModel Portability
RULE: Use standard model formats
WHY: Train in Python, deploy in Rust
RUST: ONNX via tract or candle---
Trace Down ↓
From constraints to design (Layer 2):
"Need efficient data pipelines"
↓ m10-performance: Streaming, batching
↓ polars: Lazy evaluation
"Need GPU inference"
↓ m07-concurrency: Async data loading
↓ candle/tch-rs: CUDA backend
"Need model loading"
↓ m12-lifecycle: Lazy init, caching
↓ tract: ONNX runtime---
Use Case → Framework
| Use Case | Recommended | Why |
|---|---|---|
| Inference only | tract (ONNX) | Lightweight, portable |
| Training + inference | candle, burn | Pure Rust, GPU |
| PyTorch models | tch-rs | Direct bindings |
| Data pipelines | polars | Fast, lazy eval |
Key Crates
| Purpose | Crate |
|---|---|
| Tensors | ndarray |
| ONNX inference | tract |
| ML framework | candle, burn |
| PyTorch bindings | tch-rs |
| Data processing | polars |
| Embeddings | fastembed |
Design Patterns
| Pattern | Purpose | Implementation |
|---|---|---|
| Model loading | Once, reuse | OnceLock<Model> |
| Batching | Throughput | Collect then process |
| Streaming | Large data | Iterator-based |
| GPU async | Parallelism | Data loading parallel to compute |
Code Pattern: Inference Server
use std::sync::OnceLock;
use tract_onnx::prelude::*;
static MODEL: OnceLock<SimplePlan<TypedFact, Box<dyn TypedOp>, Graph<TypedFact, Box<dyn TypedOp>>>> = OnceLock::new();
fn get_model() -> &'static SimplePlan<...> {
MODEL.get_or_init(|| {
tract_onnx::onnx()
.model_for_path("model.onnx")
.unwrap()
.into_optimized()
.unwrap()
.into_runnable()
.unwrap()
})
}
async fn predict(input: Vec<f32>) -> anyhow::Result<Vec<f32>> {
let model = get_model();
let input = tract_ndarray::arr1(&input).into_shape((1, input.len()))?;
let result = model.run(tvec!(input.into()))?;
Ok(result[0].to_array_view::<f32>()?.iter().copied().collect())
}Code Pattern: Batched Inference
async fn batch_predict(inputs: Vec<Vec<f32>>, batch_size: usize) -> Vec<Vec<f32>> {
let mut results = Vec::with_capacity(inputs.len());
for batch in inputs.chunks(batch_size) {
// Stack inputs into batch tensor
let batch_tensor = stack_inputs(batch);
// Run inference on batch
let batch_output = model.run(batch_tensor).await;
// Unstack results
results.extend(unstack_outputs(batch_output));
}
results
}---
Common Mistakes
| Mistake | Domain Violation | Fix |
|---|---|---|
| Clone tensors | Memory waste | Use views |
| Single inference | GPU underutilized | Batch processing |
| Load model per request | Slow | Singleton pattern |
| Sync data loading | GPU idle | Async pipeline |
---
Trace to Layer 1
| Constraint | Layer 2 Pattern | Layer 1 Implementation |
|---|---|---|
| Memory efficiency | Zero-copy | ndarray views |
| Model singleton | Lazy init | OnceLock<Model> |
| Batch processing | Chunked iteration | chunks() + parallel |
| GPU async | Concurrent loading | tokio::spawn + GPU |
---
Related Skills
| When | See |
|---|---|
| Performance | m10-performance |
| Lazy initialization | m12-lifecycle |
| Async patterns | m07-concurrency |
| Memory efficiency | m01-ownership |
Related skills
Forks & variants (1)
Domain Ml has 1 known copy in the catalog totaling 586 installs. They canonicalize to this original listing.
- zhanghandong - 586 installs
How it compares
Use Domain ML for Rust-specific ML architecture; use Python ML skills when the stack remains PyTorch-first without Rust services.
FAQ
Why avoid copying large tensors?
Memory bandwidth is the bottleneck; use references, views, and in-place ops.
Which crates support GPU?
candle and tch-rs per the documented GPU utilization constraints.
How is reproducibility handled?
Seeded random sources and explicit model versioning in pipelines.
Is Domain Ml safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.