Bag of ML Words

ML = Machine Learning, Music Love, and Miscellaneous things in daily Livings

Vagrantで仮想マシンぽこぽこ(Docker, Jenkinsへの道 on Windows(1))

ちょっとアレでアレなので、DockerとかJenkinsとかいう流行りものを触るだけでも触っておきたい*1という動機が出てきました。

 

で、いろいろ調べると、こういうものは仮想開発環境による開発/テスト/サービスデプロイ環境の環境同定・構築のために使うのが基本らしいということがおぼろげながらわかってきました。*2

なのでもう1からやってみようということで、まずはVagrantによる仮想マシン環境のセットアップから。

 参考にするのは

Vagrant始めました — | サイオスOSS | サイオステクノロジー

Windows上でVirtualBox+Vagrant+CentOSによる仮想環境構築 - Qiita

です。

Vagrantとは

仮想マシンソフトを簡単に使うためのフロントエンドとなるツール、らしい。

特に仮想環境をたくさん使ったりあるいは頻繁に変えるようなお仕事状況ではいちいちVMware/VirtualBoxでぽちぽちインストールとかしてらんないので、

仮想マシン+仮想OS環境の設定ファイルとイメージをコマンド一つで呼んで仮想環境を起動・破棄できるようにする

のがメインのご利益ぽい。

 

まずは仮想マシンソフトのインストール

ここではVagrantのデフォルトらしい、OracleVirtualBox. VMwareだと面倒っぽいので。

Oracle VM VirtualBox

 

ここからWindows 64bit用のインストーラをダウンロードしてインストールです。

何も考えることなくインストール完了。

 

Vagrantのインストール

Vagrantも公式HPからダウンロードしてインストールします。

Vagrant by HashiCorp

Linux(Ubuntu)だとyumでいけるっぽい・・・?

 

今回はwindowsなのでインストーラ持ってきてインストール。

cmd.exeでvagrantのバージョンが出ればひとまず成功。

 

OSのイメージをゲット(Vagarnt box)

VagarantのOSその他設定ファイルイメージであるところの"box"をダウンロード。これを読み込んであげれば仮想環境(VirtualBox)上でLinuxが立ち上がるって寸法だな?

今回はCentOS6.5を選択。

f:id:Dr_KayAi:20160430011702p:plain

 

cmd.exeでgithubからダウンロード。

$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

よしよし。

f:id:Dr_KayAi:20160430012321p:plain

$vagrant box list

centos65 (virtualbox, 0)

でcentos65ができていればOK.

 

いよいよ仮想OS起動!

まずは作業ディレクトリを作って初期化。

$ mkdir centos

$ cd centos

$ vagrat init centos65

f:id:Dr_KayAi:20160430013026p:plain

 

 Vagrantファイルができたので初期修正が必要だよ。GUIを入れましょう。

f:id:Dr_KayAi:20160430013556p:plain

 

さあ、upすればCentOSが来るよ

$vagrant up

 

f:id:Dr_KayAi:20160430013958p:plain

 

キターーーーー!

 

あとは好きなbox取ってくれば同じ要領でいくらでも仮想環境を作れますね!

 

最後に

vagrant、以下のプラグインは入れておいたほうがよさそうです

vagrant-winnfsd

vagrant-vbguest

vagrant-proxyconf

 

 

 

 

