ここでは,情報理工学部の計算サーバ 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
基本的にはサポートしません.設定状況を自身で確認したり,Google検索して下さい.
不具合あれば具体的な対応策(パッチなど)と共に連絡頂ければ対応するかも知れませんが,全く保証はしません.
基本的にEnvironment Modulesにて行なう.操作方法はGoogle検索されたし.例えば以下ページなどが参考になる.
https://www.nabe-intl.co.jp/takeruboost/environment-modulesについて/
Environment Modules
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 ~]$
ファイルシステムには以下の制限があるので注意されたい.
tmpfsによる一時ファイルシステムにて構成されており,容量が8GBしかないのでサイズの大きなファイルを不用意に配置しないこと.尚,放置されたファイルは10日後に自動削除される.
NVMeカード×8によるRAID 0構成の高速ファイルシステムであり容量は約6TiBである.機械学習の実行の際,頻繁に読み取りが起きる大規模データ(画像,動画,音声など)は,このディレクトリ配下に配置すると良いだろう.誰が使っているか区別しやすいよう,自分専用のディレクトリを予め作成しておいて,そのディレクトリ配下にデータファイルを配置する事が望ましい.尚,放置されたファイルは10日後に自動削除される.
Oracle ZFS Storage ApplianceをサーバとしたNFS over InfinibandによるNFSボリュームであり,容量は300TiBである.
Virtualenvを用いてPython3の仮想環境を作成する.尚,環境構成は~/venv配下へ保持するものと想定している.
module load TensorFlow
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
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の利用も可能だが,その場合,その方法は各自考案するものとし,かつ,他のユーザに迷惑とならないように留意しながらプログラムを実行すること.
現状のUV300の構成ではTensorFlow 2.4.3がデフォルト設定となっているが,一応,過去の互換性のためTensorFlow 1.12.0環境も残してあるものの,その動作は保証できないことに注意されたし.Virtualenvを用いてPython3の仮想環境を作成する.尚,環境構成は~/venv配下へ保持するものと想定している.
module load TensorFlow/1.12.0
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
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
以上