[英]OpenSearch compute knn index size properly
我在 AWS 中使用 OpenSearch 服務進行研究。
任務:我想計算索引中 N 條記錄的索引大小。
輸入:我在 AWS [r6g.4xlarge.search] 中只有一個節點,具有 128 個 RAM。 索引定義為:
{
"settings": {
"index": {
"knn": True,
"knn.space_type": "cosinesimil",
'number_of_replicas': 0,
'refresh_interval': -1,
'translog.flush_threshold_size': '10gb',
}
},
"mappings": {
"properties": {
"vector": {
"type": "knn_vector",
"dimension": 512
},
"keyword1": {
"type": "keyword"
},
"keyword2": {
"type": "keyword"
}
}
}
}
我看到強制合並+刷新后我有5個段。
KNN 統計數據如下所示:
{"_nodes": {"total": 1, "successful": 1, "failed": 0}, "cluster_name": "NAME",
"circuit_breaker_triggered": false, "nodes": {
"ID": {"miss_count": 7, "graph_memory_usage_percentage": 34.527355,
"graph_query_requests": 475, "graph_memory_usage": 16981999,
"cache_capacity_reached": false, "graph_index_requests": 5,
"load_exception_count": 0, "load_success_count": 7, "eviction_count": 0,
"indices_in_cache": {
"INDEX_NAME": {"graph_memory_usage_percentage": 34.527355,
"graph_memory_usage": 16981999,
"graph_count": 5}},
"script_query_errors": 0, "script_compilations": 0,
"script_query_requests": 0, "graph_query_errors": 0, "hit_count": 468,
"graph_index_errors": 0, "knn_query_requests": 95,
"total_load_time": 57689947272, "script_compilation_errors": 0}}}
我發現在我的情況下所需的 memory 數量是OpenSearch :1.1 *(4 * 維度 + 8 * M)字節。 其中維度 = 512,M = 16,每條記錄給我 0.0000023936。 現在我在索引中有 7885767 個文檔,它需要 16981999 = ±16GB - 32% 的使用量來自有效 memory。 所以它甚至比公式所說的還要少。
但是,如果我計算可用的 memory,它會給我大約 50GB,例如 128 GB RAM。 根據 AWS 文檔(檢查底線) ,OpenSearch 本身最多占用 32 GB,所以還剩下 96 個。 你能解釋一下如何編寫一個公式來正確估計索引中的文檔數量嗎?
答案很簡單。 如果你只使用 knn 搜索(像我一樣),你可以簡單地增加這個參數來調整你機器的最大 RAM knn.memory.circuit_breaker.limit
設置
您可以從 python (或 elasticsearch api)更改它
import elasticsearch
es = elasticsearch.Elasticsearch(
hosts=["host"],
http_auth=(
"admin",
"admin",
),
timeout=3600,
)
res = es.cluster.put_settings(
{"persistent": {"knn.memory.circuit_breaker.limit": "100%"}}
)
print(res)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.