GPUノードの使い方
注意事項
- 現在使える資源はインタラクティブノードの
lxgpu01.icepp.jp
,lxgpu02.icepp.jp
の2台です。 - 必ず事前に他ユーザーのGPU使用状況を確認し、GPU利用の競合が発生しないようにしてください。(GPU使用状況の確認)
- 必要以上にGPUリソースを確保しないようにしてください。
構成
構成についてはこちらをご覧ください。
環境
- インストール済ソフトウェア: Python 3.9, CUDA 11, CUDA 12
- Python: Python 3.9 が system上にインストールされています。ただし、cvmfs上のものやPyenvを用いて各自インストールしたものを使うことをお勧めします。
- CUDA
- CUDAは/usr/local/cuda-XY.Zにインストールされています。以下のコマンドでセットアップが可能です。(12.3の部分はCUDAのバージョンに対応します。適宜変更してください。)
- セットアップしたCUDAのバージョンは
nvcc --version
、cuDNNのバージョンはcat /usr/local/cuda-XY.Z/include/cudnn_version.h
で確認できます。
- 大きなファイルの取扱について
- 他のloginノードと違いネットワーク的に遅い環境にいるため、HOMEディレクトリのファイルなどの読み込みが遅い場合があります。
- ローカルディスクとしてSSDが設置してあり、
/tmp
にそれぞれ200GB(lxgpu01
), 3TB(lxgpu02
)程度の空き容量があるため、大きなファイルは一度/tmp
に置いて読み書きを行うとファイルIOの影響を抑えてプログラムのスピードを見ることが出来ます。-
スクリプト例
-
深層学習ライブラリ
TensorFlow や PyTorch といった深層学習ライブラリを使うにはいくつかの方法があります。
最も簡単なのはcvmfs上の環境を使うことです。以下のようなコマンドで深層学習ライブラリが使えるようになります。
export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh
lsetup "views LCG_105_cuda x86_64-el9-gcc11-opt"
lsetup views
のようにすることで使用できるバージョンが確認できます。
例えばLCG_105
にはTensorflow 2.13.1、PyTorch 2.1.0, Jax 0.4.20 が含まれています。
初めてcvmfs上のファイルを読み込むときは時間がかかりますが、その後はファイルがキャッシュされている限り高速にアクセスできます。
他にも以下のような方法があります。venv+pip を使う方法やApptainerを使う方法があります。それぞれの詳細は深層学習ライブラリのインストール方法を参照してください。
GPU使用状況の確認
-
nvidia-smi
で搭載されているGPUの数や種類、各GPUの使用率等を確認することができます。-
nvidia-smi コマンドの出力例
$ nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.73.08 Driver Version: 510.73.08 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:17:00.0 Off | 0 | | N/A 54C P8 18W / 70W | 0MiB / 15360MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-PCIE... On | 00000000:65:00.0 Off | 0 | | N/A 46C P0 28W / 250W | 0MiB / 32768MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
-
-
Tensorflow APIからもGPUの情報を得ることができます。Use a GPU | TensorFlow Core
-
Tensorflow API
-
-
PyTorch APIからもGPUの情報を得ることができます。
-
PyTorch API
-
GPUの指定
CUDA_VISIBLE_DEVICE
環境変数にGPU番号を指定することで、プログラムから見えるGPUを制限することができます。
GPUメモリの制限
GPUを使う際、TensorFlowなどでは最初にGPU内メモリを全て予約するような事をします。これはGPU内でメモリを増やす作業のコストが高いため最初から確保するためです。ただし、実際にはメモリをフルに使わず、処理もコアをフルに使わない状態であることも多く、もしメモリを必要分だけ確保するようにすれば、他のジョブを空いたコア、メモリで走らせる事が可能です。 TensorFlowでは以下の様な設定でメモリを必要最小限に抑える事が出来るので、可能な限りこの様なオプションを使うようにしてください。Use a GPU | TensorFlow Core
import tensorflow as tf
for gpu in tf.config.list_physical_devices('GPU'):
tf.config.experimental.set_memory_growth(gpu, True)
Jupyter Notebookを使ったlxgpu資源の利用
Jupyter Notebookの利用 を参照してください。
lxgpuでのVisual Studio Code (VSCode) Remoteの利用
Visual Studio Code (VSCode)の利用 を参照してください。
© 2024 ICEPP, the University of Tokyo.
Reproduction of the article, figures and tables on this page is allowed as specified in the CC-BY-4.0 license.