ML/AI開発環境:LXD/LXCにJupyterlabとpytorch導入

thumbnail for this post

ようやく、開発用のアプリを入れる段階まで来ました!
今回は、流行りの機械学習AIDeepLearningなどをいじれるコンテナを作っていきます。

同様の環境を作っている人なら、今までの記事も参考になるかもしれません↓↓
今までの記事一覧:
「PCセットアップ:デュアルブート編」

PCデュアルブート設定
「PCセットアップ:SSH編」
PC SSH設定
「lxd/lxc編」
Linux LXC/LXD設定
「Macでx11接続」
macでX11接続設定
「デュアルブートでのSSH接続」
デュアルブートでのSSH接続
「WindowsでX11接続」
WindowsでX11接続
今回のアプリインストールはこんな感じ
JupyterlabとPytorch設定

jupyterlab

カオス駆動開発!

Ubuntu Upgrade

作成したてのLXCコンテナは最新ではないのでアップデートしておきます。

sudo apt update	
sudo apt upgrade

Anacondaインストール

機械学習やAI系をやるならAnaconda環境にしておくと良いらしいので入れてみます。
(トレンドには乗らないとね)
web anaconda web
↑↑↑からダウンロードへのリンクを探してwgetでインストーラ取得
(入れてから思ったけど、minicodaの方が良いかも。。。)

wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
bash Anaconda3-2019.10-Linux-x86_64.sh
source ~/.bashrc
condaのアップデート
conda update -n base -c defaults conda
condaコンテナ作成。Pythonの仮想環境とかpipとか使わないで何もかもcondaで!
conda create --name my_env python=3.7
アクティベート
conda activate my_env
仮想状況確認
conda info -e

このままの流れでPytorchインストール

web pytorch
↑↑ここでインストールコマンド確認

conda install pytorch torchvision cpuonly -c pytorch

まだ何も試してないので、使い方はまた今度。。。

このままの流れでJupyterLabインストール

conda install jupyterlab

起動

==2019/12/23夜中 update ===
コンテナ環境でjupyter labを起動するのでlocalhostだけじゃなくコンテナのIPでもアクセスできるように起動します。

nohup jupyter lab --ip=* --no-browser &

nohup.outにアクセス用のurlとtokenが記載されているのでメモしておきます。

http://コンテナ名:8888/?token=xxxxxxxxxxxxxxxxxxx
 or http://127.0.0.1:8888/?token=xxxxxxxxxxxxxxxxxxx
このままでホストからhttp://コンテナIP:8888/?token=xxxxxxxxxxxxxxxxxxxでアクセスできます。 ホストの外部IPとコンテナの8888ポートとNAT接続を設定すれば、外部のPCのブラウザからもアクセスできるようになります。

sudo iptables -t nat -A PREROUTING -p tcp -d <ホストの外部IP> --dport 8888 -j DNAT --to-destination <コンテナのIP>:8888
図で書くとこんな感じ。
ローカルセグメントのPCからはホストのIPのport8888で接続できるけど、グローバル側はSSHポートのフォワーディングしか設定してないので、x11接続でもっさりfirefox使う必要があります。

Macに入れてあるChromeからホストのIP(192.168.0.22)経由でJupyter Labにアクセスしました。

やっぱり直接アクセスはX11 Forwardingに比べるとめっちゃ早いです!

ここから昼間に書いたちょっと古い内容(間違ってないけどややこしい)

jupyter lab &
....
....
http://localhost:8888/?token=xxxxxxxxxxxxxx
この最後のURL(localhost:8888)でJupyterLabのweb guiにアクセスできる。
のですが、まだホスト側とコンテナ側がport:8888でつながってません。

lxc proxyで繋ぎます。 (ホスト側で設定)

sudo lxc config device add <コンテナ名> <proxy名 p8888とか> proxy listen=tcp:localhost:8888 connect=tcp:localhost:8888
その後、ホストにX接続して、
firefox http://localhost:8888/?token=xxxxxxxxxxxxxx
無事開きました!

lxc proxyを閉じるときは

sudo lxc config device show <コンテナ名>
sudo lxc config device rm <コンテナ名> <proxy名>
です。

それにしても、外からX11でfirefox立ち上げるのは遅すぎて話にならないですね。。。
でもローカルのブラウザ使ってアクセスするには家のルータにもう一つポートを空けなければいけない。。。
セキュリティ詳しく無いので、webアクセスのためにセキュリティなしでポート空けるのはすごく怖い。。

投げ銭していただける場合は、amazonで15円からできます。宛先はheisakuあっとcomichi.comで。

マイナスは入れられないの?

comments powered by Disqus