👨💻
Colab 上で GitHub を使用する
自前の GPU サーバや、GCE, AWS などのリソースを使用しても良いが、金銭的理由など手が届かない場合もあるため、① コード管理は GitHub で行い ② 実行環境として Colab を使用することを考える(サーバが問題なく利用可能な人は、本記事をスキップして下さい)。
また GitHub を使用せずに、Colab 上で実行内容をベタ書きして直接セル実行する方法も考えられるが、Github でコード管理をすることで以下のようなメリットが考えられる:
- 実行環境が異なる他人からもコードにアクセスすることが出来る
- コードの差分やコミットログが明確化になる
- コードをセルではなく、ファイルとして管理するので実験管理がしやすい
個人的な所感だが、Colab の使用は ① コード作成に使用する開発環境用 ② 実際に実験をするための実行環境用で分けると運用しやすい(実行ログを ipynb ファイルとして残せる)。
なお、本記事はベストプラクティスではなく、あくまで一例なので個人としてやりやすい方法を見つけてもらいたい。
GitHub の設定
Colab 上に SSH でアクセスする(昔の)記事をよく見かけるが、2022年7月現在は Colab ランタイムでは SSH の使用が許可されていない(下画像)ため、Colab 上で直接 clone や push が出来るように設定する。
アクセストークンの取得
-
https://github.com/settings/tokens から
Generate new token
をクリック -
Note
に説明を記述、Expiration
に有効期限を選択、Select Scope
でアクセストークンの有効範囲を設定(個人開発ならrepo
だけで十分な場合が多い) - 生成されたトークンをコピー
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