fastai 1.0をKaggleで動かすためにしたこと


こちら、Kaggleが安定するようになってしまったのか、pipでライブラリをインストールしてもKernelが止まらず、ライブラリの再読込が不可能になってしまいました

その代わり、Kaggle/docker-python#340のコメント によると、pip installが動くように開発中のようです。fast.aiの新しいコースが近々始まるのもあって、そちらはfastai 1.0を使うことになると思うので、近い内に改善されそうです。

以下、メモ目的で残しておきますが、ほぼ意味のない記事です。

fastai 1.0をGoogle Colaboratoryで動かすためにしたこと - Qiita

に続き、Kaggleで動かせるか試してみました。
ちょっと(だいぶ?)ハックですが、動くには動きました。

課題1: もともと古いfastai(0.7)が入っていること(2018年10月13日以前)

こちらはアップグレードすれば大丈夫でした。

!pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu90/torch_nightly.html
!pip install -U fastai

なお、この問題は2018年10月13日にKaggle Kernelの元になっているDockerイメージが更新されたそう(GitHubのコメント)なので既に自然解決しています。

ただし、以下の課題2の内容は発生しますので、そちらの対応は必要です。

課題2: Pytorchのバージョンが古いこと

fastai 1.0は新しいだけあって、正式リリース前のPytorch 1.0に依存しています。
fastaiのGitHub README にも書いてありますが、Nightlyビルドを入れる必要があります。

!pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu90/torch_nightly.html

こちらはPytorch 1.0が標準でKaggleのKernelに入れば良いのですが、既存のコードのことを考えると結構時間がかかるのではないかな、と思います。

課題3: ライブラリのバージョンを変えても読み込まれない

課題2の延長なのですがKaggleのKernelは既にPytorch 0.4.1をロードしてしまっているので、そのまま機械学習をさせようとしても、Pytorchの後方互換でない部分でコケます。

上記インストール時に90%ぐらいの確率で下の警告が表示され、Kernelがリスタートされます。その副作用で自動的に新しいPytorch 1.0が読み込まれます。

その後、残りのコードを走らせると、新しいライブラリを拾うようになります。
ちなみに、Pytorchの場合は下のコードで読み込まれているバージョンが確認できます。

import torch
print(torch.__version__)

課題4: CUDA 9.0でないと遅い

こちらは論理的な理由はわかっていないのですが、PytorchはCUDAを内蔵しているので、いろいろなCUDAのバージョンを試したのですが、どうもCUDA 9.0でないと遅い模様です。

先程のインストールコード:

!pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu90/torch_nightly.html   # <- cu90 でないとGPUコードが遅い

結論

!pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu90/torch_nightly.html

を最初の方で実行して、課題2のKernel Restartingが表示されたら、OKを押して、その先のコードを実行していきましょう。