Skip to content

feat: 推論エンジンを nsfwjs + tfjs-node から ONNX Runtime に移行#11

Merged
samunohito merged 9 commits into
misskey-dev:mainfrom
jj1guj:feat/onnx-runtime
Jun 26, 2026
Merged

feat: 推論エンジンを nsfwjs + tfjs-node から ONNX Runtime に移行#11
samunohito merged 9 commits into
misskey-dev:mainfrom
jj1guj:feat/onnx-runtime

Conversation

@jj1guj

@jj1guj jj1guj commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

What

推論エンジンを nsfwjs + tfjs-node から ONNX Runtime に移行

  • モデルファイルがJSON + shardsからONNXファイル単独に変更
  • 推論時のスレッド数を環境変数で指定できるように
    • 環境変数SENSITIVE_DETECTOR_THREADSで指定可能
    • 専用マシンでは SENSITIVE_DETECTOR_THREADS=0 とすることで全コアを使用可能

Why

  • 現状のnsfwjs + tfjs-nodeではARM64環境のDockerコンテナ内で動作しない
    • Raspberry Pi 5B上でビルドしたDockerコンテナでモデルのロードに失敗することを確認済み
  • nsfwjs + tfjs-nodeではイメージサイズが肥大化する
  • nsfwjs + tfjs-nodeと比較しONNX Runtimeの方が推論速度が速い

Additional info (optional)

ベンチマーク

環境

  • Intel N95 (4C/4T, 8GB RAM)
  • Docker
  • 入力画像: 299×299 PNG
  • リクエストは1枚ずつ逐次送信(並行リクエストなし)
  • スレッド数
    • TF.js: シングルスレッド(libtensorflow の既定動作)
    • ONNX: SENSITIVE_DETECTOR_THREADS=1(1スレッド推論)

イメージサイズ比較

TF.js ONNX 差分
イメージサイズ 957 MB 845 MB -12%

精度比較

  • Top-class 一致率: 100.00%
  • 確率差 max: 0.000002
  • 確率差 p99: 0.000001

レイテンシ比較 (ms)

TF.js ONNX 差分
min 223 238 +15
p50 312 244 -68
p95 340 296 -45
p99 366 297 -69
max 378 298 -79
mean 308 250 -58

リソース使用量

TF.js ONNX 差分
CPU mean 111.4% 45.7% -59%
CPU max 130.2% 54.9% -58%
Memory mean 360 MB 241 MB -33%
Memory max 369 MB 241 MB -35%
  • デフォルト (SENSITIVE_DETECTOR_THREADS=1) で TF.js より高速かつ CPU 使用率は半分以下に
  • Misskey 本体と同居する構成でリソース競合を大幅に緩和

jj1guj and others added 6 commits June 24, 2026 19:41
- onnxruntime-node + pngjs に依存を置換し、systeminformation を削除
- classifier.ts を ONNX Runtime (InferenceSession) ベースに全面書き換え
- 入力を 299×299 PNG のみに限定(Misskey 本体が正規化済み PNG を送る契約)
- computeIsSupportedCpu を削除(ONNX Runtime は x64/arm64 両対応)
- Dockerfile から tfjs-node 用ビルドツール (python3/make/g++) を除去
- types.ts から nsfwjs/core の PredictionType 依存を削除

@samunohito samunohito left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

prありがとうございます。
確認させていただいたところ、気になる点がありましたのでコメントします。

Comment thread apps/server/src/bootstrap.ts Outdated
Comment thread packages/core/src/classifier.ts
@jj1guj jj1guj requested a review from samunohito June 25, 2026 15:15

@samunohito samunohito left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。よさそうです。

@samunohito samunohito merged commit ce2a327 into misskey-dev:main Jun 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants