コンテンツにスキップ

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のバージョンに対応します。適宜変更してください。)
        $ source /usr/local/setup_cuda.sh 12.3
        
      • セットアップしたCUDAのバージョンは nvcc --version、cuDNNのバージョンはcat /usr/local/cuda-XY.Z/include/cudnn_version.hで確認できます。
  • 大きなファイルの取扱について
    • 他のloginノードと違いネットワーク的に遅い環境にいるため、HOMEディレクトリのファイルなどの読み込みが遅い場合があります。
    • ローカルディスクとしてSSDが設置してあり、/tmpにそれぞれ200GB(lxgpu01), 3TB(lxgpu02)程度の空き容量があるため、大きなファイルは一度/tmpに置いて読み書きを行うとファイルIOの影響を抑えてプログラムのスピードを見ることが出来ます。
      • スクリプト例

        #!/usr/bin/env bash
        exe=$1
        input=$2
        output=$3
        current_dir="$PWD"
        tmpdir=$(mktemp -d)
        trap 'rm -rf $tmpdir' HUP INT QUIT ABRT SEGV TERM EXIT
        cd "$tmpdir"
        cp "$input" ./
        cmd="$exe $(basename $input) $output"
        time ($cmd) > log 2>&1
        mv $output "$current_dir"/
        mv log "$current_dir"/
        

深層学習ライブラリ

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

      >>> import tensorflow as tf
      >>> tf.config.list_physical_devices('GPU')
      [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU')]
      

  • PyTorch APIからもGPUの情報を得ることができます。

    • PyTorch API

      >>> import torch
      >>> [torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())]
      ['Tesla V100-PCIE-32GB', 'Tesla T4']
      

GPUの指定

  • CUDA_VISIBLE_DEVICE環境変数にGPU番号を指定することで、プログラムから見えるGPUを制限することができます。
    >>> import os
    >>> os.environ['CUDA_VISIBLE_DEVICES'] = '1'
    >>> import torch
    >>> [torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())]
    ['Tesla T4']
    # CUDA_VISIBLE_DEVICESを指定しなかったときの出力は ['Tesla V100-PCIE-32GB', 'Tesla T4']
    

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.