SlideShare a Scribd company logo
LevelDBでお気軽永続化、

RDKitオブジェクトを突っ込む
@tkochi0603
Mishima.syk #7
2015.12.12
自己紹介
• 前、某H社(IT会社)のSE
• 顧客:Bioinfo研究者
• 今、某製薬会社のIT屋(2年半前転職)
• ケモ関連のシステム構築+データ処理+α
ビッグデータ!
ビッグデータ解析したい
から計算機出してよー
• 実際の所、
• 社外のスパコン活用しつつも、社内のデータ解析用
の計算資源がイマイチなので本格的なのはいつにな
ることやら。
• おねだりしても買ってくれないし、データの増大と
計算機増設はイタチごっこだし、計算機や解析ソフ
トに頼るだけでなく、あるものを工夫してITスキル
上げていきたい
• 今日の話
• Level DBでお気軽永続化、RDKitオブ
ジェクトを突っ込む
• おまけ numpy
• Level DBでお気軽永続化、RDKitオブ
ジェクトを突っ込む
KVS(キーバリューストア)
≒Perlのハッシュ、Pythonの
Dict、みたいなもの
プログラム実行中に生成したオブ
ジェクトをファイルに書き出して、
別のプログラムが再利用できるよ
うにすること
化合物データ処理用のライブラリ(python)
http://yosuke-furukawa.hatenablog.com/entry/2014/05/05/095207
Use case
• 市販化合物ライブラリから選ぶ作業とか、
ライブラリ間の比較とか、大き目のデータ
セットの読み込みを試行錯誤するケース
1000万化合物の処理
@PP 約10時間
フィルターかけたりク
ラスタリングしたりで、
何度も繰り返す
→ 数日作業
ファイルやDBからの読み込みと、
化合物構造のチェック処理に時間がかかる
⇧の対策
やったこと
・Linux(Ubuntu)にLevelDBをインストール
・RDKitのインストール
・PythonからLevelDBを操作できるplyvelをインストール
  ( RDKitやplyvelはAnaconda経由でインストール )
・比較のため、Tokyo Cabinet(とpytc)も入れた
SDF
キー バリュー
1001 Molオブジェクト
1002 Molオブジェクト
1003 Molオブジェクト
1004 Molオブジェクト
ID-001
  9  9  0  0  0  0  0  0  0  0999 V2000
   -1.4265    0.0021    0.0000 C   0  0  0  0  0  0
   -1.4265   -0.8229    0.0000 C   0  0  0  0  0  0
   -0.7120   -1.2354    0.0000 N   0  0  0  0  0  0
    0.0025   -0.8229    0.0000 C   0  0  0  0  0  0
    0.0025    0.0021    0.0000 C   0  0  0  0  0  0
   -0.7120    0.4146    0.0000 C   0  0  0  0  0  0
    0.7145    0.4132    0.0000 C   0  0  0  0  0  0
    1.4265    0.0021    0.0000 O   0  0  0  0  0  0
    0.7145    1.2354    0.0000 O   0  0  0  0  0  0
  1  2  2  0
  2  3  1  0
  3  4  2  0
  4  5  1  0      
  5  6  2  0      
  6  1  1  0      
  5  7  1  0      
  7  8  1  0      
  7  9  2  0     
