20200707のTensorFlowに関する記事は2件です。

EC2のGPU環境でtensorflow動かしたメモ

機械学習の勉強でTensorflowをCPU環境で動かしていたけど、GPU環境で動かすとどれくらい変わるのか確かめたかった、程度だけど思ったより色々とハードルがあったので今後のためのメモ

GCPで挫折

初期登録時に無料枠があったので、最初にGCPを試した。
CPUインスタンスでサンプルが動いたのでGPUインスタンスを立ち上げようとしたら
Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally
とお断りされた

ここを見るとリソースの割り当てを要求しないといけないらしい
ということで、GPU1個要求したら

Unfortunately, we are unable to grant you additional quota at this time. If 
this is a new project please wait 48h until you resubmit the request or 
until your Billing account has additional history.

と言われて即お断りされた

48時間待ってもう一度リクエストしても無料枠の一部を別のインスタンスで消費してからリクエストしてもやっぱりお断りされたので諦めた。
実際に課金が発生しないとダメなんだろうか

EC2を使ってみる

GCPが無理だったのでEC2を試す。こっちはサービスへの課金履歴があるので同じ問題があっても大丈夫のはず
同じようにCPUインスタンスでサンプルスクリプトの動作確認した後、GPUインスタンスを試した
インスタンスの種類は色々あるが、Tesla T4が接続されたg4dn.xlargeを選択。こちらも同じように制限に引っかかったので上限割り当て変更をリクエスト(GPUインスタンスで使うvCPUの個数を緩和する、という内容のリクエストだった)

課金履歴があるからなのか、こちらのリクエストはすぐ通った

前準備

CUDA Toolkitやらtensorflowやらでそこそこディスクを消費するので、ストレージの容量はデフォルトの8GBだと足りない。16GBあればギリギリなんとかなりそうだけど、20GBにした

125GBのエフェメラルディスクがついてるという説明があったが、使い方がわからなかったのでAWSのインスタンスストアボリューム(エフェメラルストレージ)を参考に設定

  • インスタンス停止時に揮発するが、ソースコードや学習データはこっちにおいて都度ダウンロードで問題なさそう
$ sudo mkfs.ext4 /dev/nvme1n1
$ sudo mkdir /workspace
$ sudo mount /dev/nvme1n1 /workspace

念の為GPUの存在を確認

$ lspci
...
00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
...

CUDAのインストール

CUDA Toolkitを公式の手順に沿ってインストール

ここでGPUの確認をするとエラー

$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

ドライバが必要らしいのでこちらも公式からダウンロード
GPUのシリーズとToolkitのバージョンを選択するのでインスタンスのGPU、CUDA Toolkitのバージョンと一致させる
CUDA Toolkitを2020/07/07時点での最新版11.0-rcにすると、ここで対応するバージョンが見つからなかったのでToolkitを10.2で導入した

sudo ./NVIDIA-Linux-x86_64-418.152.00.run

ここでDKMS経由でインストールしないと再起動時にドライバがロストするという問題が起こるらしい
インスタンスを止めるとドライバ再インストールはまずいのでDKMSを使うように選択する
すると今度は次のエラーに遭遇

Your kernel headers for kernel XXX cannot be found at /lib/modules/XXX/build or /lib/modules/XXX/source.

該当のリンクをたどると確かにリンク切れを起こしている
kernel-develはCUDA Toolkitの依存ライブラリとしてインストールされているのだが、最新版がインストールされてしまうため、必要なカーネルソースと一致しないという状況なのでバージョンが一致するカーネルソースを取得する

sudo yum install "kernel-devel-uname-r == $(uname -r)"

Python/Tensorflow環境

ここはGPUでもCPUでもあまり変わらない。パッケージでtensorflow-gpuがあるのでこちらをpipで入れる

$ sudo yum install python3-pip
$ sudo pip3 install --upgrade pip
$ pip3 install tensorflow-gpu
$ python3
>> import tensorflow as tf
>> hello = tf.constant("Hello World!!")

いくつかのWarningが発生

2020-07-07 08:30:28.910462: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
2020-07-07 08:30:28.916972: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudnn.so.7'; dlerror: libcudnn.so.7: cannot open shared object file: No such file or directory
2020-07-07 08:30:28.916984: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1598] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.

