リリースノート
Milvusの新機能をご確認ください!このページでは、各リリースの新機能、改善点、既知の問題、バグ修正についてまとめています。v2.4.0以降の各バージョンのリリースノートはこのセクションにあります。定期的にこのページをご覧いただき、アップデート情報をご確認ください。
v2.4.9
リリース日2024年8月20日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.9 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus v2.4.9では、一部のコーナーケースで制限値(topk)未満の結果を返す可能性のある重大な問題に対処し、プラットフォームのパフォーマンスとユーザビリティを向上させるためのいくつかの重要な改善が含まれています。
重大な修正
- 読み取り可能なスナップショットからl0セグメントを除外しました(#35510)。
改良点
- プロキシにおけるスキーマヘルパーの重複作成を削除しました(#35502)。
- Ubuntu 20.04におけるMilvusのコンパイルをサポートしました(#35457)。
- ロックの使用を最適化し、クラスタリングバッファライタのダブルフラッシュを回避しました(#35490)。
- 無効なログを削除しました(#35473)。
- クラスタリング圧縮のユーザーガイドを追加しました(#35428)。
- スキーマヘルパーに動的フィールドのサポートを追加しました(#35469)。
- 生成されるYAMLにmsgchannelセクションを追加した(#35466)。
v2.4.8
リリース日2024年8月14日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.8 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus 2.4.8では、システムのパフォーマンスと安定性にいくつかの重要な改良が加えられました。最も注目すべき機能はクラスタリングコンパクションの実装であり、これは指定されたクラスタリングキーに基づいて大規模なコレクション内のデータを再分散し、スキャンされるデータ量を削減することにより、検索およびクエリの効率を向上させるメカニズムである。また、コンパクションはシャードDataNodeから切り離され、任意のDataNodeが独立してコンパクションを実行できるようになり、耐障害性、安定性、パフォーマンス、スケーラビリティが向上した。さらに、GoコンポーネントとC++コンポーネント間のインターフェイスは、非同期CGOコールを使用するようにリファクタリングされ、セッションのタイムアウトなどの問題に対処しました。アプリケーションの依存関係も更新され、既知のセキュリティ脆弱性に対処しました。さらに、このリリースには多数のパフォーマンスの最適化と重要なバグの修正も含まれています。
機能
- クラスタリングコンパクションが実装され、指定されたクラスタリングキーに 基づいてデータを再分散できるようになり、クエリの効率が向上した (#34326)、(#34363)。
改良点
- CGOに非同期検索機能を実装。(#34200)
- コンパクション処理をShard DataNodeから分離し、システムのモジュール性を向上。(#34157)
- パフォーマンス向上のため、プロキシ/デリゲータ内のQueryNodeでクライアントプーリングのサポートを追加しました。(#35195)
- GinおよびRestfulV1ハンドラにおいて、JSONのマーシャリングおよびアンマーシャリング時のCPUオーバーヘッドを最小化するSonicを統合。(#35018)
- 認証結果の取得を最適化するために、インメモリキャッシュを導入した。(#35272)
- autoindexのデフォルトのメトリックタイプを変更した。[#34277,#34479]
- 変数カラムの実行時のメモリフォーマットをリファクタリングし、メモリ使用量を削減しました。[#34367,#35012,#35041]
- コンパクション処理をリファクタリングし、永続的なデータ保存を可能にしました。(#34268)
- メモリマップドファイルが成長するセグメントをサポートし、メモリ管理を改善。(#34110)
- RESTful API のサポート、一貫性レベルのロギング、システムエラーとユーザーエラーの区別を追加し、アクセスログを改善しました。[#34295,#34352,#34396]
- Knowhereの新しいパラメータ
range_search_k
を利用して、範囲検索を高速化した。(#34709) - ブロックブルームフィルタを適用し、フィルタの構築とクエリの速度を向上しました。[#34377,#34922]
- メモリ使用量の改善:
- DataCoord の強化:
- ロードバランシングアルゴリズムの改良:
- システムメトリクスの拡張:様々なコンポーネントにおいて、以下のような新しいメトリクスを追加しました:
変更点
オープンソースユーザーのために、このバージョンでは AutoIndex の
FloatVector
とBinaryVector
のメトリックタイプをそれぞれCosine
とHamming
に変更しました。サードパーティ依存バージョンの修正:
- このリリースでは、Milvusのソフトウェアサプライチェーンマネジメントを大幅に強化するため、特定のサードパーティ依存ライブラリの固定バージョンを導入しました。
- プロジェクトを上流の変更から隔離することで、日々のビルドを潜在的な混乱から保護します。
- このアップデートは、検証済みのC++サードパーティパッケージをJFrogクラウド上で独占的にホスティングし、Conan Recipe Revisions(RREV)を利用することで安定性を確保します。
- このアプローチにより、ConanCenterのアップデートによる変更のブレークリスクが軽減される。
- Ubuntu 22.04を使用している開発者は、これらの変更の恩恵をすぐに受けることができます。しかし、他のオペレーティング・システムの開発者は、互換性の問題を避けるために、
glibc
のバージョンをアップグレードする必要があるかもしれません。
重要なバグ修正
- L0 コンパクション中にセグメントが省略され、削除データが失われる問題を修正しました。[#33980,#34363]
- 誤ったデータスコープ処理のために削除メッセージが転送されない問題を修正しました。(#35313)
mmap
の不正な使用により発生していたSIGBUS例外を修正しました。[#34455,#34530].- 不正な検索式によるクラッシュを修正しました。(#35307)
- ウォッチコンテキストのタイムアウト設定が正しくないためにDataNodeウォッチが失敗する問題を修正しました。(#35017)
バグ修正
- 特定の依存関係をアップグレードすることで、セキュリティ脆弱性に対処した。[#33927,#34693]
- 長すぎる式による解析エラーを修正しました。(#34957)
- クエリプランの解析時に発生するメモリリークを解決しました。(#34932)
- 動的なログレベルの変更が有効にならない問題を修正しました。(#34777)
- 初期化されていないセグメントオフセットが原因で、成長しているデータに対する group by クエリが失敗する問題を解決しました。(#34750)
- Knowhere イテレータを使用する場合の検索パラメータの設定を修正した。(#34732)
- パーティションのロード状態をチェックするロジックを修正した。(#34305)
- 特権キャッシュの更新が未処理のリクエストエラーにより失敗する問題を修正した。(#34697)
- QueryCoordの再起動後にロードされたコレクションの回復に失敗する問題を解決した。(#35211)
- 不要なインデックスパラメータの検証を削除することで、ロードアイデンポテンスの問題を修正した。(#35179)
- DataCoord再起動後、
compressBinlog
が実行され、reloadFromKV
がbinlogのlogID
を適切に満たすようにした。(#34062) - DataCoordのガベージコレクション後にコレクションメタデータが削除されない問題を修正しました。(#34884)
- DataCoord 内の SegmentManager で、インポートによって生成されたフラッシュされたセグメントを削除することによるメモリリークを解決。(#34651)
- コンパクションが無効でコレクションがドロップされた場合のパニックの問題を修正。(#34206)
- メモリ使用量の推定アルゴリズムを強化することにより、DataNode のメモリ不足問題を修正した。(#34203)
- チャンクキャッシュにシングルフライトを実装することで、複数のベクトル検索要求がキャッシュミスにヒットした場合のバーストメモリ使用を防止。(#34283)
- コンフィギュレーションで CAS (Compare and Swap) 操作中の
ErrKeyNotFound
を捕捉。(#34489) - CAS操作で誤ってフォーマットされた値を使用したために設定の更新に失敗する問題を修正した。(#34373)
その他
- OTLP HTTPエクスポータがサポートされ、観測および監視機能が強化されました。[#35073,#35299]
- 最大コレクション数やディスククォータ数を動的に変更できるようになりました。[#34511,#34386]
- 診断と監視を改善するために、DataNode内のL0コンパクションプロセスのトレース機能を追加しました。(#33898)
- コレクションごとのL0セグメントエントリ数のクォータ設定を導入。(#34837)
- インサート操作のレート制限メカニズムをアップサート操作にも適用するように拡張。(#34616)
- プロキシ CGO 呼び出し用の動的 CGO プールを実装し、リソースの使用量とパフォーマンスを最適化。(#34842)
- Ubuntu、Rocky、および Amazon オペレーティングシステムで DiskAnn コンパイルオプションを有効にし、これらのプラットフォームでの互換性とパフォーマンスを改善しました。(#34244)
- コナンをバージョン 1.64.1 にアップグレードし、最新機能との互換性を確保。(#35216)
- Knowhere をバージョン 2.3.7 に更新し、パフォーマンスの向上と新機能を追加。(#34709)
- 特定のサードパーティパッケージのリビジョンを修正し、一貫したビルドを保証し、予期せぬ変更のリスクを低減した。(#35316)
v2.4.6
リリース日: 2024年7月16日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.6 | 2.4.4 | 2.4.2 | 2.4.4 |
Milvus v2.4.6は、パニック、メモリリーク、削除時のデータ損失などの重大な問題に対処したバグ修正リリースです。また、監視メトリクスの強化、Goバージョンの1.21へのアップグレード、RESTful count(*)クエリのユーザーエクスペリエンスの向上など、いくつかの最適化も行われています。
改良点
- RESTful APIクエリの使い勝手を向上しました(#34444)。
- Goのバージョンを1.20から1.21に更新しました(#33940)。
- ヒストグラム・メトリック・バケットを最適化し、バケットの粒度をより細かくしました(#34592)。
- Pulsar依存バージョンを2.8.2から2.9.5にアップグレード。Milvus 2.4.6以降、Pulsarを2.9.5にアップグレードすることを推奨します。
バグ修正
- GetReplicas APIがnilステータスを返す問題を修正しました(#34019)。
- クエリが削除されたレコードを返す問題を修正した(#34502)。
- IndexNode が不正な寿命制御によって停止中にスタックする問題を解決した(#34559)。
- ワーカーがオフラインの場合に、主キーオラクルオブジェクトのメモリリークを修正した(#34020)。
- ChannelManagerImplV2が正しいNodeに通知されるように修正し、ループクロージャにおけるパラメータ取得の問題を修正しました(#34004)。
- ImportTask segmentsInfoにおける読み書きのデータ競合を、ディープコピーを実装することで修正しました(#34126)。
- legacyVersionWithoutRPCWatch」設定オプションのバージョン情報を修正し、ローリングアップグレード時のエラーを防止しました(#34185)。
- ロードされるパーティション数のメトリックを修正しました(#34195)。
- segcoreのトレース設定時に
otlpSecure
の設定を渡すようにした(#34210)。 - DataCoordのプロパティが誤って上書きされる問題を修正した(#34240)。
- 新しく作成された2つのメッセージストリームが誤ってマージされることによるデータ損失の問題を解決した(#34563)。
- msgstreamが無効なpchannelを消費しようとすることによるパニックを修正しました(#34230)。
- インポートによって孤児ファイルが生成される場合がある問題を修正しました(#34071)。
- セグメント内で主キーが重複していた場合に、クエリ結果が不完全になる問題を修正した(#34302)。
- L0コンパクションで、封印されたセグメントが欠落する問題を解決した(#34566)。
- ガベージコレクション後に生成されるchannel-cpメタにダーティデータが含まれる問題を修正しました(#34609)。
- RootCoordの再起動後にdatabase_numが0になるメトリクスを修正しました(#34010)。
- DataCoordのSegmentManagerにおいて、インポートによって生成されたフラッシュされたセグメントを削除することによるメモリリークを修正しました(#34652)。
- DataCoordの再起動後にcompressBinlogがbinlogのlogIDを埋めるようにし、KVからの適切なリロードを保証するようにした(#34064)。
v2.4.5
リリース日:2024年6月18日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.5 | 2.4.4 | 2.4.1 | 2.4.3 |
Milvus 2.4.5のリリースでは、パフォーマンス、安定性、および機能性を向上させるために、いくつかの改善とバグ修正が導入されています。Milvus 2.4.5では、スパース、float16、bfloat16ベクトル検索が自動インデックス作成機能により簡素化され、Bloomフィルター最適化機能により検索、削除、コンパクションが高速化され、読み込み時間の短縮とL0セグメントのインポート対応によりデータ管理に取り組んでいます。また、効率的な高次元スパースデータ検索のためのスパースHNSWインデックスを導入し、スパースフロートベクトルをサポートするRESTful APIを強化し、重要なバグを修正して安定性を向上させました。
新機能
- describe/alterデータベースAPIにrbacサポートを追加しました(#33804)。
- スパースベクトル用のHNSWインデックスの構築をサポートしました(#33653,#33662)。
- バイナリベクトルのディスクインデックスの構築をサポートしました(#33575)。
- RESTful v2でスパースベクタタイプをサポートしました(#33555)。
- コンポーネントを停止するための/management/stop RESTful APIを追加しました(#33799)。
改良点
- maxPartitionNumのデフォルト値を1024に設定(#33950)
- 接続不可エラー時に接続を強制的にリセットできるようにした(#33910)
- コレクションレベルのフラッシュレートリミッターを有効にした(#33864)
- セグメント予測を高速化するために、ブルームフィルタの適用を並列に実行するようにした(#33793)
- json.Unmarshalを高速化するため、削除ログのunmarshalにfastjson libを使用(#33802)
- BatchPkExistを使用して、ブルームフィルタのfunc呼び出しコストを削減しました(#33752)。
- 小さなコレクションの読み込みを高速化(#33746)
- L0セグメントへの削除データのインポートをサポート(#33712)。
- 同じタスクが何度も実行されないように、タイムアウトされるマークコンパクションのタスクをスキップ(#33833)
- numpyの一括挿入において、float16およびbfloat16ベクトルをBinaryVectorと同じものとして扱うようにしました(#33788)。
- seekメソッドにincludeCurrentMsgフラグを追加しました(#33743)。
- mergeInterval、targetBufSize、maxTolerantLagof msgdispatcherを設定に追加しました(#33680)。
- スパースベクトルのGetVectorByIDを改善しました(#33652)。
- 不要なコピーと関数呼び出しのコストを削減するためにStringPrimarykeyを削除しました(#33649)。
- バイナリ/スパースデータ型の自動インデックスマッピングを追加しました(#33625)。
- 一部のキャッシュを最適化し、メモリ使用量を削減した(#33560)
- インポート/プレインポートタスクの実行インターフェイスを抽象化(#33607)
- バッファ挿入時にタイムスタンプにマップpkを使用することで、bfの発生を抑制(#33582)
- インポートの冗長なメタ操作を回避(#33519)
- ディスククォータ情報のロギングを改善し、UseDefaultConsistencyフラグを追加し、不要なログを削除した(#33597,#33644,#33670)。
バグ修正
- queryHookがベクトル型を認識できないバグを修正しました(#33911)。
- 反復変数partitionIDをキャプチャして使用しないようにした(#33970)。
- バイナリベクタやスパースベクタでMilvusがAutoIndexを作成できない場合がある不具合を修正しました(#33867)。
- indexnodeが全てのベクトルの無効なインデックスパラメータに対してインデックス作成を再試行する場合があるバグを修正しました(#33878)。
- ロードとリリースが同時に発生した場合にサーバがクラッシュすることがあるバグを修正しました(#33699)。
- 設定値のキャッシュの一貫性を改善しました(#33797)。
- 削除時にデータが失われる可能性がある問題を修正しました(#33821)。
- コレクションを削除した後に、DroppedAtフィールド(削除のタイムスタンプ)が設定されるようにした(#33767)。
- Milvusがバイナリベクタのデータサイズを正しく扱えない問題を修正しました(#33751)。
- 機密性の高いKafkaの認証情報がプレーンテキストでログに記録されないようにした(#33694,#33747)。
- Milvus が複数のベクトルフィールドを持つデータを正しくインポートできるようにした(#33724)。
- インポートジョブが存在するかどうかを開始前にチェックすることで、インポートの信頼性を向上させた。(#33673)
- スパースHNSWインデックス(内部機能)の取り扱いを改善しました(#33714)。
- メモリリークを回避するためにベクタメモリをクリーンアップ(#33708)。
- 状態ロックの問題を修正することにより、よりスムーズな非同期ウォームアップを保証(#33687)。
- クエリイテレータで結果が欠落するバグを修正。(#33506)
- インポートセグメントサイズが不均等になる場合があったバグを修正 (#33634)。
- bf16、fp16、バイナリベクタ型の不正なデータサイズの取り扱いを修正(#33488)
- L0 コンパクタに関する潜在的な問題を修正し、安定性を向上(#33564)。
- 動的な設定の更新がキャッシュに正しく反映されるようにした。(#33590)
- RootCoordQuotaStates メトリックの精度を改善しました(#33601)。
- ロードされたエンティティの数を正確に報告するようにしました(#33522)。
- 例外ログにおいて、より完全な情報を提供するようにした。 (#33396)
- 不要なグループチェッカを削除し、クエリパイプラインを最適化した(#33485)
- インデックスノードのディスク容量をより正確に確認するために、ローカルストレージのパスを使用するようにしました。(#33505)
- hasMoreResultのヒット数が制限値より大きい場合にfalseを返すことがあった問題を修正しました(#33642)。
- デリゲータの bf のロードを遅延させ、worker のメモリ不足時に bf が何度もロードされないようにした(#33650)- queryHook がベクトル型を認識できないバグを修正した(#33911)- queryHook がベクトル型を認識できないバグを修正した(#33911)- queryHook がベクトル型を認識できないバグを修正した(#33911)
- イテレーション変数 partitionID をキャプチャして使用しないようにした(#33970)
- バイナリベクタやスパースベクタでMilvusがAutoIndexを作成できない場合があるバグを修正(#33867)
- indexnodeが全てのベクトルの無効なインデックスパラメータに対してインデックス作成を再試行する場合があるバグを修正しました(#33878)。
- ロードとリリースが同時に発生した場合にサーバがクラッシュすることがあるバグを修正しました(#33699)。
- 設定値のキャッシュの一貫性を改善しました(#33797)。
- 削除時にデータが失われる可能性がある問題を修正しました(#33821)。
- コレクションを削除した後に、DroppedAtフィールド(削除のタイムスタンプ)が設定されるようにした(#33767)。
- Milvusがバイナリベクタのデータサイズを正しく扱えない問題を修正しました(#33751)。
- 機密性の高いKafkaの認証情報がプレーンテキストでログに記録されないようにした(#33694,#33747)。
- Milvus が複数のベクトルフィールドを持つデータを正しくインポートできるようにした(#33724)。
- インポートジョブが存在するかどうかを開始前にチェックすることで、インポートの信頼性を向上させた。(#33673)
- スパースHNSWインデックス(内部機能)の取り扱いを改善しました(#33714)。
- メモリリークを回避するためにベクタメモリをクリーンアップ(#33708)。
- 状態ロックの問題を修正することにより、よりスムーズな非同期ウォームアップを保証(#33687)。
- クエリイテレータで結果が欠落するバグを修正。(#33506)
- インポートセグメントサイズが不均等になる場合があったバグを修正 (#33634)。
- bf16、fp16、バイナリベクタ型の不正なデータサイズの取り扱いを修正(#33488)
- L0 コンパクタに関する潜在的な問題を修正し、安定性を向上(#33564)。
- 動的な設定の更新がキャッシュに正しく反映されるようにした。(#33590)
- RootCoordQuotaStates メトリックの精度を改善しました(#33601)。
- ロードされたエンティティの数を正確に報告するようにしました(#33522)。
- 例外ログにおいて、より完全な情報を提供するようにした。 (#33396)
- 不要なグループチェッカを削除し、クエリパイプラインを最適化した(#33485)
- インデックスノードのディスク容量をより正確に確認するために、ローカルストレージのパスを使用するようにしました。(#33505)
- hasMoreResultのヒット数が制限値より大きい場合にfalseを返すことがあった問題を修正しました(#33642)。
- デリゲータの bf のロードを遅延させ、worker のメモリ不足時に bf が何度もロードされないようにした(#33650)。
v2.4.4
リリース日: 2024年5月31日
Milvusバージョン | Python SDK バージョン | Java SDK バージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.4 | 2.4.3 | 2.4.1 | 2.4.2 |
Milvus v2.4.4では、パフォーマンスと安定性の向上を目的としたいくつかの重要なバグ修正と改善が含まれています。特に、バルクインサートの統計ログが不正にガベージコレクションされ、データの整合性に影響を及ぼす可能性があるという重大な問題を解決しました。これらの修正の恩恵を受けるために、すべてのv2.4ユーザーがこのバージョンにアップグレードすることを強くお勧めします。
バルク・インサートを使用している場合は、データの整合性を保つために、できるだけ早い機会にv2.4.4にアップグレードしてください。
重大なバグ修正
- 統計ログのIDを埋め、その正しさを検証した(#33478)
改良点
バグ修正
- すべての権限が付与されている場合に空のコレクションを表示するようにした(#33454)。
- CMakeがx86_64だけでなく現在のプラットフォーム用にダウンロードとインストールを行うようにした(#33439)。
v2.4.3
リリース日: 2024年5月29日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.3 | 2.4.3 | 2.4.1 | 2.4.2 |
Milvusバージョン2.4.3では、パフォーマンスと信頼性を向上させるために、多くの機能、改善、バグ修正が行われました。特筆すべき機能強化としては、スパースフロートベクトル一括挿入のサポートや、最適化されたブルームフィルタアクセラレーションなどが挙げられる。改善点は、動的な設定更新からメモリ使用量の最適化まで、さまざまな分野に及んだ。バグ修正では、パニックシナリオのような重要な問題に対処し、よりスムーズなシステム運用を確保しました。このリリースは、機能強化、パフォーマンスの最適化、そして堅牢なユーザーエクスペリエンスの提供に対するMilvusの継続的なコミットメントを強調するものです。
特徴
- binlog/json/parquetのスパースフロートベクトル一括挿入をサポートしました。
改良点
- RPCに基づくDatacoord/nodeウォッチチャネルを実装しました(#32036)
- ブルームフィルタを最適化し、削除フィルタリングを高速化した(#32642 、#33329 、#33284)
- スカラーインデックスに生データがない場合、mmap経由で生データをロードするようにした(#33317)。
- milvusの設定をmilvus.yamlに同期した(#33322,#32920,#32857,#32946)。
- knowhereのバージョンを更新しました(#33310 、#32931 、#33043)。
- QueryCoordでバランサポリシーの動的更新を可能にしました(#33272)。
- ロガーの割り当てを最小化するため、書き込みバッファに事前に作成したロガーを使用するようにした(#33304)
- パラメータチェックを改善した(#32777,#33271,#33218)。
- チェックポイントの不正なメッセージIDを無視するパラメータを追加しました(#33249)。
- プラグインの初期化失敗処理を制御する設定を追加(#32680)
- knowhere用のスコア計算一貫性設定を追加した(#32997)
- パブリックロールパーミッションの初期化を制御する設定オプションを導入した(#33174)
- フィールド読み込み時のメモリ使用量を最適化した(#33196)
- チャネルマネージャv2の実装を改良した(#33172,#33121,#33014)
- binlogのメモリ上のデータサイズを追跡する機能を追加(#33025)
- セグメントインデックスファイルのサイズに関するメトリクスを追加(#32979,#33305)
- DeleteをDeletePartialMatchに置き換え、メトリクスを削除した(#33029)
- セグメントタイプに応じた関連データサイズを取得(#33017)
- メタストアのチャンネルノード情報を整理(#32988)
- データノードブローカからルートコードを削除(#32818)
- バッチアップロードを可能にした(#32788)
- パーティションキー使用時のデフォルトのパーティション番号を16に変更した(#32950)
- 非常に大きなtop-kクエリの削減性能を改善した(#32871)
- 書き込みとコンパクションを高速化するためにTestLocations機能を利用しました(#32948)。
- プランパーサプールを最適化し、不要な再利用を回避しました(#32869)。
- ロード速度を改善しました(#32898)。
- restv2でコレクションのデフォルト一貫性レベルを使用するようにした(#32956)
- rest APIにコスト応答を追加しました(#32620)。
- チャネル排他バランスポリシーを有効にした(#32911)。
- プロキシで describedatabase API を公開(#32732)
- コレクションでRGを取得する際にcoll2replicaマッピングを利用するようにした(#32892)
- 検索とクエリのトレースを追加(#32734)
- opentelemetry トレースの動的設定をサポート(#32169)
- leaderviewを更新する際、チャンネル結果の繰り返しを回避(#32887)
- 寄木細工のベクトルオフセットの取り扱いを最適化(#32822)
- コレクションでのデータコードセグメントのフィルタリングを改善(#32831)
- ログのレベルと頻度を調整(#33042 、#32838 、#33337)
- バランス停止後にバランスを停止できるようにした(#32812)。
- リーダーの位置が変更された場合に、シャードリーダーのキャッシュを更新した(#32470)。
- 非推奨のAPIおよびフィールドを削除した(#32808,#32704)。
- 文字列の比較をint型に変換するmetautil.channelを追加(#32749)
- querynodeが新しいコレクションを発見した場合に、ペイロードライターのエラーメッセージとログにタイプ情報を追加しました(#32522)。
- パーティションキーでコレクションを作成する場合に、パーティション番号をチェックするようにした(#32670)。
- ウォッチに失敗した場合、レガシーl0セグメントを削除した(#32725)
- リクエストの出力タイプを改善した(#33319)
- 型を取得する前に配列フィールドデータがnilであるかチェックするようにした(#33311)
- ノードのDelete/AddNode操作が失敗した場合にエラーを返すようにした(#33258)。
- データノードのサーバIDを更新できるようにしました(#31597)。
- コレクションリリースでquerynodeメトリクスのクリーンアップを統一した(#32805)
- スカラー自動インデックスの設定が不正なバージョンだった問題を修正しました(#32795)。
- インデックスの作成/変更時のインデックスパラメータチェックを改良しました(#32712)。
- 冗長なレプリカリカバリを削除した(#32985)
- チャネルメタテーブルで200kセグメント以上の書き込みを可能にした(#33300)
バグ修正
- レートリミットインタセプタにおいて、データベースが存在しない場合にパニックを起こす問題を修正した(#33308)。
- quotacenter メトリクスの収集で、不正なパラメータが原因で失敗する問題を修正しました(#33399)。
- processactivestandbyがエラーを返した場合のパニックを修正しました(#33372)。
- restful v2でnq > 1の場合に検索結果が切り捨てられる問題を修正しました(#33363)。
- restful v2のロール操作にデータベース名フィールドを追加した(#33291)
- グローバルレート制限が動作しない問題を修正(#33336)
- インデックス構築の失敗によるパニックを修正した(#33314)
- segcoreにおけるスパースベクタの検証を追加し、合法性を確保した(#33312)
- タスク完了後にsyncmgrからタスクを削除するようにした(#33303)
- データインポート時のパーティションキーフィルタリングの失敗を修正した(#33277)
- noop exporterを使用した場合にtraceIDを生成できない問題を修正(#33208)
- クエリ結果の取得を改善した(#33179)
- チェックポイントラグメトリクスの漏えいを防ぐため、チャネルのチェックポイントを削除するようにした(#33201)
- 進行停止中にクエリノードがスタックする問題を修正(#33154)
- フラッシュレスポンスに欠落していたセグメントを修正(#33061)
- サブミット操作がべき等であるようにした(#33053)
- ストリーミングリーダでバッチごとに新しいスライスを割り当てた(#33360)
- QueryCoord再起動後にリソースグループからオフラインノードを削除しました(#33233)。
- completedCompactorのl0コンパクタを削除しました(#33216)。
- リミッター初期化時にクォータ値をリセットするようにした(#33152)
- etcdの制限を超過する問題を修正した(#33041)
- フィールド数が多すぎることによるetcdトランザクションの上限超過を解決した(#33040)
- GetNumRowsOfPartitionにおけるRLockの再入力を削除した(#33045)。
- LeaderCacheObserverをSyncAllの前に起動するようにした(#33035)。
- 解放されたスタンバイチャネルのバランシングを有効にした(#32986)
- サーバ初期化の前にアクセスロガーを初期化するようにした(#32976)
- コンパクタが空のセグメントをクリアできるようにした(#32821)
- l0 コンパクションでデルタログエントリ番号と時間範囲を埋めるようにした(#33004)。
- シャードリーダのキャッシュデータの競合によるプロキシのクラッシュを修正(#32971)
- ロードインデックスメトリックの時間単位を修正しました(#32935)。
- 停止中のクエリノードのセグメントを正常に解放できない問題を修正(#32929)
- インデックスリソースの見積もりを修正しました(#32842)。
- チャネルチェックポイントをデルタ位置に設定するようにした(#32878)。
- syncmgrがfutureを返す前にキーをロックするようにした(#32865)。
- 転置インデックスが1セグメントしか持たないようにした(#32858)。
- コンパクショントリガーが2つの同じセグメントを選択する問題を修正(#32800)
- binlogインポートでパーティション名を指定できない問題を修正した(#32730,#33027)。
- 寄木細工のインポートで動的カラムをオプションにした(#32738)
- データ挿入時に自動IDチェックをスキップするようにした(#32775)
- 挿入フィールドデータの行数をスキーマで検証するようにした(#32770)
- CTraceContextのIDにWrapperとKeepaliveを追加した(#32746)
- datacoordメタオブジェクトでデータベース名が見つからない問題を修正(#33412)
- ドロップされたパーティションのドロップされたセグメントを同期するようにした(#33332)
- 不適切なパラメータによるquotaCenterのメトリクス収集の失敗を修正した(#33399)
v2.4.1
リリース日: 2024年5月6日
Milvusバージョン | Python SDKバージョン | Java SDKバージョン | Node.js SDKバージョン |
---|---|---|---|
2.4.1 | 2.4.1 | 2.4.0 | 2.4.2 |
Milvusバージョン2.4.1では、ソフトウェアのパフォーマンス、可観測性、安定性を向上させるために、数多くの改善とバグフィックスが行われました。これらの改善には、宣言的リソースグループAPI、Float16/BFloat16ベクトルデータ型をサポートするバルクインサート機能の強化、オブジェクトストレージのリスト操作を削減する改良されたガベージコレクション(GC)メカニズム、およびパフォーマンスの最適化に関するその他の変更が含まれます。さらに、コンパイルエラー、改行文字でのファジーマッチの失敗、RESTfulインターフェースの不正なパラメータデータ型、動的フィールドが有効な場合にnumpyファイル上でBulkInsertがエラーを発生させるなどのバグ修正も行われました。
変更点
- 空のフィルター式での削除のサポートを終了しました。(#32472)
機能
- バルクインサートにおいて、Float16/BFloat16ベクトルデータ型をサポートしました(#32157)。
- スパースフロートベクトルを改良し、ブルートフォースイテレータ検索と範囲検索をサポート(#32635)
改良点
- 宣言型リソースグループAPIを追加しました(#31930,#32297,#32536,#32666)。
- QueryCoordのコレクションオブザーバをタスクドリブンに書き直した(#32441)
- DataNodeのSyncManagerで使用されるデータ構造をリファクタリングし、メモリ使用量を減らし、エラーを防止しました(#32673)。
- ガベージコレクションの実装を見直し、オブジェクトストレージに関連するリスト操作を最小限にしました(#31740)
- コレクション数が多い場合のCPU使用量を削減(#32245)
- milvus.yamlファイルの関連する設定項目をコードによって自動的に生成することで、 milvus.yamlの管理を強化した(#31832,#32357)
- ローカル削減を行った後にデータを取得することで、Queryのパフォーマンスを向上した(#32346)
- etcdクライアント作成時にWithBlockオプションを追加した(#32641)
- クライアントが提供する場合、クライアントが指定するclient_request_idをTraceIDとして使用するようにした(#32264)
- 削除および一括挿入操作のメトリクスにdbラベルを追加した(#32611)
- AutoIDおよびPartitionKey列の設定による検証をスキップするロジックを追加した(#32592)
- 認証に関するエラーを改善した(#32253)
- DataCoordのAllocSegmentIDに関するエラーログを整理した(#32351,#32335)
- 重複するメトリクスの削除(#32380,#32308)、および未使用のメトリクスの整理(#32404,#32515)。
- partitionKey機能の有効化を強制するかどうかを制御する設定オプションを追加(#32433)
- 1回のリクエストで挿入できる最大データ量を制御する設定オプションを追加しました(#32433)。
- セグメントレベルでのapplyDelete操作を並列化し、DelegatorによるDeleteメッセージの処理を高速化した(#32291)
- インデックス(#32232,#32505,#32533,#32595)とキャッシュの追加(#32580)により、 QueryCoordで頻繁に行われるフィルタリング処理を高速化した(#32232,#32505,#32533, # 32595)。
- DataCoordの一般的な操作を高速化するために、データ構造を書き直し(#32273)、コードをリファクタリング(#32389)。
- conanからopenblasを削除した(#32002)。
バグ修正
- rockylinux8におけるmilvusのビルドを修正しました(#32619)。
- ARM上でのSVEのコンパイルエラーを修正(#32463,#32270)。
- ARMベースのGPUイメージにおけるクラッシュ問題を修正(#31980)
- 正規表現クエリが改行を含むテキストを扱えない問題を修正(#32569)
- GetShardLeadersが空のノードリストを返すことにより検索結果が空になる問題を修正(#32685)
- BulkInsertがnumpyファイルの動的フィールドに遭遇した場合にエラーを発生する問題を修正しました(#32596)。
- RESTFulV2インターフェイスに関するバグを修正。リクエストの数値パラメータが文字列型ではなく数値入力を受け付けるようにする重要な修正も含まれる(#32485,#32355)。
- レートリミッターのwatching configイベントを削除したことによる、 プロキシのメモリリークを修正(#32313)
- パーティション名(partitionName)が指定されていない場合に、レートリミッターがパーティションが見つからないと不正に報告する問題を修正した(#32647)
- エラータイプにコレクションが回復状態にある場合とロードされていない場合の検出を追加。(#32447)
- 負のクエリ可能なnumエンティティメトリックを修正した(#32361)
v2.4.0
リリース日: 2024年4月17日
Milvusバージョン | Python SDKバージョン | Node.js SDKバージョン |
---|---|---|
2.4.0 | 2.4.0 | 2.4.0 |
2.4.0-rc.1リリースの強固な基盤の上に、既存の機能を維持しつつ、ユーザーから報告された重大なバグへの対応に重点を置きました。さらに、Milvus 2.4.0では、システム性能の向上、様々なメトリクスの導入による観測性の向上、コードベースの簡素化を目的とした様々な最適化を導入しています。
改良点
- MinIO TLS接続のサポート(#31396,#31618)
- スカラーフィールドのAutoIndex対応(#31593)
- ハイブリッド検索リファクタリングにより、通常の検索と一貫した実行パスを実現(#31742 、#32178)
- bitsetおよびbitset_viewリファクタリングによるフィルタリングの高速化(#31592,#31754,#32139)。
- インポートタスクがデータインデックスの完了を待つようになりました(#31733)。
- インポートの互換性の強化(#32121)、タスクのスケジューリング(#31475)、インポートファイルのサイズと数の制限(#31542)
- 型チェックのインターフェイスの標準化(#31945,#31857)、非推奨のコードやメトリクスの削除(#32079,#32134,#31535,#32211,#31935)、定数名の正規化(#31515)などのコードの簡素化。
- QueryCoordのカレントターゲットチャンネルチェックポイントの遅延に対する新しいメトリクスを追加しました(#31420)。
- 共通メトリクスにdbラベルを追加した(#32024)
- 削除済み、インデックス付き、およびロードされたエンティティのカウントに関する新しいメトリクスに、collectionNameやdbNameなどのラベルが追加されました(#31861)。
- ベクトル型が不一致の場合のエラー処理を改善しました(#31766)。
- インデックスが構築できない場合にクラッシュせずにエラーを投げるようにした(#31845)
- データベースの削除時にデータベースのメタキャッシュを無効にするようにした(#32092)
- チャンネル配信(#31814)およびリーダービュー管理(#32127)のインターフェイスをリファクタリング。
- チャンネルディストリビューションマネージャインターフェイスのリファクタリング(#31814)とリーダービューマネージャインターフェイスのリファクタリング(#32127)
- バッチ処理(#31632)、マッピング情報の追加(#32234,#32249)、ロックの使用回避(#31787)により、頻繁に呼び出される操作を高速化。
変更点
バグ修正
- クラッシュ防止のため、クエリと挿入時のデータ型と値のチェックを強化(#31478 、#31653 、#31698 、#31842 、#32042 、#32251 、#32204)
- RESTful APIのバグ修正(#32160)
- 転置インデックスのリソース使用量の予測を改善した(#31641)。
- 認証が有効な場合のetcdとの接続問題の解決(#31668)
- natsサーバのセキュリティ更新(#32023)
- 転置インデックスファイルを/tmpではなくQueryNodeのローカルストレージパスに格納するようにした(#32210)
- collectionInfoにおけるdatacoordのメモリリークに対処(#32243)
- システムパニックを引き起こす可能性のあるfp16/bf16関連のバグを修正しました(#31677,#31841,#32196)。
- グループ化検索が不十分な結果を返す問題を解決(#32151)
- Reduceステップにおけるオフセットをより効果的に扱い、"reduceStopForBest "が有効な場合に適切な結果が得られるように、イテレータを用いた検索を調整した(#32088)
v2.4.0-rc.1
リリース日:2024年3月20日
Milvusバージョン | Python SDKバージョン |
---|---|
2.4.0-rc.1 | 2.4.0 |
このリリースでは、いくつかのシナリオベースの機能が導入されています:
新しいGPUインデックス - CAGRA: NVIDIAの貢献により、この新しいGPUインデックスは、特にバッチ検索において10倍のパフォーマンス向上を提供します。詳細はGPUインデックスをご参照ください。
マルチベクトルと ハイブリッド検索:この機能により、複数のモデルからのベクトル埋め込みを保存し、ハイブリッド検索を行うことができます。詳細は「ハイブリッド検索」を参照。
スパース・ベクトル:キーワードの解釈と分析に最適なスパース・ベクターが、コレクションでの処理に対応しました。詳細については、スパース・ベクトルを参照してください。
グループ化検索:カテゴリカルな集約は、RAG(Retrieval-Augmented Generation)アプリケーションのドキュメントレベルのリコールを強化します。詳細については、「グループ化検索」を参照してください。
転置インデックスと ファジィ・マッチング:これらの機能は、スカラー・フィールドのキーワード検索を向上させます。詳細については、「スカラー・フィールドのインデックスと フィルター検索」を参照してください。
新機能
GPUインデックス - CAGRA
NVIDIAチームのCAGRAへの貴重な貢献に対し、心より感謝申し上げます。CAGRAは、オンラインで使用できる最先端の(SoTA)GPUベースのグラフインデックスです。
これまでのGPUインデックスとは異なり、CAGRAは従来CPUインデックスが得意としてきた小バッチクエリにおいても圧倒的な優位性を示しています。さらに、GPUインデックスがすでに得意とする大規模バッチクエリとインデックス構築速度におけるCAGRAの性能は、まさに比類ないものです。
サンプルコードはexample_gpu_cagra.py にあります。
スパースベクトル (ベータ)
このリリースでは、スパースベクトルと呼ばれる新しいタイプのベクトル場を導入します。スパースベクトルは密なベクトルとは異なり、ゼロでない次元はほんの一握りで、次元数が数倍高くなります。この特徴は、項ベースの性質により解釈しやすく、特定の領域においてより効果的である。SPLADEv2/BGE-M3のような学習済みのスパースモデルは、一般的な第一段階のランキングタスクに非常に有用であることが証明されている。Milvusのこの新機能の主なユースケースは、SPLADEv2/BGE-M3のようなニューラルモデルやBM25アルゴリズムのような統計モデルによって生成されたスパースベクトルに対する効率的な近似意味的最近傍探索を可能にすることです。Milvusは現在、スパースベクトルの効率的で高性能な格納、インデックス付け、検索(MIPS、最大内積探索)をサポートしています。
サンプルコードはhello_sparse.pyにあります。
マルチ埋め込みとハイブリッド検索
マルチベクタのサポートは、マルチモデルデータ処理や密なベクトルと疎なベクトルの混在を必要とするアプリケーションの基礎となります。マルチベクタサポートにより、以下のことが可能になります:
- 複数のモデルから非構造化テキスト、画像、音声サンプルに対して生成されたベクトル埋め込みを保存。
- 各エンティティの複数のベクトルを含むANN検索の実行。
- 異なる埋め込みモデルに重みを割り当てることで、検索ストラテジーをカスタマイズ。
- 様々な埋め込みモデルを試して、最適なモデルの組み合わせを見つける。
マルチ・ベクトル・サポートにより、FLOAT_VECTOR や SPARSE_FLOAT_VECTOR などの異なる型の複数のベクトル・フィールドをコレクションに格納し、インデックスを付け、リランキング戦略を適用することができる。現在、2つのリランキング戦略が利用可能である:Reciprocal Rank Fusion (RRF)とAverage Weighted Scoringである。どちらの戦略も、異なるベクトルフィールドからの検索結果を統一された結果セットに結合する。最初の戦略は、異なるベクトルフィールドの検索結果に一貫して現れるエンティティを優先し、もう一方の戦略は、各ベクトルフィールドの検索結果に重みを割り当てて、最終的な結果セットにおける重要度を決定する。
コード例はhybrid_search.pyにあります。
転置インデックスとファジィマッチ
Milvusの以前のリリースでは、スカラーフィールドのインデックス作成にメモリベースのバイナリ検索インデックスとMarisa Trieインデックスが使用されていました。しかし、これらの方法はメモリを大量に消費しました。Milvusの最新リリースでは、すべての数値および文字列データ型に適用可能なTantivyベースの転置インデックスが採用されました。この新しいインデックスはスカラークエリーの性能を劇的に向上させ、文字列中のキーワードのクエリーを10分の1に削減した。さらに、この転置インデックスは、データ圧縮と内部インデックス構造のMMap(Memory-Mapped Storage)メカニズムにおける追加の最適化により、より少ないメモリを消費します。
このリリースでは、接頭辞、接尾辞、接尾辞を使用したスカラーフィルタリングにおけるファジーマッチもサポートしています。
コードの例はinverted_index_example.pyとfuzzy_match.py にあります。
検索のグループ化
特定のスカラーフィールドの値で検索結果を集約できるようになりました。これはRAGアプリケーションがドキュメントレベルのリコールを実装するのに役立ちます。各文書は様々なパッセージに分割されます。各パッセージは1つのベクトル埋め込みによって表現され、1つの文書に属する。散らばったパッセージではなく、最も関連性の高いドキュメントを見つけるために、search()操作にgroup_by_field引数を含めることで、ドキュメントIDによって結果をグループ化することができます。
コード例はexample_group_by.py にあります。
Float16 と BFloat- Vector データ型
機械学習やニューラルネットワークでは、Float16やBFloatのような半精度データ型がよく使用されます。これらのデータ型はクエリの効率を改善し、メモリ使用量を削減できますが、精度の低下というトレードオフが伴います。今回のリリースで、Milvusはベクトルフィールドでこれらのデータ型をサポートするようになりました。
サンプルコードはfloat16_example.pyとbfloat16_example.py にあります。
アップグレードされたアーキテクチャ
L0 セグメント
このリリースには、削除されたデータを記録するために設計された L0 セグメントという新しいセグメントが含まれています。このセグメントでは、保存された削除レコードを定期的にコンパクト化し、封印されたセグメントに分割することで、小さな削除に必要なデータフラッシュの回数を減らし、小さなストレージフットプリントを残します。このメカニズムにより、Milvusはデータ圧縮とデータフラッシュを完全に分離し、削除およびアップサート操作のパフォーマンスを向上させます。
リファクタリングされた一括挿入
本リリースでは、改良された一括挿入ロジックも導入されています。これにより、1回の一括挿入リクエストで複数のファイルをインポートできるようになります。リファクタリングされたバージョンでは、一括挿入のパフォーマンスと安定性の両方が大幅に改善されました。また、レート制限の微調整やユーザーフレンドリーなエラーメッセージなど、ユーザーエクスペリエンスも向上しています。さらに、MilvusのRESTful APIを通じてバルクインサートのエンドポイントに簡単にアクセスすることができます。
メモリマップストレージ
Milvusはメモリマップドストレージ(MMap)を使用してメモリ使用量を最適化しています。このメカニズムでは、ファイルコンテンツを直接メモリにロードする代わりに、ファイルコンテンツをメモリにマッピングします。このアプローチは、パフォーマンスの低下というトレードオフを伴います。 2つのCPUと8GBのRAMを持つホスト上のHNSWインデックス付きコレクションでMMapを有効にすると、10%未満の性能低下で、4倍のデータをロードできます。
さらに、このリリースでは、Milvusを再起動することなく、MMapを動的かつきめ細かく制御することができます。
詳細については、MMap Storage を参照してください。
その他
Milvus-CDC
Milvus-CDCは、Milvusインスタンス間で増分データをキャプチャおよび同期するための使いやすいコンパニオンツールであり、増分バックアップおよびディザスタリカバリを容易に行うことができます。本リリースでは、Milvus-CDCの安定性が向上し、変更データキャプチャ(CDC)機能が一般的に利用できるようになりました。
Milvus-CDCの詳細については、GitHubリポジトリおよびMilvus-CDC Overviewをご参照ください。
MilvusClientインターフェースの改良
MilvusClientはORMモジュールに代わる使いやすいクライアントです。サーバとのインタラクションを単純化するために、純粋に機能的なアプローチを採用しています。コネクションプールを維持する代わりに、各MilvusClientはサーバとのgRPC接続を確立します。 MilvusClientモジュールはORMモジュールのほとんどの機能を実装しています。 MilvusClientモジュールの詳細については、pymilvusおよびリファレンスドキュメントを参照してください。