操作常見問題

什麼是 QueryNode 委託器,它的責任是什麼?

當集合載入時,QueryNode 會訂閱來自訊息佇列的插入和刪除訊息的 DML 通道。訂閱這些通道的 QueryNode(稱為委託者)負責:

  • 管理因持續插入而需要額外記憶體的增加區段。
  • 接收刪除訊息,並將訊息傳送給持有相關區段的其他 QueryNode。

如何辨識集合的委託節點?

使用 Birdwatcher。

按此安裝 Birdwatcher,然後執行以下指令:

./birdwatcher
# Find delegator nodes for your collection
Milvus(my-release) > show segment-loaded-grpc --collection <your-collectionID>

ServerID 2
Channel by-dev-rootcoord-dml_2, collection: 430123456789, version 1
Leader view for channel: by-dev-rootcoord-dml_2
Growing segments count: 1, ids: [430123456789_4]

# Map server ID to pod IP
Milvus(my-release) > show session

Node(s) querynode
        ID: 1        Version: 2.4.0        Address: 10.0.0.4:19530
        ID: 2        Version: 2.4.0        Address: 10.0.0.5:19530
        ID: 3        Version: 2.4.0        Address: 10.0.0.6:19530

如果查詢節點記憶體使用不平衡,可以調整哪些參數?

有時候,查詢節點的記憶體用量會有所不同,因為有些節點作為委託人會使用較多的 RAM。如果委託人的記憶體較多,請調整 queryCoord.delegatorMemoryOverloadFactor,以將封存的區段卸載到其他節點,並降低 RAM 使用量。

  • 預設值為 0.1。
  • 增加此值 (例如,增加到 0.3 或更高) 會使系統從超載的 delegator 卸載更多封存區段到其他 QueryNodes,幫助平衡記憶體使用。您也可以嘗試將值增加到 1,這表示不會在 delegator 節點中載入封存區段。

如果您不想重新啟動集群,您可以使用 birdwatcher 修改 milvus 配置:

./birdwatcher
Offline > connect --etcd <your-etcd-ip>:2379 --auto

# Change delegatorMemoryOverloadFactor to 0.3 without restart, default value is 0.1
set config-etcd --key queryCoord.delegatorMemoryOverloadFactor --value 0.3

如何設定集合的 shard_num?

最佳的做法是,對於維度為 768 的向量集合,建議每 ~1 億向量至少使用 1 個 shard。對於大量寫入的使用情況,每 ~1 億向量使用 4 個 shard。

例如,如果您有 1 億向量,請使用 1-4 個分片。如果您有 5 億向量,請使用 5-10 個磁碟分割。

如果我從 Docker Hub 拉取 Milvus Docker 映像失敗怎麼辦?

如果您從 Docker Hub 拉取 Milvus Docker image 失敗,請嘗試新增其他註冊表鏡像。

中國大陸的使用者可以在/etc.docker/daemon.json 的 registry-mirrors array 中加入網址 "https://registry.docker-cn.com"。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

Docker 是安裝和執行 Milvus 的唯一方法嗎?

Docker 是部署 Milvus 的有效方法,但不是唯一的方法。您也可以從原始碼部署 Milvus。這需要 Ubuntu (18.04 或更高版本) 或 CentOS (7 或更高版本)。更多資訊請參閱從原始碼建立 Milvus

影響召回率的主要因素是什麼?

召回率主要受索引類型和搜尋參數影響。

對於 FLAT 索引,Milvus 採取集合內的窮盡掃描,100% 回復。

對於 IVF 索引,nprobe 參數決定在資料集中的搜尋範圍。增加 nprobe 會增加搜尋向量的比例和召回率,但會降低查詢效能。

對於 HNSW 索引,ef 參數決定圖搜尋的寬度。增加 ef 會增加在圖表上搜尋的點數量和召回率,但會降低查詢效能。

如需詳細資訊,請參閱向量索引

為什麼我對配置檔案的變更沒有生效?

Milvus 不支援在執行時修改組態檔案。您必須重新啟動 Milvus Docker,配置檔案的變更才會生效。

我如何知道 Milvus 是否成功啟動?

