Azure RAG アーキテクチャの中核サービスである Azure AI Search は 4月4日、インフラ面およびベクトル検索機能を大幅アップデートし、一部リージョンの Basic と Standard プランの新しいサービスで以下のような拡張を行いました。日本リージョンは東西で対応しております。
- パーティションごとの合計ストレージがプランに応じて 3 倍〜6 倍に増加
- パーティションあたりのベクトル インデックス サイズが 5 倍〜11 倍に増加
- コンピューティングリソースの追加でより多くのベクトル検索が高パフォーマンスでサポートされ、インデックス作成とクエリのスループットが最大 2 倍向上
さらに、ベクトルストレージを最適化する新しいベクトル検索機能を追加しました。
- より小さいプリミティブデータ型の追加(float16, int16, int8)
-
stored
パラメータの追加によりクエリ応答に不要なベクトル領域を削減 - 組み込みのスカラー量子化機能を追加
ストレージアップデート
パーティション当たりのストレージ量が追加コストなしで拡張されました。
Tier | 現 | 新 | 倍率 |
---|---|---|---|
Basic | 2GB | 15GB | 7.5倍 |
S1 | 25GB | 160GB | 6.4倍 |
S2 | 100GB | 350GB | 3.5倍 |
S3 | 200GB | 350GB | 3.5倍 |
ベクトルインデックスサイズの拡張も行われました。
Tier | 現 | 新 | 倍率 |
---|---|---|---|
Basic | 1GB | 5GB | 5倍 |
S1 | 3GB | 35GB | 11.5倍 |
S2 | 12GB | 100GB | 8.3倍 |
S3 | 36GB | 200GB | 5.6倍 |
※2024年4月3日以降に作成された Azure AI Search サービスが対象です
ベクトル検索最適化機能
新機能は API Version 2024-03-01-Preview
が対応しています。
より小さいプリミティブデータ型の追加(float16, int16, int8)
Azure OpenAI Embeddings モデルへの影響として、text-embedding-ada-002
、text-embedding-3-small
、text-embedding-3-large
モデルはそれぞれ float32
型で出力されますが、これをプログラムでキャストすることにより、float16
で保存できます。これによりサイズは半分になりますが、精度とのトレードオフとなります。
stored
パラメータの追加
ベクトルインデックス作成時にベクトルフィールドに新たに追加された stored
パラメータを false
に設定すると、クエリ時にベクトルデータを返却するために用意されているストレージ領域が削減されます。ベクトルデータ実体は不要だが、ベクトル検索処理のみが実行できればよいというユースケースにおいては、この機能が有効です。
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"filterable": false,
"retrievable": false,
"sortable": false,
"facetable": false,
"dimensions": 1536,
"stored": false,
"vectorSearchProfile": "my-hnsw-profile-no-compression"
},
stored
が false
のときは、retrievable
も false
にする必要があります。検索はできますが、取得ができなくなります。つまり検索に使用するオリジナルのベクトルデータは stored
とは別にしっかり保存されています。
組み込みのスカラー量子化機能
組み込みのスカラー量子化は float32
、float16
データを含むベクトルフィールドに適用できる自動 int8
量子化機能です。これによりベクトルデータストレージを圧縮および最適化します。さらに、ベクトルの量子化による精度の低下を緩和するために、量子化ランキングを非圧縮の元ベクトルデータを使ってリランキングするという新しい機構が追加されました。この機能は rerankWithOriginalVectors
パラメータと defaultOversampling
パラメータで制御できます。
インデックス定義の vectorSearch
に compressions
設定を追加します。
"vectorSearch": {
"compressions": [
{
"name": "my-scalar-quantization",
"kind": "scalarQuantization",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10.0,
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
}
}
]
}
-
kind
:scalarQuantization
現在はスカラー量子化のみ -
rerankWithOriginalVectors
: 元の非圧縮ベクトルを使用して類似度を再計算し、最初の検索クエリによって返された上位の結果をリランキングします。非圧縮ベクトルはstored
:false
の場合でも検索インデックスに存在します。 -
defaultOversampling
: リランキングのために元の非圧縮ベクトルをどれだけ取ってくるかを計算(k に乗ずる)するパラメータです。例えばk=5
、defaultOversampling:4
の場合k * defaultOversampling = 20
で 20 件のドキュメントを内部で取得します。 -
quantizedDataType
: 現在はint8
のみに対応
量子化の仕組み
float32
/float16
のデータ範囲を int8
の範囲(-128から127)にマッピングします。具体的には、float32
/float16
の最大値と最小値を用いてスケーリングファクターを計算し、このファクターを用いてデータを変換します。
検索クエリー
スカラー量子化を有効化したベクトルフィールドに対しては以下のように int8
でクエリーできます。ベクトルは適切な方法で量子化する必要があります。
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1...],
"fields": "myvector",
"oversampling": 12.0,
"k": 5,
}
]
}
ひとまずいつもの busho-index でテストしましたが、精度は float32
とほぼ変わりませんでした。。。text-embedding-3-small
の float32
vs int8
with or without rerankWithOriginalVectors
。今後 MIRACL データセットでも精度およびパフォーマンス試験を実施予定です。
Satya は Azure Search が ChatGPT で使用されていると語る
Microsoft CEO の Satya Nadella 氏は、2024 年第 3 四半期の決算会見で実際に ChatGPTでも使用されている Azure Search は Microsoft にとって「最も急速に成長しているサービスの 1 つ」であると語りました。
The second thing that we are also seeing is AI just doesn’t sit on its own. AI projects obviously start with calls to AI models, but they also use a vector database. In fact, Azure Search, which is really used by even ChatGPT, is one of the fastest growing services for us.
もうひとつは、AI はそれだけでは成り立たないということだ。AI プロジェクトはまず AI モデルの呼び出しから始まりますが、ベクトルデータベースも使用します。実際、ChatGPT でも使用している Azure Search は、私たちにとって最も急速に成長しているサービスの 1 つです。
参考
https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/announcing-cost-effective-rag-at-scale-with-azure-ai-search/ba-p/4104961
https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-configure-compression-storage