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機械学習タスク別のクレート提案

活用シーン

  1. 01Rust 推論パイプラインの設計
  2. 02学習・推論用クレートの選定
  3. 03大規模データセットの効率的な処理

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/domain-mlを入力して読み込まれたか確認します。

詳細

機械学習ドメイン

レイヤー 3:ドメイン制約

ドメイン制約 → 設計への影響

ドメインルール設計上の制約Rust での対応
大容量データメモリー効率ゼロコピー、ストリーミング
GPU アクセラレーションCUDA/Metal のサポートcandle、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高速で遅延評価

主要なクレート

用途クレート
テンソル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() + parallel
GPU 非同期処理並行読み込みtokio::spawn + GPU

関連スキル

場面参照先
パフォーマンスm10-performance
遅延初期化m12-lifecycle
非同期パターンm07-concurrency
メモリー効率m01-ownership

コメント