Hanzo ML is a Rust-based minimalist ML framework forked from HuggingFace Candle, optimized for edge AI, quantization, and multimodal inference.
Category: Hanzo Ecosystem Related Skills: hanzo/hanzo-candle.md, hanzo/hanzo-engine.md, hanzo/hanzo-kensho.md
Hanzo ML is a Rust-based minimalist ML framework forked from HuggingFace Candle, optimized for edge AI, quantization, and multimodal inference. It provides the tensor computation layer for the Hanzo ecosystem, with GPU acceleration via CUDA, Metal (Apple Silicon), and CPU optimizations (MKL, Accelerate).
The repository maintains dual crate namespaces: original candle- crates for upstream compatibility plus hanzo- crates as the forward-looking Hanzo-branded API. Both coexist in the workspace and share the same underlying code.
hanzo-ml, hanzo-nn, hanzo-transformers, hanzo-datasets published at v0.9.2-alpha.2hanzo-flash-attn, hanzo-metal-kernels, hanzo-kernelshanzo-ml-pyo3 for Python interophanzo-ml-wasm-examples for browser inferencewasm-pack and compatible browser| Item | Value | |------|-------| | Repo | github.com/hanzoai/ml | | Branch | main | | Language | Rust (primary), C++/CUDA/Metal/Python | | Version | 0.9.2-alpha.2 (hanzo crates), 0.9.2 (candle crates) | | Build | cargo build --workspace | | Test | cargo test --workspace | | License | BSD-3-Clause OR Apache-2.0 |
| Crate | Purpose | |-------|---------| | hanzo-ml | Core tensor operations, Device, DType, quantization | | hanzo-nn | Neural network layers (Linear, Conv, LayerNorm, Attention) | | hanzo-transformers | Transformer model implementations (90+) | | hanzo-datasets | Dataset loading (MNIST, CIFAR, TinyStories) | | hanzo-ml-pyo3 | Python bindings via PyO3 | | hanzo-flash-attn | Flash Attention v2 CUDA kernels | | hanzo-metal-kernels | Custom Metal GPU kernels | | hanzo-kernels | Custom CUDA kernels | | hanzo-onnx | ONNX model evaluation | | hanzo-ug | Universal Graph backend | | hanzo-ml-examples | Example binaries | | hanzo-ml-wasm-examples | Browser WASM examples | | hanzo-ml-wasm-tests | WASM test suite |
| Crate | Purpose | |-------|---------| | candle-core | Original tensor core (same code as hanzo-ml) | | candle-nn | Original NN layers | | candle-transformers | Original transformer models | | candle-datasets | Original datasets | | candle-examples | Original examples | | candle-pyo3 | Original Python bindings |
| Crate | Purpose | |-------|---------| | hanzo-kernels | Custom CUDA kernels (reduce, cast, affine, etc.) | | hanzo-metal-kernels | Custom Metal kernels (Apple GPU) | | hanzo-flash-attn | Flash Attention v2 (CUDA SM80+) |
| Feature | Effect | |---------|--------| | cuda | NVIDIA GPU via cudarc 0.19.1 | | cudnn | Additional cuDNN kernels | | nccl | Multi-GPU distribution | | mkl | Intel Math Kernel Library | | accelerate | Apple Accelerate framework | | metal | Apple GPU via hanzo-metal-kernels + objc2-metal | | ug | Universal Graph backend |
use hanzo_ml::{Device, Tensor, DType};
fn main() -> hanzo_ml::Result<()> {
let device = Device::cuda_if_available(0)?;
let a = Tensor::randn(0f32, 1., (2, 3), &device)?;
let b = Tensor::randn(0f32, 1., (3, 4), &device)?;
let c = a.matmul(&b)?;
println!("Shape: {:?}", c.shape()); // [2, 4]
let d = a.relu()?;
let e = a.softmax(1)?;
let f = a.to_dtype(DType::BF16)?;
Ok(())
}
use hanzo_ml::{Device, Tensor, DType, Module};
use hanzo_nn::{VarBuilder, VarMap, Linear, linear, AdamW};
fn main() -> hanzo_ml::Result<()> {
let device = Device::cuda_if_available(0)?;
let varmap = VarMap::new();
let vb = VarBuilder::from_varmap(&varmap, DType::F32, &device);
let layer1 = linear(784, 256, vb.pp("layer1"))?;
let layer2 = linear(256, 10, vb.pp("layer2"))?;
let input = Tensor::randn(0f32, 1., (32, 784), &device)?;
let h = layer1.forward(&input)?.relu()?;
let output = layer2.forward(&h)?;
let mut opt = AdamW::new(varmap.all_vars(), Default::default())?;
let target = Tensor::zeros((32, 10), DType::F32, &device)?;
let loss = hanzo_nn::loss::mse(&output, &target)?;
opt.backward_step(&loss)?;
println!("Loss: {}", loss.to_scalar::<f32>()?);
Ok(())
}
use hanzo_ml::quantized::gguf_file;
use std::fs::File;
fn main() -> anyhow::Result<()> {
let mut file = File::open("model.gguf")?;
let model = gguf_file::Content::read(&mut file)?;
for (name, info) in model.tensor_infos.iter() {
println!("{}: {:?}", name, info.shape);
}
Ok(())
}
use hanzo_ml::{Device, DType};
use hanzo_nn::VarBuilder;
let device = Device::cuda_if_available(0)?;
let vb = unsafe {
VarBuilder::from_mmaped_safetensors(
&["model.safetensors"], DType::F32, &device,
)?
};
let weight = vb.get((768, 768), "transformer.h.0.attn.c_attn.weight")?;
[dependencies]
# From crates.io (when published)
hanzo-ml = { version = "0.9.2-alpha.2", features = ["metal"] }
hanzo-nn = "0.9.2-alpha.2"
hanzo-transformers = "0.9.2-alpha.2"
# From git (current)
hanzo-ml = { git = "https://github.com/hanzoai/ml", branch = "main" }
hanzo-nn = { git = "https://github.com/hanzoai/ml", branch = "main" }
hanzo-transformers = { git = "https://github.com/hanzoai/ml", branch = "main" }
Hanzo Engine (mistral-rs fork) uses Hanzo ML as its tensor backend:
# In engine Cargo.toml
[dependencies]
hanzo-ml = { git = "https://github.com/hanzoai/ml", branch = "main" }
hanzo-nn = { git = "https://github.com/hanzoai/ml", branch = "main" }
hanzo-transformers = { git = "https://github.com/hanzoai/ml", branch = "main" }
[features]
default = ["metal"]
metal = ["hanzo-ml/metal", "hanzo-nn/metal"]
cuda = ["hanzo-ml/cuda"]
| Format | Use Case | |--------|----------| | GGUF/GGML | Universal, llama.cpp compatible | | AFQ (Affine) | Optimized for Metal/Apple Silicon | | GPTQ/AWQ | GPU-optimized quantization | | ISQ | In-situ runtime quantization |
| Category | Models | |----------|--------| | LLMs | LLaMA 1/2/3, Falcon, Gemma 1/2, Phi 1-3, Mistral, Mixtral, Mamba/2, StarCoder/2, Qwen3 MoE, Yi, GLM4, DeepSeek v2, SmolLM3, Olmo | | Vision | DINOv2, ConvMixer, EfficientNet, ResNet, ViT, VGG, YOLO v3/v8, SAM, SegFormer, MobileNet v4, CLIP, SigLIP | | Audio | Whisper, EnCodec, MetaVoice, Parler-TTS, Mimi, Silero VAD | | Diffusion | Stable Diffusion 1.5/2.1/XL/3, Flux | | Multimodal | BLIP, LLaVA, Moondream, PaddleOCR-VL, Pixtral, PaliGemma | | Quantized | GGUF/GGML format, llama.cpp compatible |
| Format | Extension | Use Case | |--------|-----------|----------| | GGUF | .gguf | Quantized models (llama.cpp compatible) | | safetensors | .safetensors | HuggingFace standard (fast, safe) | | ONNX | .onnx | Cross-framework interop | | PyTorch | .bin, .pt | Legacy format |
ml/
├── hanzo-ml/ # Core tensor ops (hanzo-branded)
│ ├── src/
│ │ ├── lib.rs
│ │ ├── tensor.rs # Tensor type
│ │ ├── device.rs # CPU/CUDA/Metal device
│ │ ├── dtype.rs # Data types (F16, BF16, F32, etc.)
│ │ ├── backend.rs # Backend trait
│ │ ├── cuda_backend/ # CUDA implementation
│ │ ├── metal_backend/ # Metal implementation
│ │ ├── cpu_backend/ # CPU implementation
│ │ ├── quantized/ # GGUF/GGML quantization
│ │ └── safetensors.rs # safetensors loading
│ ├── benches/ # Performance benchmarks
│ └── tests/ # Unit tests
├── hanzo-nn/ # Neural network layers
├── hanzo-transformers/ # 90+ transformer model implementations
├── hanzo-datasets/ # Dataset loading utilities
├── hanzo-ml-pyo3/ # Python bindings
├── hanzo-flash-attn/ # Flash Attention CUDA kernels
│ └── kernels/ # CUDA kernel source files
├── hanzo-metal-kernels/ # Metal GPU kernels
├── hanzo-kernels/ # Generic CUDA kernels
├── hanzo-onnx/ # ONNX evaluation
├── hanzo-ml-examples/ # Example binaries
├── hanzo-ml-wasm-examples/ # WASM browser examples
├── candle-core/ # Upstream-compatible core (v0.9.2)
├── candle-nn/ # Upstream-compatible NN
├── candle-transformers/ # Upstream-compatible transformers
├── candle-datasets/ # Upstream-compatible datasets
├── candle-examples/ # Upstream-compatible examples
├── candle-book/ # Documentation book
├── tensor-tools/ # CLI tensor manipulation
├── Cargo.toml # Workspace root
├── Makefile
├── HANZO_INTEGRATION.md # Engine integration guide
└── LLM.md
# Build entire workspace
cargo build --workspace
# Test everything
cargo test --workspace
# Build with Metal (Apple Silicon)
cargo build --workspace --features metal
# Build with CUDA
cargo build --workspace --features cuda
# Run example (LLaMA inference)
cargo run --release --example llama -- --model meta-llama/Llama-3.2-3B-Instruct
# Sync from upstream
git remote add upstream https://github.com/huggingface/candle.git
git fetch upstream
git merge upstream/main
AFQ4 quantization for best throughput--features "metal accelerate" for CPU fallback opshanzo-flash-attn (SM80+)mkl feature for Intel platformsaccelerate feature for Apple platformshanzo/hanzo-candle.md - Upstream candle documentation (planned fork)hanzo/hanzo-engine.md - Inference engine using hanzo-mlhanzo/hanzo-ane.md - Apple Neural Engine (complementary to Metal)hanzo/hanzo-kensho.md - Image generation modelhanzo/hanzo-sho.md - Text diffusion engineLast Updated: 2026-03-13 Category: Hanzo Ecosystem Related: ml, rust, tensor, cuda, metal, inference, quantization, wasm Prerequisites: Rust, ML fundamentals, GPU programming concepts