Skip to content

TensorFlow oneDNN build manual for FUJITSU Software Compiler Package (TensorFlow v2.2.0) JP

Kazutoshi, Akao edited this page Sep 8, 2021 · 11 revisions

富士通 Supercomputer PRIMEHPC FX1000/FX700 上の TensorFlow 構築手順

目次

  1. はじめに
  2. 環境と前提条件
  3. インストール手順
  4. トラブルシューティング
  5. ソフトウェア版数一覧

1. はじめに

本書は富士通Supercomputer PRIMEHPC FX1000, FX700 上に TensorFlow をインストールするための手順書です。
また、サンプルとしていくつかの重要モデルを FX1000, FX700 用に最適化したものをインストール、実行するための手順も提供します。

TensorFlow のビルドは、インターネットに直接 (またはproxy経由で) アクセスできるシステム上で行う必要があります。 しかし、企業の実験室など外部と遮断された環境への導入要望も多いため、 暫定的にそのような環境へのインストール手順も示しています (この手順書ではこれを「オフラインインストール」と呼びます)。 この手順はまだベータテストレベルであり動作を保証するものではありません。 可能な限り、インターネットに接続されたシステムでインストールしてください。

オフラインインストールでは、 予めインターネットに接続されているシステム(以下「ダウンロード用システム」)で 必要なファイル一式をダウンロードしておき、 それをインストール対象システム(以下「インストール対象システム」)に転送してビルドします。

1.1. 用語について

本書では以下の用語・略語を使用します。

用語・略語 意味
オンラインインストール インターネットに直接アクセスできるシステムにTensorFlowをインストールすること
オフラインインストール インターネットにアクセスできないシステムにTensorFlowをインストールすること
インストール対象システム TensorFlowをインストールする対象システム
ダウンロード用システム オフラインインストール用に、必要なファイルを予めダウンロードするシステム
TCS FX1000のジョブ実行スケジューラやコンパイラ・ライブラリ環境 (Technical Computing Suite)
CP FX700のコンパイラ・ライブラリ環境 (Compiler Package)

2. 環境と前提条件

2.1. ダウンロード用システム

  • OSはUNIXまたはLinux
  • bash, python3, wget, git, unzip, tar, curl が実行可能なこと
  • インストール対象システムへアクセス可能であること
  • ファイルシステムに十分な空容量があること ダウンロードデータ量は以下の通りです。ビルドには別途20GB必要です
    • TensorFlow 構築用にダウンロードするファイル容量はおよそ2GBです (TensorFlowのソースを含む)。
    • サンプルモデル (ResNet, OpenNMT, BERT) の構築・実行に必要なファイルの容量は、上記とは別におよそ2GB程度です。
    • サンプルモデル Mask RCNN のダウンロードにはさらに30GB必要です

なお、ダウンロード先のディレクトリはTensorFlowのソースディレクトリ配下になります (変更はできません)。

2.2. インストール対象システム

  • PRIMEHPC FX1000 または FX700
  • FX700 の場合
    • RHEL 8.x または CentOS 8.x がインストールされていること
    • FCC で環境を構築するなら Compiler Package V10L20がインストールされていること
  • 以下のパッケージ、コマンドがインストール済であること
    make gcc cmake libffi-devel gcc-gfortran numactl git patch unzip tk tcsh tcl lsof python3 pciutils
    (Mask-RCNN サンプルモデルを実行する場合) libxml2 libxslt libxslt-devel libxml2-devel
  • 空き容量75GB以上のストレージがあること

なお、NFS上でのビルド、実行はNFSサーバの性能や設定により予期せぬトラブルが起こることがありますのでご注意ください。
ローカルに接続されたストレージか、十分に高速なネットワークストレージを使うことをお薦めします。

2.3. インストール後のディレクトリ構成

