domain-ml
Rustで機械学習やAIアプリケーションを開発する際に、テンソル計算、モデル推論、ニューラルネットワーク構築などを効率的に行い、学習や予測を支援するSkill。
📜 元の英語説明(参考)
Use when building ML/AI apps in Rust. Keywords: machine learning, ML, AI, tensor, model, inference, neural network, deep learning, training, prediction, ndarray, tch-rs, burn, candle, 机器学习, 人工智能, 模型推理
🇯🇵 日本人クリエイター向け解説
Rustで機械学習やAIアプリケーションを開発する際に、テンソル計算、モデル推論、ニューラルネットワーク構築などを効率的に行い、学習や予測を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o domain-ml.zip https://jpskill.com/download/9258.zip && unzip -o domain-ml.zip && rm domain-ml.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9258.zip -OutFile "$d\domain-ml.zip"; Expand-Archive "$d\domain-ml.zip" -DestinationPath $d -Force; ri "$d\domain-ml.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
domain-ml.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
domain-mlフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
機械学習ドメイン
レイヤー 3: ドメイン制約
ドメイン制約 → 設計への影響
| ドメインルール | 設計制約 | Rust の影響 |
|---|---|---|
| 大量のデータ | 効率的なメモリ | Zero-copy, streaming |
| GPU アクセラレーション | CUDA/Metal サポート | candle, tch-rs |
| モデルの移植性 | 標準フォーマット | ONNX |
| バッチ処理 | レイテンシよりもスループット | バッチ推論 |
| 数値精度 | Float の扱い | ndarray, careful f32/f64 |
| 再現性 | 決定性 | Seeded random, versioning |
重要な制約
メモリ効率
RULE: 大きなテンソルのコピーを避ける
WHY: メモリ帯域幅がボトルネック
RUST: References, views, in-place ops
GPU 使用率
RULE: GPU 効率のためのバッチ処理
WHY: カーネル起動ごとの GPU オーバーヘッド
RUST: Batch sizes, async data loading
モデルの移植性
RULE: 標準モデルフォーマットを使用する
WHY: Python で学習し、Rust でデプロイする
RUST: ONNX via tract or candle
トレースダウン ↓
制約から設計へ (レイヤー 2):
"効率的なデータパイプラインが必要"
↓ m10-performance: Streaming, batching
↓ polars: Lazy evaluation
"GPU 推論が必要"
↓ m07-concurrency: Async data loading
↓ candle/tch-rs: CUDA backend
"モデルのロードが必要"
↓ m12-lifecycle: Lazy init, caching
↓ tract: ONNX runtime
ユースケース → フレームワーク
| ユースケース | 推奨 | 理由 |
|---|---|---|
| 推論のみ | tract (ONNX) | 軽量、移植性 |
| 学習 + 推論 | candle, burn | Pure Rust, GPU |
| PyTorch モデル | tch-rs | ダイレクトバインディング |
| データパイプライン | polars | 高速、遅延評価 |
主要な Crate
| 目的 | Crate |
|---|---|
| テンソル | ndarray |
| ONNX 推論 | tract |
| ML フレームワーク | candle, burn |
| PyTorch バインディング | tch-rs |
| データ処理 | polars |
| 埋め込み | fastembed |
デザインパターン
| パターン | 目的 | 実装 |
|---|---|---|
| モデルのロード | 一度だけ、再利用 | OnceLock<Model> |
| バッチ処理 | スループット | Collect then process |
| ストリーミング | 大量のデータ | Iterator-based |
| GPU 非同期 | 並列処理 | Data loading parallel to compute |
コードパターン: 推論サーバー
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 実装 |
|---|---|---|
| メモリ効率 | Zero-copy | ndarray views |
| モデルのシングルトン | 遅延初期化 | OnceLock<Model> |
| バッチ処理 | チャンク化されたイテレーション | chunks() + parallel |
| GPU 非同期 | 並行ロード | tokio::spawn + GPU |
関連スキル
| いつ | 参照 |
|---|---|
| パフォーマンス | m10-performance |
| 遅延初期化 | m12-lifecycle |
| 非同期パターン | m07-concurrency |
| メモリ効率 | m01-ownership |
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
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 ops
GPU Utilization
RULE: Batch operations for GPU efficiency
WHY: GPU overhead per kernel launch
RUST: Batch sizes, async data loading
Model 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 |