প্রকল্প সম্পর্কে

turbovec হল একটি ভেক্টর ইনডেক্স যা রাস্টে বাস্তবায়িত এবং বাইন্ডিংয়ের মাধ্যমে পাইথনে উন্মুক্ত। এটি Google Research-এর TurboQuant অ্যালগরিদমের উপর নির্মিত, যা একটি ডেটা-অব্লিভিয়াস কোয়ান্টাইজেশন পদ্ধতি; এতে নরমালাইজেশন, একটি নির্দিষ্ট র্যান্ডম রোটেশন, ডিস্ট্রিবিউশন-ভিত্তিক Lloyd-Max স্কেলার কোয়ান্টাইজেশন, বিট-প্যাকিং এবং দৈর্ঘ্য-পুনর্নরমালাইজড ইননার-প্রোডাক্ট স্কোরিং ব্যবহৃত হয়। প্রকল্পটি মেমরি-সীমাবদ্ধ, কম-লেটেন্সি লোকাল ভেক্টর সার্চের লক্ষ্যে তৈরি এবং কোনো ম্যানেজড সার্ভিসের প্রয়োজন হয় না। প্রধান TurboQuantIndex একটি ডাইমেনশন এবং বিট-প্রস্থ দিয়ে তৈরি হয়, যেখানে ২-বিট এবং ৪-বিট ইনডেক্সিং নথিভুক্ত। ভেক্টরগুলো আলাদা প্রশিক্ষণ ধাপ, প্যারামিটার-টিউনিং ফেজ বা ইনডেক্স পুনর্নির্মাণ ছাড়াই ক্রমবর্ধমানভাবে যোগ করা হয়। পাইথন ইনপুট float32 NumPy অ্যারে ব্যবহার করে; অন্যান্য ডেটাটাইপ নীরবে রূপান্তর না করে প্রত্যাখ্যান করা হয়। API add, search, write, load এবং sync অপারেশন সরবরাহ করে। সার্চ অনুরোধকৃত k নিকটতম ফলাফলের জন্য স্কোর এবং সূচক ফেরত দেয়। IdMapIndex স্থিতিশীল uint64 বাহ্যিক আইডি, add_with_ids এবং ডকুমেন্টেশন অনুযায়ী আইডি দ্বারা O(1) অপসারণ যোগ করে। এটি একই পুরো-ফাইল write/load ওয়ার্কফ্লো এবং ইনক্রিমেন্টাল sync পার্সিস্টেন্স সমর্থন করে। sync পদ্ধতিটি পূর্ববর্তী sync-এর পর থেকে শুধুমাত্র পরিবর্তনগুলো সংরক্ষণ করে, প্রতি কলের জন্য একটি fsync ব্যবহার করে এবং পুরো ইনডেক্স পুনর্লিখন ছাড়াই ছোট অ্যাপেন্ড বা অপসারণের অনুমতি দেয়। সম্পূর্ণ স্ন্যাপশটের জন্য write এবং load উপলব্ধ থাকে। ফিল্টারড বা হাইব্রিড রিট্রিভাল একটি ID অ্যালোলিস্ট বা স্লট বিটমাস্কের মাধ্যমে সমর্থিত যা সার্চে পাস করা হয়। অ্যালোলিস্টটি বাহ্যিক সিস্টেম যেমন SQL, BM25, অ্যাক্সেস-কন্ট্রোল লজিক বা সময় ফিল্টার থেকে আসতে পারে। README-তে বলা হয়েছে যে ফিল্টারিং SIMD সার্চ কার্নেলের ভিতরে প্রয়োগ করা হয়, অনুমোদিত ভেক্টর ছাড়া ব্লকগুলো এড়িয়ে যাওয়া হয় এবং ফলাফলের সংখ্যা min(k, অনন্য অনুমোদিত ভেক্টরের সংখ্যা) হয়। সার্চ হাতে-লেখা SIMD কার্নেল ব্যবহার করে যার রানটাইম ফিচার নির্বাচন রয়েছে। নথিভুক্ত লক্ষ্যগুলির মধ্যে ARM NEON SDOT/SMMLA, x86 AVX-512 VNNI এবং vpermb, পাশাপাশি AVX2 এবং স্কেলার ফলব্যাক অন্তর্ভুক্ত। রাস্ট বিল্ডটি x86-64-v2 বেসলাইন ব্যবহার করে এবং সমর্থনকারী হার্ডওয়্যারে নতুন কার্নেল সক্ষম করে। বর্ণিত বেঞ্চমার্ক কনফিগারেশনে Rayon-এর মাধ্যমে মাল্টি-থ্রেডিং সরবরাহ করা হয়। একটি ঐচ্ছিক TQ+ ক্যালিব্রেশন ধাপ ইনডেক্সিংয়ের আগে একটি প্রতিনিধি নমুনা থেকে প্রতি-সমন্বয় শিফট এবং স্কেল মান ফিট করতে পারে। README-এ এটি সীমিত-মাত্রিক বা কম-বিট সেটিংসে, বিশেষত GloVe-শৈলী এমবেডিংয়ে, রিকল উন্নত করার হিসাবে বর্ণনা করা হয়েছে, যখন পরবর্তী সংযোজনের জন্য পুনর্ব্যবহারযোগ্য থাকে। একটি অ-ক্যালিব্রেটেড ইনডেক্স সাধারণ TurboQuant ব্যবহার করে। পাইথন ইনস্টলেশন pip-এর মাধ্যমে এবং রাস্ট ব্যবহার cargo add turbovec-এর মাধ্যমে উপলব্ধ। প্রকল্পটি LangChain, LlamaIndex, Haystack এবং Agno-এর জন্য ঐচ্ছিক ইন্টিগ্রেশন নথিভুক্ত করে, যা তাদের ইন-মেমরি বা রেফারেন্স ভেক্টর স্টোরের ড্রপ-ইন প্রতিস্থাপন হিসাবে অবস্থান করে। এই ইন্টিগ্রেশনগুলো ঐচ্ছিক প্যাকেজ এক্সট্রার মাধ্যমে ইনস্টল করা হয়। রিপোজিটরিতে turbovec-কে FAISS IndexPQFastScan এবং IndexPQ কনফিগারেশনের সাথে তুলনা করে প্রজেক্ট-চালিত বেঞ্চমার্ক অন্তর্ভুক্ত। README-তে পরীক্ষিত ARM এবং x86 কনফিগারেশনে কম মেমরি ব্যবহার, দ্রুত পরিমাপিত সার্চ, ইনসার্ট এবং ডিলিট লেটেন্সি পরিমাপ, রিকল চার্ট, কম্প্রেশন ফলাফল এবং সেভ/লোড টাইমিং রিপোর্ট করা হয়েছে। এগুলো স্বাধীন তৃতীয়-পক্ষের পরিমাপ নয়, বরং সরবরাহকৃত বেঞ্চমার্ক ফলাফল। GloVe এবং OpenAI এমবেডিং ডেটাসেট ডাউনলোড, রিকল/স্পিড/কম্প্রেশন স্যুট চালানো, JSON ফলাফল সংরক্ষণ এবং চার্ট পুনর্জন্মের স্ক্রিপ্ট বেঞ্চমার্ক ডিরেক্টরিতে অন্তর্ভুক্ত।