*1:あーあれね、触ったことありますよ(キリッ というのがしたい

*2:ということはあれか、家での宿題とか勉強のためのプログラミング練習とかでは単にWindows + VMware + Ubuntuで十分ってことか?

有益情報ですね(VMware + Ubuntu on Windowsとか)

埼玉大学の後藤先生(http://www.ke.ics.saitama-u.ac.jp/)が、ご自身の研究室HPで公開されている、「研究室メンバー向け」コンテンツが非常に良いです。

 

特に、「Ubuntuで作業環境を整えよう」(http://www.aise.ics.saitama-u.ac.jp/~gotoh/HowToUbuntu.html)はup-to-dateでメンテされているのでとても助かります。

ご自身の研究室運営のためのコンテンツなのだと思いますが、それをこうやって公開していただけると多くの社会人も助かります。

 

調べたら自分とあまり歳変わらないんですね・・・・やっぱり大学でポスト得る人たちはすごいです。

 

JUnitよちよち歩き on IntelliJ Idea

itelliJ idea上でJUnit4使ってテストコードを書くという練習。

基本的に"JUnit 実践入門"の第一章をreproduceするのが目的。

 

 

JUnitのjarをゲットする

なにはともあれ、JUnitのjarをゲットしましょう。

junit-4.12.jarとhamcrest-core-1.3.jarをゲットしておきます。

 

projectの準備

適当なところに新規プロジェクトを作成して、junit-tutorialという名前にします。

モジュール名もjunit-tutorialでいいや。

で、引き続きテストコード用のソースルートを作成します。

testというディレクトリをつくって、project structureとかでtestのディレクトリに設定。緑色になります。

 

あと、project structure -> modulesでjunitとhamcrestのjarを追加します。

 

するとこんな感じ。

f:id:Dr_KayAi:20160416071044p:plain

テストにかけるクラスを書いてテストのひな形を生成

教科書にある通りCalculatorクラスを書きます。

 

f:id:Dr_KayAi:20160416071453p:plain

 

エディター上でテストしたいクラス名(public Calculator)を右クリックしたらtestを生成するっぽいコマンドが出てくるのでテストのひな形を生成します。

(go to --> test --> create a new test. ) 

テストの設定はJunit4を選択。

 

f:id:Dr_KayAi:20160416071837p:plain

適当にcode templateを整備しておくと、こんなのができるのであとは実装とテストですね。

f:id:Dr_KayAi:20160416071856p:plain

 

この状態ではテストメソッドは何も実装していなくて、デフォルトでfailが出るようになっているので、runすると

f:id:Dr_KayAi:20160419222302p:plain

 無事に失敗します。

実装してテストする

ということで、multiplyとdivideのテストメソッドを作ってみる。

あと、Caculator.divideをfloat割り算するように修正。

f:id:Dr_KayAi:20160419223301p:plain

めでたし!

 

例外処理のテスト

例外処理をテストするときには、@Testの後に出てきてほしい例外のクラス名を書いておくと、例外がでると成功、というテストになる。

 

例えば、除算のゼロ割でIllegalArgumentExceptionをthrowさせるように変更しておく。

f:id:Dr_KayAi:20160419224132p:plain

これのテストの書き方と結果。

f:id:Dr_KayAi:20160419224142p:plain

めでたしめでたし!これで1章を突破した。

 

 

moses on Cygwin/Windows

いまちょっと個人的にstatistical machine translationに興味があるので、とりあえずmosesをインストールして動かしてみよう!ってなった。

 

まずはありものの言語モデル等でmosesを動かすことが目標。

あと仕事じゃないので家のWIndows、すなわちCygwin環境での実行。

 

Cygwinインストール

まずは本家Cygwinからsetup.exeをダウンロードして使う。

cygwinのインストールは基本的にsetup.exe使うだけだけど、設定とかは

takuya-1st.hatenablog.jp

を参照しました。

lapack, boost, ssh emacs, zip, bzip, libtools, ncurses,wget,automake,zshなど思いつくものを全部入れる。

ターミナルから右クリックとかでメニューとか、Cygwinオワコンとかいう人もいるけど着実に便利になってるよね。

 

各種ツールやライブラリはgithubでとってくるから、

cygwin上でgithubをつかるようにするために

http:// https://github.com/NIFTYCloud-C4SA/support/wiki/%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88-GitHub%E3%81%AE%E5%A7%8B%E3%82%81%E6%96%B9(Cygwin%E7%B7%A8)

を実施します。

 

mosesと関連ライブラリ

mosesのインストールについては

が参考になりました。ただ、そのままでは通らないところもあったので

そこは試行錯誤。

 

まずはGIZA++はそのまま入りました。

SRILMはなぜかインストールがどうしても通らなかったので

IRSTLMだけインストールしています。

次のページ、boostはcygwinでパッケージされているのでパス。

 

mosesのインストールですが、

インストールコマンドは

./bjam -jX  (XはCPU数)

 だけでした。オプションつけると逆に動きません。

 

まずはテスト

この段階で欧米言語なら動くので、

d.hatena.ne.jp

にあるとおりにサンプルコードをダウンロードしてテスト。

Das ist eine klines haus. を翻訳する。

実行ディレクトリにnbest.txtというファイルができて、

f:id:Dr_KayAi:20160401221409p:plain

おお、ちゃんと並んでいる!

 

日本語もやりたい

のでMecabを次はインストールしよう.

試行錯誤の挙句、

ちらのうら - CygwinでMeCabインストール。

で配布してくれているパッチを当ててようやくmecabのインストールに成功。

 

 

 

Binary DNNs: articles(自分のメモもかねて)

岡野原さんのツイートで、binary netが話題になっていますね。重みも出力もすべて1 or -1に制限しても、性能が落ちずに計算が早くなると話題です。

[1602.02830] BinaryNet: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1

 

この著者はNIPS2015でその前身の話を出しています。この時はアップデートする時だけバイナリにしているのでBinaryNetほど効率的ではないですし、なんとも歯切れの悪い内容になっていました。

http://papers.nips.cc/paper/5647-binaryconnect-training-deep-neural-networks-with-binary-weights-during-propagations.pdf

あと、同じチームがICLR206にもsubmitしてますね。日付を見るとこれはbinarynetの前なので、結局binarynetが最新結果(一番大胆なことをしている)ことになります。

[1510.03009] Neural Networks with Few Multiplications

 

あと、最新のAAAIでも似たような話があります。ここではbackward方向だけ重みを変えていて、結局重みの符号だけが大事ということです。まだ会議の参加者限定でopenではないはずなのでリンクは張りませんが・・・

"How Important is Weight Symmetry in Backpropagation?", Liao, Leibo, and Poggio, in AAAI 2016. 

 

以上眺めると、binary netにあるように全部バイナリでモデル化するのは問題がなさそうということですね。あとはこのためにgpu codeレベルで最適化されたコードが書けるかどうか、ということになりそうですね・・・

 

あ、そういえば岡谷先生の深層学習本@機械学習プロフェッショナルシリーズは通読しましたけど、素晴らしすぎる出来でしたのでオススメ

 

 

Topic modeling survey on pattern recognition perspective

トピックモデルのサーベイ講演したので貼っておきますね。

複数パターン認識応用の立場でサーベイした話はたぶんないので価値あると思います。詳細版はPRMUの2015年12月予稿を入手(購入)してください。

 

さて、これを英語論文化しないといけないわけだが。

 

www.slideshare.net

魔王様おもしろいよねぇ、ついていきます

娘が生まれて、そのお世話でほぼすべての時間を使いきっていました。

 

タイトルは、残りわずかな時間ではたらく魔王さま!を読み返して思ったこと。

アムスラムスちゃんを見る目が完全にパパ視線になっていることを自覚。

そろそろ続巻を買い揃えていかないと

 

このブログとは別に、育児日記作ろうかなぁ・・・

ブログはテクニカル&ミクな話に限定するとか