一部のライブラリのリンクに失敗している

最初のWarningは10.1を要求しているのに実際には10.2をインストールしていてそこでバージョン不整合を起こしていたので、
CUDA Toolkit 10.1をインストールし直して解決した

2つ目のWarningは公式でlibcudnnの各バージョン向けのアーカイブが配布されているのでこれを導入する
ここでダウンロードしようとしたところでNVIDIAへの開発者登録が要求される、fxxk!
心を落ち着けてユーザ登録を済ませてダウンロード・インストール

$ sudo rpm -i libcudnn7-7.6.4.38-1.cuda10.1.x86_64.rpm
$ sudo yum install libcudnn7
$ ls -al /usr/lib64/libcudnn*
lrwxrwxrwx 1 root root        17  7月  7 09:14 /usr/lib64/libcudnn.so.7 -> libcudnn.so.7.6.4
-rwxrwxr-x 1 root root 430101144  9月 21  2019 /usr/lib64/libcudnn.so.7.6.4

Toolkitが導入するライブラリパスは/usr/local/cuda/lib64 だけど、
単独で導入したlibcudnnのインストール先は/usr/lib64になっていた

これで、Hello Worldを実行するとWARNINGが解消されてGPUが使える状態に。
サンプルスクリプトを実行してnvidia-smiで確認すると

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     31327      C   python3                                    14405MiB |
+-----------------------------------------------------------------------------+

と確かにGPUを使った処理が動いてる!!!
体感的な処理速度もかなり改善していたので無事動作確認することができた

最終的な環境

  • ホスト: Amazon EC2(g4dn.xlarge)
  • OS: Amazon Linux2
  • GPUドライバ: CUDA Toolkit 10.1
  • スクリプト: Python3.7.6 + tensorflow-gpu 2.2.0

感想

cudaとtensorflowのバージョン組み合わせは非常にトラップ満載
動く環境でどこかをバージョンアップするとリカバリが大変な状況に陥る予感がすごいので、
動く組み合わせごとにコンテナ化するなり、インスタンスを分けるなりして環境を切り分けた方が良さそう

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TensorFlowで画像分類など学習してみる(環境構築編)

今回、初心者である私が学習した内容を書いていきます。TensorFlowを用いた画像の取り扱いを一通り勉強した内容となります。
すでにもう知っているという方については内容が薄い(もうそのレベルは物足りない)ということかもしれません。できるだけわかりやすく書いていきます。まずは、環境構築が必要となるのでここに書いていきます。

マシン環境

ハードウェア:Lenovo X1Carbon
CPU:Intel Core(TM) i7-5500U CPU 2.4Hz
OS:Windows10 HOME (64bit)

インストールについて

Anacondaをインストールして利用していきます。Anaconda自体のインストールは別のサイトなどを参考にしてください。この記事では事前に下記をインストールを行っています。
・Anaconda3
・Python3.7.7
・pip 20.0

方法・手順

TensorFlow、その他のライブラリをインストールする方法はいくつか方法がありますが、ここではAnacondaで仮想環境を作成してインストールする方法を記載します。

1.Anacondaで仮想環境を作る

Anaconda Navigator を起動します。EnvironmentsからCreateをクリックします。
クリックすると下記のダイアログがでますのでNameなどに任意の内容を入力します。PackagesはPython3.7を選択し
Createボタンを押します。

Create.PNG

2.Tensorflowインストール

作成した環境の三角ボタンをクリックし「open terminal」を選択してターミナルを立ち上げます。ターミナルで下記を入力します。

pip install tensorflow

ポイント
pipはPythonのパッケージを管理するためのツールです。
TensorFlowをインストールする場合、システム要件としてpip(ver19.0以降)が指定されています。ですので
pipもインストールして指定の要件をクリアしておきましょう。

次にインストールができているかバージョンを確認します。下記を入力します。

python -c "import tensorflow as tf; print(tf.__version__)"

上記コマンドでバージョンが表示されればインストールは完了です。
ですが、インストールすると問題が発生する場合があります。
上記コマンドを実行すると「ImportError: DLL load failed: 指定されたモジュールが見つかりません。」となる場合があります。

