पाठ 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 जोड़ते हैं; असली माप सूत्रों से बेहतर हैं।