【速報】Azure AI Search のアップデートでインフラが大幅強化しベクトル検索機能を最適化

Azure RAG アーキテクチャの中核サービスである Azure AI Search は 4月4日、**インフラ面およびベクトル検索機能を大幅アップデート**し、[一部リージョン](https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity#supported-regions-with-higher-storage-limits)の 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 サービスが対象です

https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/announcing-cost-effective-rag-at-scale-with-azure-ai-search/ba-p/4104961

# ベクトル検索最適化機能
新機能は API Version `2024-03-01-Preview` が対応しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/0500a3df-6ee8-cbe1-ea70-94077cd5694a.png)

## より小さいプリミティブデータ型の追加（float16, int16, int8）
Azure OpenAI Embeddings モデルへの影響として、`text-embedding-ada-002`、`text-embedding-3-small`、`text-embedding-3-large` モデルはそれぞれ `float32` 型で出力されますが、これをプログラムでキャストすることにより、`float16` で保存できます。これによりサイズは半分になりますが、精度とのトレードオフとなります。

## `stored` パラメータの追加
ベクトルインデックス作成時にベクトルフィールドに新たに追加された `stored` パラメータを `false` に設定すると、クエリ時にベクトルデータを返却するために用意されているストレージ領域が削減されます。**ベクトルデータ実体は不要だが、ベクトル検索処理のみが実行できればよいというユースケースにおいては、この機能が有効**です。

```json
{
    "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` 設定を追加します。

```json
"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` でクエリーできます。ベクトルは[適切な方法](https://huggingface.co/docs/optimum/concept_guides/quantization)で量子化する必要があります。
```json
{
  "vectorQueries": [
    {
      "kind": "vector",
        "vector": [8, 2, 3, 4, 3, 5, 2, 1...],
        "fields": "myvector",
        "oversampling": 12.0,
        "k": 5,
    }
  ]
}
```

ひとまずいつもの [busho-index](https://github.com/nohanaga/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 つ」であると語りました。

https://www.benzinga.com/news/24/04/38450786/satya-nadella-says-azure-search-also-used-by-chatgpt-is-one-of-the-fastest-growing-services-for-micr

>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://www.microsoft.com/en-us/Investor/earnings/FY-2024-Q3/press-release-webcast

# 参考
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