インストール後のディレクトリ構成は以下のようになります。 それぞれディレクトリ PREFIX, VENV_PATH, TCSDS_PATH はインストール用の設定ファイル env.src で指定します。 TENSORFLOW_TOP も含めた4ディレクトリは、互いに独立したディレクトリを指定するようにしてください。 (あるディレクトリが、別のディレクトリの下にならないようにしてください)

  PREFIX  (ローカルバイナリ置き場)
    +- bin (Python など)
    +- lib

  VENV_PATH  (TensorFlow実行に必要なpythonモジュール置き場)
    +- bin (activate)
    +- lib (pip でインストールするパッケージ類)

  TCSDS_PATH  (富士通コンパイラ、※: 手順実行前にインストール済)
    +- bin (fcc, FCC など)
    +- lib64

  TENSORFLOW_TOP  (TensorFlow ソース一式, ダウンロード用システムから転送、またはhttps://www.github.com/fujitsu/tensorflowからダウンロードしたもの)
    +- tensorflow
    +- third_party
    +- fcc_build_script
         +- down  (ダウンロードしたファイルが格納される)
         +- sample_script (resnet, OpenNMT, BERT, Mask RCNN 各モデルのソースはこの下に展開される)

2.4. proxy 設定について

お使いの環境が、外部アクセスにproxyを通す必要がある環境の場合、以下の環境変数を設定してください。
(user, pass, proxy_url, port はお使いの環境に合ったものに置き換えてください。)

$ export http_proxy=http://user:pass@proxy_url:port
$ export https_proxy=https://user:pass@proxy_url:port

注: curl, wget, git, pip3, bazel, は上記環境変数を認識するので、rc や .gitconfig の設定は不要です。

3. インストール手順

大まかな流れは以下のようになります。

  1. 前準備 (オフラインインストール・オンラインインストール共通)
  2. ダウンロード用システムで実行
  3. インストール対象システムで実行

3.1. 前準備 (詳細)

3.1-A. ソース一式をダウンロードする

$ git clone https://github.com/fujitsu/tensorflow.git
$ cd tensorflow                                         # これ以降このディレクトリを TENSORFLOW_TOP と呼びます
$ git checkout -b fujitsu_v2.2.0_for_a64fx origin/fujitsu_v2.2.0_for_a64fx

以降の例では /home/user/tensorflow を TENSORFLOW_TOP として例示してあります。

3.1-B. env.srcを編集する

env.src は $TENSORFLOW_TOP/fcc_build_script にあります。

設定は大きく2つの部分に分れています。

  • 構築の方法を制御する

    フラグ名 初期設定値 意味 補足
    fjenv_use_venv true true だと VENVを使う 設定なしは動作未検証なので、変更しないでください
    fjenv_use_fcc true true だと FCCを使う 設定なしは動作未検証なので、変更しないでください
    fjenv_offline_install 未定義 (false) true だとオフラインインストールを行う
  • 構築ディレクトリを設定する
    ディレクトリ構成図は3章冒頭を参照してください。

    変数名 意味 補足
    PREFIX この構築手順で生成される実行ファイルをインストールするディレクトリ
    VENV_PATH VENVをインストールするディレクトリ名 use_venv 設定時のみ有効
    TCSDS_PATH TCS, CP のベースディレクトリ名 (ベースディレクトリ: bin, lib などを含むディレクトリ) use_fcc 設定時のみ有効

3.2. ダウンロード用システム手順 (詳細)

この節はオフラインインストールする場合の追加手順です。 インターネット接続システムにインストールする場合は、 この節は飛ばして3.3に進んでください。

3.2-A. TensorFlow本体のビルドに必要なファイルをダウンロードする

fcc_build_script ディレクトリにある、0で始まるシェルスクリプトを順次実行してください。
ダウンロード先は $TENSORFLOW_TOP/fcc_build_script/down です。(変更できません)

$ pwd
/home/user/tensorflow/fcc_build_script          # $TENSORFLOW_TOP/fcc_build_script

$ bash 01_python_build.sh        download       # Python のダウンロード (23MB)
$ bash 02_bazel_build.sh         download       # bazel のダウンロード (163MB)
$ bash 03_oneDNN_build.sh        download       # oneDNN のダウンロード (286MB)
$ bash 04_make_venv.sh           download       # TensorFlow 関連のpythonモジュールダウンロード (208MB)
$ bash 05-0_set_tf_src.sh        download       # TensorFlow セットアップ (なし)
$ bash 05-1_build_batchedblas.sh download       # BatchedBlas ダウンロード (0.8MB)
$ bash 05_tf_build.sh            download       # TensorFlow ビルドに必要なモジュールダウンロード (261MB)
$ bash 06_tf_install.sh          download       # TensorFlow インストール用ダウンロード (なし)
$ bash 07_horovod_install.sh     download       # Horovod のダウンロード (なし)
                                                # 合計 941MB

スクリプトは、すでにダウンロードずみのファイルがある場合はダウンロードを行わないようになっています。
再度ダウンロードを行いたい場合は、まず、各スクリプトの引数に clean を指定して実行した後、download を指定して実行してください。 cleandownload より優先度が高いので、clean download あるいは download clean と指定すると clean が実行されます。

3.2-B. (オプショナル) サンプルモデル構築に必要なファイルをダウンロードする

sample_script 配下にサンプルモデルごとのディレクトリがあります。 そのディレクトリ内にある、数字で始まるシェルスクリプトを、 数字の小さい方から順番に、 引数 download をあたえて実行してください。
(シェルスクリプトはビルド用と実行用がありますが、実行用スクリプトに download を指定して実行しても害はありません)

ダウンロードサイズは以下のようになります。

ディレクトリ名 サイズ (MB)
sample_script/01_resnet 578MB
sample_script/02_OpenNMT 43MB
sample_script/03_Bert 995MB
sample_script/04_Mask-R-CNN 30000MB
合計 31616MB (31GB)

こちらのスクリプトも上と同様、何度実行して再ダウンロードは行いません。
再度ダウンロードを行いたい場合はまず各スクリプトに clean を指定して実行し、その後で download を指定して実行してください。

3.2-C. インストール対象システムに転送する

TENSORFLOW_TOP以下すべてのファイルを転送します。

具体的な方法は各システム構成により異なるので記載しません。
scp, ftp, 共有ディレクトリ使用、など、システムに応じた方法で転送してください。

3.3. インストール対象システム手順 (詳細)

3.3-A. TensorFlow本体をビルドする

数字で始まるスクリプトを順次実行していきます。 以下の例は対話型シェルでインストールする場合の例です。コメントの後ろにおおよその所要時間を示してあります (FX700 2.0GHz 48core の実測結果)。
ジョブ制御システムを使用する場合は、一連のシェルスクリプトを実行するスクリプトを用意して、お使いのジョブ制御システムの構文に従い投入してください。

$ pwd
/home/user/tensorflow/fcc_build_script          # $TENSORFLOW_TOP/fcc_build_script

$ bash 01_python_build.sh          [option]     # python のビルドとインストール (5分)
$ bash 02_bazel_build.sh 	   [option]     # bazel のインストール (ビルドは行わない, 一瞬)
$ bash 03_oneDNN_build.sh 	   [option]     # oneDNN のビルドとインストール (30分)
$ bash 04_make_venv.sh 		   [option]     # VENV 作成 (70分)
$ bash 05-0_set_tf_src.sh 	   [option]     # TensorFlow ビルドの前準備 (一瞬)
$ bash 05-1_build_batchedblas.sh   [option]     # BatchedBlas のビルド (数秒)
$ bash 05_tf_build.sh 		   [option]     # TensorFlow のビルド (45分)
$ bash 06_tf_install.sh 	   [option]     # TensorFlow の whl パッケージ作成とインストール (5分)
$ bash 07_horovod_install.sh 	   [option]     # Horovod のインストール (5分)

正しくビルドできたかどうかの確認にはサンプルモデル01_ResNet (下記) を実行してください。

スクリプトは、すでにビルド済みの場合は再ビルドしないようになっています。 再ビルドしたい場合はoptionに rebuild を指定してください。
clean と間違えないようにしてください。clean を指定するとダウンロード済みのファイルを消去するので、オフラインインストールにおいてインストール対象システムで指定すると、再度転送が必要になります。

3.3-B. (オプショナル) サンプルモデルを構築する

sample_script 配下に各サンプルモデルごとのディレクトリがあります。 そのディレクトリ内にある、数字で始まるシェルスクリプトを、 数字の小さい方から順番に実行してください。

以下に構築方法と実行確認方法を示します。 実行確認は学習1ステップの実行速度で行いますが、 深層学習モデルの実行速度は10~20%のくらいの変動があるため、 本書に記載した実行速度を目安に、おおよそその範囲にあれば正しく構築できていると判断できます。 また、サンプルモデルの設定は必ずしも最速になっているわけではないことに留意してください。

01_resnet

google の公式モデル(TensorFlow v1.x用)を使用します。 https://github.com/tensorflow/models/official/r1/resnet
Tag: v2.0 (2019/10/15)

$ pwd
/home/user/tensorflow/fcc_build_script/sample_script/01_resnet

$ bash 10_setup_resnet.sh  [option]  # モデル構築 (一瞬)
$ bash 11_train_resnet-single.sh     # 動作確認 (1ノード, 1プロセス、12コア, ダミーデータ) (5分)
$ bash 12_train_resnet-4process.sh   # 動作確認 (1ノード, 4プロセス、12コア/プロセス, ダミーデータ) (5分)

11_train_resnet-single.sh の実行結果確認方法は以下の通りです。(以下FX700の結果。FX1000だと10%くらい速い)

$ bash 11_train_resnet-single.sh     # 実行 (1プロセス、12コア)
### Start at Mon Aug  9 07:52:23 JST 2021, 11_train_resnet-single.sh rebuild
  (省略)
INFO:tensorflow:cross_entropy = 7.6896524, learning_rate = 0.0, train_accuracy = 0.0                          ★ 学習実行
I0809 07:54:59.046092 281473418508384 basic_session_run_hooks.py:262] cross_entropy = 7.6896524, learning_rate = 0.0, train_accuracy = 0.0
INFO:tensorflow:loss = 9.084746, step = 0
I0809 07:54:59.051896 281473418508384 basic_session_run_hooks.py:262] loss = 9.084746, step = 0
INFO:tensorflow:global_step/sec: 0.093041
I0809 07:55:09.795205 281473418508384 basic_session_run_hooks.py:702] global_step/sec: 0.093041
INFO:tensorflow:loss = 9.084746, step = 1 (10.747 sec)
I0809 07:55:09.799176 281473418508384 basic_session_run_hooks.py:260] loss = 9.084746, step = 1 (10.747 sec)  ★ 1ステップ目の実行時間は無視する
INFO:tensorflow:global_step/sec: 0.409492
I0809 07:55:12.232794 281473418508384 basic_session_run_hooks.py:702] global_step/sec: 0.409492
INFO:tensorflow:loss = 9.078741, step = 2 (2.435 sec)
I0809 07:55:12.233708 281473418508384 basic_session_run_hooks.py:260] loss = 9.078741, step = 2 (2.435 sec)   ★ 2ステップ目以降の実行時間が2.2秒付近ならOK
INFO:tensorflow:global_step/sec: 0.428228                                                                     ★ 実行時間のばらつきが大きいので2~2.5秒なら
I0809 07:55:14.568248 281473418508384 basic_session_run_hooks.py:702] global_step/sec: 0.428228
INFO:tensorflow:loss = 9.061764, step = 3 (2.335 sec)
I0809 07:55:14.569161 281473418508384 basic_session_run_hooks.py:260] loss = 9.061764, step = 3 (2.335 sec)   ★ 以下24ステップまで表示される
  (約100行略)
