オフライン環境で辛い中、頑張ってUbuntuの環境構築をしましょうシリーズの続き。今回はdockerで機械学習用の基礎環境を構築する。
前回はこちら(オフライン環境でapt install:Dockerをインストール)
https://qiita.com/tetrar124/items/40fd9b1ff5f0b015a6da
各ステップ
- オンライン環境でビルドして必要なパッケージを追加したkaggleイメージを作成
- イメージをアーカイブ化後、オフライン環境へコピー
- docker-compseで必要な設定を追加して完成
※注意点
kaggle-pythonコンテナは現時点でGPU非対応。
(記事を書いてから気が付きましたゴメンサイ)
https://github.com/Kaggle/docker-python
GPUを使う際はtensorflowコンテナなど、別なコンテナを選ぶ必要がある。
1. オンライン環境でkaggleコンテナに必要なパッケージを追加
下記のDockerfileを作成する。
Dockerfile
# kaggleのpythonコンテナを使用
FROM gcr.io/kaggle-images/python:latest
# パッケージの追加
RUN pip install -U pip && \
pip install fastprogress japanize-matplotlib
今回はオフライン環境なのでlatestに指定したが、オンラインの場合はバージョンを指定するのが好ましい。
バージョンは下記サイトで調査可能(2019/5/29現在はv56が最新)。
Google container Registryのkaggle pythonレポジトリ
https://console.cloud.google.com/gcr/images/kaggle-images/GLOBAL/python
このDockerfileを用いてビルドし、local/kaggleイメージを作成する。Dockerfileのあるフォルダで下記を実行。
$ sudo docker build ./ -t local/kaggle
2. 作成したイメージをアーカイブ化後、オフライン環境へコピー
$ sudo docker save local/kaggle > kaggle.tar
kaggle.tarファイル(15G!)をオフライン環境へ頑張ってコピーする。
(NIC二枚刺しにしてオフライン装置へ接続、scpが楽)
オフラインUbuntuのコピーしたファイルのあるフォルダで下記を実行し、イメージをロードする。
$ sudo docker load < kaggle.tar
3. docker-compseで必要な設定を追加して完成
Dockerfile
FROM local/kaggle
docker-compose.yaml
version: "2"
services:
jupyter:
build: .
volumes:
- ~/tmp:/tmp/working
working_dir: /tmp/working
ports:
- 1234:8888
command: jupyter notebook --ip=0.0.0.0 --allow-root --no-browser --NotebookApp.token=''
※ Ubuntuのdocker-composeはvesion: "2" にしないとエラーが出る
- portsの項目は、コンテナのポート8888をlocalhostの1234に転送する設定。
- volumesの
- ~/tmp:/tmp/working
は、Dockerのホストマシン(今回はオフライン環境Ubuntu)の~/tmpフォルダをコンテナの/tmp/workingとして共有する設定。今回は~/tmpファイルのセーブ先、必要なファイルを入れる共有フォルダとして使用する。 - ローカルネットを想定しているため
--NotebookApp.token=''
のオプションで認証を回避した。
下記コマンドでコンテナが起動する。
$ docker-compose up build
ブラウザに localhost:1234
と入れる事でJupyter notebookにアクセスできる。
ネットワーク内の場合は、ブラウザに
dockerを動かすホストマシンIPのアドレス:1234
と入れる事でリモートアクセスできる。
※事前にdockerを動かすマシンを下記コマンドでポート開放すること。
(fromオプションでローカルのみにした方が安全)
$ sudo ufw allow from 192.168.0.0/24 to any port 1234
参考