Open2
Vector DBとかANN Benchとか
承前
先日の投稿でちょっとやり取りがあった
それでChromaDBのコードを読んでみたけどわからない
中身はSQLiteなので、 :memory:
からDBを引っこ抜いて適当にファイルに保存して中を覗くと
sqlite> select * from collections;
6048f894-f20d-4df8-8137-200259fdc272|foobar|384|00000000-0000-0000-0000-000000000000|{"hnsw_configuration": {"space": "l2", "ef_constru
ction": 100, "ef_search": 10, "num_threads": 6, "M": 16, "resize_factor": 1.2, "batch_size": 100, "sync_threshold": 1000, "_type": "HNS
WConfigurationInternal"}, "_type": "CollectionConfigurationInternal"}
sqlite> select * from collection_metadata;
sqlite> select * from embeddings;
1|1a955cac-d421-43c7-b66c-3d7531acb029|id1||2024-11-27 08:37:45
2|1a955cac-d421-43c7-b66c-3d7531acb029|id2||2024-11-27 08:37:45
3|1a955cac-d421-43c7-b66c-3d7531acb029|id3||2024-11-27 08:38:26
sqlite> select * from embeddings_queue;
1|2024-11-27 08:37:45|0|persistent://default/default/6048f894-f20d-4df8-8137-200259fdc272|id1|r==
?
<9<m=@:żGt<E|"<$=$=M<?e;t=zq=R==:+<q6lbNCDnܼqIO$(c=ȁ=S=TSp=3\$>@T-=,=
s=b
l;H-.
5Ha36_-pS_=g;=<9g2Rl=2ЩQ=$=r=1$h><E9=P<%<6Sv
ҹ:9Jd<u<=ĺLC=2v<fuEH<z<T}Ӽ).xg=ü=M;<kzalS61=5=xN<N
B=dp=<<<@3Yög*\
;#hʽwmm;xA<(=1y==]^=<>Gk#=]ˈâAFLOAT32|{"chroma:document": "This is a document about pineapple"}
2|2024-11-27 08:37:45|0|persistent://default/default/6048f894-f20d-4df8-8137-200259fdc272|id2|8=Xz=Z=Q<9nR=BT=pa<f=Tެ5)Q=U;ƞ<KSc<
<\;*<<W<gmC<|FLOAT32|{"chroma:document": "This is a document about oranges"}
3|2024-11-27 08:38:26|0|persistent://default/default/6048f894-f20d-4df8-8137-200259fdc272|id3|rwT=A=Wp|*`h=<&<X$=dS=b+DE(=<sU
=T!ސӈp< ="t=8=ٽ[<І<O?<^$<ks<*
=ep=|I<Q|FLOAT32|{"chroma:document": "\u307b\u3052\u307b\u3052"}
とかまあこんな感じでっけこうフリーダムにJSON埋め込んであったりする
SQLite上に いろいろ工夫して入れているようだった
NNSするときにどういう動きをしているのかはわからないが NMSLib のやり方がデファクトなのはどうもそうっぽい
ANNBenchmark
@article{DBLP:journals/corr/MalkovY16,
author = {Yury A. Malkov and
Dmitry A. Yashunin},
title = {Efficient and robust approximate nearest neighbor search using Hierarchical
Navigable Small World graphs},
journal = {CoRR},
volume = {abs/1603.09320},
year = {2016},
url = {http://arxiv.org/abs/1603.09320},
eprinttype = {arXiv},
eprint = {1603.09320},
timestamp = {Thu, 26 Aug 2021 08:49:44 +0200},
biburl = {https://dblp.org/rec/journals/corr/MalkovY16.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
ANNBenchmark を動かし始めたのがさっき
動かし方は書いてあるとおり結構かんたん
READMEに書いてあるとおり、まず git clone をしてから
$ pip install -r requirements.py --break-system-packages
Arch LinuxでPython 3.12 だからか、これが結構通らない。requirements.txt の通りの内容だとバージョン関連の依存でどうも合わないので、バージョンを無視して全部 pip install ...
で手動で入れた。 ansicolors
を追加で入れたりした。そこから
$ python install.py
これが結構時間がかかる。なんかいっぱいDocker buildが走る。READMEにある
$ python run.py --dataset glove-100-angular
でとりあえず時短で動作確認する。無印だとめっちゃ時間かかるらしい