INFO:tensorflow:Starting to evaluate.                                                                         ★ 推論実行
  (約10行略)
INFO:tensorflow:step = 1 time = 2.669 [sec]
I0809 07:56:43.429035 281473418508384 resnet_run_loop.py:777] step = 1 time = 2.669 [sec]                     ★ 1ステップ目の実行時間は無視する
INFO:tensorflow:step = 2 time = 0.801 [sec]
I0809 07:56:44.231100 281473418508384 resnet_run_loop.py:777] step = 2 time = 0.801 [sec]                     ★ 2ステップ目以降の実行時間が0.8秒付近ならOK
INFO:tensorflow:Evaluation [2/25]
I0809 07:56:44.231565 281473418508384 evaluation.py:167] Evaluation [2/25]
INFO:tensorflow:step = 3 time = 0.801 [sec]
I0809 07:56:45.033299 281473418508384 resnet_run_loop.py:777] step = 3 time = 0.801 [sec]
INFO:tensorflow:step = 4 time = 0.801 [sec]
I0809 07:56:45.835202 281473418508384 resnet_run_loop.py:777] step = 4 time = 0.801 [sec]
  (後略)

12_train_resnet-4process.sh の結果も同様に確認できます。 このスクリプトではTensorFlowを4つ起動し、各TensorFlowが11_train_resnet-single.shと同じ条件の学習・推論を行うので、 全体の処理量は4倍になっています。このため、ひとつのTensorFlowの結果で比べると 11_train_resnet-single.shよりも多少性能が悪くなることに注意してください。

