TensorFlowの導入しようとしたらAnaconda環境が死んだ

TensorFlowの導入しようとしたらAnaconda環境が死んだ

ディープラーニングの開発環境を整えていきます。もちろんnumpyや、 pandas、matplotlibなどのライブラリを駆使してすべて自分でコーディンクしても良いのですが、一般的には何かしらのワークフレームを使用することが多いです。今回はTensorFlowを使用し、公式のチュートリアルに記載のコードを実行していきます。

という記事を書こうと思ったのですがGPU対応の途中で環境が壊れました。GPUが不要でCPU版TensorFlowの導入を考えている方は参考にして頂いてOKです。GPU版導入予定の方は、下記のフローだと環境が壊れることがあるということを把握していただけたら幸いです。

2020.02.07 追記
原因が分かりました。やはりうっかりpipコマンドを使用したことが原因です。
TensorFlowの公式サイトに

pip install tf-nightly

の記載があったのでこれに従ったのですが、Anacondaの公式サイトによると

conda install tensorflow-gpu

だけで充分だったようです。
訂正版の記事も近々公開します。

TensorFlowのインストール

なぜTensorFlow?

TensorFlow以外の代表的なディープラーニングのフレームワークにはChainerや、PyTorchなどがあります。TensorFlowの特徴には、Googleが開発していてGoogleのAI技術はTensorFlowでコーディングされているという実績があることや、コードは若干複雑になるがやれることが多いこと、ユーザー数が圧倒的に多く、情報収集が容易であることなどが挙げられます。長く深く付き合っていく覚悟があるので、最初は苦戦するかもしれませんがTensorFlowを選ぶことにしました。

CPUバージョン

私の場合MinicondaをつかってPythonの環境を構築しているため、パッケージのインストールは基本的にcondaコマンドを使用して行います。TensorFlowのインストールは次のコマンドで実行できます。

conda install tensorFlow

すでにnumpyをインストール済みの場合、バージョンの相性があるようなので、特にこだわりがなければ下記コマンドで最新バージョンに更新しておきましょう。

conda update numpy

これだけでTensorFlowのインストールは完了です。GPUを有効にする場合は次の項目に進んでください。

GPUバージョン

※途中でうっかりpipコマンド使用したら環境が壊れた話です。

GPU(Graphics Processing Unit)は本来モニターに出力する画像を計算するユニットです。グラフィックボード(グラボ)などとも呼ばれ、ハイスペックなGPUは高画質なゲームや、動画編集などに重宝されてきました。GPUは単純計算が得意であり、ディープラーニングはGPUの計算性能と相性が良いことからGPUを用いた演算が主流となっています。

GPUバージョンの場合制約や必要なソフトがグッと増えます。まず、GPUはNVIDIA社製でCUDAに対応しているものである必要があります。CUDAとはGPUを使うプログラムを書くためのツールです。対象機種はこちらのページに書いてあります。2010年以降の製品であればおおよそ対象になっているかと思います。また、リストに載っていなくても使えるものもあったりします(GTX1050Tiなど)。

CUDA対応のGPUを準備できたら必要なソフトを導入します。導入するのは「NVIDIA GPU drivers」「CUDA Toolkit」「CUPTI」「cuDNN SDK」です。それぞれ、インストールするTensorFlowのバージョンと相性の良いバージョンを選ぶ必要があるため、こちらのページの”Software requirements”の項目をご確認ください。

各ソフトの導入が出来たらCUDAとcuDNN のパスを通します。それぞれがどこに保存されているか把握するようにしましょう。CUDAはデフォルトでは”C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA”にインストールされます。一方cuDNNは任意の場所に保存することになるので、自分がわかりやす所に保存してください(今回はC:\tools\cudaに保存したと仮定します)。ここまで準備が出来たら、システム環境変数のPathに下記4つのパスを追加します。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include
C:\tools\cuda\bin

これで下準備は完了です。参考にしてよい情報はここまでです。これ以降はハマった問題の紹介です。

GPU対応のTensorFlowをインストールします。

conda install tensorflow-gpu
pip install tf-nightly

本来condaとpipは混ぜると危険なのですが、tf-nightlyはcondaコマンドではインストールできないようなので仕方なくpipで行きました。しかし案の定問題が発生しました。すべてのcondaコマンドが機能しなくなり、次のエラーを吐くようになりました。

pkg_resources.VersionConflict: (grpcio 1.16.1 (c:\users\user\miniconda3\lib\site-packages), Requirement.parse('grpcio>=1.24.3'))

バージョンがあっていないようなので、updateすればよいはずなのですがアップデートしようにも上手くいきません。調べてみるとcondaで対応している最新のバージョンが1.16なようで、1.24はどうやってもインストールできないようです。そこで、grpcioもpipで入れます。エラーに記載のあったc:\users\user\miniconda3\lib\site-packagesの中から”grpcio-1.16.1-py3.6.egg-info”というフォルダをまるまる削除し、

pip install grpcio

としてpipでインストールしました。だんだんヤケクソ感が出てきています。

すると一応動作はするものの、conda環境が壊れてしまいました。具体的には、condaコマンドが機能しなくなり、例えば

conda list

と入力すると、


yyyy-mm-dd hh:mm:ss: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
usage: tensorboard [-h] [--helpfull] {serve,dev} ...
tensorboard: error: invalid choice: 'list' (choose from 'serve', 'dev')

と表示され、パッケージのリストは表示されません。メッセージから察するにcondaというコマンドがtensorboardというコマンドに置き換わってしまっているようです。tensorborad.exeを削除したり、パスの並びを変えたりしてみたのですが良い結果は得られませんでした。

最後に

anacondaを使う以上、このような問題とは付き合っていかなければなりません。もう少し改善の余地がないか検討し、だめそうであればanacondaの再インストール、またはAnacondaの使用をやめて純粋なpyhtonインストールをするなど環境の再構築を行おうと思います。

改めてCPUvsGPUの記事は作成する予定です。