💊
Google Colaboratoryでkmol
本記事でわかること
- Google Colaboratoryでkmolを実行する方法
kmolとは
Drug discoveryおよびLife scienceのための機械学習ライブラリで、グラフベースの推論モデル、説明可能AI、差分プライバシーなどの特徴的な機能を有する。
前提条件
-
conda
環境を前提とする。公式ドキュメントではconda
環境を前提としてインストール方法が記載されている、かつ_libcc_mutex
がconda-forgeにしか見つからなかったのでconda
を用いる
Google Colaboratoryでkmol
-
編集
->ノートブックの設定
からハードウェアアクセラレータとしてGPU
を指定する - GPU確認
!nvidia-smi
- 環境変数
PYTHONPATH
をリセットする%env PYTHONPATH=
- minicondaをインストールする
%%bash MINICONDA_INSTALLER_SCRIPT=Miniconda3-py38_4.12.0-Linux-x86_64.sh MINICONDA_PREFIX=/usr/local wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT chmod +x $MINICONDA_INSTALLER_SCRIPT ./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX
- defaults channelからminicondaをupdate
%%bash conda install --channel defaults conda python=3.8 --yes conda update --channel defaults --all --yes
- githubからkmolをclone
!git clone https://github.com/elix-tech/kmol.git
- kmol/environment.ymlのenv名をkmol -> baseに書き換える
- kmol/environment.ymlから各種ライブラリをインストール
%%bash cd /content/kmol conda env update -f /content/kmol/environment.yml --prune
- pip経由でtorch, torch_geometory, kmolをインストール(kmol/install.shを実行)
%%bash cd /content/kmol bash install.sh
pip install torch-scatter==latest+cu102 -f https://pytorch-geometric.com/whl/torch-1.6.0.html --use-deprecated=legacy-resolver pip install torch-sparse==latest+cu102 -f https://pytorch-geometric.com/whl/torch-1.6.0.html --use-deprecated=legacy-resolver pip install torch-cluster==latest+cu102 -f https://pytorch-geometric.com/whl/torch-1.6.0.html --use-deprecated=legacy-resolver pip install torch-spline-conv==latest+cu102 -f https://pytorch-geometric.com/whl/torch-1.6.0.html --use-deprecated=legacy-resolver pip install torch-geometric==1.6.3 pip install -e .
- kmol動作確認
!/usr/local/bin/kmol -h
- mila動作確認
!/usr/local/bin/mila -h
kmol動作確認
-
datasetsの解凍
%%bash cd /content/kmol/data unzip datasets.zip
-
設定ファイルtox21.jsonを書き換え
項目 original new loader.input_path data/datasets/tox21.csv /content/kmol/data/datasets/tox21.csv output_path data/logs/tox21/ /content/kmol/data/logs/tox21/ cache_location data/cache/ /content/kmol/data/cache/ virualizer.mapping_file_path tmp/mapping.csv /content/kmol/tmp/mapping.csv -
train実行
!/usr/local/bin/kmol train /content/kmol/data/configs/model/tox21.json
-
best checkpointの特定
!kmol find_best_checkpoint /content/kmol/data/configs/model/tox21.json
-
Best checkpointとして出てきたチェックポイントファイルを
tox21.json
に指定する{ ... "checkpoint_path": /content/kmol/data/logs/tox21/checkpoint_xx.pt, ... }
-
Checkpoint評価
!kmol eval /content/kmol/data/configs/model/tox21.json
-
推論
!kmol predict /content/kmol/data/configs/model/tox21.json
残件
ColaboratoryコードセルのPython Version設定不備
追記
以下の記載に従うことで、Code CellにおいてもPythonのバージョンをデフォルトとは別のものに設定できる。
具体的には以下の通り。
- notebookをダウンロードし、
kernelspec
の値を書き換える"kernelspec": { "name": "Python38", "display_name": "Python 3.8" }
- UploadしてColaboratoryを開く
-
Python38
なるkernelspec
が存在しないゆえDefaultを利用する旨のメッセージが出る - 以下コマンド実行
!conda install -q -y jupyter !conda install -q -y google-colab -c conda-forge !python -m ipykernel install --name "Python38" --user
- ColaboratoryページをReloadする
- Code cellにてバージョン確認
import sys sys.version
(参考)
colaboratoryのコードセルのPythonのバージョンはcondaで入れたバージョンになっていない(python3.8を期待)
# 入力
import sys
print(sys.version)
# 出力
3.7.14 (default, Sep 8 2022, 00:06:44)
[GCC 7.5.0]
結果として以下のようなコードでエラーが発生してtorch geometoryが使えない
# 入力
from torch_geometric.data import Data
# 出力
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-34-b336892afbe1> in <module>
----> 1 from torch_geometric.data import Data
7 frames
/usr/lib/python3.7/ctypes/__init__.py in __init__(self, name, mode, handle, use_errno, use_last_error)
362
363 if handle is None:
--> 364 self._handle = _dlopen(self._name, mode)
365 else:
366 self._handle = handle
OSError: libcudart.so.10.2: cannot open shared object file: No such file or directory
肝心のkmolはスクリプト内で以下のように指定しているため、想定通りPython 3.8が選択されて実行可能となっている。
#!/usr/local/bin/python3.8
# -*- coding: utf-8 -*-
import re
import sys
from kmol.run import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Discussion