💊

Google Colaboratoryでkmol

2022/09/22に公開

本記事でわかること

  • Google Colaboratoryでkmolを実行する方法

kmolとは

Drug discoveryおよびLife scienceのための機械学習ライブラリで、グラフベースの推論モデル、説明可能AI、差分プライバシーなどの特徴的な機能を有する。

https://github.com/elix-tech/kmol

前提条件

  • conda環境を前提とする。公式ドキュメントではconda環境を前提としてインストール方法が記載されている、かつ_libcc_mutexがconda-forgeにしか見つからなかったのでcondaを用いる

Google Colaboratoryでkmol

  1. 編集->ノートブックの設定からハードウェアアクセラレータとしてGPUを指定する
  2. GPU確認
    !nvidia-smi
    
  3. 環境変数PYTHONPATHをリセットする
    %env PYTHONPATH=
    
  4. 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
    
  5. defaults channelからminicondaをupdate
    %%bash
    conda install --channel defaults conda python=3.8 --yes
    conda update --channel defaults --all --yes
    
  6. githubからkmolをclone
    !git clone https://github.com/elix-tech/kmol.git
    
  7. kmol/environment.ymlのenv名をkmol -> baseに書き換える
  8. kmol/environment.ymlから各種ライブラリをインストール
    %%bash
    
    cd /content/kmol
    conda env update -f /content/kmol/environment.yml --prune
    
  9. 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 .
    
  10. kmol動作確認
    !/usr/local/bin/kmol -h
    
  11. mila動作確認
    !/usr/local/bin/mila -h
    

kmol動作確認

  1. datasetsの解凍

    %%bash
    
    cd /content/kmol/data
    unzip datasets.zip
    
  2. 設定ファイル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
  3. train実行

    !/usr/local/bin/kmol train /content/kmol/data/configs/model/tox21.json
    
  4. best checkpointの特定

    !kmol find_best_checkpoint /content/kmol/data/configs/model/tox21.json
    
  5. Best checkpointとして出てきたチェックポイントファイルをtox21.jsonに指定する

    {
        ...
        "checkpoint_path": /content/kmol/data/logs/tox21/checkpoint_xx.pt,
        ...
    }
    
  6. Checkpoint評価

    !kmol eval /content/kmol/data/configs/model/tox21.json
    
  7. 推論

    !kmol predict /content/kmol/data/configs/model/tox21.json
    

残件

ColaboratoryコードセルのPython Version設定不備

追記

以下の記載に従うことで、Code CellにおいてもPythonのバージョンをデフォルトとは別のものに設定できる。

https://stackoverflow.com/a/71512702

具体的には以下の通り。

  1. notebookをダウンロードし、kernelspecの値を書き換える
    "kernelspec": {
        "name": "Python38",
        "display_name": "Python 3.8"
    }
    
  2. UploadしてColaboratoryを開く
  3. Python38なるkernelspecが存在しないゆえDefaultを利用する旨のメッセージが出る
  4. 以下コマンド実行
    !conda install -q -y jupyter
    !conda install -q -y google-colab -c conda-forge
    !python -m ipykernel install --name "Python38" --user
    
  5. ColaboratoryページをReloadする
  6. 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