$ bash 12_train_resnet-4process.sh   # 実行 (4プロセス、16コア/プロセス, Horovod 使用)
  (約800行略)
I0807 14:06:28.097440 281473036105824 basic_session_run_hooks.py:260] loss = 8.829225, step = 2 (2.641 sec)   ★ 2ステップ目以降の実行時間が2秒台後半~3秒前半
INFO:tensorflow:loss = 9.032612, step = 2 (2.647 sec)
I0807 14:06:28.097791 281473726658656 basic_session_run_hooks.py:260] loss = 9.032612, step = 2 (2.647 sec)   ★ 4つのTensorFlowが結果を出力する
INFO:tensorflow:global_step/sec: 0.379547
INFO:tensorflow:global_step/sec: 0.377129
I0807 14:06:28.097860 281472940488800 basic_session_run_hooks.py:702] global_step/sec: 0.379547
INFO:tensorflow:loss = 9.16524, step = 2 (2.631 sec)
I0807 14:06:28.098806 281472940488800 basic_session_run_hooks.py:260] loss = 9.16524, step = 2 (2.631 sec)
I0807 14:06:28.098345 281473435875424 basic_session_run_hooks.py:702] global_step/sec: 0.377129
INFO:tensorflow:loss = 8.870877, step = 2 (2.644 sec)
I0807 14:06:28.099238 281473435875424 basic_session_run_hooks.py:260] loss = 8.870877, step = 2 (2.644 sec)
INFO:tensorflow:global_step/sec: 0.386664
INFO:tensorflow:global_step/sec: 0.386681
I0807 14:06:30.682776 281473036105824 basic_session_run_hooks.py:702] global_step/sec: 0.386664
I0807 14:06:30.683004 281473726658656 basic_session_run_hooks.py:702] global_step/sec: 0.386681
INFO:tensorflow:loss = 8.824974, step = 3 (2.586 sec)
I0807 14:06:30.683686 281473036105824 basic_session_run_hooks.py:260] loss = 8.824974, step = 3 (2.586 sec)
INFO:tensorflow:global_step/sec: 0.386693
INFO:tensorflow:loss = 9.028437, step = 3 (2.586 sec)
I0807 14:06:30.683933 281473726658656 basic_session_run_hooks.py:260] loss = 9.028437, step = 3 (2.586 sec)
I0807 14:06:30.683835 281472940488800 basic_session_run_hooks.py:702] global_step/sec: 0.386693
INFO:tensorflow:global_step/sec: 0.386609
INFO:tensorflow:loss = 9.161036, step = 3 (2.586 sec)
I0807 14:06:30.684726 281472940488800 basic_session_run_hooks.py:260] loss = 9.161036, step = 3 (2.586 sec)
I0807 14:06:30.684346 281473435875424 basic_session_run_hooks.py:702] global_step/sec: 0.386609
INFO:tensorflow:loss = 8.866662, step = 3 (2.586 sec)
I0807 14:06:30.685310 281473435875424 basic_session_run_hooks.py:260] loss = 8.866662, step = 3 (2.586 sec)
  (中略)
