TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

高次元ベクトルデータ検索技術「NGT」の環境をDockerで爆速構築

類似画像検索システムを構築するにあたり、高次元ベクトルデータの検索にNGTを使いました。本稿では、NGTの環境をDockerで爆速構築する方法を紹介します。

f:id:tamanobi:20170626030130j:plain

NGT

NGTとは、高次元ベクトルデータを高速に検索するコマンド及びライブラリのことです。Yahoo! Japanによって開発されました。

techblog.yahoo.co.jp

膨大なベクトルデータの検索でこのようなライブラリが必要とされます。僕は、十万枚規模の画像特徴ベクトル(4000次元)の検索に利用しました。

Docker

NGTはUbuntuでの動作確認が行われています。UbuntuをベースイメージとしたDockerコンテナを作っていきます。

Dockerコンテナの作成

以下のようなDockerfileとシェルスクリプトを用意します。これらを実行するだけです。

for NGT · GitHub

シェルスクリプトを動作させれば、NGTがコンパイルされた状態のDockerコンテナが作成され、コンテナのbashにアタッチできます。 アタッチした環境(Bash環境)では、 ngt コマンドが動作します。

ビルド時間は長いですが、一度環境を作ってしまえばとても簡単にベクトルデータ検索ライブラリが使えるようになります。

NGTを試す

NGTの試し方は公式を参考にしてください。

github.com

まとめ

Yahoo! Japanが作成した高次元ベクトルデータ検索ライブラリNGTを試せる環境をDockerを用いて瞬時に作成する方法を紹介しました。

Dockerfileに環境構築の手順が書いてあるので、時間が経ったあとでも環境を再現しやすいでしょう。

次回予定

次はGolangでNGTをバックエンドにした(雑な)APIサーバーを作ります。