Google Colaboratoryとローカル環境(Jupyter Lab)の学習時間の比較
Google Colaboratoryとローカル環境(Jupyter Lab)の機械学習の学習(最適化)時間を比較する。
それぞれCPUとGPUで計測する。
方法
今回の手法にはPyTorchチュートリアル(日本語翻訳版)の0.8. クイックスタートをベースとして利用する。後述のア. 時間の計測とイ. CPU/GPU切り替えのコードを加えたら、通常通り上から実行すればよい。
ア. 時間の計測
学習(最適化)の時間の測定には、学習ループのセルの先頭に「%%time」を記述する。
%%time
epochs = 5
for t in range(epochs):
print(f"Epoch {t+1}\n-------------------------------")
train(train_dataloader, model, loss_fn, optimizer)
test(test_dataloader, model)
print("Done!")
イ. CPU/GPU切り替え
上記クイックスタートの「モデルの構築」のセルにおいて、CPUまたはGPUを直接指定する記述を追加する。(例)CPUを指定:
// device = "cuda" if torch.cuda.is_available() else "cpu"
device = "cpu"
// device = "cuda"
結果
CPU: 1min 18s
GPU: 59.7 s
Jupyter Lab(ローカル)
CPU: 45.6s
GPU: 26s
ColabではGPU指定はできないとはいえ、この結果を見るとローカルで環境を用意すると学習が半分で済む計算になる。
ローカル環境の詳細
今回の測定にはRyzen 3600 + GTX 1060 (6GB)にCUDA 10.2をインストールして次の環境を利用している。
MAP推定メモ
結論
最尤推定・・・事前確率P(θ)を最大にするθを推定
MAP推定・・・事後確率P(θ|D)を最大にするθを推定
補足
P(θ|D) = P(θ) × P(D|θ) / P(D)
ベイズの定理を参照。
P(θ|D)
= P(θ, D) / P(D)
= P(D|θ) P(θ) / P(D)
= P(θ) × P(D|θ) / P(D)
方法
MAP推定を行うには、
argmax P(θ|D)
= argmax log P(θ|D)
= argmax { log P(θ)+log P(D|θ) }
これより log P(θ)+log P(D|θ) をθに関して偏微分して0になるθを求めればよい
事後確率の例題
「高齢ドライバーが免許返納を検討している」確率を P(θ) とする。
「免許返納を検討している高齢ドライバー」が「交通事故を起こす」確率をP(D|θ)とする。
「交通事故を起こした高齢ドライバー」が「免許返納を検討していた」確率P(θ|D)を求めよ。
答え・・・P(θ|D) = P(θ) × P(D|θ) / P(D)。
さらに
ポワソン分布の最尤推定において、さらにパラメータμの確率分布P(μ)が与えられればMAP推定を行うことができる。
miniconda+jupyterLab+pytorch環境構築
概要
目まぐるしく変化しているように見える機械学習の開発環境の、とりあえず最先端と思われる一つを抑えておく。
いま興味がある転移学習を使えば、個人レベルでも面白いことができないかと思いチュートリアルから始めてみる。
各種インストール
- 事前にminicondaをインストールしておく
- Anaconda Promptを起動
-
conda create -n pytorch python=3.7
conda activate pytorch
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
conda install -c conda-forge jupyterlab
JupyterLabの起動
- Anaconda Promptを起動
-
conda activate pytorch
jupyter-lab
参考:
Miniconda — Conda documentation
Project Jupyter | Installing the Jupyter Software
次回
PyTorchのチュートリアルを実行して画像分類する。最終的には転移学習まで予定。
P.S. 将棋AIも作りたい。