INFO:tensorflow:Starting to evaluate.                                                                         ★ 推論実行
  (中略)
I0809 08:02:16.188597 281473151645792 resnet_run_loop.py:777] step = 2 time = 0.697 [sec]                     ★ 2ステップ目以降の実行時間が0.7~0.8付近ならOK
INFO:tensorflow:Evaluation [2/25]                                                                             ★ 4並列の推論は1並列よりもばらつきが大きい
I0809 08:02:16.189082 281473151645792 evaluation.py:167] Evaluation [2/25]
INFO:tensorflow:step = 2 time = 0.689 [sec]
I0809 08:02:16.301140 281472830257248 resnet_run_loop.py:777] step = 2 time = 0.689 [sec]
INFO:tensorflow:Evaluation [2/25]
I0809 08:02:16.301596 281472830257248 evaluation.py:167] Evaluation [2/25]
INFO:tensorflow:step = 1 time = 2.811 [sec]
I0809 08:02:16.357173 281472819312736 resnet_run_loop.py:777] step = 2 time = 0.745 [sec]
INFO:tensorflow:Evaluation [2/25]
I0809 08:02:16.357645 281472819312736 evaluation.py:167] Evaluation [2/25]
INFO:tensorflow:step = 3 time = 0.715 [sec]
I0809 08:02:16.904115 281473151645792 resnet_run_loop.py:777] step = 3 time = 0.715 [sec]
INFO:tensorflow:step = 3 time = 0.709 [sec]
I0809 08:02:17.010920 281472830257248 resnet_run_loop.py:777] step = 3 time = 0.709 [sec]
INFO:tensorflow:step = 2 time = 0.718 [sec]