如果 Milvus 是使用 Docker Compose 啟動,請執行docker ps 觀察有多少 Docker 容器正在執行,並檢查 Milvus 服務是否正確啟動。

對於 Milvus 獨立版本,您應該至少可以觀察到三個執行中的 Docker 容器,其中一個是 Milvus 服務,另外兩個是 etcd 管理和儲存服務。如需詳細資訊,請參閱安裝 Milvus standalone

為什麼日誌檔中的時間與系統時間不同?

時間不同通常是因為主機不使用 Coordinated Universal Time (UTC)。

Docker 映像中的日誌檔案預設使用 UTC。如果您的主機不使用 UTC,可能會發生這個問題。

我如何知道我的 CPU 是否支援 Milvus?

Milvus 的運算操作取決於 CPU 對 SIMD (Single Instruction, Multiple Data) 延伸指令集的支援。您的 CPU 是否支援 SIMD 延伸指令集,對 Milvus 的索引建立和向量相似性搜尋至關重要。確保您的 CPU 至少支援下列其中一種 SIMD 指令集:

  • SSE4.2
  • AVX
  • AVX2
  • AVX512

執行 lscpu 指令檢查您的 CPU 是否支援上述 SIMD 指令集:

$ lscpu | grep -e sse4_2 -e avx -e avx2 -e avx512

為什麼 Milvus 在啟動時返回illegal instruction

Milvus 要求您的 CPU 支援 SIMD 指令集:SSE4.2、AVX、AVX2 或 AVX512。CPU 必須至少支援其中之一,以確保 Milvus 正常運作。在啟動時返回illegal instruction 錯誤,表示您的 CPU 不支援上述四種指令集中的任何一種。

請參閱CPU 對 SIMD 指令集的支援

我可以在 Windows 上安裝 Milvus 嗎?

可以,您可以從原始碼或二進位套件編譯在 Windows 上安裝 Milvus。

請參閱在 Windows 上執行 Milvus了解如何在 Windows 上安裝 Milvus。

我在 Windows 上安裝 pymilvus 時出錯。我該怎麼做?

請嘗試使用下列指令更新 pymilvus 到最新版本。

pip install --upgrade pymilvus

我可以在斷線時部署Milvus嗎?

是的,您可以在離線環境下安裝 Milvus。更多資訊請參閱離線安裝 Milvus

我在哪裡可以找到 Milvus 產生的日誌?

Milvus 日誌預設列印到 stout (標準輸出) 和 stderr (標準錯誤),然而我們強烈建議在生產中重定向您的日誌到一個持久卷。要這樣做,請更新milvus.yaml 中的log.file.rootPath 。如果您使用milvus-helm 圖表部署 Milvus,您也需要先透過--set log.persistence.enabled=true 啟用日誌持久化。

如果你沒有變更設定,使用 kubectl logs 或 docker logs CONTAINER 也可以幫你找到日誌。

我可以在插入資料之前,先為一個區段建立索引嗎?

可以。但我們建議您在為每個區段建立索引之前,先分批插入資料,每批不應超過 256 MB。

我可以在多個 Milvus 實體中共用一個 etcd 實體嗎?

是的,您可以在多個 Milvus 實例中共用一個 etcd 實例。要做到這一點,您需要在啟動每個 Milvus 實例之前,將etcd.rootPath 改為每個實例配置文件中的單獨值。

我可以在多個 Milvus 實例中共用一個 Pulsar 實例嗎?

是的,您可以在多個 Milvus 實例之間共享一個 Pulsar 實例。要這樣做,你可以

  • 如果在你的 Pulsar 实例上启用了多租户,考虑为每个 Milvus 实例分配一个单独的租户或命名空间。要做到這一點,您需要在啟動 Milvus 實例之前,將其配置檔中的pulsar.tenantpulsar.namespace 改為每個實例的唯一值。
  • 如果您不打算在 Pulsar 實例上啟用多租戶功能,請考慮在啟動 Milvus 實例之前,將配置檔案中的msgChannel.chanNamePrefix.cluster 變更為每個實例的唯一值。

我可以在多個 Milvus 實例中共用一個 MinIO 實例嗎?

