पाठ 23 / 28
क्षमता योजना: Memory ही बजट है
Hardware चुनने से पहले RAM, disk और replicas का अनुमान लगाएँ।
Vectors + graph + payload, प्रतियों से गुणा
चार हिस्सों में अनुमान लगाएँ: vector डेटा (vectors × आयाम × प्रति संख्या bytes), index overhead (HNSW के लिए लगभग प्रति vector 2 × M × 4 bytes links, साथ में bookkeeping), payload/metadata (पाठ रखने पर अक्सर महत्वपूर्ण) और replicas (प्रतियों की संख्या से गुणा)। फिर वृद्धि, merges और OS cache के लिए गुंजाइश (30 से 50%) जोड़ें। न समाए तो: quantise करें (int8, product quantisation) और पुनः-scoring के लिए पूर्ण-परिशुद्धता vectors disk पर रखें; कम आयाम या छोटा मॉडल उपयोग करें; payload पाठ दूसरे store में रखें; shard करें; या disk-आधारित index उपयोग करें। यह मोटा योजना मॉडल है: असली engines अपना overhead जोड़ते हैं, इसलिए hardware ख़रीदने से पहले प्रतिनिधि नमूने पर load test से पुष्टि करें।
क्षमता अनुमान, चलाकर
मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। सूत्र vectors, अनुमानित HNSW link overhead (M=16) और प्रति record 500 bytes payload जोड़ता है, फिर 2 replicas के लिए दोगुना करता है। एक करोड़ 768-आयामी float32 vectors को एक प्रति के लिए लगभग 37 GB और replicas के साथ 74 GB चाहिए; संख्याएँ int8 में रखने से एक प्रति 14 GB रह जाती है। ये योजना अनुमान हैं, किसी विशिष्ट engine का माप नहीं।
def gb(x): return x / 1e9
def plan(n_vectors, dims, bytes_per=4, hnsw_m=16, replicas=2, payload_bytes=500):
vectors = n_vectors * dims * bytes_per
graph = n_vectors * hnsw_m * 2 * 4 # rough: ~2*M neighbour ids (4 bytes each) per vector
payload = n_vectors * payload_bytes
one_copy = vectors + graph + payload
return one_copy, one_copy * replicas
for n, d, b in [(1_000_000, 768, 4), (10_000_000, 768, 4), (10_000_000, 768, 1), (100_000_000, 384, 1)]:
one, total = plan(n, d, b)
print(f"{n:>11,} x {d} dims, {b} byte/number: one copy {gb(one):7.1f} GB | with 2 replicas {gb(total):7.1f} GB")
Output:
1,000,000 x 768 dims, 4 byte/number: one copy 3.7 GB | with 2 replicas 7.4 GB 10,000,000 x 768 dims, 4 byte/number: one copy 37.0 GB | with 2 replicas 74.0 GB 10,000,000 x 768 dims, 1 byte/number: one copy 14.0 GB | with 2 replicas 27.9 GB 100,000,000 x 384 dims, 1 byte/number: one copy 101.2 GB | with 2 replicas 202.4 GB
त्वरित जाँच: कागज़ी क्षमता अनुमान के बाद क्या करना चाहिए?
- प्रतिनिधि नमूने पर load test से पुष्टि करें
- तुरंत hardware ख़रीदें
- Overhead अनदेखा करें
- Replicas छोड़ें
Answer
प्रतिनिधि नमूने पर load test से पुष्टि करें — Engines अपना overhead जोड़ते हैं; असली माप सूत्रों से बेहतर हैं।