02_OpenNMT

英語とドイツ語の文を対で入力し、翻訳の学習します。

https://github.com/OpenNMT/OpenNMT-tf
Tag: v2.11.0 (2020/6/17)

$ pwd
/home/user/tensorflow/fcc_build_script/sample_script/02_OpenNMT

$ bash 20_setup_OpenNMT.sh                           # セットアップ (2~3分)
$ bash 21_train_OpenNMT_Transformer-single.sh        # 動作確認 (1ノード, 1プロセス、24コア, 英文-独文) (7分)
$ bash 22_train_OpenNMT_Transformer-2process.sh      # 動作確認 (1ノード, 2プロセス、24コア/プロセス, 英文-独文) (7分)

動作速度は、出力のsource words/sで確認できます。 このタスクは速度の変動が激しいので、最大値を確認してください。

INFO:tensorflow:Step = 1 ; steps/s = 0.00, source words/s = 20, target words/s = 20 ; Learning rate = 0.000000 ; Loss = 10.504834
INFO:tensorflow:Saved checkpoint run/ckpt-1
INFO:tensorflow:Step = 2 ; steps/s = 0.13, source words/s = 736, target words/s = 735 ; Learning rate = 0.000000 ; Loss = 10.511767
INFO:tensorflow:Step = 3 ; steps/s = 0.24, source words/s = 1385, target words/s = 1347 ; Learning rate = 0.000000 ; Loss = 10.509029
INFO:tensorflow:Step = 4 ; steps/s = 0.22, source words/s = 1251, target words/s = 1243 ; Learning rate = 0.000001 ; Loss = 10.506723
INFO:tensorflow:Step = 5 ; steps/s = 0.24, source words/s = 1343, target words/s = 1330 ; Learning rate = 0.000001 ; Loss = 10.499746

FX700(2.0GHz)の場合、21_train_OpenNMT_Transformer-single.sh なら最大で1350くらい、 22_train_OpenNMT_Transformer-2process.sh なら2400くらいまで出ていれば正しく動作しています。

03_Bert

google の公式モデルを使用します。

https://github.com/tensorflow/models/official/nlp/bert
Tag: v2.2.0 (2020/4/15)

2種類のタスクを実行します。

$ pwd
/home/user/tensorflow/fcc_build_script/sample_script/03_Bert

$ bash 300_setup_bert.sh                                # セットアップ (2~3分)
$ bash 311_create_pretraining_data.sh                   # 1つ目のタスクのデータ作成 (1分)
$ bash 312_run_pretraining.sh                           # 1つ目のタスク実行 (1ノード, 1プロセス、24コア) (10分)
$ bash 313_run_pretraining-2process.sh                  # 1つ目のタスク実行 (1ノード, 2プロセス、24コア/プロセス) (8分)
$ bash 321_create_finetuning_data.sh                    # 2つ目のタスクのデータ作成 (1分)
$ bash 322_run_finetuning.sh                            # 2つ目のタスク実行 (1ノード, 2プロセス、24コア/プロセス) (8分)
$ bash 323_run_finetuning-2process.sh                   # 2つ目のタスク実行 (1ノード, 2プロセス、24コア/プロセス) (8分)

