Python の機械学習環境を Docker イメージで作成
書籍「データサイエンティスト養成読本 機械学習入門編 (Software Design plus)」を参考に、numpy・scipy・matplotlib・scikit-learn パッケージをインストールした Python 3.5.0 の環境を Docker イメージとして作成してみました。
サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20151029/
python イメージをベースに作成
まずは、Docker の最新 python イメージ (この時は Python 3.5.0) をベースに Docker イメージを作成します。
なお、書籍では libblas-dev
をインストールしていましたが、ここでは代わりに libatlas-base-dev
をインストールしています。
Dockerfile
FROM python RUN apt-get update && apt-get upgrade -y RUN apt-get install -y libfreetype6-dev libatlas-base-dev liblapack-dev gfortran RUN pip install numpy RUN pip install scipy RUN pip install matplotlib RUN pip install scikit-learn RUN apt-get clean
docker build
で上記の Dockerfile からイメージを作成します。
Docker イメージの作成
$ docker build --no-cache -t sample/python-ml:0.1 .
動作確認
scikit-learn を使った単純な Python スクリプト (SVM で "あやめ" の品種を予測) を実行してみます。
/vagrant/svm_sample.py
from sklearn import datasets from sklearn import svm iris = datasets.load_iris() svc = svm.SVC() svc.fit(iris.data, iris.target) print(svc.predict([[5, 3, 4, 1], [6, 3, 5, 2]]))
先程作成した Docker イメージを docker run
で実行します。
DeprecationWarning が出力されますが、動作しているようです。
実行結果
$ docker run --rm -it -v /vagrant:/work sample/python-ml:0.1 python /work/svm_sample.py ・・・ [1 2]
DeprecationWarning の内容は inspect.getargspec() is deprecated, use inspect.signature() instead
です。
centos イメージをベースに作成
次に、CentOS をベースに Python 3.5.0 をソースからビルドした Docker イメージを作成してみました。
atlas を使う場合、そのままでは libcblas.so
が作られず scikit-learn のビルドに失敗するようなので、libtatlas.so
のシンボリックリンクとして libcblas.so
を作成するようにしています。
pip はデフォルトで pip3.5
としてインストールされるため、今回は pip3.5 をそのまま使って numpy 等をインストールしています。
なお、python
コマンドでは Python 2.7.5 が起動するので、Python 3.5 は python3
コマンドで起動します。
Dockerfile
FROM centos RUN yum update -y && yum install -y make automake libtool openssl-devel curl RUN curl -O https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz RUN tar zxf Python-3.5.0.tgz RUN cd Python-3.5.0 && ./configure && make && make install RUN rm -fr Python-3.5.0 && rm -f Python-3.5.0.tgz RUN yum install -y lapack-devel atlas-devel gcc-c++ freetype-devel libpng-devel RUN cd /usr/lib64/atlas && ln -s libtatlas.so libcblas.so RUN pip3.5 install numpy RUN pip3.5 install scipy RUN pip3.5 install matplotlib RUN pip3.5 install scikit-learn RUN yum clean all
Docker イメージの作成
$ docker build --no-cache -t sample/python-ml-centos:0.1 .
動作確認
docker run
で実行すると、先程と同じ結果になりました。
実行結果
$ docker run --rm -it -v /vagrant:/work sample/python-ml-centos:0.1 python3 /work/svm_sample.py ・・・ [1 2]