仮想化の必要性を感じることなかった、この数年、64bitマシンを持ちながらも32bit OSを使い続けていた自身にとって64bitを要求するDockerは論外でした。
が、一部が64bitを要求することになったJuliusを使いたくなってマルチブートする恰好でDebian amd64を追加インストールすることにしたのが約1ヶ月前。
その後、Open JTalkにも触れ、ArduinoでWAV/MP3オリジナル音声の発話やしゃべるESP-01/12/ESP32音声合成・再生デモなどArduinoやESPで音声合成・再生、Processing/OpenCVとWebカメラで動体検知・追跡のようにProcessingでOpenCVをつかってみたり、ラズパイでスマートスピーカーを作ってみたりしているとJuliusやOpen JTalkのみならず、OpenCVやTensorFlow、Kerasまで載せた本格的なスマートスピーカーを公開している方に触発され、ここまで来たら、AI、ディープラーニングでしょ...。
ということでNVIDIA GPUは非搭載64ビットマシンながら64ビットOSを入れたことから、CPUのみにも対応の機械学習ライブラリTensorFlow、Pythonの深層学習ライブラリKeras、ディープラーニングのアルゴリズムと実装のギャップの架け橋を謳う日本発のChainerなどを試すことができる環境になりました。
ただ、Chainerは最新を使えているものの、TensorFlow/Kerasに関しては、マシンが対応していないようで現在最新のTensorFlow 1.11.0、Keras 2.2.4ではうまく機能せず、TensorFlow 1.5.0、Keras 2.1.4の組み合わせで使ってみています。
Kerasのバージョンについては、[TensorFlow 1.5 Keras バージョン]などとして、ぐぐってタイトルやスニペットを見て実績がありそうなものを選びました。
というか、TensorFlow 1.5も今年1月末にリリースされたとのことで進化のスピードが速い...。
これらを試すにあたり、当初、Pythonのデータサイエンスプラットフォームを謳うAnacondaを使ってみたのですが、Chainerはそれなりに使える一方、TensorFlowだけならまずまずもKerasを入れると途端に挙動がおかしくなります。
これらバージョンの絞り込みまでは、Anaconda環境で行ったのですが、絞り込み後の不思議な挙動や不安定さは、どうもAnacondaに起因するように思えてなりませんでした。
一方、ホストとAnacondaの仮想空間でPythonのバージョンが共通になってしまうことに起因し、ラズパイのスマートスピーカーでPython(2)部分が文法的にエラーとなり、Python3用に書き換えました。
これらのことから、開発環境自体を変えた方が、良さげに思えてきて、調べてみるとTensorFlowやKeras、ChainerもDockerイメージがあったため、Dockerデビューすることにしました。
そもそも数年前にPC再利用及びサポート期限切れのWindowsの保持、新たに使う*BSD/Linux検証のためにVMwareやVirtualBox、Virtual PC、QEMUなどをかなり使っていましたが、仮想マシンはもちろん、物理マシンでWindowsを使うこともインストールすることもなく、NetBSDやFedora、Debianで落ち着いた今となっては、全く使っていません。
仮想マシンのためもあって32ビット前提で2TBの外付けHDDも買って今尚、ラズパイによるNASのストレージとして使っていますが、仮想マシンイメージを含めても有り余っており、今では消費電力が高くて使おうとは思えない一方で捨てる気にもなれないデスクトップ機の入れ替えた2TBのHDDも同様に容量が有り余っています。
仮想マシンであれこれやっていた頃の作業は、とても楽しかったのですが、OSイメージをダウンロード、仮想化ソフトウェアを起動、OSイメージをセットして、CPUやメモリを割り当てて...と作業を思い出してみると、いくらストレージが余っていると言っても、とてもじゃありませんが、今回の用途に、仮想マシンを使おうとは、思えません。
当時の自身は、DockerだVagrantだ、ChefやPuppet、Ansible...などについては、懐疑的(食わず嫌い)でしたし、面倒そうにも見えつつ、導入してみようと思ったら32ビットに対応しておらず、断念したのですが、前述の通り、実機に開発環境を構築するのは気が引けるし、何度もやり直す可能性を考えると仮想マシンは面倒この上ないので64ビットOSを入れた今となっては、Anacondaの代替環境としてDockerが最適に思えました。
今は、以前のノートPCで入れ替えたたった128GBのSSD(64bit Debianのパーティションは38GB、拡張の余地はあり)を載せ替えて使っており、外付けHDDは使っておらず、性分的に不要になったコンテナやイメージは、すぐに削除してはいますが、今のところ容量を気にすることなく使えています。