2019/08/10のNSEG勉強会で話した内容です。 Colab上でshellを使う手法の紹介と、自サーバへのリモートフォワードで使う方法を説明します。
Colabをshellから使うColabをshellから使う2019/8/10さとうきよし
View Slide
ColabとはColabとは無料でGPU/TPU付きサーバを使えるサービスWeb(Jupyter)上からPython環境が即利⽤可能最⾼!
Colabの構成Colabの構成接続時にlinuxのコンテナが起動Web(Jupyter)上から操作を⾏うコンテナ種によりGPUかTPUが利⽤できる完全に独⽴した環境なのでインストールも可能コンテナは連続12時間までしか稼働出来ない
コマンドの実⾏コマンドの実⾏Pythonの他にコマンドも実⾏可能!cat /etc/debian_version!apt install sshdだがセルからしか実⾏できないため結構不便
外からの接続は出来ない外からの接続は出来ない外には出ていけるが外からは接続できないコンテナから外にトンネルを作りそこ経由で接続
ngrokというサービスngrokというサービスローカル上のものを外から接続可能にするサービステストで動かしてるWebサービスを⼀時的に接続可に特定サーバ・ポートにアクセスするとフォワードするserveoという同種のサービスもある
Colabからngrokを利⽤Colabからngrokを利⽤sshdとngrokをコマンドで⼊れて利⽤下記内容をセルに貼って実⾏import random, string, urllib.request, json, getpass#Generate root passwordpassword = ''.join(random.choice(string.ascii_letters + string.digits)for i in range(20))#Download ngrok! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-! unzip -qq -n ngrok-stable-linux-amd64.zip#Setup sshd! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null#Set root password! echo root:$password | chpasswd! mkdir -p /var/run/sshd! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config! echo "PasswordAuthentication yes" >> /etc/ssh/sshd confighttps://stackover ow.com/questions/48459804/how-can-i-ssh-to-google-colaboratory-vm
ngrokの問題ngrokの問題時々切れるちょっと重いngrokへのログインがだるいセキュリティ上の懸念(MITM)がちょっと不安
sshのリモートフォワードsshのリモートフォワード固定IPのサーバがあればngrokと同様のことが可能localから実⾏ssh -R 8081:target:80 remote/etc/ssh/sshd_con gにリモート接続許可する設定が必要GatewayPorts yeshttps://qiita.com/mechamogera/items/b1bb9130273deb9426f5
Colab→⾃サーバへのトンネルColab→⾃サーバへのトンネルColab側から⾃サーバへトンネルを張る⾃サーバからトンネル伝ってssh接続Colab側から実⾏ssh -fNR 20022:target:22 [email protected]dev.example.jpから実⾏ssh -p 20022 root@localhost
⼊⼒が出来ない問題⼊⼒が出来ない問題プロンプトからのパスワード⼊⼒等が出来ないパスワード⼊⼒はフォーム機能で⼊れるパスワード受け渡しはSSH_ASKPASSで回避HostKeyCheckingもオプションで回避proxy_password = 'password' #@param {type:"string"}!echo "echo $proxy_password" > proxy_password.sh!chmod +x proxy_password.shget_ipython().system_raw('export SSH_ASKPASS=/content/proxy_password.sh;export DISPLAY=dummy:0;setsid ssh -oStrictHostKeyChecking=no -fNR20022:localhost:22 [email protected] &')
Colab側sshdの起動Colab側sshdの起動先にsshdを⼊れて起動しておくLD_LIBRARY_PATHの設定無いとエラーになるので注意import random, string, urllib.request, json, getpasspassword = ''.join(random.choice(string.ascii_letters + string.digits)for i in range(20))print(f'Root password: {password}')! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null! echo root:$password | chpasswd! mkdir -p /var/run/sshd! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config! echo "ClientAliveInterval 30" >> /etc/ssh/sshd_config! echo "GatewayPorts yes" >> /etc/ssh/sshd_config! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.bashrc! echo "export LD_LIBRARY_PATH" >> /root/.bashrcget_ipython().system_raw('/usr/sbin/sshd -D &')
問題点問題点⾃サーバがない→ GCEの無料枠で踏み台サーバを⽴てるパスワードの受け渡し⽅フォーム機能だとノートにパスワードが残る
Colabでshell使えるの便利Colabでshell使えるの便利ディープラーニングもののプロダクトの実験に便利⾃宅に⾼いGPU積んだマシンなくても気軽に試せる