Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Colabをshellから使う

 Colabをshellから使う

2019/08/10のNSEG勉強会で話した内容です。
Colab上でshellを使う手法の紹介と、自サーバへのリモートフォワードで使う方法を説明します。

SATOH Kiyoshi

March 22, 2022
Tweet

More Decks by SATOH Kiyoshi

Other Decks in Technology

Transcript

  1. Colab
    をshell
    から使う
    Colab
    をshell
    から使う
    2019/8/10
    さとうきよし

    View Slide

  2. Colab
    とは
    Colab
    とは
    無料でGPU/TPU
    付きサーバを使えるサービス
    Web(Jupyter)
    上からPython
    環境が即利⽤可能
    最⾼!

    View Slide

  3. Colab
    の構成
    Colab
    の構成
    接続時にlinux
    のコンテナが起動
    Web(Jupyter)
    上から操作を⾏う
    コンテナ種によりGPU
    かTPU
    が利⽤できる
    完全に独⽴した環境なのでインストールも可能
    コンテナは連続12
    時間までしか稼働出来ない

    View Slide

  4. コマンドの実⾏
    コマンドの実⾏
    Python
    の他にコマンドも実⾏可能
    !cat /etc/debian_version
    !apt install sshd
    だがセルからしか実⾏できないため結構不便

    View Slide

  5. 外からの接続は出来ない
    外からの接続は出来ない
    外には出ていけるが外からは接続できない
    コンテナから外にトンネルを作りそこ経由で接続

    View Slide

  6. ngrok
    というサービス
    ngrok
    というサービス
    ローカル上のものを外から接続可能にするサービス
    テストで動かしてるWeb
    サービスを⼀時的に接続可に
    特定サーバ・ポートにアクセスするとフォワードする
    serveo
    という同種のサービスもある

    View Slide

  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

    View Slide

  8. ngrok
    の問題
    ngrok
    の問題
    時々切れる
    ちょっと重い
    ngrok
    へのログインがだるい
    セキュリティ上の懸念(MITM)
    がちょっと不安

    View Slide

  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

    View Slide

  10. Colab→
    ⾃サーバへのトンネル
    Colab→
    ⾃サーバへのトンネル
    Colab
    側から⾃サーバへトンネルを張る
    ⾃サーバからトンネル伝ってssh
    接続
    Colab
    側から実⾏
    ssh -fNR 20022:target:22 [email protected]
    dev.example.jp
    から実⾏
    ssh -p 20022 root@localhost

    View Slide

  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 [email protected] &')

    View Slide

  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 &')

    View Slide

  13. 問題点
    問題点
    ⾃サーバがない
    → GCE
    の無料枠で踏み台サーバを⽴てる
    パスワードの受け渡し⽅
    フォーム機能だとノートにパスワードが残る

    View Slide

  14. Colab
    でshell
    使えるの便利
    Colab
    でshell
    使えるの便利
    ディープラーニングもののプロダクトの実験に便利
    ⾃宅に⾼いGPU
    積んだマシンなくても気軽に試せる

    View Slide