2026年7月26日日曜日

新WindowsMLをrustで使う。

NPUを使って、小さいモデル(ruri v3)の推論を走らせたい!

Opus4.8は怪しい可能性があるの言ったので、5.6Solで完全にチェックした。

Fable5? Opus5? どちらも週間も制限食らってて、お預け状態。
Fable5で$250の検証したばかりなので・・・


結論、一応できる。




「Microsoft公式Rust対応」ではなく、更新中のRC版を使う構成です。前の回答より慎重に言うと、試作・社内用途には使えるものの、無条件に本番推奨とは言えません。

実機で確認した結果:

  • Rust:1.96.0
  • ort2.0.0-rc.12
  • Windows ML:Microsoft.Windows.AI.MachineLearning 2.1.74
  • WinML付属ONNX Runtime:1.24.20260504.1
  • CPU EP:認識
  • DirectML GPU EP:2デバイス認識
  • NVIDIA TensorRT RTX EP:登録・認識
  • ONNX推論:入力[2.0, 4.0]→出力[3.0, 5.0]
  • 終了コード:0

つまり、次の経路は実際に通っています。

Rust
 → ortクレート
 → WinML付属 onnxruntime.dll
 → WinML EP Catalog
 → GPU/CPU EP列挙
 → セッション作成
 → ONNX推論

更新状況

ortの公開最新版は2.0.0-rc.12で、2026年3月5日公開です。安定版2.0.0にはまだ到達していません。crates.io

一方、リポジトリ本体は2026年7月25日にもコミットされており、ONNX Runtime 1.27系への更新も進行中です。放置されたクレートではありません。最新コミット

ただし、これは次を意味します。

  • メンテナンスは活発
  • 公開版はRC
  • mainと公開版のAPIには差がある
  • 次のRCで破壊的変更が入る可能性がある

気になった点

実際のコンパイルでは、SessionBuilderの回復可能エラーをanyhowへ直接?変換できない箇所がありました。以下のように明示的な変換が必要でした。

.with_auto_device(AutoDevicePolicy::MaxPerformance)
.map_err(|error| anyhow!("{error}"))?

動作不良ではありませんが、RC版らしい粗さは残っています。

本番で使うなら

現在の組み合わせを固定するのが安全です。

ort = {
    version = "=2.0.0-rc.12",
    default-features = false,
    features = ["std", "ndarray", "load-dynamic", "api-24"]
}

合わせて以下を固定します。

Microsoft.Windows.AI.MachineLearning = 2.1.74
onnxruntime.dll = WinMLパッケージ同梱版

システムのPATHにある別のonnxruntime.dllを拾わせず、必ず絶対パスでort::init_from()してください。Windows ML 2.1.74は現在の公式NuGetパッケージです。NuGet

評価は次のようになります。

用途判断
試作・個人開発問題なく使える
社内ツールバージョン固定すれば現実的
一般配布アプリ実機CIとCPU fallbackが必要
長期保守・高信頼製品小さなC/C++ラッパーを挟む方が安全
NPU利用対象NPU実機ごとの検証が必須

今回GPUとCPUは確認できましたが、NPU搭載機ではないため、QNN・VitisAIなどのNPU推論までは未検証です。Rust自体はMicrosoftの公式サポート対象言語ではない、という制約も残ります。





0 件のコメント:

コメントを投稿

あいうえお