2016年2月18日木曜日

VMWare PlayerでIPv6通信

VMWare Playerで動かした仮想マシン上でIPv6通信を行った時のメモ。

VMWareのバージョン

7.1.0 build-2496824

仮想マシン1

Windows 7

仮想マシン2

Red Hat Enterprise Linux Server release 6.0 (Santiago)

やったこと

  • 仮想マシン1,2のping6
  • ホスト(Windows7)と仮想マシン1のping6
  • ホスト(Windows7)と仮想マシン2のping6

結果

  • 仮想マシン1 => 2 へのping6 成功
  • 仮想マシン2 => 1 へのping6 成功
  • ホスト=>仮想マシン1へのping6 成功
  • 仮想マシン1=>ホストへのping6 失敗
  • ホスト=>仮想マシン2へのping6 成功
  • 仮想マシン2=>ホストへのping6 失敗

何故かよくわからないが、仮想マシン=>ホストへのping6はUnreachableだった。
Wiresharkで見ていたところ、仮想マシンからNeighbor solicitationsが発行された後に
ホストから応答があるはずのNeighbor advertisementsが出ていなかった。
Vmware Playerのせいなのか、設定が正しくないのかは不明。

なお、IPv4でのpingの場合は、上記の全経路で通信に成功した。

重要そうな設定

ネットワークアダプタの設定をHost-onlyにした時のみ、ping6が成功した。
BridgedやNATではダメだった。

仮想マシン上のFirewallは切っておいた。ホストはOFFにする権限がなかったので切っていない。
仮想マシン => ホストのping6が通らないのはこれが原因かもしれない。ただし仮想マシン間のping6は双方向で通るので、イマイチよくわからない。



2016年2月3日水曜日

Chainerを使ったMNIST Handwitten Digit Classifier

Chainerを使って手書き数字の認識器を作ってみた。

MNIST Handwritten digit classifier


Herokuで動かしているが、学習自体は別の環境で行った。
ChanierはモデルのSerialize機能があるので、それをHerokuにデプロイして利用している。

マシンリソースがあまりないので、エポック数とか削ってしまったが、まあまあきちんと認識してくれてるような気がする。

ソースコードはGithubを参照

html部分はこちらのソースコードを流用させていただきました。

HerokuでChainerを動かそうとして成功したときのメモ

ChainerをHerokuで動かして成功したのでそのメモ。


Google App Engineでは、GAEにプリインストールされているnumpyのバージョンや.soファイルを利用したpythonライブラリのデプロイ制限などのために上手く動かなかったが、Herokuでは無事に動いた。

1. Chainerのバージョンは1.5.1以降で

Herokuでは基本的にpipでインストールできるものは、何でも利用できるようでGoogle App Engineよりも自由度が高い。

ただし、Herokuの環境ではlibhdf5-devなどのh5pyのインストールに必要な開発モジュールが入ってないようで、h5pyだけはインストールできなかった。

幸運なことにChainer 1.5.1からはh5pyがオプショナルになっていたようで、これは大きな問題にならなかった。

githubを見ても特に変更の理由はわからないが、もしこのような事態を想定して変更してたのならば、開発者たちの慧眼は賞賛ものである。


2. その他の環境

下記のバージョンを利用。

Flask==0.10.1

numpy==1.9.2

six ==1.9.0

chainer==1.6.0


またデフォルトでは2系のpythonを3系に変更するためにruntime.txtに下記のように書く。なお、Chainerは2.7にも対応しているので、2系のままでもたぶん動くが未検証。

python-3.4.0

3. ソースコード