LoginSignup
1
2

More than 3 years have passed since last update.

オフラインUbuntuで機械学習やKaggle用環境構築(Docker)

Last updated at Posted at 2019-05-29

オフライン環境で辛い中、頑張ってUbuntuの環境構築をしましょうシリーズの続き。今回はdockerで機械学習用の基礎環境を構築する。

前回はこちら(オフライン環境でapt install:Dockerをインストール)
https://qiita.com/tetrar124/items/40fd9b1ff5f0b015a6da

各ステップ
1. オンライン環境でビルドして必要なパッケージを追加したkaggleイメージを作成
2. イメージをアーカイブ化後、オフライン環境へコピー
3. 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

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2