富岳運営側では、本記事執筆段階(2022/3/15)において、計算ノード上で TensorFlow2.2.0が使用可能なPython3.8環境、PyTorch1.7.0が使用可能なPython3.8環境を個別に提供している。
提供方法としてはそれぞれのバイナリが配置されている共有参照可能なパスをPATH/LD_LIBRARY_PATHに通すことで使用可能となる。
また、運営提供の「富岳AIフレームワーク利用ガイド」(ガイド自体は富岳ポータル内のみで一般非公開)に、これらの環境を各自で構築できるようにソースコードから構築する手順を公開している。
しかし、Tensorflow2.2.0とPyTorch1.7.0 の両方の環境が共存するPython3.8環境は提供されていない。
このため、両方のモジュールを同時に使用するプログラムはすぐに実行することができない。
一般的な富岳利用者は、利用期間が半年や1年という制限のもと、その大半を実装とデバッグに時間を費やすことになる。このため、実装以前の実行環境整備に時間を取られるのはできるだけ避けたい。研究者の方々はTensorFlow/PyTorchを使わずOpenMP/MPIを使ったC/C++/Fortranプログラムで記述するのかもしれないが、既存研究をベースラインとして使用する場合の確認実行などでは、PyTorchやTensorFlowベースのものが少なくないはずである。
そのような富岳利用者のために、本記事では 上記のGitHub wiki の情報をもとに両方のモジュールを同時に使用するPython3.8 venv環境構築手順を紹介する。
なお、記述者の富岳へアクセスする権限が2022年3月末までのため、本手順はそのままでは使用できない可能性があるのだけど、情報を更新することができません。ご了承ください。
ちなみに、2022年4月の保守で計算ノードのOSのマイナーバージョンアップが予定されている。
構築後の環境について
以下の場所へインストールする。
-
${HOME}/.local
へ計算ノード用バイナリをインストールする想定-
${HOME}/.local/bin
に Python3.8計算ノード用バイナリなど -
${HOME}/.local/lib
に計算ノード用ライブラリなど -
${HOME}/.local/venv/tf220pt170
にPython3.8 venv環境パス
-
このため使用するには、計算ノードへ会話ジョブでログイン or バッチジョブにて、以下のコマンドを実行する。
export PATH=${HOME}/.local/bin:.:${PATH}
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
source ${HOME}/.local/venv/tf220pt170/bin/activate
なおソースコードは ${HOME}/projects
以下に展開するもととする。
準備
mkdir -p ${HOME}/.tmp
-
.bashrc
最後にexport TMPDIR=${HOME}/.tmp
追加 mkdir -p ${HOME}/.local && mkdir -p ${HOME}/.local/bin && mkdir -p ${HOME}/.local/lib && mkdir -p ${HOME}/.local/venv
mkdir -p ${HOME}/projects
Tcl/Tkのインストール
- ログインノードへログインし、
cd ~/projects
-
vi tcltk.sh
を実行し、編集(rscunit
と--mail-list
は各自環境に合わせること、以降略)。
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
cd ${HOME}/projects
wget https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz
tar xvfz tcl8.6.12-src.tar.gz
mkdir -p tcl8.6.12/unix/aarch64
cd tcl8.6.12/unix/aarch64
${HOME}/projects/tcl8.6.12/unix/configure --prefix=${HOME}/.local
make
make install
cd ${HOME}/projects
wget https://prdownloads.sourceforge.net/tcl/tk8.6.12-src.tar.gz
mkdir -p tk8.6.12/unix/aarch64
cd tk8.6.12/unix/aarch64
${HOME}/projects/tk8.6.12/unix/configure --prefix=${HOME}/.local --with-tcl=/home/user/src/tcl8.6.12/unix/aarch64
make
make install
cd ${HOME}/.local/lib
ls -la
elapse timeは、2022/3/29よりチェックが厳しくなった
chmod +x tcltk.sh
pjsub tcltk.sh
- 完了メールが到着したら
${HOME}/projects/tcltk.sh.9999999999.out
を参照して正常にインストールされていることを確認
TensorFlow 2.2.0 のインストール
- ログインノードへログインし、
cd ~/projects
cd ${HOME}/projects
git clone https://github.com/fujitsu/tensorflow.git
cd tensorflow
git checkout -b fujitsu_v2.2.0_for_a64fx origin/fujitsu_v2.2.0_for_a64fx
cd fcc_build_script
-
vi env.src
を実行し、以下の行を編集
TCSDS_PATH=/opt/FJSVxtclanga/tcsds-1.2.34 # Mandatory when use_fcc is true
VENV_PATH=${HOME}/.local/venv/tf220pt170 # Mandatory when use_venv is true
PREFIX=${HOME}/.local # Mandatory
- 以下のコマンドを実行して TensorFlowソースコードなどをダウンロード
cd ${HOME}/projects/tensorflow/fcc_build_script
bash 01_python_build.sh download
bash 02_bazel_build.sh download
bash 03_oneDNN_build.sh download
bash 04_make_venv.sh download
bash 05-0_set_tf_src.sh download
bash 05-1_build_batchedblas.sh download
bash 05_tf_build.sh download
bash 06_tf_install.sh download
bash 07_horovod_install.sh download
-
vi 01_python_build.sh
を実行し、以下のように変更- 先頭に挿入
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
-
configure_args
を編集
:
if [ ! -f Makefile -o "${fjenv_rebuild-}" ]; then
configure_args="--enable-shared --disable-ipv6 --target=aarch64 --build=aarch64 --with-tcltk-includes=-I${HOME}/.local/include --with-tcltk-libs=-L${HOME}/.local/lib"
if [ ! -z "${PREFIX}" ]; then
configure_args="$configure_args --prefix=${PREFIX}"
fi
./configure $configure_args
make clean
fi
:
-
02_bazel_build.sh download
、03_oneDNN_build.sh
、04_make_venv.sh
、05-0_set_tf_src.sh
、05-1_build_batchedblas.sh
、05_tf_build.sh
、06_tf_install.sh
の先頭行に以下のコードを挿入
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
07_horovod_install.sh
は、ここでは実行しません。
- 以下のコマンドを連続実行し、ステップジョブを実行(XXXXX部分は最初にpjsubしたときに表示されるジョブID)。
pjsub --step 01_python_build.sh
pjsub --step --sparam "jid=XXXXX" 02_bazel_build.sh
pjsub --step --sparam "jid=XXXXX" 03_oneDNN_build.sh
pjsub --step --sparam "jid=XXXXX" 04_make_venv.sh
pjsub --step --sparam "jid=XXXXX" 05-0_set_tf_src.sh
pjsub --step --sparam "jid=XXXXX" 05-1_build_batchedblas.sh
pjsub --step --sparam "jid=XXXXX" 05_tf_build.sh
pjsub --step --sparam "jid=XXXXX" 06_tf_install.sh
- 完了メールを受領したら、Jから始まる拡張子
out
のファイルを確認してエラーがないことを確認 - TensorFlowの正常動作確認は、ログインノードから以下の方法でも確認可能
pjsub --interact -L "node=1" -L "rscgrp=int" -L "elapse=6:00:00" --sparam "wait-time=600"
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
cd ${HOME}/.local/venv/tf220pt170
source bin/activate
which python3
which pip3
pip3 list
python3 --version
python3 -c 'print("tkinter: "); import tkinter'
python3 -c 'import tensorflow as tf; print("TensorFlow: ", tf.__version__)'
exit
- 現時点の状態をアーカイブファイル化してWinSCPなどでローカルPCへコピー
cd ${HOME}
tar cvfz dotlocal_tf220.tar.gz ./.local
PyTorch2.2.0 のインストール
ソースコードのダウンロード
-
以下のコマンドを実行して、PyTorch1.7.0ソースコードなどをダウンロード
-
ログインノードへログインし、
cd ${HOME}/projects
cd ${HOME}/projects
git clone https://github.com/fujitsu/pytorch.git
cd pytorch
git checkout -b fujitsu_v1.7.0_for_a64fx origin/fujitsu_v1.7.0_for_a64fx
cd scripts/fujitsu
ln -s ${HOME}/.local .
fujitsu/pytorch ソースコードをそのまま実行すると、
${HOME}/projects/pytorch/scripts/fujitsu/.local へインストールされる。このため先に
lnコマンドで
${HOME}/.local` へリンクさせておく。
-
vi env.src
を実行し、以下の行を編集
:
export PREFIX=${HOME}/projects/pytorch/scripts/fujitsu
export TCSDS_PATH=/opt/FJSVxtclanga/tcsds-1.2.34
:
export VENV_NAME="tf220pt170"
export LD_LIBRARY_PATH=${TCSDS_PATH}/lib64:${PREFIX}/.local/lib:${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${TCSDS_PATH}/bin:${PREFIX}/.local/bin:${HOME}/.local/bin:.:${PATH}
:
-
bash checkout.sh
を実行し、PyTorchソースコード関連をダウンロード
計算ノード用gccベースのcmakeインストール
-
vi 1_cmake.sh
を実行し、次のように編集
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# Build cmake
cd ${DOWNLOAD_PATH}/cmake-3.11.4
./configure --prefix=${HOME}/.local
make clean
make -j32
make install
cd ${HOME}/.local/bin
ls -la
which make
make --version
-
pjsub 1_cmake.sh
を実行 - 完了メールが来たら
1_cmake.sh.XXXXXX.out
を参照し、gcc版make
が${HOME}/.local/bin
にインストールされていることを確認
2_python.sh
は実行しない。
Python関連パッケージのインストール
-
vi 3_venv.sh
を実行し、以下のように編集
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# Create venv
cd ${HOME}/.local/venv
source tf220pt170/bin/activate
# Install requires
pip3 install ${UPLOAD_PATH}/PyYAML-5.3.1-cp38-cp38-linux_aarch64.whl
#pip3 install ${UPLOAD_PATH}/numpy-1.19.0-cp38-cp38-linux_aarch64.whl
pip3 install ${UPLOAD_PATH}/cloudpickle-1.3.0-py2.py3-none-any.whl ${UPLOAD_PATH}/psutil-5.7.0-cp38-cp38-linux_aarch64.whl ${UPLOAD_PATH}/tqdm-4.46.0-py2.py3-none-any.whl ${UPLOAD_PATH}/cffi-1.14.0-cp38-cp38-linux_aarch64.whl ${UPLOAD_PATH}/pycparser-2.20-py2.py3-none-any.whl
#pip3 install ${UPLOAD_PATH}/six-1.14.0-py2.py3-none-any.whl
pip3 install ${UPLOAD_PATH}/attrs-20.3.0-py2.py3-none-any.whl ${UPLOAD_PATH}/dataclasses-0.6-py3-none-any.whl ${UPLOAD_PATH}/hypothesis-6.0.2-py3-none-any.whl ${UPLOAD_PATH}/sortedcontainers-2.3.0-py2.py3-none-any.whl ${UPLOAD_PATH}/typing_extensions-3.7.4.3-py3-none-any.whl
#pip3 install ${UPLOAD_PATH}/Cython-0.29.21-py2.py3-none-any.whl ${UPLOAD_PATH}/attrs-20.3.0-py2.py3-none-any.whl ${UPLOAD_PATH}/dataclasses-0.6-py3-none-any.whl ${UPLOAD_PATH}/hypothesis-6.0.2-py3-none-any.whl ${UPLOAD_PATH}/sortedcontainers-2.3.0-py2.py3-none-any.whl ${UPLOAD_PATH}/typing_extensions-3.7.4.3-py3-none-any.whl
-
pjsub 3_venv.sh
を実行 - 完了メールが来たら
3_venv.sh.XXXXXX.out
を参照し、正常に完了したことを確認する - 以下のコマンドを実行し、必要なPythonパッケージが導入済みであることを確認する
pjsub --interact -L "node=1" -L "rscgrp=int" -L "elapse=6:00:00" --sparam "wait-time=600"
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
cd ${HOME}/.local/venv/tf220pt170
source bin/activate
pip3 list
exit
PyTorch 本体のインストール
-
vi 4_pytorch_install.sh
を実行し、以下のように編集(新規作成)
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
export USE_LAPACK=1
export USE_NNPACK=0
export USE_XNNPACK=0
export USE_NATIVE_ARCH=1
export MAX_JOBS=48
# Create venv
cd ${HOME}/.local/venv/tf220pt170
source bin/activate
#export TCSDS_PATH=/opt/FJSVxtclanga/tcsds-1.2.34
export CC="${TCSDS_PATH}/bin/fcc -Nclang -Kfast -Knolargepage -lpthread"
export CXX="${TCSDS_PATH}/bin/FCC -Nclang -Kfast -Knolargepage -lpthread"
# Build PyTorch
#cd ${PYTORCH_INSTALL_PATH}
cd ${HOME}/projects/pytorch/scripts/fujitsu
cd ../../
pushd third_party/ideep/mkl-dnn/src/cpu/aarch64/xbyak_translator_aarch64/translator/third_party
mkdir -p build_xed_aarch64
cd build_xed_aarch64/
../xed/mfile.py --shared --cc="${TCSDS_PATH}/bin/fcc -Nclang -Kfast -Knolargepage" --cxx="${TCSDS_PATH}/bin/FCC -Nclang -Kfast -Knolargepage" examples install
cd kits
ln -sf xed-install-base-* xed
cd ../../../../
make -j48
popd
pwd
#export XED_ROOT_DIR=/home/ra010001/data/.local/lib
export XED_ROOT_DIR=`pwd`/third_party/ideep/mkl-dnn/src/cpu/aarch64/xbyak_translator_aarch64/translator/third_party/build_xed_aarch64/kits/xed/lib
cp ${XED_ROOT_DIR}/libxed.so ${HOMe}/.local/lib/libxed.so
python3 setup.py clean
python3 setup.py install
-
chmod +x 4_pytorch_install.sh
を実行 -
pjsub 4_pytorch_install.sh
を実行 - 完了メールが来たら
4_pytorch_install.sh.XXXXXX.out
を参照し、正常に完了したことを確認 - 以下のコマンドを実行し、PyTorchパッケージが導入済みであることを確認する
pjsub --interact -L "node=1" -L "rscgrp=int" -L "elapse=6:00:00" --sparam "wait-time=600"
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
cd ${HOME}/.local/venv/tf220pt170
source bin/activate
pip3 list
python3 -c 'import torch; print("PyTorch: ", torch.__version__)'
exit
Torchvision前提(JPEG)ライブラリのインストール
-
vi 5_jpeg.sh
を実行し、以下のように編集する
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# Create venv
cd ${HOME}/.local/venv/tensorflow
source bin/activate
export CC="${TCSDS_PATH}/bin/fcc -Nclang -Kfast -Knolargepage -lpthread"
export CXX="${TCSDS_PATH}/bin/FCC -Nclang -Kfast -Knolargepage -lpthread"
# Build jpeg-9d
cd ${DOWNLOAD_PATH}
cd jpeg-9d/
./configure --prefix=${HOME}/.local --enable-shared
make clean
make -j32
make install
cd ${HOME}/.local/lib
ls -la
-
pjsub 5_jpeg.sh.sh
を実行 - 完了メールが来たら
5_jpeg.sh.XXXXXX.out
を参照し、正常に完了したことを確認する
Torchvisionパッケージのインストール
-
vi 6_vision.sh
を実行し、以下のように編集する
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# Create venv
cd ${HOME}/.local/venv/tensorflow
source bin/activate
export CC="${TCSDS_PATH}/bin/fcc -Nclang -Kfast -Knolargepage -lpthread"
export CXX="${TCSDS_PATH}/bin/FCC -Nclang -Kfast -Knolargepage -lpthread"
# Install Pillow
cd ${DOWNLOAD_PATH}
cd Pillow
MAX_CONCURRENCY=8 CFLAGS="-I${HOME}/.local/include" python3 setup.py install
cd ../
# Install torchvision
cd vision
python3 setup.py clean
python3 setup.py install
pip3 list
-
pjsub 6_vision.sh
を実行 - 完了メールが来たら
6_vision.sh.XXXXXX.out
を参照し、正常に完了したことを確認する
Horovodパッケージののインストール
-
vi 7_horovod.sh
を実行し、以下のように編集する
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# Create venv
cd ${HOME}/.local/venv/tensorflow
source bin/activate
export MPI_HOME=${TCSDS_PATH}
export HOROVOD_MPICXX_SHOW="${MPI_HOME}/bin/mpiFCC -show"
export CC="${TCSDS_PATH}/bin/fcc -Nclang -Kfast -Knolargepage -lpthread"
export CXX="${TCSDS_PATH}/bin/FCC -Nclang -Kfast -Knolargepage -lpthread"
cd ${DOWNLOAD_PATH}/horovod
HOROVOD_WITHOUT_MXNET=1 HOROVOD_WITHOUT_GLOO=1 HOROVOD_WITH_MPI=1 HOROVOD_WITH_PYTORCH=1 HOROVOD_WITH_TENSORFLOW=1 python3 setup.py clean
HOROVOD_WITHOUT_MXNET=1 HOROVOD_WITHOUT_GLOO=1 HOROVOD_WITH_MPI=1 HOROVOD_WITH_PYTORCH=1 HOROVOD_WITH_TENSORFLOW=1 python3 setup.py install
pip3 list
-
pjsub 7_horovod.sh
を実行 - 完了メールが来たら
7_horovod.sh.XXXXXX.out
を参照し、正常に完了したことを確認する
TensorFlow/PyTorch、horovod がインストールされていることを確認する
-
vi 8_check.sh
を実行し、以下のように編集する
#!/bin/bash
#PJM -L "rscunit=your_rscunit"
#PJM -L "rscgrp=small"
#PJM -L elapse=10:00:00
#PJM -L "node=1"
#PJM -j
#PJM -m b,e,s
#PJM --mail-list "yourmail@address"
#PJM -S
. env.src
export LD_LIBRARY_PATH=${HOME}/.local/lib:.:${LD_LIBRARY_PATH}
export PATH=${HOME}/.local/bin:.:${PATH}
# venv
cd ${HOME}/.local/venv/tf220_pt170
source bin/activate
# check
pip3 list
python3 -c 'import torch; print("PyTorch: ", torch.__version__)'
python3 -c 'import torchvision'
python3 -c 'import horovod.torch as hvd'
python3 -c 'import tensorflow as tf; print("TensorFlow: ", tf.__version__)'
python3 -c 'import horovod.tensorflow as hvd'
echo "check done!"
-
pjsub 8_check.sh
を実行 - 完了メールが来たら
8_check.sh.XXXXXX.out
を参照し、正常に完了したことを確認する
ちなみに、プリポストノードではGPU搭載ノードが8ノード存在する。
このGPUノードではPyPI管理のTensorFlowをpipインストールできる。
ログインノードにSSH接続して以下のコマンドを実行することで ${HOME}/.local/venv/gpu
にtensorflow-gpuをインストールしたvenv環境 gpu
を作成できる。ご参考まで。
export ENV_NAME="gpu"
srun -p ppsq -N 1 --time=10:00:00 --pty bash -i
mkdir -p ${HOME}/.local/venv
cd ${HOME}/.local/venv
python3 -m venv ${ENV_NAME}
source ${ENV_NAME}/bin/activate
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.2/lib64
export PATH=${PATH}:/usr/local/cuda-11.2/bin:.
pip3 install tensorflow-gpu
exit
Slurmバッチでvenv環境を使いたい場合は、以下のように記述する。
#!/bin/bash
#SBATCH -p ppsq
#SBATCH --time=24:00:00
#SBATCH --gpus=1
#SBATCH --gpus-per-node=1
#SBATCH --gpus-per-task=1
#SBATCH --mail-type="ALL"
#SBATCH --mail-user="hogegoge@fugafuga.com"
#SBATCH -J "use_tfgpu"
#SBATCH --comment="use tensorflow on gpu node"
# use venv
export ENV_NAME="gpu"
mkdir -p ${HOME}/.local/venv/${ENV_NAME}
source bin/activate
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.2/lib64
export PATH=${PATH}:/usr/local/cuda-11.2/bin:.
#main
cd ${HOME}
:
ご参考まで。