mcpField
D
domain-ml

domain-ml

github.com/actionbook数据与数据库1.6k2.8k 次安装9 周前更新
代码仓库

关于 domain-ml

面向 Rust 开发者的机器学习领域技能,帮助设计推理和数据管道。它将内存、GPU 利用率、模型可移植性和可复现性等约束转化为实现建议。

主要功能

  1. 01高效处理张量内存
  2. 02批处理与流式处理
  3. 03GPU 利用率指导
  4. 04模型格式可移植性建议
  5. 05按机器学习任务推荐 Crate

适用场景

  1. 01设计 Rust 推理管道
  2. 02选择训练或推理 Crate
  3. 03高效处理大型数据集

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/actionbook/rust-skills --skill domain-ml

安装后在 Claude Code 中输入/domain-ml确认已加载。

详细介绍

机器学习领域

第 3 层:领域约束

领域约束 → 设计影响

领域规则设计约束Rust 影响
大型数据高效内存使用零拷贝、流式处理
GPU 加速支持 CUDA/Metalcandle、tch-rs
模型可移植性标准格式ONNX
批处理吞吐量优先于延迟批量推理
数值精度浮点数处理ndarray,谨慎使用 f32/f64
可复现性确定性带种子的随机数、版本管理

关键约束

内存效率
RULE: Avoid copying large tensors
WHY: Memory bandwidth is bottleneck
RUST: References, views, in-place ops
GPU 利用率
RULE: Batch operations for GPU efficiency
WHY: GPU overhead per kernel launch
RUST: Batch sizes, async data loading
模型可移植性
RULE: Use standard model formats
WHY: Train in Python, deploy in Rust
RUST: ONNX via tract or candle

向下追踪 ↓

从约束到设计(第 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

用例 → 框架

用例推荐方案原因
仅推理tract (ONNX)轻量、可移植
训练 + 推理candle、burn纯 Rust、GPU
PyTorch 模型tch-rs直接绑定
数据管道polars快速、惰性求值

关键 Crate

用途Crate
张量ndarray
ONNX 推理tract
ML 框架candle、burn
PyTorch 绑定tch-rs
数据处理polars
嵌入fastembed

设计模式

模式用途实现方式
模型加载加载一次,重复使用OnceLock<Model>
批处理提高吞吐量收集后处理
流式处理大型数据基于迭代器
GPU 异步并行处理数据加载与计算并行

代码模式:推理服务

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())
}

代码模式:批量推理

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
}

常见错误

错误违反的领域约束修正方法
克隆张量浪费内存使用视图
单次推理GPU 利用不足批处理
每次请求都加载模型速度慢单例模式
同步加载数据GPU 空闲异步管道

追踪到第 1 层

约束第 2 层模式第 1 层实现
内存效率零拷贝ndarray 视图
模型单例延迟初始化OnceLock
批处理分块迭代chunks() + 并行处理
GPU 异步并发加载tokio::spawn + GPU

相关技能

适用场景参见
性能m10-performance
延迟初始化m12-lifecycle
异步模式m07-concurrency
内存效率m01-ownership

评论

支持 Markdown