1つ目のタスクの動作速度は、出力の TimeHistory で確認できます。

I0807 14:45:34.346899 281473323284576 keras_utils.py:119] TimeHistory: 17.58 seconds, 10.92 examples/second between steps 88 and 92
I0807 14:45:34.350614 281473323284576 model_training_utils.py:444] Train Step: 92/100  / loss = 7.7405781745910645
I0807 14:45:38.730090 281473323284576 model_training_utils.py:444] Train Step: 93/100  / loss = 8.055837631225586
I0807 14:45:43.144752 281473323284576 model_training_utils.py:444] Train Step: 94/100  / loss = 7.836669445037842
I0807 14:45:47.515263 281473323284576 model_training_utils.py:444] Train Step: 95/100  / loss = 7.881825923919678
I0807 14:45:51.936028 281473323284576 keras_utils.py:119] TimeHistory: 17.57 seconds, 10.93 examples/second between steps 92 and 96
I0807 14:45:51.940003 281473323284576 model_training_utils.py:444] Train Step: 96/100  / loss = 7.87914514541626
I0807 14:45:56.288466 281473323284576 model_training_utils.py:444] Train Step: 97/100  / loss = 7.819365978240967
I0807 14:46:00.629250 281473323284576 model_training_utils.py:444] Train Step: 98/100  / loss = 7.822110652923584
I0807 14:46:05.090573 281473323284576 model_training_utils.py:444] Train Step: 99/100  / loss = 7.909728527069092
I0807 14:46:09.439723 281473323284576 keras_utils.py:119] TimeHistory: 17.48 seconds, 10.98 examples/second between steps 96 and 100

FX700(2.0GHz)の場合、

  • 312_run_pretraining.sh なら 17秒 (11 examples/second) 程度、
  • 313_run_pretraining-2process.sh なら 22秒 (9 examples/second) 程度

が出ていれば正しく動作しています。

2つ目のタスクの動作速度も TimeHistory で確認できます。

FX700(2.0GHz)の場合、

  • 322_run_finetuning.sh なら 40秒 (11 examples/second) 程度、
  • 323_run_finetuning-2process.sh なら 54秒 (9 examples/second) 程度

が出ていれば正しく動作しています。

04_Mask-R-CNN

google の公式モデルを使用します。

https://github.com/tensorflow/models/research/object_detection
Commit id: dc4d11216b (2020/11/8)

  $ pwd
  /home/user/tensorflow/fcc_build_script/sample_script/04_Mask-R-CNN
  
  $ bash 40_setup_mask-r-cnn.sh                           # セットアップ (30分)
  $ bash 41-0_download_traindata.sh                       # 学習データ(26GB)ダウンロード (オフラインインストールなら何もしない)
  $ bash 41-1_setup_traindata.sh                          # 学習データ加工 (3時間30分)
  $ bash 42_train_maskrcnn_single.sh                      # タスク実行 (1ノード, 1プロセス、24コア) (8分)
  $ bash 43_train_maskrcnn_multi.sh                       # タスク実行 (1ノード, 2プロセス、24コア/プロセス) (25分)

タスクの動作速度は、出力の per-step time で確認できます。

  INFO:tensorflow:Step 1 per-step time 284.779s loss=9.175
  INFO:tensorflow:Step 2 per-step time 4.036s loss=8.950
  INFO:tensorflow:Step 3 per-step time 4.115s loss=8.899
  INFO:tensorflow:Step 4 per-step time 3.995s loss=8.738
  INFO:tensorflow:Step 5 per-step time 4.150s loss=8.442
  INFO:tensorflow:Step 6 per-step time 3.905s loss=8.288

FX700(2.0GHz)の場合、 42_train_maskrcnn_single.sh, 43_train_maskrcnn_multi.sh とも4秒程度が出ていれば正しく動作しています。