M  END
> <Name>
D-Alaninol
> <Mol Wt>
123
$$$$
ID-002
1化合物
構造情報
属性情報
化合物ファイル
1化合物
構造情報
属性情報
Python
LevelDBに、オブジェクトを突っ込む
LevelDB
これを再利用
1化合物を
Molオブジェクト
#!/usr/bin/python
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Descriptors
from rdkit.Chem.PropertyMol import PropertyMol
import plyvel
import sys
import os
import cPickle as pickle
# ---------------------------------------
if __name__ == "__main__":
ldb = plyvel.DB( './ldbs/test100K.ldb', create_if_missing=True)
inpFile = open( './sdf/test100K.sdf', 'r' )
for mol in Chem.ForwardSDMolSupplier( inpFile, True, True, False ):
if not mol is None:
try:
id = mol.GetProp( '_Name' )
pmol = PropertyMol( mol )
ldb.put( id, pickle.dumps( pmol ) )
except Exception as e:
sys.stderr.write( "ERROR : " + e.message + "n" )
inpFile.close()
ldb.close()
molをpickleすると構造情報だけ出
力される。PropertyMolでラップす
ることで属性情報も出力される
LevelDBへは、put
で入れる
LevelDBの出来上がり
DB作成
化合物数
SDF
ファイル
サイズ
LEVEL DB
作成時間
TOKYO
CABINET(HASH)
作成時間
100K 250MB
132MB
(112 files)
2m20s
503MB
2m23s
1M 2.5GB
1.3GB
(846 files)
24m
4.9GB
27m
10M 27GB
14GB
(7991files)
4h21m
54GB
13h12m
Core i7-4790K 4GHz / Mem 32GB
* swap 多発
snappyによる圧縮効果が大きいようだ
読み込み時間
化合物数 PP
KVS使わず、
SDFから直接
LEVEL DB
TOKYO
CABINET(HAS
H)
100K 資料間に合わず 40s 21s 21s
1M 資料間に合わず 6m42s 3m30s 3m36s
10M 10h 79m 40m 資料間に合わず
Core i7-4790K 4GHz / Mem 32GB
PPと比べると速さ15倍
KVSを使わないよりも2倍。また、メモリ使用量も大幅削減
• プログラム(Python)を書けるようになれば、大規模デー
タも処理できるようになる。(Pilot scriptからの卒業)
• (注意点)LevelDBは1つのProcessからのみ。同時に他の
Processから使えないのが残念→その点では
TokyoCabinetの方が良い
おまけ:numpy
S K
数万化合物を総当たりで
Similarityを計算したいけど、
Out of Memoryになるんです…
S K
A B C D
A ? ? ? ?
B ? ? ? ?
C ? ? ? ?
D ? ? ? ?
A 構造
像B 構造
C 構造
D 構造
A 構造
像B 構造
C 構造
D 構造
X
結果は、numpyの二次元配列に入れ
て、データ型を工夫するといいよ
numpyを使う
NUMPY データ型 計算時間 使用メモリ
使わない float64 52s 4.8GB
使う float64 38s 861MB
使う float16 39s 288MB
10,000 vs 10,000 similarity ECFP4 tanimoto
* swap 多発
PP 7h50s [memory use]
#!/usr/bin/python
from rdkit import Chem
from rdkit import DataStructs
from rdkit.Chem import AllChem
from rdkit.Chem import Descriptors
from rdkit.Chem.PropertyMol import PropertyMol
import numpy as np
import pandas as pd
import plyvel
import sys
import os
import cPickle as pickle
# ---------------------------------------
def calc():
fps = []
ldb = plyvel.DB('./ldbs/test100K.ldb')
for key, val in ldb:
pmol = pickle.loads(val)
fps.append( AllChem.GetMorganFingerprintAsBitVect( pmol,2) )
ldb.close()
res = np.zeros( [ 100000,100000 ], dtype='float16' )
for ( ia, fp ) in enumerate( fps ):
res[ia] = DataStructs.BulkTanimotoSimilarity(fp, fps)
df = pd.DataFrame( res )
print df
# ---------------------------------------
if __name__ == "__main__":
calc()
NxNの計算プログラム
( numpy )
#	--------------------------------------

#	Anaconda	install

#	wgetのアドレスは本家サイトで確認すること

#	--------------------------------------

wget	https://3230d63b5fc54e62148e-
c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda2-2.4.0-
Linux-x86_64.sh

conda	create	-c	https://conda.anaconda.org/rdkit	-n	my-rdkit-env	rdkit

source	activate	my-rdkit-env

#	--------------------------------------

#	level	db	

#	--------------------------------------

sudo	apt-get	install	libsnappy-dev

wget	https://leveldb.googlecode.com/files/leveldb-1.15.0.tar.gz

tar	-xzf	leveldb-1.9.0.tar.gz

cd	leveldb-1.9.0

make

sudo	mv	libleveldb.*	/usr/local/lib

cd	include

sudo	cp	-R	leveldb	/usr/local/include

sudo	ldconfig

#	--------------------------------------

#	plyvel

#	--------------------------------------

pip	install	plyvel
ubuntuへのインストール

More Related Content

PPT
クラウド時代の並列分散処理技術
PPTX
Tokyo Webmining #12 Hapyrus
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
20190925_DBTS_PGStrom
PDF
[9.5新機能]追加されたgroupbyの使い方
PDF
20201113_PGconf_Japan_GPU_PostGIS
PDF
20181031 springfest spring data geode
PDF
20190516_DLC10_PGStrom
クラウド時代の並列分散処理技術
Tokyo Webmining #12 Hapyrus
JSONBはPostgreSQL9.5でいかに改善されたのか
20190925_DBTS_PGStrom
[9.5新機能]追加されたgroupbyの使い方
20201113_PGconf_Japan_GPU_PostGIS
20181031 springfest spring data geode
20190516_DLC10_PGStrom

