Intel MacでPyTorchが入らないのは、PyTorch 2.3.0からmacOS x86_64向けバイナリの配布が終了したためです。torch 2.2.2 + Python 3.12以下に固定すれば今でも動きます。もう1つ見落としやすいのがNode.jsのonnxruntime-nodeで、こちらは新しい版がインストールには成功するのにIntel Mac用バイナリが入らず実行時に落ちるため、1.17.3への固定が必要でした。機械学習モデルの学習〜ONNX推論までをIntel Macで通した実測の構成をまとめます。
結論: バージョンの組み合わせ
| パッケージ | Intel Macで使う版 | 根拠 |
|---|---|---|
| torch | 2.2.2 | 2.3.0以降はarm64ホイールのみ (PyPIで確認) |
| Python | 3.8〜3.12 | torch 2.2.2のx86_64ホイールがcp38〜cp312 |
| numpy | <2 | torch 2.2系はnumpy 2に非対応 |
| onnxruntime (Python) | 制約なし | universal2ホイールでIntelも対象 |
| onnxruntime-node | 1.17.3 | 手元の1.27.0はdarwin/arm64のみで実行時エラー、1.17.3はx64同梱 (いずれも実測) |
Python側のonnxruntimeに制約が無い点は意外で、最新版もuniversal2 (Intel/Apple Silicon両対応) で配布されています。制約はtorchとNode版だけです。
onnxruntime-nodeは「インストール成功・実行時に失敗」する
やっかいなのは症状です。npm installは正常に完了し、実行した時に初めてこう落ちます。
Error: Cannot find module (MODULE_NOT_FOUND)
requireStack: [
'.../node_modules/onnxruntime-node/dist/binding.js',
'.../node_modules/onnxruntime-node/dist/backend.js',
'.../node_modules/onnxruntime-node/dist/index.js'
]
binding.jsが自プラットフォーム用のネイティブバイナリをrequireしようとして見つからない、という意味です。同梱バイナリは次のコマンドで確認できます。
ls node_modules/onnxruntime-node/bin/napi-*/darwin/
# 1.27.0 → arm64 のみ
# 1.17.3 → arm64 x64
darwinの下にx64が無ければそのバージョンはIntel Macで動きません。npm add onnxruntime-node@1.17.3に下げると解決します。
uvならPythonごと固定できる
システムのPythonが3.13以降だとtorch 2.2.2のホイールが無いので、Python自体を下げる必要があります。uvならpyprojectと1コマンドで完結します。
# pyproject.toml
[project]
requires-python = ">=3.11,<3.12"
dependencies = [
"torch==2.2.2",
"numpy>=1.26,<2",
"onnxruntime",
]
uv python pin 3.11
uv sync # x86_64向けのCPython 3.11とtorch 2.2.2が入る
手元では3.11で運用していますが、ホイールの範囲では3.12でも構いません。
本番のLinuxとは両立できる
Macに合わせてonnxruntime-nodeを1.17.3に下げても、Linux x64向けバイナリは同じ版に同梱されているため本番サーバー側はそのまま動きます。ONNXモデルはopset 17で出力したものが1.17.3で読み込めることを確認しました。「開発機に合わせて古い版に固定すると本番で困るのでは」という心配は、この組み合わせでは不要です。