ラベル chainer の投稿を表示しています。 すべての投稿を表示
ラベル chainer の投稿を表示しています。 すべての投稿を表示

2016年2月3日水曜日

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. ソースコード



2016年1月24日日曜日

Google App EngineでChainerを動かそうとして諦めた時のメモ

表題どおり、Google App EngineでChainerを動かしてみようと思ったが、上手くいかなかった。
そのときのメモを書いておく。


1. numpyのバージョン

GAEはデフォルトでnumpyが用意されているが、これのバージョンは1.6.1
しかしChainerでは1.9,1.10が前提のようなので、これは使えない。

実際に、1.6.1のまま動かそうとすると、numpyのfull関数がないとかでエラーが出た。
githubのソースを見る限り、1.6.1では確かにfullはない様子。

そのため、自前のライブラリとしてnumpyの1.10を用意し、GAEにデプロイする。

2. 自前ライブラリのデプロイ


デプロイ対象のアプリケーションのルート直下にlibという名称のファイルを用意する。
そのlib以下にnumpyをインストールする。

$ pip install -t lib numpy

chainerとchinerが必要とするh5pyもついでにインストールする

$ pip install -t lib h5py


$ pip install -t lib chainer



そして、同じくルート直下にappengine_config.pyという名称のファイルを作成し、下記の内容を記載する。

from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')

3. SDKで実行
SDKで実行したところ、下記のエラーが出た。


  File "<app path>\lib\numpy\core\__init__.py", line 14, in <module>
    from . import multiarray
ImportError: cannot import name multiarray

multiarrayというモジュールがないとのこと。
ディレクトリを見てみるとmultiarrayはsoファイルでできたモジュールだった。

Google App EngineのドキュメントにははっきりとC extensionがだめと書いてあるので、おそらくこいつは動かないのだろう。

You can add any third-party library to your application, as long as it is implemented in "pure Python" (no C extensions) and otherwise functions in the App Engine runtime environment. The easiest way to manage this is with a ./lib directory.

ということでここで諦めた。
pythonのバージョンも2.7だし、やっぱグーグルさん的にはもうGoogle App Engineに力入れる気ないのかなあ。