デバイス設定 & HPC セットアップ¶
概要¶
ML/MM calculatorの GPU/CPU デバイス設定と、HPC クラスタでのジョブ投入方法を説明します。
要点¶
ML バックエンド (UMA): デフォルトで CUDA を使用(
ml_device: auto→ CUDA が利用可能なら CUDA)。MM バックエンド (hessian_ff): CPU のみ。OpenMM バックエンドは CUDA を使用可能。
Hessian 組み立て:
--hess-device cpuで CPU にオフロードし、VRAM を節約可能。マルチ GPU: ML 推論は単一 GPU(モデル並列は非対応)。OpenMM MM バックエンドは別の CUDA デバイス(
mm_device: cuda,mm_cuda_idx: 1)に配置可能。
デバイスパラメータ¶
ML/MM calculator(mlmm_calc.mlmm)は ML と MM で別々のデバイス設定を使用します:
パラメータ |
デフォルト |
説明 |
|---|---|---|
|
|
UMA 推論のデバイス。 |
|
|
|
|
|
MM 力場エンジン。 |
|
|
MM バックエンドのデバイス。hessian_ff は |
|
|
|
|
|
MM バックエンドの CPU スレッド数。 |
YAML 設定例¶
calc:
ml_device: cuda
ml_cuda_idx: 0
mm_backend: hessian_ff
mm_device: cpu
mm_threads: 16
OpenMM バックエンドを CUDA で使用¶
calc:
ml_device: cuda
ml_cuda_idx: 0
mm_backend: openmm
mm_device: cuda
mm_cuda_idx: 0
注意: ML と MM の両方が CUDA を使用する場合、GPU メモリを共有します。大きな系では
mm_device: cpuを使用して VRAM 消費を抑えることを推奨します。
VRAM 管理¶
Hessian デバイス(--hess-device)¶
freq コマンドは --hess-device で Hessian の組み立て・対角化のデバイスを制御できます:
# デフォルト: ml_device と同じ(通常 CUDA)
mlmm freq -i input.pdb --parm real.parm7 -q -1
# CPU で Hessian 組み立て(大きな系で VRAM を節約)
mlmm freq -i input.pdb --parm real.parm7 -q -1 --hess-device cpu
--hess-device cpu を使用する場面:
活性領域が大きい場合(非凍結原子 > 約 500)
振動数計算で CUDA out-of-memory エラーが発生する場合
VRAM が限られている場合(< 16 GB)
VRAM 節約のヒント¶
ML 領域を小さくする:
mlmm extractで小さい--radiusを使用、またはmlmm define-layerで--radius-freezeを絞る。hessian_ff(デフォルト)を使用: hessian_ff は CPU のみなので、VRAM はすべて UMA に使用可能。
大きな系では OpenMM CUDA を避ける: ML と MM の両方が CUDA を使うと VRAM 圧力が倍増する。
VRAM を監視:
print_vramはデフォルトで True(Hessian計算中に VRAM 使用量(ピーク)を表示)。抑制するには YAML でprint_vram: Falseを設定。
GPU クラスごとの精度¶
--precision は MLIP バックエンドの浮動小数点精度(fp32 または fp64、大文字小文字無視)を選びます。実質的なデフォルトは fp32 です。適切な選択は実行する GPU クラスに依存します:
ハードウェア |
推奨 |
理由 |
|---|---|---|
HPC データセンター GPU(H100 / H200 / A100) |
|
決定論的な計算に向き、数値ノイズが低い。ネイティブ fp64 のスループットコストはこれらのカードでは小さい。TS 最適化とHessianを安定化。 |
コンシューマー GPU(RTX 50xx / 40xx) |
|
コンシューマーカードでは fp64 が著しく遅い。fp32 が速度/スクリーニングの基準。 |
# データセンター H200 — フル精度のベース推論
mlmm tsopt -i ts.pdb --parm enzyme.parm7 -l 'LIG:Q' -b uma --precision fp64 -o result_ts
# コンシューマー RTX — デフォルトで高速スクリーニング
mlmm scan -i r.pdb --parm enzyme.parm7 -l 'LIG:Q' -b uma --scan-lists '[(1,5,1.4)]' -o result_scan
--precision はすべての計算系サブコマンド(sp、opt、tsopt、freq、irc、scan / scan2d / scan3d、path-opt、path-search、all)で受け付けられ、バックエンドごとにルーティングされます(UMA precision、ORB precision、MACE default_dtype)。
Note
-b aimnet2 では fp32 は no-op、fp64 は拒否されます — モデル入力が上流で float32 にキャストされるためです。fp64 が必要なら uma、orb、mace を使ってください。--precision fp64 は GPU のリダクション順序ドリフトを低減しますが、実行をビット単位で同一にはしません。ビット単位の厳密性は --deterministic のみが与えます — 再現性 を参照。
HPC ジョブ投入¶
PBS 例¶
#!/bin/bash
#PBS -N mlmm_opt
#PBS -q default
#PBS -l nodes=1:ppn=32:gpus=1,mem=120GB,walltime=72:00:00
#PBS -o ${PBS_JOBNAME}.o${PBS_JOBID}
#PBS -e ${PBS_JOBNAME}.e${PBS_JOBID}
set -euo pipefail
hostname
cd "${PBS_O_WORKDIR}"
# 環境モジュールのロード
source /etc/profile.d/modules.sh # クラスター依存
module load cuda/<version>
# conda 環境の有効化
source ~/miniconda3/etc/profile.d/conda.sh
conda activate <your-env>
# 最適化の実行
mlmm opt \
-i r_complex_layered.pdb \
--parm p_complex.parm7 \
-q -1 -m 1 \
--opt-mode grad \
--out-dir opt_result
Slurm 例¶
#!/bin/bash
#SBATCH --job-name=mlmm_opt
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --cpus-per-task=32
#SBATCH --mem=120G
#SBATCH --time=72:00:00
#SBATCH --output=%x_%j.out
#SBATCH --error=%x_%j.err
set -euo pipefail
hostname
module load cuda/<version>
source ~/miniconda3/etc/profile.d/conda.sh
conda activate <your-env>
mlmm opt \
-i r_complex_layered.pdb \
--parm p_complex.parm7 \
-q -1 -m 1 \
--opt-mode grad \
--out-dir opt_result
重要なポイント¶
GPU 1 基: mlmm-toolkit はジョブあたり GPU 1 基を使用。PBS なら
gpus=1、Slurm なら--gres=gpu:1を指定。CPU スレッド: MM バックエンド用に十分な CPU を確保(
mm_threadsデフォルト 16)。PBS ならppn=32、Slurm なら--cpus-per-task=32を推奨。メモリ: 酵素活性部位モデルには通常 120 GB で十分。非常に大きな系では増量。
CUDA モジュール: PyTorch が正しい CUDA ランタイムを検出するよう、conda 有効化前に CUDA をロード。
GPU インデックスの指定¶
マルチ GPU ノードで特定の GPU を使用する場合:
# 方法 A: 環境変数(全 CUDA プログラムに影響)
export CUDA_VISIBLE_DEVICES=0
# 方法 B: YAML 設定(mlmm 固有)
# config.yaml に記述:
# calc:
# ml_cuda_idx: 0
mlmm opt -i input.pdb --parm real.parm7 -q -1 --config config.yaml
制限事項¶
ML モデル並列は非対応: ML 推論は単一 GPU で動作する。OpenMM MM バックエンドは別の CUDA デバイス(
mm_device: cuda,mm_cuda_idx)を使用可能だが、デフォルトの hessian_ff MM バックエンドは CPU のみ。分散計算非対応: すべての計算は単一ノードの単一プロセス内で実行。
hessian_ff は CPU のみ: デフォルトの MM バックエンドでは
mm_deviceはcpu/autoのみ可。mm_device: cudaを指定すると ValueError を送出(暗黙の CPU フォールバックはしない)。
関連項目¶
はじめに – インストールと CUDA セットアップ
ML/MM calculator – 計算機のアーキテクチャとパラメータ
YAML リファレンス – 設定リファレンス
freq –
--hess-deviceオプションの詳細トラブルシューティング – よくあるエラーの修正