前回のブログでは「結局はUbuntu上でTensorFlow-GPUを使いましょう」という話に着地したが、Windows10でTensorFlow-GPUを使う納得できる着地点を探しました。
問題1:Windows 10でshellが使えずDOSコマンドなのは辛い
前回のブログでは「Unixプラットフォーム上で書いたJupyter NotebookをそのままWindows10で実行する際にDOSコマンドを書かなくてはいけないので辛い」としてWindows10でのAnacondaを使ったTensorFlow-GPU使用を薦めなかった。しかし今回は逆に「Windows 10でもshellが使えるようになったら良い」というアプローチで対応してみた。
Windows 10上でUnix Shell(ashellとのことだがbashを使っている私でも問題ない程度の違い)を使えるようにできるプログラムであるBusyBox-w64を導入することで、DOSコマンド由来のストレス感がかなり減った。元は「BusyBox-w32」という32bit Windows向けのものができたようだが、ページ中盤に「A 64-bit binary, busybox64.exe, is also available. It’s 603,136 bytes in size.」という記述があるところから64bit版をダウンロードできる。
このBusyBox-w64の有難いところは、awkやsedやgrepといった文字列処理に便利なツールだけでなく、笑えることにviエディタまで移植してある。コマンドのマニュアルを表示するmanまでちゃんとあるので通常の作業時に使うshellとしては十分すぎるほどちゃんとしている。
導入は簡単で、ダウンロードした「busybox64.exe」をWindowsのどこか任意の場所(ここではC:¥Program Files¥BusyBoxフォルダを作成して中に置いた)に置いて、Windows PowerShellを開いて「C:/’Program Files’/BusyBox/busybox64.exe –install ./」と実行すると、150個のexeファイルがC:¥Program Files¥BusyBoxフォルダに生成される。GUIのインストーラーもなくいきなりできる。あとはこのC:¥Program Files¥BusyBoxフォルダにパスを通すよう環境変数を編集しておけば良い(下に念のためやり方を書いておきます)。
Windows PowerShellで「control」と打つとコントロールパネルが表示されるので「システムとセキュリティー」を開く。
「システム」を開く。
「システムの詳細設定」を開く。
「環境変数」を開く。
で表示された環境変数の小窓でユーザーの環境変数の「Path」に「C:¥Program Files¥BusyBox」を追加します。
問題2:Pythonのimportで「ねー!」と怒られまくる
Unix系OSで実行しながら書いたPythonコードをWindows 10で動かそうとして感じるストレスのナンバー2がこれ。メインのコードと同じフォルダに別の(helpersとかutilsとか)フォルダを作っておいて、そこに別のコードを入れておいて、「from helpers import xxxx」なんて気軽に書いておくと、Unixではパス検索が気が利くのにWindowsでは「何それ?美味しいの?」とでも聞かれるように気軽にとぼけてくる。
対策としては、コードを書くときにimportの際には相対パス記述で「from .helpers import xxxx」のように書く習慣をつけたり、人様が書いたコードを手直しして実行するしかない。
問題3:TensorFlow-GPUもver2.0になり。。。
Windows環境での実行とは直接は関係ないのですが、ストレス繋がりで書いておきます。
現時点でAnacondaでTensorFlow-GPUをインストールするとver2.0がインストールされます。全体としてバージョンが上がるのは向上という観点で有難いのですが、どうしてもいただけない変更があります。
ちょっと前に書いたコードを新しいTensorFlowで実行して出るエラーの代表格が「TensorFlowにはそんな名前空間(namespace)はございません」というものであり、これらは大体「tf.xxx」なら「tf.compat.v1.xxx」と変えてやれば動きました。
しかし、これまで多くの方々がコンパクトにコードを書く上で多用してきた「contrib.slim」を含む「contrib」がTF-2.0で廃止されてしまった。。。これはarXiv.orgに発表される論文(コードが古い書き方のものが多い)を実際に回してみる際に高頻度で出くわすトラブル。ガッツり書き換えないと動かせない。ということで、どうしたもんやらとは思うのですが、TensorFlow-GPUは現段階では1.14にダウングレードして使うことを個人的にはオススメしています。
ということで、Windows 10環境でするTensorFlow-GPUは納得できる環境づくりに落とし込めました。個人的にもスッキリして昼も寝られそうです。なお、先日に8GBから12GBに増やしたメモリーですが、さりげなく24GBに増やしました。しかしGPUコンピューティングをする上ではそれほど違いは感じません。アルゴリズムによってメモリーを占有するかしないかが決まるので、コードの書き方次第かと思います。