0. はじめに
- この記事は,google colaboratoryを使用して実験をする際の効率を上げることを目的とした記事です.
- 結論としては,
%run main.py
,subprocess.make()
をうまく使用してコードの綺麗さ,実験の効率をあげることを提案します.
1. なぜGoogleColaboratoryを使うの?
- Googleのアカウントを持つ誰もが,GoogleColaboratoryを使うことで,GPUを使えるため,行列計算が早く行えます(無償の場合,時間制約あり).
- また,GoogleColabotatoryで実行することで,計算結果をその場で確認することができます.
2. Colabの利点と欠点
- 利点
- 結果が見やすい.
- 可視化をしやすい.(可視化によるデータの確認等)
- 欠点
- セルごとに実行するため,ただ単にGPUを回すことが目的である場合はエンターボタンを押すのがうんざりする.
- コードが見づらい.
- 外部ライブラリを使用する際に高頻度で
! pip install sth -qqq
をする必要がある. - 制限のあるGPUの時間を気にしながら実行しなければならない.
3. 提案
- 提案
-
%run main.py args
,subprocess.make()
を駆使してセルを綺麗にする.
-
- 提案理由
- 利点
-
%run main.py
という短いコードで命令を実行することができ,かつ,編集するファイルはmain.pyとそれが使用するmoduleのみとなり,ノートブックではなく,Pythonファイルのみを編集して開発することができます. -
subprocess.make()
を駆使することで,linuxのpkillというコマンドを実行できるため,自動でセッションを切ることができるため,GPUの実行時間を軽減できる点.
-
- 不便な点
- 可視化や新しい情報の発見をするためのものではないため注意が必要な点.
- 利点
4. サンプルプログラム
今回はtorch.tensorの値をprintするだけの関数を,moduleとpythonファイルを用いてサンプルを用意しました.
- Google DriveのURLです:
- GitHubのURLです:
概要としては
-
%run
で pyファイルを実行- これをすることで,cellを綺麗に保てます.
- subprocess で pip install, pkill をする
- subprocessをすることで,
!
による実行を回避できます. - これのおかげで,
.py
ファイルで実行できる処理が増え,pkill
によりprocessを強制的に終了できるため,GPUを無駄に使うことを回避できます.
- subprocessをすることで,
実際のnotebook上でのコードは以下のようになります(githubのリンク):
from google.colab import drive
drive.mount('/content/drive')
### *** ###
# 通常(2022/08/14時点)では
# 1.12.1+cu113がデフォルトでinstallされているが,
# 次の指定で 1.0.0をimportできる.
from subprocess import run
run("pip install torch==1.0.0",shell=True)
import torch
print("torch.__version__: ",torch.__version__)
### *** ###
%run /content/drive/MyDrive/Qiita_env_01/main.py 20220814
Mounted at /content/drive
torch.__version__: 1.0.0
torch.__version__ in qiita.func.func: 1.0.0
Printed Number Is 20220814 😄
5. 現状私が理解していないこと
5.1. no-good.py(githubのリンク),
-
pip install
の内容を pythonファイルに含めてrun
をしてしまうと,正しく実行することができませんでした.- おそらく非同期処理の処理が実行されてしまったかと推測されていますが,改善する方法が現状追えてはいません.
- このことから,
.py
ファイル内でpip install
は難しいのではないかと考えています.
from google.colab import drive
drive.mount('/content/drive')
%run /content/drive/MyDrive/Qiita_env_01/main.py 20220814
Mounted at /content/drive
torch.__version__ in qiita.func.func: 1.12.1+cu113
Printed Number Is 20220814 😄
6. 最後に
この記事に立ち寄ってくださり,ありがとうございました.
なにかご指摘やご質問あれば,遠慮なくお尋ねください.