4. トラブルシューティング

ダウンロード時に git で reference is not a tree

gitのバージョンが古いと起こります。git 2.0 以上を使用してください。

04_make_venv.sh で numpy 作成中にエラー

  • _ctype のエラーが出る場合は libffi-devel が不足していますのでyum installしてください。
  • Fortran が見つからない場合は yum gcc-gfortran してください。

pip が --no-color オプションを受けつけない

スケジューラ配下のpipではこのオプションを受けつけないことがあるようです。
env.src のPIP3_OPTIONSを設定している箇所の、--no-color を空文字列にしてください。

python3 が実行できない

以下の条件に当てはまる場合 'cannot execute binary file: Exec format error' というエラーメッセージが出て実行できません。

  • オフラインインストールを実施している
  • ダウンロード用システムがFX1000,FX700以外である (例:PRIMERGYなどx86サーバ)
  • ダウンロード用システムとインストール対象システムで共通のネットワークストレージを使っており、 そのネットワークストレージにインストールしようとしている
  • TensorFlowは構築済みで、後からサンプルモデルをビルドしようとしている

この場合は、次の1,2いずれかの方法を取ってください。 1 最初に全部ダウンロードしてからビルドする 1 ダウンロードするディレクトリとビルドするディレクトリを分ける

5. ソフトウェア版数一覧

ソフトウェア名 版数)リリース日) ライセンス形態 備考
Python 3.8.2 GPL
TensorFlow 2.2.0 Apache 2.0
bazel 2.0.0 Apache 2.0
oneDNN v2.1.0L01_aarch64
BatchedBlas 1.0 BSD-3
Horovod 0.19.5 Apache 2.0

pip3 list

以下のリストは、2021/8/9のオンラインインストールのものです。 TensorFlow本体とすべてのサンプルモデルをインストールし終えた時点で表示しています。 モジュール版数はインストール日時によって変わることがあるのでご注意ください。

Package                Version
---------------------- ---------
absl-py                0.13.0
astunparse             1.6.3
cachetools             4.2.2
certifi                2021.5.30
charset-normalizer     2.0.4
cloudpickle            1.6.0
contextlib2            21.6.0
cppy                   1.1.0
cycler                 0.10.0
Cython                 0.29.24
dataclasses            0.6
gast                   0.3.3
gin-config             0.4.0
google-auth            1.34.0
google-auth-oauthlib   0.4.5
google-pasta           0.2.0
grpcio                 1.29.0
h5py                   2.10.0
horovod                0.19.5
idna                   3.2
Keras-Applications     1.0.8
Keras-Preprocessing    1.1.2
kiwisolver             1.3.1
lvis                   0.5.3
lxml                   4.6.3
Markdown               3.3.4
matplotlib             3.3.2
numpy                  1.18.4
oauthlib               3.1.1
OpenNMT-tf             2.11.0
opt-einsum             3.3.0
Pillow                 7.2.0
pip                    19.2.3
portalocker            2.0.0
protobuf               3.17.3
psutil                 5.8.0
pyasn1                 0.4.8
pyasn1-modules         0.2.8
pybind11               2.7.1
pycocotools            2.0.2
pyonmttok              1.18.3
pyparsing              2.4.7
pyter3                 0.3
pytest-runner          5.3.1
python-dateutil        2.8.2
PyYAML                 5.3.1
requests               2.26.0
requests-oauthlib      1.3.0
rouge                  1.0.1
rsa                    4.7.2
sacrebleu              1.5.1
scipy                  1.4.1
sentencepiece          0.1.96
setuptools             41.2.0
six                    1.16.0
tensorboard            2.2.2
tensorboard-plugin-wit 1.8.0
tensorflow             2.2.0
tensorflow-addons      0.10.0
tensorflow-estimator   2.2.0
tensorflow-hub         0.12.0
termcolor              1.1.0
tf-slim                1.1.0
typeguard              2.12.1
urllib3                1.26.6
Werkzeug               2.0.1
wheel                  0.36.2
wrapt                  1.12.1

Copyright

Copyright RIKEN, Japan 2021
Copyright FUJITSU LIMITED 2021

Clone this wiki locally