iriya-ufo's blog

Curiosity was simply the first derivative of knowledge.

Docker 版 Jupyter Notebooks でホストとデータを共有する

前回 Anaconda 環境の Docker イメージを作ったのですが、機械学習をやるには Jupyter Notebooks という統合開発環境の方がいろいろ便利だということなので、そちらをメインに使うことにします。

Jupyter ってなんぞっていう説明はググレばいっぱい出てきますので、そちらを参照ください。下記記事はよくまとまっていてよかったです。

Jupyter Notebooks は公式の Docker イメージが配布されているので、それを使うのが楽です。 ただ、ホストとデータ共有して起動しないとデータ保存ができません。最初ちょっと困ったのですが、下記コマンドの起動で大丈夫でした。

$ docker run -d -p 8888:8888 -v $HOME/project/notebooks:/home/jovyan/work jupyter/datascience-notebook
# -v オプションでデータ共有を指定
# -v ホスト側ディレクトリ:コンテナ側ディレクトリ
# Jupyter Notebooks ではコンテナ側ディレクトリは /home/jovyan/work となる

『Deep Learning from scratch』

「すごい会議」を読んだ

会社で週一のイテレーションをしている際に「すごい会議」っていう本、いいらしいよと聞いたので読んでみた。

すごい会議-短期間で会社が劇的に変わる!
大橋 禅太郎
大和書房
売り上げランキング: 8,141

本書の前半部分は会議とは関係ない著者のビジネス体験記がつらつらと書かれており、右往左往しながら問題を克服した話しで、俺はすごいだろ感が伝わってきた。 まぁそれはそれで読み物として面白かった。

後半ぐらいから「すごい会議」の具体的な方法について書かれている。 ここに書かれていることを実際に会議の場で試すことはそれほど難しくないと思うが、問題はファシリテート能力とコーチングスキルであると感じた。 「すごい会議」を読んだ!といって下手に実践すると、コミットメントが達成されなかったからクビだ、とかいって辞めさせられる社員、辞めていく社員が出るだろうなと思う。 平易な文章で書かれているのはいいが内容は薄い。著者にコンサルを依頼するための呼び水の本と考えるとしっくりくる。 中小企業やベンチャー企業ではなく、大企業の有益かどうか分からないような時間つぶしのような役員会議で実践するといいんではなかろうか。

TensorFlow を GPU で動かす

前回は最低限 Ubuntu が起動するまでの設定だったので、これから GPU で TensorFlow を実行するまでの環境を作っていきます。 移植性の高い方法で構築したいので Docker を使います。

前提

  • GPU (今回は GEFORCE GTX 1080) を積んだマシンがある
  • Ubuntu 16.04 LTS がインストールされている
  • Docker がインストールされている

構築環境

  • CUDA — Nvidia が提供する GPU 向けの統合開発環境
  • cuDNN — Nvidia が作ったディープラーニング用のライブラリ(SDK)で GPU をフル活用できるようになっている
  • NVIDIA Docker — Nvidia が提供している、コンテナから GPU を操作できるようにするもの
  • TensorFlow — Google が開発したオープンソースの機械学習ライブラリ

構築手順

CUDA インストール

1
$ sudo apt-get install nvidia-cuda-toolkit

cuDNN インストール

https://developer.nvidia.com/cudnn からユーザー登録をしてライブラリをダウンロードする。