What's hot (20)

PDF
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
PDF
pg_trgmと全文検索
PDF
20200424_Writable_Arrow_Fdw
PDF
PGCon.jp 2014 jsonb-datatype-20141205
PDF
並列データベースシステムの概念と原理
PDF
20200828_OSCKyoto_Online
PPTX
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
PDF
20191211_Apache_Arrow_Meetup_Tokyo
PPTX
MongoDB3.2の紹介
PDF
20180914 GTCJ INCEPTION HeteroDB
PDF
Shibuya Perl Mongers#12 No Sql Couch Db
PDF
[db tech showcase Tokyo 2017] B35: 地図用データを高速処理!オープンソースGPUデータベースMapDの魅力に迫る!!by...
PDF
20211112_jpugcon_gpu_and_arrow
PDF
Re:dash Use Cases at iPROS
PDF
トレジャーデータのバッチクエリとアドホッククエリを理解する
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
PDF
LastaFluteでKotlinをはじめよう
PDF
20200806_PGStrom_PostGIS_GstoreFdw
PDF
Chugokudb study-20150131
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
pg_trgmと全文検索
20200424_Writable_Arrow_Fdw
PGCon.jp 2014 jsonb-datatype-20141205
並列データベースシステムの概念と原理
20200828_OSCKyoto_Online
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
20191211_Apache_Arrow_Meetup_Tokyo
MongoDB3.2の紹介
20180914 GTCJ INCEPTION HeteroDB
Shibuya Perl Mongers#12 No Sql Couch Db
[db tech showcase Tokyo 2017] B35: 地図用データを高速処理!オープンソースGPUデータベースMapDの魅力に迫る!!by...
20211112_jpugcon_gpu_and_arrow
Re:dash Use Cases at iPROS
トレジャーデータのバッチクエリとアドホッククエリを理解する
MyNA JPUG study 20160220-postgresql-json-datatype
LastaFluteでKotlinをはじめよう
20200806_PGStrom_PostGIS_GstoreFdw
Chugokudb study-20150131
Ad

Recently uploaded (9)

PDF
EMA meeting 2025 summer ジョブフェア_熊本赤十字病院_施設紹介HP用 永井 冴映.pdf
PDF
EMA meeting 2025 summer ジョブフェア_千葉市立海浜病院_施設紹介HP用 溝辺倫子.pdf
PPTX
EMA meeting 2025 summer ジョブフェア_和歌山県立医大_施設紹介HP用 國立晃成(和歌山県立医科大学).pptx
PPTX
EMA meeting 2025 summer ジョブフェア_都立広尾_施設紹介HP掲載 幹男 中島.pptx
PDF
EMA meeting 2025 summer ジョブフェア_順天堂静岡病院_施設紹介HP.pdf
PDF
EMA meeting 2025 summer ジョブフェア_横浜労災病院_施設紹介HP用 柴崎貴俊(横浜労災).pdf
PDF
GM_生物学_遺伝子_細胞療法_GCT_製品_パンフレット_2025日本語.pdf
PDF
EMA meeting 2025 summer ジョブフェア_大阪赤十字病院_施設紹介HP用 池添徳晃.pdf
PPTX
EMA meeting 2025 summer ジョブフェア_兵庫県立尼崎総合医療センター_施設紹介HP用 亮太 浅井.pptx
EMA meeting 2025 summer ジョブフェア_熊本赤十字病院_施設紹介HP用 永井 冴映.pdf
EMA meeting 2025 summer ジョブフェア_千葉市立海浜病院_施設紹介HP用 溝辺倫子.pdf
EMA meeting 2025 summer ジョブフェア_和歌山県立医大_施設紹介HP用 國立晃成(和歌山県立医科大学).pptx
EMA meeting 2025 summer ジョブフェア_都立広尾_施設紹介HP掲載 幹男 中島.pptx
EMA meeting 2025 summer ジョブフェア_順天堂静岡病院_施設紹介HP.pdf
EMA meeting 2025 summer ジョブフェア_横浜労災病院_施設紹介HP用 柴崎貴俊(横浜労災).pdf
GM_生物学_遺伝子_細胞療法_GCT_製品_パンフレット_2025日本語.pdf
EMA meeting 2025 summer ジョブフェア_大阪赤十字病院_施設紹介HP用 池添徳晃.pdf
EMA meeting 2025 summer ジョブフェア_兵庫県立尼崎総合医療センター_施設紹介HP用 亮太 浅井.pptx
Ad

Level dbを試した