是的,您可以在多個 Milvus 實體之間共用一個 MinIO 實體。要做到這一點,您需要在啟動每個 Milvus 實例之前,將minio.rootPath 改為每個 Milvus 實例在配置文件中的唯一值。

如何處理pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')> 錯誤訊息?

錯誤訊息Illegal uri [example.db] 表示您嘗試使用早期版本的 PyMilvus 連線到 Milvus Lite,而早期版本的 PyMilvus 並不支援此連線類型。要解決這個問題,請將你的 PyMilvus 安裝升級到至少 2.4.2 版,它包含了對連線到 Milvus Lite 的支援。

您可以使用下列指令升級 PyMilvus:

pip install pymilvus>=2.4.2

為什麼我得到的結果少於我在搜尋/查詢中設定的limit

有幾個原因可能會導致您收到的結果比您指定的limit 少:

  • 資料有限:資料集中可能沒有足夠的實體來滿足您所要求的限制。如果集合中的實體總數少於限制,您自然會收到較少的結果。

  • 重複的主鍵:Milvus 在搜尋期間遇到重複的主索引鍵時,會優先處理特定的實體。此行為依據搜尋類型而有所不同:

  • 查詢 (完全匹配):Milvus 選擇具有匹配 PK 的最新實體。 ANN 搜尋:Milvus 選擇相似度得分最高的實體,即使實體共享相同的 PK。 如果您的集合有許多重複的主索引鍵,此優先順序可能會導致比限制更少的唯一結果。

  • 匹配不足:您的搜尋篩選表達式可能過於嚴格,導致符合相似性臨界值的實體較少。如果為搜尋設定的條件限制性過高,就不會有足夠的實體符合,導致結果比預期的少。

MilvusClient("milvus_demo.db") gives an error: ModuleNotFoundError: No module named 'milvus_lite'.這是什麼原因造成的,該如何解決?

當您嘗試在 Windows 平台上使用 Milvus Lite 時,會發生此錯誤。Milvus Lite主要是為Linux環境設計,對Windows可能沒有本機支援。

解決方法是使用 Linux 環境:

  • 使用 Linux 作業系統或虛擬機器來執行 Milvus Lite。
  • 此方法可確保與函式庫的相依性及功能相容。

Milvus 中的 "Length exceeds max length" 錯誤是什麼?

Milvus 中的 "Length exceeds max length "錯誤發生在資料元素的大小超過集合或欄位的最大允許大小時。以下是一些範例和解釋:

  • JSON 欄位錯誤:<MilvusException: (code=1100, message=the length (398324) of json field (metadata) exceeds max length (65536): expected=valid length json string, actual=length exceeds max length: invalid parameter)>

  • 字串長度錯誤:<ParamError: (code=1, message=invalid input, length of string exceeds max length. length: 74238, max length: 60535)>

  • VarChar 欄位錯誤:<MilvusException: (code=1100, message=the length (60540) of 0th VarChar paragraph exceeds max length (0)%!(EXTRA int64=60535): invalid parameter)>

要了解並處理這些錯誤:

  • 瞭解len(str) 在 Python 中代表字元數,而不是以位元組表示的大小。
  • 對於以字串為基礎的資料類型,例如 VARCHAR 和 JSON,使用len(bytes(str, encoding='utf-8')) 來決定實際大小(以位元組為單位元組),也就是 Milvus 使用的 "max-length"。

Python 中的範例:

# Python Example: result of len() str cannot be used as "max-length" in Milvus 
>>> s = "你好,世界!"
>>> len(s) # Number of characters of s.
6
>>> len(bytes(s, "utf-8")) # Size in bytes of s, max-length in Milvus.
18

pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')>.這是什麼原因造成的,該如何解決?

這個錯誤表示您嘗試使用不支援的早期版本 pymilvus 連線到 Milvus Lite。要解決這個問題,請將您的 pymilvus 安裝升級到至少 2.4.2 版本。這個版本支援連線到 Milvus Lite。要升級,請使用下列指令:

pip install pymilvus>=2.4.2

還有問題嗎?

您可以

  • 查看 GitHub 上的Milvus。隨時提出問題、分享想法並幫助他人。
  • 加入我們的Milvus 論壇Discord 頻道,尋找支援並參與我們的開放原始碼社群。

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?