1
2
3
4
5
$ tar xfzv cudnn-8.0-linux-x64-v5.1.tgz
$ cd cuda
$ sudo cp lib64/* /usr/lib/x86_64-linux-gnu
$ sudo cp include/cudnn.h /usr/include
$ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*

NVIDIA Docker インストール

1
2
3
4
5
6
# Install nvidia-docker and nvidia-docker-plugin
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb
$ sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# Test nvidia-smi
$ nvidia-docker run --rm nvidia/cuda nvidia-smi

認識できているようだ。

nvidia-docker

Tensorflow インストール

Google 公式の Tensorflow に Docker イメージと実行方法が書いてある。イメージはもちろん GPU バージョンのものを使う。

1
$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu

Jupyter Notebook が起動するので http://ホストIPアドレス:8888/ にアクセスしてみる。

jupyter_tensorflow

MNIST サンプルコードを動かしてみる

MNIST サンプルコードを動かして計算させてみる。コードはこちらを利用させてもらった。

まず Jupyter Notebook を起動後、ターミナルを開いて $ pip install keras と打つ。

上記サンプルコードを Notebook で実行。

mnist_cnn

めっちゃ速い。

Docker 再起動で keras とか書いたコードとか消えちゃうので、イメージ作成とボリュームセットの構築が必要かな。 今回は提供されている Docker を利用しただけなので、次回は自前で Dockerfile 作成とイメージ作成をやっていきたいと思います。

次回は『Docker コンテナに Anaconda 環境を構築』します。

『Deep Learning from scratch』

機械学習と数学

人工知能といえば機械学習、そして機械学習といえば数学。チュートリアルやらライブラリやらで、これだけ手軽になった機械学習といえども現段階ではちょっとまだ簡単に扱えるようにはなっていません。 その主たる原因は数学だと思います。専門的とはいえ理系大学一年程度の知識があればそこそこいけそうなので頑張りましょう。

この分野において重要かつ必要な数学知識です。

  1. 線形代数
  2. 確率・統計
  3. 微分・積分とくに偏微分

機械学習に触れる人間にとって、線形代数で分かりやすい本は以下らしいので初学者は読んでおくといいと思われます。

線形代数学(新装版)
川久保 勝夫
日本評論社
売り上げランキング: 20,775

また確率統計で初心者にも分かりやすい本は以下です。

ゼロから学ぶ統計解析 (KS自然科学書ピ-ス)
小寺 平治
講談社
売り上げランキング: 41,335

以下のブログでは、どの分野の何を勉強したらいいのだろう、という人のために指針を書いてくれています。

計算方法と理論の理解ができればよく、定理の証明などはこだわらない方が早く進むでしょう。

『Deep Learning from scratch』

Docker コンテナに Anaconda 環境を構築

機械学習の主流言語といえば Python ですよね。最近はインストール方法も変わってきており、より便利な方法があるようです。

今回は Anaconda の環境を Docker で作って、さらに各種ライブラリを Anaconda の仮想として作成していくような予定でいます。 Docker にすると各OS毎に環境を作らないで済むのがいいですね。Anaconda 公式でも Docker はいいよって言ってます。

Anaconda にする理由と各OS実機にインストールする方法が下記に詳しく書いておりました。

今回はOS毎の差異をなくすため pyenv + anaconda + ubuntu という組み合わせを Docker コンテナに構築します。 実機にいれる場合はこちら『pyenv + Anaconda (Ubuntu 16.04 LTS) で機械学習のPython開発環境をオールインワンで整える』が参考になります。 ライブラリの紹介もあるのでいいですね。

Docker を使う方法は下記の README を参照してください。Pyenv と Anaconda3 の環境を一つにした Docker イメージになります。

『Deep Learning from scratch』

「コンピューターで脳がつくれるか」を読んだ

コンピューターで「脳」がつくれるか

人工知能に関する平易で読みやすい本、特化型AIと汎用AIの違いについてよく分かる。

脳のモデルと学習モデルの比較をしている点が面白かった。

  • 大脳新皮質 — 教師なし学習
  • 大脳基底核 — 強化学習
  • 小脳 — 教師あり学習

あとコラム欄が面白い。いくつか引用しておこう。

タイムマシンと意識

自動車を運転しているとき、人間が危険を察知してブレーキを踏むという判断を行うときの例を出して、意識する前に筋肉を動かすための信号が出ているという事例。

リベットの実験は世界に「私たちに自由意志はあるのか?」という問いかけをしました。

右脳と左脳を分離すると?

脳梁を切断し分離脳の状態での、ロジャー・スペリーとマイケル・ガザニガが行った実験のお話し。

「わからないから適当な理由をでっちあげた」という意識は本人になく、本当にそう思っていることもわかっています。 わたしたちは自分が受け取った情報をすべて把握したうえでそれを統合し、よく考えて意思決定をしているように思っていますが、 この実験が示すところは、意識にのぼらないけれども意思決定に深く関わっている情報が存在し、またそれを意識することはできない、という点です。

Deep Learning Machine に Ubuntu のインストール

『Hardware Architecture for Machine Learning』で作ったマシンに Ubuntu 16.04 LTS をインストールしました。

Nvidia GTX-1080 を使っていたせいで、インストーラーが表示されず躓いたのでその解決法を記載します。

状況としては Ubuntu 16.04 を DVD に焼いたあと起動するも、インストーラー画面までいかずに snd_hda_intel failed to add i915_bpo component master というエラーが出て落ちていました。

まず BIOS の設定でマルチモニターを有効化します。具体的には BIOS起動AdvancedChipset ConfigrationIGPU Multi-MonitorEnable に変更します。 そして、いったんマシンの電源を切り、HDMI をマザーボード側に繋ぐとインストーラーが起動しました。

インストーラー画面は問題なく進んでいき、Ubuntu のインストール自体は正常に終了します。 ところが再起動がかかると画面に何も映りません。マザーボード側、グラフィックボード側とどちらに挿してもダメでした。 これは Nvidia GTX-1080 のドライバが入っていないためらしいです。困ったことにドライバを入れようにも画面に映らないので、とにかく Ubuntu の画面を出してコマンドが打てるようにするため グラフィックボードを一度筐体から取り外します。そして再起動すると Ubuntu が起動しました。

ターミナルから以下のコマンドでドライバーをインストールします。

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-367
$ sudo apt-get install mesa-common-dev
$ sudo apt-get install freeglut3-dev

これで、グラフィックボードをつけて再起動すれば Ubuntu が起動します。

次回は『GPU 経由で TensorFlow を実行』できるようにします。

『Deep Learning from scratch』

Hardware Architecture for Machine Learning

機械学習をさせるための専用演算マシンを構築しました。 クラウドでいいじゃんとも思いますが、自分の手元に自由に使える演算サーバーがあるのはそれはそれで便利だと思います。 テンションあがりますしね。

ということでハードウェアのスペック選定をしなければいけません。 これに関しては、下記ブログが大変参考になります。

『低火力ディープラーニングのための環境(自作ハード編)』

重要ポイントは、メモリーは詰めるだけ詰んだ方がいい、グラフィックボードに金を突っ込む、電源は壊れにくいものを、といった感じです。 それを踏まえて、さくっと作ったマシン構成が以下になります。(マシンを組んでくれた友人よ、ありがとう)

パーツ 型番 価格
CPU i5-6500 LGA1151 ¥20,480
マザーボード ASRock Z170 Extreme4 ¥11,800
MEM DDR4 PC4-17000 16GB 2枚組 CT2K16G4DFD8213 ¥17,980
SSD ADATA SP900 256GB ¥8,480
HDD 東芝 DT01ACA300 3TB SATA600 7200 ¥6,780
GPU 玄人志向 GF-GTX1080-E8GB/BLF ¥64,800
電源 ENERMAX PLATIMAX 850W ¥21,980
ケース CMS-693-KKN1-JP ¥8,980
合計 (税込) ¥175,262

ちなみに、自作とかめんどくさい、お金払ってなんとかならんの?っていう方はここから買ってください。

次回はこのマシンに『Ubuntu のインストール』を行います。

『Deep Learning from scratch』

「よくわかる 人工知能」を読んだ

よくわかる人工知能 最先端の人だけが知っているディープラーニングのひみつ

人工知能という言葉を聞いてどんなイメージを抱くだろう。

以前『人工知能は人間を超えるか』という書籍を読んで、これからの人工知能の行末について想像した。

最近はメディアでも取り上げられるほどの注目度で、自動運転技術の例であったり、画像処理に対する認識のすごさだったり、あるいは、りんなちゃんとの対話だったりと研究段階から実用的なものまで幅広く展開されている。 特にディープラーニングを活用した AlphaGo が囲碁対決で勝ったことは、人工知能という可能性を大きく広げた出来事であったと思う。

本書は著者の清水さんが、人工知能に関わる仕事や研究をしている方たちとの対談をまとめたものだ。 トヨタ、NVIDIA、ヤフージャパンといった企業の方たちがいるのに驚いた。 人工知能技術はもはや科学者のおもちゃではなく、現実に仕事とリンクし始めている領域まで来ているのだと。

人工知能 ≒ ディープラーニングという図式を頭に思い浮かべ、それをどう活用するかという点がよく注目されるのだけれど、そもそも知能って何?といった点が気になる人も多いだろう。 そういう意味で、慶應義塾大学大学院の前野さんとの対談で語られている内容は非常に興味深かった。 『意識』というのはクオリア説のような司令塔みたいなものが生み出しているんじゃないかという茂木健一郎氏の矛盾をつき、前野氏は受動意識説を提唱している。 受動意識説とは簡単に言えば、自律分散的なシステムの結果として意思決定がなされていて、意識は能動的なものではなく受動的な後付のようなものだという考え方である。 これってつまり起きた出来事に対し、理由付けをしているだけなのだということなんだけど、すごく仏教的な思想と似ているなぁと思って驚いた。 意識が能動的なものでないならば、コンピューターに実装可能であり、それは意識をもったAIが出来るということを意味する。 結局、完全解明しようとしているところが間違えで、単なる模倣により意識は作れるのかもしれない。

人工知能の発展により今の人間の生活は大きな変化が起こるだろうと思ってる方は多いと思う。 本書を読むとその考えを大きく上回る可能性があることに驚くことだろう。