Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Colabをshellから使う

90 views

Published on

Colab上でshellを使う手法の紹介と、自サーバへのリモートフォワードで使う方法。

Published in: Software
  • Be the first to comment

  • Be the first to like this

Colabをshellから使う

  1. 1. Colabをshellから使うColabをshellから使う2019/8/10 さとうきよし
  2. 2. ColabとはColabとは無料でGPU/TPU付きサーバを使えるサービス Web(Jupyter)上からPython環境が即利⽤可能 最⾼!
  3. 3. Colabの構成Colabの構成接続時にlinuxのコンテナが起動 Web(Jupyter)上から操作を⾏う コンテナ種によりGPUかTPUが利⽤できる 完全に独⽴した環境なのでインストールも可能 コンテナは連続12時間までしか稼働出来ない
  4. 4. コマンドの実⾏コマンドの実⾏Pythonの他にコマンドも実⾏可能 !cat /etc/debian_version !apt install sshd だがセルからしか実⾏できないため結構不便
  5. 5. 外からの接続は出来ない外からの接続は出来ない外には出ていけるが外からは接続できない コンテナから外にトンネルを作りそこ経由で接続
  6. 6. ngrokというサービスngrokというサービスローカル上のものを外から接続可能にするサービス テストで動かしてるWebサービスを⼀時的に接続可に 特定サーバ・ポートにアクセスするとフォワードする serveoという同種のサービスもある
  7. 7. Colabからngrokを利⽤Colabからngrokを利⽤sshdとngrokをコマンドで⼊れて利⽤ 下記内容をセルに貼って実⾏ import random, string, urllib.request, json, getpass #Generate root password password = ''.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 config https://stackover ow.com/questions/48459804/how-can-i- ssh-to-google-colaboratory-vm
  8. 8. ngrokの問題ngrokの問題時々切れる ちょっと重い ngrokへのログインがだるい セキュリティ上の懸念(MITM)がちょっと不安
  9. 9. sshのリモートフォワードsshのリモートフォワード固定IPのサーバがあればngrokと同様のことが可能 localから実⾏ ssh -R 8081:target:80 remote /etc/ssh/sshd_con g にリモート接続許可する設定が必要 GatewayPorts yes https://qiita.com/mechamogera/items/b1bb9130273deb9426f5
  10. 10. Colab→⾃サーバへのトンネルColab→⾃サーバへのトンネルColab側から⾃サーバへトンネルを張る ⾃サーバからトンネル伝ってssh接続 Colab側から実⾏ ssh -fNR 20022:target:22 username@dev.example.jp dev.example.jpから実⾏ ssh -p 20022 root@localhost
  11. 11. ⼊⼒が出来ない問題⼊⼒が出来ない問題プロンプトからのパスワード⼊⼒等が出来ない パスワード⼊⼒はフォーム機能で⼊れる パスワード受け渡しはSSH_ASKPASSで回避 HostKeyCheckingもオプションで回避 proxy_password = 'password' #@param {type:"string"} !echo "echo $proxy_password" > proxy_password.sh !chmod +x proxy_password.sh get_ipython().system_raw( 'export SSH_ASKPASS=/content/proxy_password.sh; export DISPLAY=dummy:0; setsid ssh -oStrictHostKeyChecking=no -fNR 20022:localhost:22 username@dev.example.jp &')
  12. 12. Colab側sshdの起動Colab側sshdの起動先にsshdを⼊れて起動しておく LD_LIBRARY_PATH の設定無いとエラーになるので注意 import random, string, urllib.request, json, getpass password = ''.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/.bashrc get_ipython().system_raw('/usr/sbin/sshd -D &')
  13. 13. 問題点問題点⾃サーバがない →GCEの無料枠で踏み台サーバを⽴てる パスワードの受け渡し⽅ フォーム機能だとノートにパスワードが残る
  14. 14. Colabでshell使えるの便利Colabでshell使えるの便利ディープラーニングもののプロダクトの実験に便利 ⾃宅に⾼いGPU積んだマシンなくても気軽に試せる

×