Ubuntu + Anaconda 環境で NVIDIA PhysicsNeMo を動かすまでの記録
— torch 2.10.0+cu128 + physicsnemo 2.0.0 で動作確認 —
はじめに
NVIDIA PhysicsNeMo の example である ldc_pinns を Ubuntu 環境で動かそうとしたところ、いくつかの import error や CUDA 関連のハマりどころがありました。
最終的には、以下の構成で ldc_pinns が正常に学習開始できました。
- Python: 3.11
- PyTorch: 2.10.0+cu128
- PhysicsNeMo: 2.0.0
- PhysicsNeMo Sym: 2.0.0
- 実行環境: conda
本記事では、途中で遭遇したエラーと、そのうえで最終的に動いた構成をまとめます。
結論
まず結論です。
今回、以下の組み合わせで ldc_pinns が動作しました。
python -c "import torch; print(torch.__version__, torch.version.cuda)"
python -c "import physicsnemo; print(physicsnemo.__version__)"
python /pub/physicsnemo_v2.0.0/ldc_pinns/train.py
実際の出力:
2.10.0+cu128 12.8
2.0.0
...
Loss: 0.5105028748512268, LR: 0.0009999871767586216
Loss: が表示されていれば、少なくとも
- import 通過
- PhysicsNeMo / Sym の初期化成功
- 学習ループ開始
までは到達できています。
最終的に動いた構成
今回うまくいった構成は以下です。
- OS: Ubuntu
- Python: 3.11
- conda 環境名:
nemo_safe - PyTorch: 2.10.0+cu128
- CUDA runtime: 12.8
- PhysicsNeMo: 2.0.0
- PhysicsNeMo Sym: 2.0.0
ポイントは、CUDA 13 系や PyTorch 2.11 系ではなく、torch 2.10 + cu128 側に寄せたことです。
先に再現手順だけ知りたい人向け
以下の手順で、今回の環境は再現できます。
1. conda 環境作成
conda create -n nemo_safe python=3.11 -y
conda activate nemo_safe
2. pip を更新
python -m pip install --upgrade pip setuptools wheel
3. PyTorch 2.10 + cu128 をインストール
python -m pip install --index-url https://download.pytorch.org/whl/cu128 \
"torch<2.11" torchvision torchaudio
確認:
python -c "import torch; print(torch.__version__, torch.version.cuda)"
期待される出力:
2.10.0+cu128 12.8
4. PhysicsNeMo 本体をインストール
python -m pip install "nvidia-physicsnemo[cu12]==2.0.0"
5. hydra-core をインストール
python -m pip install hydra-core
6. PhysicsNeMo Sym をインストール
python -m pip install Cython
python -m pip install "nvidia-physicsnemo.sym==2.0.0" --no-build-isolation
7. 実行
cd /pub/physicsnemo_v2.0.0/ldc_pinns
python train.py
途中で遭遇したエラー
ここからは、実際にハマった点を順に書きます。
1. ModuleNotFoundError: No module named 'hydra'
最初に出たのがこれです。
ModuleNotFoundError: No module named 'hydra'
これは import hydra に対して、実際のインストール対象が hydra-core であることが原因でした。
対処
conda install -c conda-forge hydra-core
もしくは
pip install hydra-core
2. ModuleNotFoundError: No module named 'physicsnemo.utils.logging'
次に出たのがこれです。
ModuleNotFoundError: No module named 'physicsnemo.utils.logging'
これは単純な依存不足というより、インストール済みの PhysicsNeMo と example 側の整合不良 の可能性が高いと感じました。
この時点で、かなり「環境構成を見直した方が早い」状態でした。
3. nvidia-physicsnemo-sym のビルド失敗(CUDA mismatch)
次にハマったのが、nvidia-physicsnemo-sym インストール時の CUDA mismatch です。
要点はこうでした。
- PyTorch は CUDA 13.0 でビルドされていた
- しかしビルド時に見えていた CUDA toolkit は 12.9
- そのため
nvidia-physicsnemo-symのビルドが失敗した
つまり、PyTorch 側と CUDA toolkit 側の版が噛み合っていなかった、ということです。
4. nvcc not found
nvidia-smi は動くのに、nvcc が見つからない、という状況にも遭遇しました。
当時の状況
-
nvidia-smiは動く - しかし
nvccはcommand not found
これは、
- GPU ドライバは入っている
- しかし CUDA Toolkit の
binへ PATH が通っていない
という状態でした。
確認したコマンドはこれです。
ls -d /usr/local/cuda*
find /usr/local -name nvcc
echo $PATH
実際には以下の nvcc が存在していました。
/usr/local/cuda-13.2/bin/nvcc
/usr/local/cuda-12.9/bin/nvcc
つまり、nvcc が無いのではなく、PATH に入っていないだけでした。
対処例(zsh)
export CUDA_HOME=/usr/local/cuda-13.2
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
hash -r
恒久化するなら ~/.zshrc に追記します。
echo 'export CUDA_HOME=/usr/local/cuda-13.2' >> ~/.zshrc
echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.zshrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.zshrc
source ~/.zshrc
5. torch.distributed.tensor._ops.registration が見つからない
最も厄介だったのがこれです。
ModuleNotFoundError: No module named 'torch.distributed.tensor._ops.registration'
このときの組み合わせは以下でした。
torch 2.11.0+cu130physicsnemo 2.0.0
この段階では、PhysicsNeMo 2.0.0 が期待している内部 API と、PyTorch 2.11 側の構成が噛み合っていない 可能性が高いと判断しました。
そこで最終的には、PyTorch を 2.10 + cu128 に落とす 方向へ切り替えました。
なぜ CUDA 13 系ではなく CUDA 12.8 側に寄せたか
最初は CUDA 13 系で揃えようとしました。
ただし、実際には次のような問題がありました。
- CUDA 13 系の toolkit / PyTorch / PhysicsNeMo Sym のビルド整合がややシビア
-
torch 2.11.0+cu130とphysicsnemo 2.0.0の組み合わせで import error に遭遇 - 一方で、
torch 2.10.0+cu128に切り替えるとldc_pinnsが正常に学習開始した
そのため、少なくとも 「まず example を動かす」 という目的では、
torch 2.10 + cu128 側に寄せた方が安定でした。
実行時に出た warning について
最終的に動いたあとも、いくつか warning は出ました。
ただし、少なくとも今回の ldc_pinns 実行では致命的ではありませんでした。
Warp DeprecationWarning
Warp DeprecationWarning: The symbol `warp.context.Device` will soon be removed...
→ 将来のAPI変更予告。今すぐの停止要因ではない。
distributed manager warning
Could not initialize using ENV, SLURM or OPENMPI methods. Assuming this is a single process job
→ 単一プロセスとして実行するだけで、通常は問題ない。
DALI warning
Please set `reader_name` ...
→ データローダ側の注意喚起。今回の example 実行では致命的ではない。
今回の学び
今回の経験で感じたことは次の通りです。
1. nvidia-smi の CUDA Version を過信しない
nvidia-smi に表示される CUDA Version は、ドライバがサポートする最大版です。
nvcc の版や、いま実際にビルドで使われる toolkit の版とは一致しないことがあります。
2. nvcc の有無は必ず確認する
以下は一度確認した方がよいです。
which nvcc
nvcc --version
3. PhysicsNeMo は「最新すぎる構成」が必ずしも安全ではない
今回のように、CUDA 13 + torch 2.11 + physicsnemo 2.0.0 よりも、
torch 2.10 + cu128 の方が素直に通る場合がありました。
動いた環境は固定しておく
こういう環境は、あとで再現できなくなるのが怖いので、保存しておくと安心です。
python -V
python -c "import torch; print(torch.__version__, torch.version.cuda)"
python -c "import physicsnemo; print(physicsnemo.__version__)"
pip freeze > requirements_nemo_safe.txt
conda env export > nemo_safe_environment.yml
まとめ
今回、PhysicsNeMo ldc_pinns を動かす上では、
最新寄りの CUDA 13 / torch 2.11 系よりも、torch 2.10.0+cu128 を使う安全側構成の方が安定していました。
少なくとも今回の環境では、以下の構成で正常に学習開始まで到達できました。
- Python 3.11
- PyTorch 2.10.0+cu128
- PhysicsNeMo 2.0.0
- PhysicsNeMo Sym 2.0.0
ldc_pinns をまず一度確実に動かしたい、という方の参考になれば幸いです。