解決策として、インストール時のpipコマンドでバージョン指定を行います。

pip install --upgrade tensorflow==2.0.0

原因は2.1.0のバージョン以降、GPUサポートがデフォルトで含まれているということ。
Woindowsの場合にはMicrosoft Visual C++ Redistributable for Visual Studio 2015or2017or2019のインストールが必要なようです。私の場合は今回2.0.0へダウングレードする方法で対応しました。

3.画像処理等、必要となるパッケージのインストール

次に必要なライブラリなどインストールします。ターミナルからコマンドを入力します。

jupyter notebookのインストール

conda install jupyter

h5py ライブラリのインストール

conda install h5py

matplotlibライブラリのインストール

conda install matplotlib

pillowライブラリのインストール

conda install pillow

opencvのインストール

conda install -c conda-forge opencv

上記インストール後、jupyter notebookを起動しインストールが問題ないか確認します。
jupyter notebook を起動する場合には、ターミナルからコマンドを入力して起動することをお勧めします。
後述のエラーが発生した場合、jupyter notebookの画面上では具体的なエラーが表示されず、カーネル停止というようなメッセージとなり問題解決には不十分です。ターミナルから起動した場合には詳細なメッセージがターミナルに表示されます。

TensorFlowのインストールがうまくいっているか確認するため、jupyter notebook上で下記のソースコードを書き、Shift + Enterキー で実行します。

import tensorflow as tf; print(tf.__version__)

次のエラーが発生しました。ターミナルには

To access the notebook, open this file in a browser:
    file:///C:/Users/xxxx/AppData/Roaming/jupyter/runtime/nbserver-17864-open.html
Or copy and paste one of these URLs:
    http://localhost:8889/?token=9a5ebbfef6e13585b2da3f0c7831fe5ac5314e5e7ad63a48
 or http://127.0.0.1:8889/?token=9a5ebbfef6e13585b2da3f0c7831fe5ac5314e5e7ad63a48
 Kernel started: a6cb3609-ce0d-4e86-96c9-d169bc522fbe
 Warning! ***HDF5 library version mismatched error***
 The HDF5 header files used to compile this application do not match
 the version used by the HDF5 library to which this application is linked.
 Data corruption or segmentation faults may occur if the application continues.
 This can happen when an application was compiled by one version of HDF5 but
 linked with a different version of static or shared HDF5 library.
 You should recompile the application or check your shared library related
 settings such as 'LD_LIBRARY_PATH'.
 You can, at your own risk, disable this warning by setting the environment
 variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
 Setting it to 2 or higher will suppress the warning messages totally.
 Headers are 1.10.4, library is 1.10.5
    SUMMARY OF THE HDF5 CONFIGURATION
    =================================

 General Information:
 -------------------
               HDF5 Version: 1.10.5
              Configured on: 2019-03-04
              Configured by: Visual Studio 15 2017 Win64
                Host system: Windows-10.0.17763
          Uname information: Windows
                   Byte sex: little-endian
         Installation point: C:/Program Files/HDF5

この場合、HDF5のライブラリが云々・・・
ターミナルからjupyter notebookを起動してバージョン確認のコマンドを実行すると、カーネルエラーが発生
ターミナルを見てみると次のようなエラーが・・・・

調べてみるとライブラリがあっていないということでこの記事を参考に再インストールしました。

pip uninstall h5py 
pip install h5py 

インストール後のまとめ

TensorFlowのインストールを行う場合にエラーが発生しましたが解決すればそれほど詰まることなくインストールができます。もし同じような内容でつまずいた際には参考にしてもらえると良いかと思います。
ハマったポイントとしては、
・TensorFlowをインストール後、バージョン確認が行えなかった(インストールが上手くいっていない)
・HDF5ライブラリに起因する問題
です。この部分はバージョンなどを確認の上対策をしていくことが必要です。
また、現状TensorFlowは2019年に2.X系が公開されました。1.Xのバージョンと異なる点があります。
参考書などは1.Xを念頭に書かれているものがありますので、参考書の内容を学習する場合には、参考書に記載のバージョンの
インストールをお勧めします。2.xの環境で動作させる場合にはコードの書き換えが必要となる場合があります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む