Bash on Windowsのベータ版がWindows 10のInsider Previewの機能として公開された。 いままでCygwinやmsys2など、WindowsでLinuxのコマンドを実現する機能は複数あったとは言え、Microsoft自身がUbuntuと手を組んでBashをサポートしてしまうとは驚きだった。 去年はVisual Studio Codeのオープンソース化、そして今年はBash on Windowsと、最近のMicrosoftは面白いことがたくさんある。 昔はソースコードを公開しない、クローズドな会社で、市場を支配している嫌なイメージ、というものがあったけど、今はそんなこと無くなったなあ。
僕はWindowsがBashか、あるいはLinuxの環境をサポートすることをずっと心待ちにしていた。 厳密には、Linuxで利用されている大量の資産やライブラリ、プログラムを、簡単にWindowsでも動作させ、自由にトライできる環境が欲しいと思っていた。 Bash on Windowsは、そのための第一歩だ。 WindowsでLinuxのライブラリが動作するようになったらまず何を試したかったって、Googleの機械学習ライブラリであるTensorFlowをWindowsで動かしたかったのだ。 もちろん、Windowsで動かすだけなら、Cygwinを入れたり、仮想マシンを導入することによって簡単に実現することができる、ってか既にやっている。 それよりも重要なのは、最終的にBash on WindowsでGPGPUのライブラリやCUDAが動作し、Windows上で動作するTensorFlowがGPGPUをサポートできることだ。 最終的にはこれが目標なのだが、とりあえず今回はそこまで高望みせずに、BashにTensorFlowのインストールしながら、何が出来るかを見ていこう。
ちなみにTensorFlowがWindowsをサポートすることは、多くのユーザに望まれていた。以下のディスカッションを参照。
結局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がインストールされる。
基本的なUbuntuの機能はほとんど動作する
bashを起動すると、まずはrootユーザとしてログインされるため、一般ユーザを作成して、sudoersに登録するという作業をしておいた。 ちなみにaptitudeも動作する。パケージは簡単に導入できるようだ。本当にVMを使っているみたいだな!
TensorFlowをソースコードからコンパイルしてみる
TensorFlowを導入するにあたり、まずはソースコードからコンパイルしてみようと思った。
そのためには、まずはbazelのインストール、さらにはJava8のインスートルが必要となる。ここでハマった。
Bash on WindowsでJava-8がインストールできない
これはBash on Windows自身のの問題なのか、正直まだ良く分からない。ただし、下記のサイトで説明されている方法でインストールしようとしたら失敗してしまった。
$ 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をインストール
という訳で、ソースコードからコンパイルしてインストールするのは諦めた。 バイナリパッケージを使ってインストールしてみる。
$ 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を使えるようにしたい。これは、もうちょっと調査して、ライブラリがどれくらい使えるのかを見てからかな。