👨‍💻

Colab 上で GitHub を使用する

2022/07/30に公開

自前の GPU サーバや、GCE, AWS などのリソースを使用しても良いが、金銭的理由など手が届かない場合もあるため、① コード管理は GitHub で行い ② 実行環境として Colab を使用することを考える(サーバが問題なく利用可能な人は、本記事をスキップして下さい)。

また GitHub を使用せずに、Colab 上で実行内容をベタ書きして直接セル実行する方法も考えられるが、Github でコード管理をすることで以下のようなメリットが考えられる:

  • 実行環境が異なる他人からもコードにアクセスすることが出来る
  • コードの差分やコミットログが明確化になる
  • コードをセルではなく、ファイルとして管理するので実験管理がしやすい

個人的な所感だが、Colab の使用は ① コード作成に使用する開発環境用 ② 実際に実験をするための実行環境用で分けると運用しやすい(実行ログを ipynb ファイルとして残せる)。

なお、本記事はベストプラクティスではなく、あくまで一例なので個人としてやりやすい方法を見つけてもらいたい。

GitHub の設定

Colab 上に SSH でアクセスする(昔の)記事をよく見かけるが、2022年7月現在は Colab ランタイムでは SSH の使用が許可されていない(下画像)ため、Colab 上で直接 clone や push が出来るように設定する。


https://research.google.com/colaboratory/faq.html#limitations-and-restrictions

アクセストークンの取得

  1. https://github.com/settings/tokens から Generate new token をクリック
  2. Note に説明を記述、Expiration に有効期限を選択、Select Scope でアクセストークンの有効範囲を設定(個人開発なら repo だけで十分な場合が多い)
  3. 生成されたトークンをコピー

Colab 上での設定

以下を適切なものに変更する

ACCESS_TOKEN = "コピーしたトークンをここに貼り付け"
REPOSITORY = "smiyawaki0820/sample"  # clone/push したいリポジトリ
USER = "smiyawaki0820"
MAIL = "lab.skow.mywk@gmail.com"

WORKDIR = "sample"
BRANCH = "develop"

以下をセルにコピーして実行

! git clone https://{USER}:{ACCESS_TOKEN}@github.com/{REPOSITORY}.git {WORKDIR}
%cd {WORKDIR}
! git config --global user.name {USER}
! git config --global user.email {MAIL}
! git remote set-url origin https:/{USER}:{ACCESS_TOKEN}@github.com/{REPOSITORY}.git
! git checkout -b {BRANCH}
! git branch

ファイル作成(開発環境)

マジックコマンド %%writefile <出力ファイル> を使用して、セルに記述した内容をファイルに書き出す。

%%writefile hello.py
# -*- coding: utf-8 -*-

import argparse

def main():
    parser = argparse.ArgumentParser(description="hello")
    parser.add_argument("--param_file", default="outputs", type=str)
    args = parser.parse_args()

if __name__ == "__main__":
    main()

実行スクリプト例

%%writefile run_hello.sh
#!/bin/bash

set -ev
USAGE="bash $0 [NAME]"
DATE=`date +%Y%m%d-%H%M`

NAME=$1
PARAM_FILE="params/${NAME}.yaml"
LOG_FILE="logs/${NAME}_${DATE}.log"

echo "### bash $0 $@" > ${LOG_FILE}
echo "|--> START: ${DATE}"

python hello.py --param_file ${PARAM_FILE} | tee -a ${LOG_FILE}

DATE=`date +%Y%m%d-%H%M`
echo "|--> END: ${DATE}"

ファイルが作成できたらあとは GitHub に push する。

! git add hello.py
! git commit -m "[add] hello.py"
! git push origin {BRANCH}:{BRANCH}

あとは実行環境で実行する。

参考

Discussion