UV300利用ガイド

ここでは,情報理工学部の計算サーバ UV300の利用方法を簡単に説明する.

システム構成

CPU:
	Intel Xeon E7-8890V4 24core 2.2GHz × 8 (物理CPUコア192, 論理CPU384)
メモリ:
	6TiB
GPGPU:
	nVIDIA Tesla P100 × 8基

ストレージ:
	一時ファイル領域 Intel PCIe SSD 800GB × 8 (RAID 0構成)
	ホームディレクトリ領域 約300TiB

オペレーティングシステム:
	Red Hat Enterprise Linux Server 7.9

開発ツール:
	Intel Parallel Studio XE Professional Edition for C++ 2019 Update1
	PGI Professional Edition 18.7
	HPE Message Passing Interface 1.8
	CUDA Toolkit 11.4
	cuDNN 8.2.2
	NCCL 2.10.3
	TensorFlow 2.4.3

システムへのアクセス

ssh uv300.cse.kyoto-su.ac.jp

関連ドキュメント

UV300附属文書(学内アクセス限定)

Intelコンパイラマニュアル(学内アクセス限定)

サポート

基本的にはサポートしません.設定状況を自身で確認したり,Google検索して下さい.

不具合あれば具体的な対応策(パッチなど)と共に連絡頂ければ対応するかも知れませんが,全く保証はしません.

環境設定

基本的にEnvironment Modulesにて行なう.操作方法はGoogle検索されたし.例えば以下ページなどが参考になる.
https://www.nabe-intl.co.jp/takeruboost/environment-modulesについて/
Environment Modules

CUDA Toolキットに対する環境設定例

uv300(1001)$ module avail

---------------------------------------- /usr/share/Modules/modulefiles -----------------------------------------
MPInside/4.2.51 hmpt/2.24       module-info     mpiplace/2.00   null            perfcatcher     uvstats/1.2.0
dot             module-git      modules         mpt/2.24        perfboost       use.own

----------------------------------------------- /etc/modulefiles ------------------------------------------------
CUDA/10.0                         PrgEnv-intel/2018Update3          TensorFlow/2.4.3(default)
CUDA/11.4(default)                PrgEnv-intel/2019Update1          python-intel
CUDA/9.0                          PrgEnv-intel/2019Update2          python36
CUDA/9.2                          PrgEnv-intel/2019Update4(default)
GPU-util                          TensorFlow/1.12.0

--------------------------------------------- /opt/pgi/modulefiles ----------------------------------------------
PrgEnv-pgi/18.5          openmpi/2.1.2/2018       pgi/18.7                 pgi/2019
PrgEnv-pgi/18.7          openmpi/3.1.3/2019       pgi/19.1(default)        pgi-llvm
PrgEnv-pgi/19.1(default) pgi/18.5                 pgi/2018                 pgi-nollvm
uv300(1002)$ module load CUDA
uv300(1003)$ which nvcc
/usr/local/cuda-11.4/bin/nvcc
uv300(1004)$ 

個人独自の環境設定を設定する例

個人独自のmodulefileを用いたい場合,ホームディレクトリ配下に privatemodules ディレクトリを作成して,その配下にmodulefileを配置しておく.use.ownモジュールをロードするとそれら個人独自modulefileをロード出来るようになる.

[locadmin@uv300 ~]$ module list
No Modulefiles Currently Loaded.
[locadmin@uv300 ~]$ module avail

----------------------------------------- /usr/share/Modules/modulefiles -----------------------------------------
dot             module-git      modules         mpiplace/2.00   null            perfcatcher     uvstats/1.2.0
hmpt/2.18       module-info     MPInside/4.2.31 mpt/2.18        perfboost       use.own

------------------------------------------------ /etc/modulefiles ------------------------------------------------
CUDA/9.0                          CUDA/9.2                          PrgEnv-intel/2018Update3(default)
CUDA/9.1                          CUDA/latest(default)              python-intel
[locadmin@uv300 ~]$ module load use.own
[locadmin@uv300 ~]$ module avail

----------------------------------------- /usr/share/Modules/modulefiles -----------------------------------------
dot             module-git      modules         mpiplace/2.00   null            perfcatcher     uvstats/1.2.0
hmpt/2.18       module-info     MPInside/4.2.31 mpt/2.18        perfboost       use.own

------------------------------------------------ /etc/modulefiles ------------------------------------------------
CUDA/9.0                          CUDA/9.2                          PrgEnv-intel/2018Update3(default)
CUDA/9.1                          CUDA/latest(default)              python-intel

-------------------------------------- /home_local/locadmin/privatemodules ---------------------------------------
CUDA/9.0                          CUDA/9.2                          PrgEnv-intel/2018Update3(default)
CUDA/9.1                          CUDA/latest(default)              python-intel
[locadmin@uv300 ~]$ 

ファイルシステムの注意事項

ファイルシステムには以下の制限があるので注意されたい.

/tmp配下

tmpfsによる一時ファイルシステムにて構成されており,容量が8GBしかないのでサイズの大きなファイルを不用意に配置しないこと.尚,放置されたファイルは10日後に自動削除される.

/scratch配下

