FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Bash on WindowsでTensorFlowをインストールして動作させる

Bash on Windowsのベータ版がWindows 10のInsider Previewの機能として公開された。 いままでCygwinやmsys2など、WindowsLinuxのコマンドを実現する機能は複数あったとは言え、Microsoft自身がUbuntuと手を組んでBashをサポートしてしまうとは驚きだった。 去年はVisual Studio Codeのオープンソース化、そして今年はBash on Windowsと、最近のMicrosoftは面白いことがたくさんある。 昔はソースコードを公開しない、クローズドな会社で、市場を支配している嫌なイメージ、というものがあったけど、今はそんなこと無くなったなあ。

僕はWindowsBashか、あるいはLinuxの環境をサポートすることをずっと心待ちにしていた。 厳密には、Linuxで利用されている大量の資産やライブラリ、プログラムを、簡単にWindowsでも動作させ、自由にトライできる環境が欲しいと思っていた。 Bash on Windowsは、そのための第一歩だ。 WindowsLinuxのライブラリが動作するようになったらまず何を試したかったって、Google機械学習ライブラリであるTensorFlowをWindowsで動かしたかったのだ。 もちろん、Windowsで動かすだけなら、Cygwinを入れたり、仮想マシンを導入することによって簡単に実現することができる、ってか既にやっている。 それよりも重要なのは、最終的にBash on WindowsGPGPUのライブラリやCUDAが動作し、Windows上で動作するTensorFlowがGPGPUをサポートできることだ。 最終的にはこれが目標なのだが、とりあえず今回はそこまで高望みせずに、BashにTensorFlowのインストールしながら、何が出来るかを見ていこう。

ちなみにTensorFlowがWindowsをサポートすることは、多くのユーザに望まれていた。以下のディスカッションを参照。

github.com

結局Dockerを使ったり、何か詐欺くさい。とはいえ、Bash on Windowsの上でPythonを動かして、TensorFlowを動かすのも詐欺といえば詐欺か。

テスト用PCのWindowsをInsider Preview版にまでアップグレードさせる

このこと自体は別に問題ない。Insider Previewへのアップーデートは誰のPCにでも出来る。 とりあえず僕は怖いので、テスト用の古いPCのWindows 10をアップデートしてみた。

♯ ちなみに、このブログもその古いPCで書いているのでとても遅い。

Bash on Windowsを有効にする

これも特に問題ない。「Windowsの機能の有効化と無効化」で、「Windows Subsystem for Linux(Beta)」のチェックボックスを有効にすれば良い。 これにより、ちょっとした時間をかけてBash on Windowsがインストールされる。

f:id:msyksphinz:20160412020200p:plain

基本的なUbuntuの機能はほとんど動作する

bashを起動すると、まずはrootユーザとしてログインされるため、一般ユーザを作成して、sudoersに登録するという作業をしておいた。 ちなみにaptitudeも動作する。パケージは簡単に導入できるようだ。本当にVMを使っているみたいだな!

TensorFlowをソースコードからコンパイルしてみる

TensorFlowを導入するにあたり、まずはソースコードからコンパイルしてみようと思った。

github.com

そのためには、まずはbazelのインストール、さらにはJava8のインスートルが必要となる。ここでハマった。

Bash on WindowsJava-8がインストールできない

これはBash on Windows自身のの問題なのか、正直まだ良く分からない。ただし、下記のサイトで説明されている方法でインストールしようとしたら失敗してしまった。

Installing Bazel - Bazel

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

以下のエラーメッセージが出る。

141312K ........ ........ ........ ........ ........ ........ 81% 5.65M 6s
144384K ........ ........ ........ ........ ........ ........ 83% 9.21M 5s
147456K ........ ........ ........ ........ ........ ........ 84% 10.2M 5s
150528K ........ ........ ........ ........ ........ ........ 86% 8.23M 4s
153600K ........ ........ ........ ........ ........ ........ 88% 11.8M 4s
156672K ........ ........ ........ ........ ........ ........ 90% 10.9M 3s
159744K ........ ........ ........ ........ ........ ........ 91% 11.4M 2s
162816K ........ ........ ........ ........ ........ ........ 93% 10.6M 2s
165888K ........ ........ ........ ........ ........ ........ 95% 5.91M 1s
168960K ........ ........ ........ ........ ........ ........ 97% 10.7M 1s
172032K ........ ........ ........ ........ ........ ........ 98% 9.93M 0s
175104K ........ ........ ........ .......                   100% 10.9M=29s

2016-04-11 15:42:15 (5.94 MB/s) - ‘jdk-8u77-linux-x64.tar.gz’ saved [181365687/181365687]

Download done.
Removing outdated cached downloads...
sha256sum mismatch jdk-8u77-linux-x64.tar.gz
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)

他のQ&Aサイトも調べていろいろ試行したのだが、結局インストールできなかった。sha256sumのエラーだから、文字コードとか、何かの問題かなあ?

バイナリからTensorFlowをインストール

という訳で、ソースコードからコンパイルしてインストールするのは諦めた。 バイナリパッケージを使ってインストールしてみる。

github.com

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

しばらく待っていると、これは無事にインストールが完了した。

...
    Creating build/scripts.linux-x86_64-2.7/f2py
      adding 'build/scripts.linux-x86_64-2.7/f2py' to scripts
    changing mode of build/scripts.linux-x86_64-2.7/f2py from 644 to 755

    warning: no previously-included files matching '*.pyo' found anywhere in distribution
    warning: no previously-included files matching '*.pyd' found anywhere in distribution
    changing mode of /usr/local/bin/f2py to 755
  Found existing installation: wheel 0.24.0
    Not uninstalling wheel at /usr/lib/python2.7/dist-packages, owned by OS
  Found existing installation: six 1.5.2
    Not uninstalling six at /usr/lib/python2.7/dist-packages, owned by OS
  Found existing installation: setuptools 3.3
    Not uninstalling setuptools at /usr/lib/python2.7/dist-packages, owned by OS
Successfully installed tensorflow numpy protobuf wheel six setuptools
Cleaning up...

TensorFlowの動作確認

とりあえず、実際の学習作業は今日はやめておいて、動作確認だけやっておこう。

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>>
>>> print(sess.run(hello))
Hello, TensorFlow!
>>>
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42

ちゃんと動作したね!

最終的にはGPGPU上で動作できること

いちおう、Bash on WindowsでTensorFlowが動作することは確認したが、これではあまり芸が無くて、Linuxを使わなくても、Windows上でTensorFlowがちゃんとGPGPUを使えるようにしたい。これは、もうちょっと調査して、ライブラリがどれくらい使えるのかを見てからかな。