Google ColabでRDKit:ケモインフォマティクス用のpython環境を手軽に構築

化学

本ブログでは「有機合成化学者のためのケモインフォマティクス入門」を掲げて,特にpythonを用いてケモインフォマティクスを行う際に必要となる環境構築方法から解説してきました.例えば「RDKitでケモインフォマティクスに入門」という記事では,pythonのケモインフォマティクス用ライブラリであるRDKitのインストール方法から簡単な使い方まで解説しています.

一方で化学系の多くの人にとってはメール,ウェブブラウジング,オフィスを用いた文書作成以外にコンピュータを使うことはほとんどなく,pythonの環境構築が大きな課題となることも事実だと思います.今回はGoogleが提供するブラウザ上でpythonの実行環境が無料で利用可能な,Google Colabの紹介と,Colab上へのRDKitのインストール方法を解説していきます.

Google Colabとは

Google ColaboratoryとはGoogleが提供しているクラウド上のpython実行環境です.ChromeやSafariなどのブラウザだけでJupyter Notebookを基盤とした実行環境上でコードを実行できるようになっています.

Googleアカウントさえ持っていれば「無料」でGPUを利用可能ということで,注目を集めているサービスです.このように無料で使えるGoogle Colabですが,実行時間に制限があります.覚えておくべき制限は以下の通りです.

  • 新しいインスタンス(実行環境)を作成して12時間経過するとリセットされる(12時間ルール
  • セッションが切れて90分経過するとリセットされる(90分ルール

その他メモリやディスク容量にも制限がありますので,あまりに大きなデータセットを扱って分析を行うのは現実的でありません.インスタンスが消えると初期状態にリセットされてしまうので,ライブラリのインストールなどを始めから行う必要がある点に注意が必要です.

Google Colabの使い方

Google Colabにアクセスすると以下のようなウィンドウが登場します.

Colab first window

上のタブには

  • Googleが最初から用意しているデモ用ノートブック
  • 最近Colab上で使ったノートブック
  • Googleドライブ上のノートブック
  • GitHub上のノートブック
  • ローカルからアップロード

の選択肢があります.また右下からpython3またはpython2を用いた新規ノートブックの作成が可能です.作成したノートブックはGoogleドライブ上の「Colab Notebooks」というフォルダに保存されます.

技術書ではコードの例がgithubにアップロードされていて,コードを実行しながら読み進めたい場合も多いと思います.そういった場合には「github」タブから,ノートブックにアクセス可能です.

例として,最近第2版が出版されたAurélien Geron著の「Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow」を見てみます.URLの部分にgithubのページを打ち込むとrepositoryのデータが取得され,ノートブックの一覧が表示されます.あとは希望のファイル名を選択するだけで,Colab上でノートブックが開かれます.

Hands on ml2

ノートブックの設定方法

GPUの利用設定

Google Colabは「無料でGPUが利用可能」ということで話題を集めているサービスですが,新しくノートブックを作成した段階ではGPUを利用する設定になっていません.

まず「Edit-> Notebook settings」に進みます.

Notebook setting

表示されたウィンドウの「Hardware accelerator」からGPUを選択することでGPUの利用が有効になります.ここではGoogleの開発しているTPU(Tensor Processing Unit)も選択可能ですが,TPU利用に最適化したコードを書く必要があるようです.

Gpu activate

インストール済みライブラリ

Google Colabでは,ノートブック作成後にすぐに作業が開始できるように主要なライブラリーが既にインストールされています.

2019年12月8日時点ではpipで確認可能なものは381個です.

Pip freeze

いくつかデータ分析・可視化・機械学習で使いそうなライブラリーを挙げておきます.

ライブラリ名 バージョン
altair 3.3.0
beautifulsoup4 4.6.3
bokeh 1.0.4
chainer 6.5.0
graphviz 0.10.1
kaggle 1.5.6
Keras 2.2.5
lightgbm 2.2.3
matplotlib 3.1.2
numpy 1.17.4
opencv-python 4.1.2.30
pandas 0.25.3
plotly 4.1.1
pymc3 3.7
pystan 2.19.1.1
scikit-learn 0.21.3
scipy 1.3.3
seaborn 0.9.0
sklearn-pandas 1.8.0
statsmodels 0.10.2
tensorflow 1.15.0
Theano 1.0.4
torch 1.3.1
xgboost 0.90
yellowbrick 0.9.1

Tensorflowについては現在インストールされているのは1.15ですが,近々version 2系がデフォルトになるようです.現在でもマジックコマンドを使うことで2系の利用が可能です.

%tensorflow_version 2.x

このようにColabでは標準で非常に多くのライブラリが用意されていますが,ケモインフォマティクス用のツールなど専門性の高いものは準備されていませんので別個インストールする必要があります.

例えば「化合物データベースPubChemをpythonで使いこなす」という記事で解説しているpubchempyをインストールしてみましょう.

Pip install

RDKitのインストールとimport

長々とColab上へのRDKitのインストール方法を以下に書きましたが,時間がない人やとりあえず動けばいいという人は,以下のコードを貼り付ければColab上にconda環境の構築からrdkitのimportまでができるようになります.

!wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!bash ./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
!conda install -q -y -c rdkit rdkit
import sys
sys.path.append('/usr/local/lib/python3.7/site-packages/')

コード各部の説明については以下を参照してください.

conda環境の構築とRDKitのインストール

RDKitでケモインフォマティクスに入門」という記事でも説明したように,現時点ではRDKitをpipでインストールすることはできませんので,Colab上にconda環境を準備する必要があります.

そこで以下のように

  1. minicondaのインストールスクリプトのダウンロード
  2. スクリプトの実行権限の付与
  3. インストールスクリプトを実行して/use/local下に環境構築
  4. condaコマンドでRDKitのインストール

という手順でconda環境を構築し,RDKitをインストールします.

!wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!bash ./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
!conda install -q -y -c rdkit rdkit

RDKitのimport

ここまででRDKitはインストールできていますが,このままではimportできません.pythonがimportするライブラリ・モジュールを探す場所を「モジュール検索パス」といいますが,rdkitの入っているディレクトリはこの中に入っていません.モジュール検索パスの確認はos.pathで確認できます.

import sys
import pprint
pprint.pprint(sys.path)
['',
 '/env/python',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/usr/local/lib/python3.6/dist-packages/IPython/extensions',
 '/root/.ipython']

ではRDKitはどこにインストールされているのでしょうか?下のコードのようにsystemで使われているpythonは3.6です.

print(sys.version)
3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0]

一方でcondaで使われているpythonは以下のように3.7です.

Conda python

実際以下のコマンドでインストールしたパッケージの場所を確認可能です.

!python -c "import site; print (site.getsitepackages())
['/usr/local/lib/python3.7/site-packages']

後はこの場所をモジュール検索パスに追加してあげればimportできるようになります.

sys.path.append('/usr/local/lib/python3.7/site-packages/')
from rdkit import rdBase
print(rdBase.rdkitVersion)
2019.09.2

Google Colabへのファイルのアップロード方法

作業するにあたってファイルからデータを読み込む作業は必須ですので,どのようにGoogle Colabにファイルをアップロードするかを学んでおきましょう.

大きくわけて

  • ローカルから直接ファイルを選択してアップロード
  • Googleドライブ上のファイルへアクセス

の2つの方法があります.

ローカルからファイルのアップロード

google.colab.files.upload()

ローカルからファイルを選択して,Colab上にアップロードすることが可能です.

from google.colab import files
uploaded = files.upload()

コマンドを入力すると以下のようにファイル選択画面が表示されますので,アップロードしたいファイルを選択します.

Colab upload

無事にアップロードされれば,ファイルが確認できます.今回は「線形モデルを用いた化合物の溶解度予測:通常最小二乗法,Ridge回帰,Lasso回帰」などの記事で使っている溶解度のデータをアップロードしてみました.

Uploaded

この方法は1つ1つのファイルを扱う必要があるため,大量のファイルを扱いたい場合などには不便です.また容量の大きいファイルをアップロードしようとすると失敗することが多い気がしています.こういった場合には次項のGoogleドライブ上のファイルにアクセスする方法を使いましょう.

Googleドライブのファイルにアクセス

google.colab.drive.mount(path)

colab.drive.mountを用いることで,Colab上にGoogleドライブをマウントすることができます.以下のコードを実行するとまずGoogleドライブへのアクセスを許可する認証が行われ,その後drive以下にGoogleドライブをマウントします.

from google.colab import drive
drive.mount('/content/drive')

Drive mounted

Googleドライブのトップディレクトリ(My Drive)にSDFというフォルダがありその中にいくつかZINC15からダウンロードしたSDFが入っているとします.

Gdrive contents

ここでは

  1. gzファイルで圧縮されたファイルのリストを取得
  2. RDKitのChem.ForwardSDMolSupplierを用いて読み込み
  3. 分子の読み込み

という作業でGoogleドライブ上のファイルからRDKitのMOLオブジェクトを作成します.

import glob
files = glob.glob('./drive/My Drive/SDF/*.sdf.gz')

import gzip
from rdkit import Chem
from rdkit.Chem import AllChem

mols = []
for file in files:
    with gzip.open(file, 'rb') as f:
        suppl = Chem.ForwardSDMolSupplier(f)
        for mol in suppl:
            if mol is not None:
                mols.append(mol)
print(len(mols)) ## 4060

ファイルのエクスポート

RDKit.Chem.SDWriter
pickle.dump

Google Colabでは利用時間に制限がありますので,作業結果を次回利用可能な形できちんと保存することが大切になります.pythonオブジェクトをpickleモジュールを利用することで保存したり,pandasのデータフレームをcsv形式として保存することが可能です.なお作業ログとしてのノートブックはGoogleドライブ上のColab Notebooksフォルダに保存されます.

RDKitのMOLオブジェクトはSDFやSMILESなどの形で保存することも可能です.以下のコードでは先ほど作成したMOLオブジェクトのリストを1つのSDFとして保存しています.

with open('./drive/My Drive/SDF/zinc_sample.sdf', 'w+') as f:
    writer = Chem.SDWriter(f)
    for mol in mols:
        writer.write(mol)

終わりに

今回は「Google ColabでRDKit:ケモインフォマティクス用のpython環境を手軽に構築」という話題について,

  • Google Colabとは何か
  • Google Colabの使い方
  • Google ColabへのRDKitのインストールの仕方

などについて説明してきました.初心者にとってpythonの環境構築は挫折ポイントの1つですので,Google Colabを使うことで気軽に分析が始められる点は大きな利点だと思います.

本ブログではpythonのケモインフォマティクス用ライブラリであるRDKitについて基本から解説しています.是非学習を継続していきましょう.

>>次の記事:「RDKitでケモインフォマティクスに入門

コメント

タイトルとURLをコピーしました