バージョンのハイライト: Zvec v0.8.0 フォーカスクエリのパフォーマンス、インデックス構築コスト、クロスプラットフォームのエクスペリエンス。このアップデートでは、INT4 カーネルと Linux ARM64 のパフォーマンスの最適化に重点を置いて、量子化器と距離計算が大幅に再構築されました。 IVF および DiskANN のマッピングとマージのためのピーク メモリを削減し、HNSW RaBitQ の構築を加速します。 Intel Mac および Windows ARM64 のサポートを追加し、組み込みの Jieba リソースを通じて中国語の全文検索をすぐに使用できるようにします。
完全な変更については、GitHub リリース ノートを参照してください。
プラットフォームのサポート
Intel Mac と Windows ARM64
v0.8.0 新規 macOS x86_64 そして Windows ARM64 サポートを構築します。 Intel Mac ユーザーは、対応するビルド、ホイール、SDK を入手できます。 Windows ARM64 は MSVC を使用して構築されており、ネイティブ Python 3.11 ~ 3.14 ホイールと ARM64 SDK リリース プロセスが追加されています。プラットフォームのサポート手順とマトリックスの詳細については、以下を参照してください。
DiskANN が Windows とモバイルに拡大
DiskANN は今回、次の 3 つの新しいプラットフォームの方向性を追加します。
| プラットフォーム | 新しい機能 |
|---|---|
| 窓 | I/O完了ポートに基づく非同期、バッファなし読み取り |
| アンドロイド | ポータブルベース pread ディスクの読み取り |
| iOS | ポータブルベース pread ディスクの読み取り |
これにより、ディスクにインデックスを配置する必要があるアプリケーションに、Windows デスクトップおよびモバイルで DiskANN オプションが提供されます。
RaBitQ が Windows x86_64 サポートを追加
RaBitQ インデックスが Windows x86_64 環境に適応されるようになりました。同時に、このアップデートでは RaBitQ-Library がバージョン v0.7.0 にアップグレードされ、ビルド ターゲットも上流のモジュラー コア/FastScan に切り替えられます。
中国語の全文検索と使いやすさ
Jieba には辞書が組み込まれており、中国語の単語の分割をそのまま使用できます。
中国語の全文検索では、Python モジュールをインポートするときにデフォルトの辞書を個別に展開したり、辞書のパスを登録したりする必要がなくなりました。 v0.8.0は Jieba のデフォルト辞書と HMM モデルこれは、LZ4 圧縮リソースの形式でネイティブ ライブラリに組み込まれており、Python ホイールとネイティブ SDK の両方で直接使用できます。
デフォルトの辞書は解析されて共有されますが、ユーザー辞書はトークナイザー インスタンス間で分離されたままになります。製品名、ビジネス用語、固有名詞を追加する必要がある場合は、次を使用できます。 user_dict_path 補足ですが、デフォルトの辞書を置き換える必要はありません。
ドキュメント ID は UTF-8 をサポートします
ドキュメント ID とコレクション名の命名規則がより柔軟になりました。
- 文書ID: 有効な UTF-8、長さ 1 ~ 1,024 バイトをサポートします。
- コレクション名: 有効な UTF-8、長さ 1 ~ 256 バイトをサポートします。
- フィールド名: 元の ASCII 文字セットを保持し、長さの上限を 64 バイトに拡張します。
ドキュメント ID とコレクション名には、制御文字と指定された区切り文字が引き続き除外されます。上記の長さはバイト単位です。
インデックスの構築とメモリ
IVF と DiskANN マッピングによりメモリを節約
インデックスが最終的にメモリに収まるからといって、マッピング プロセスでも同じメモリ バジェットを確保できるとは限りません。トレーニング中の一時コピー、ベクトル変換、エンコード、およびマルチセグメントのマージはすべて、ピークメモリを押し上げる可能性があります。
v0.8.0 は、IVF と DiskANN のビルド プロセスをターゲットにしており、ベクター コピーの繰り返しを削減し、ストリーミング メソッドを使用してマージされた入力を読み取り、一時エンコード バッチのサイズを制限し、ビルド完了後の早期に中間状態を解放します。
これらの変更により、マッピングとマージのためのピークメモリこれにより、メモリに制約のある環境でのインデックス構築と最適化の完了が容易になります。
HNSW RaBitQ はマップをより速く構築します
HNSW RaBitQ は、近隣フィルタリング中に元のベクトルに複数回アクセスします。このバージョンでは、すでに読み取られたベクトルを再利用し、フラット プロバイダー検索とセグメント ロックをバッチで実行することで、繰り返しの読み取りとロックの競合を減らし、グラフの構築を高速化します。
同時に、ビルダーは最適化スレッド プールを再利用し、RaBitQ と DiskANN のネストされたトレーニングも設定された同時実行数に準拠するため、内部トレーニング タスクがスレッド バジェットを超える状況が軽減されます。
複数のインデックスが共有ページキャッシュにアクセスする
このバージョンではバッファ ストレージと HNSW、IVF、および DiskANN は共有ページ キャッシュにアクセスします。インデックスはバッチ ページ読み取りとページ固定を介してデータにアクセスでき、DiskANN はキャッシュ負荷がかかるとダイレクト I/O にフォールバックすることもできます。
基盤となるストレージの読み取りは均一に移行されます。 MemoryBlock読み取ったデータのライフサイクルを、それを保持するメモリブロックと一致させます。これにより、キャッシュの再利用、バッチ読み取り、同時アクセスのためのより強固な基盤が提供されます。
クエリのパフォーマンス
ターボ: 複数の量子化フォーマットと距離測定を組み合わせることで利点が得られます。
ベクトルの取得には、クエリ ベクトルと候補ベクトルの間の距離を繰り返し計算する必要があり、基礎となるコンピューティング カーネルの効率がクエリのパフォーマンスに直接影響します。 v0.8.0 では、量子化器と距離計算の大規模な再構築が行われ、Flat、HNSW、IVF、DiskANN の関連計算パスが Turbo フレームワークに移行されました。
このアップデートでは、複数の量子化フォーマットと距離メトリックをカバーし、AVX2、AVX512、AVX512-FP16、SSE、ARM NEON コアとランタイム ディスパッチを拡張します。INT4 カーネルと Linux ARM64 シナリオは、この再構築から大きな恩恵を受けます。これにより、圧縮ベクトルの距離計算がより効率的になり、ARM サーバーでの取得も高速化され、一部のシナリオではパフォーマンスが最も向上します。 131.8%(ここでは、GIST 1M、L2 距離、INT8 量子化、HNSW インデックス、16 コア Linux ARM64 を例として取り上げます)。
一様定量化: 点ごとの分数逆計算の削減
このバージョンの新機能 ユニフォームUINT4そして、Uniform UINT4、UINT7、および UINT8 量子化器をデータベース層と HNSW に接続します。
均一定量化では、すべてのデータ ポイントに対して統一された最小/最大範囲が使用され、クエリ時にポイントごとにスコアを逆計算する必要がないため、計算のオーバーヘッドが削減され、取得が高速化されます。
この選択には再現率のトレードオフもあります。すべてのポイントが量子化範囲を共有するため、一部のデータの量子化誤差が増加し、その結果再現率が低下する可能性があります。[均一な定量化]を選択すると、独自のデータ分布を組み合わせて、クエリ速度と再現率の間のトレードオフを評価できます。
PQ INT4、FastScan、OPQ
Turbo の定量的機能も拡大し続けています。
- PQ INT4: 量子化結果を 4 ビット エンコーディングで部分空間で表現し、よりコンパクトな PQ ストレージ オプションを提供します。
- PQ ファストスキャン: パックされたブロック スキャンを通じて 4 ビット PQ 距離計算を高速化し、SIMD およびスカラー実装を提供します。
- OPQ 前処理: PQ 量子化の前にベクトルを回転して、さまざまなサブスペース内のベクトルの分布を改善し、圧縮とリコールのための調整スペースを増やします。
これらの機能は Turbo フレームワークにあります。このアップデートでは、複数の PQ 量子化器の共通のトレーニングおよびシリアル化ロジックも統合されます。
絞り込みと結果変換のオーバーヘッドを削減する
通常、詳細な並べ替えでは、大まかな並べ替え候補の距離を再計算する必要があります。このバージョンでは、コンピューティング カーネルの最適化に加えて、候補の配信、エクスポート、ID 逆引き検索のオーバーヘッドも削減されます。
新しい Collection.query_internal_ids() 読み取り専用コレクションの場合、詳細な並べ替えリンクでの ID 逆チェックのコストを削減するために、内部 ID が直接返されます。HNSW と Vamana は、細かいソートに FP16 または UINT8 ベクトルを使用できます。そして合格します scale_factor 候補の数を制御し、細かいランキングコストと再現率の間で調整します。
Vamana グラフのレイアウトとプリフェッチの最適化
Vamana は、グラフとベクトルのメモリ レイアウトを更新し、検索状態とプリフェッチを最適化し、エントリ ポイントの選択を修正しました。 2 パス マッピングがデフォルトで有効になり、2 番目のパスのマップ品質が向上しました。
安定性と正確性
このリリースでは、同時実行性、インデックスのメンテナンス、フィルタリングに関連するいくつかの問題が修正されています。
- 同時読み取り:修理
fetch()、query()セグメントの切り替えまたはフラッシュと同時に発生するクラッシュとデータ欠落の問題を修正し、フラット キャッシュとキー マップ イテレータのライフ サイクルを修正します。 - インデックスの再構築: 再構築中にベクトルと行番号の間の対応を正しく保存する、削除されたレコードのインデックスが含まれます。
- トレーニングと定量化: 体外受精の正しい出産
n_itersマージされたトレーニングでのターボ データ ソースのデコードと、INT4 スコアリング メタデータの値を修正しました。 - フィルタークエリ: 深いOR表現を修正、
LIKEプレフィックスとサフィックスの重複、逆インデックスのサフィックスの一致、および空の配列クエリ。フィルタリングされた IVF 主キーのブルート フォース取得をサポートします。 - 浮動小数点の範囲境界注: オプティマイザが反転条件を順方向フィルタリングに変換するとき、FLOAT と DOUBLE の正確な境界は保持され、厳密な大なり小なりなどの比較に誤って境界値が含まれないようにします。
- 全文インデックスの永続化: 補助列ファミリーを削除する前にアーカイブされたフルテキスト反転データを保持し、WAL リカバリ、スキーマ処理、およびデコードを強化します。
アップグレード手順
Jieba グローバル辞書設定インターフェイスは削除されました。 使用する場合 zvec.init(jieba_dict_dir=...)、set_default_jieba_dict_dir() または get_default_jieba_dict_dir()アップグレード時に通話を調整する必要があります。対応する C 設定アクセサー、C デフォルト辞書ディレクトリ インターフェイス、C++ グローバル設定フィールドと登録インターフェイスも削除されました。
組み込みのデフォルト辞書を使用する場合は、これらの構成を削除するだけです。メイン辞書をカスタマイズする必要がある場合は、フィールドレベルを使用できます。 FtsIndexParam.extra_params.jieba_dict_dir または環境変数 ZVEC_JIEBA_DICT_DIRフィールドレベルの設定が優先されます。ビジネス用語を補足する必要がある場合は、 user_dict_path。
完全な変更と関連する PR については、v0.8.0 リリース ノートを参照してください。フォローアップ計画については公式ロードマップをご覧ください。
私たちは、真に使いやすい組み込みベクトル インフラストラクチャを構築するために、皆様と協力できることを楽しみにしています。
💬 DingTalk-DingTalk コミュニケーショングループ
📱 WeChat – WeChat 公開アカウント
🎮 不協和音
サーバーに参加する
🐦X (Twitter)
@zvec_aiをフォローしてください