NVMeカード×8によるRAID 0構成の高速ファイルシステムであり容量は約6TiBである.機械学習の実行の際,頻繁に読み取りが起きる大規模データ(画像,動画,音声など)は,このディレクトリ配下に配置すると良いだろう.誰が使っているか区別しやすいよう,自分専用のディレクトリを予め作成しておいて,そのディレクトリ配下にデータファイルを配置する事が望ましい.尚,放置されたファイルは10日後に自動削除される.

各自のホームディレクトリ配下

Oracle ZFS Storage ApplianceをサーバとしたNFS over InfinibandによるNFSボリュームであり,容量は300TiBである.

TensorFlow 2.4.3の使用

Virtualenvを用いてPython3の仮想環境を作成する.尚,環境構成は~/venv配下へ保持するものと想定している.

使用環境の準備

module load TensorFlow

仮想環境をVirtualenvを用いて構成

cd ~
virtualenv --system-site-packages -p python3 ./venv
source ./venv/bin/activate
pip install --upgrade pip
pip install --upgrade numpy wheel
pip install --upgrade keras_preprocessing --no-deps

TensorFlowパッケージをインストール

pip install /usr/local/share/tensorflow/tensorflow-2.4.3-cp36-cp36m-linux_x86_64.whl

動作テスト

python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

実行例:
(venv) uv300(1021)$ python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
2021-08-24 18:03:07.680680: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-08-24 18:03:10.247062: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network
Library (oneDNN) to use the following CPU instructions in performance-critical operations:  SSE3 SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-08-24 18:03:10.253132: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-08-24 18:03:10.255008: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-08-24 18:03:10.455328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties: 
pciBusID: 0002:03:00.0 name: Tesla P100-PCIE-16GB computeCapability: 6.0
coreClock: 1.3285GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-08-24 18:03:10.455753: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-08-24 18:03:10.466366: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublas.so.11
2021-08-24 18:03:10.466420: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublasLt.so.11
2021-08-24 18:03:10.470370: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcufft.so.10
2021-08-24 18:03:10.472183: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcurand.so.10
2021-08-24 18:03:10.473197: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusolver.so.11
2021-08-24 18:03:10.474812: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusparse.so.11
2021-08-24 18:03:10.475235: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudnn.so.8
2021-08-24 18:03:10.478632: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1862] Adding visible gpu devices: 0
2021-08-24 18:03:10.478672: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-08-24 18:03:11.315738: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1261] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-08-24 18:03:11.315860: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1267]      0 
2021-08-24 18:03:11.315882: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1280] 0:   N 
2021-08-24 18:03:11.321488: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1406] Created TensorFlow device (/device:GPU:0 with 14942 MB memory) ->
physical GPU (device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0002:03:00.0, compute capability: 6.0)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 7272810734968522113
, name: "/device:GPU:0"
device_type: "GPU"  <-------------- このようにdevice_typeとしてGPUと表示されれば,TensorFlowは問題なく機能している.
memory_limit: 15667827840
locality {
  bus_id: 3
  numa_node: 2
  links {
  }
}
incarnation: 14041103268077333004
physical_device_desc: "device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0002:03:00.0, compute capability: 6.0"
]
(venv) uv300(1022)$ 

仮想環境を抜ける

deactivate
module unload TensorFlow

環境構築後の日常的使用手順

module load TensorFlow
source ./venv/bin/activate
  
(色々作業する)

(作業終了後)

deactivate
module unload TensorFlow

仮想環境の破棄

基本的には仮想環境を保持しているディレクトリを丸ごと削除すれば良い.

deactivate
cd ~
rm -rf ./venv

使用GPUの指定

標準設定では空いているGPUユニットを一つ選択して動作するようにしている.複数GPUの利用も可能だが,その場合,その方法は各自考案するものとし,かつ,他のユーザに迷惑とならないように留意しながらプログラムを実行すること.

TensorFlow 1.12.0の使用(既に古いのでお勧めしない)

現状のUV300の構成ではTensorFlow 2.4.3がデフォルト設定となっているが,一応,過去の互換性のためTensorFlow 1.12.0環境も残してあるものの,その動作は保証できないことに注意されたし.Virtualenvを用いてPython3の仮想環境を作成する.尚,環境構成は~/venv配下へ保持するものと想定している.

使用環境の準備

module load TensorFlow/1.12.0

仮想環境をVirtualenvを用いて構成

cd ~
virtualenv --system-site-packages -p python3 ./venv
source ./venv/bin/activate
pip install --upgrade pip
pip install --upgrade six numpy wheel mock
pip install --upgrade keras_applications==1.0.6 --no-deps
pip install --upgrade keras_preprocessing==1.0.5 --no-deps

TensorFlow 1.12.0パッケージをインストール

pip install --upgrade /usr/local/share/tensorflow/tensorflow-1.12.0-cp36-cp36m-linux_x86_64.whl

動作テスト

python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

仮想環境を抜ける

deactivate
module unload TensorFlow/1.12.0

環境構築後の日常的使用手順

module load TensorFlow
source ./venv/bin/activate

(色々作業する)

(作業終了後)

deactivate
module unload TensorFlow

仮想環境の破棄

基本的には仮想環境を保持しているディレクトリを丸ごと削除すれば良い.

deactivate
cd ~
rm -rf ./venv

以上


元のページへ戻る