Галоўная / Артыкулы

turbovec: сціскаем эмбедынгі RAG у 16 разоў з TurboQuant на Rust

turbovec пераносіць TurboQuant ад Google на Rust і памяншае індэксы эмбедынгаў RAG у 16 разоў без навучання. Дзе ён перамагае FAISS і калі лепш падыдзе іншы інструмент.

Выдавец: REACTAPP.TOP10 хв чытання2219 слоў

Крыніцы: turbovec for RAG: A Practical Guide to Faster, Smaller Vector Search

Узьмім прыклад рэальна практычная схема апрацоўкі дакументаў: дзесяць мільйонаў дакументаў, кожны з якіх мае вкладку з модулем OpenAI text-embedding-3-small з 1536 вымірамі і зберагаецца у фармаце float32. Яшчэ перш чым дадаецца хоць адзін байт метаданых, самыя вектары займаюць 31 ГБ. Пры такым розмерэ пытанне „Дзе гэта будзе працаваць?“ вяртаецца не простаю запытаннем — гэта значыць патрэбна машына ў воблаку з велікай колькасцю памяці, якая, шчыра кажучы, знаходзіцца у іншага, а таксама всі прыемлівыя наследкі ў вопысах прыватнасці і аператыўных задачах.

Якша працаваць з тымі ж дакументамі за дапамогою turbovec з 2 бітамі на вымір, ўся маса дадзеных зменшыцца да апошніх 4 ГБ, што лягае ў RAM ноутбука з большым запасам. У наступных частках адпаведнага тэксту будзе пасвячана адпаведнае поясненне таго, чаму гэта работае, калі гэты інструмент ёсць правым выборам, а калі іншы інструмент паслужыць лепшая.

Што такое turbovec

turbovec — гэта вектарный індэкс на мове Rust з падключэннямі для Python, ліцензаваныя па прынцыпах MIT; на момент напісання гэтага тэкста ён меў або-блізу 950 зірак у GitHub. У ём утылізуецца алгорытм TurboQuant, які быў створаны дактарантамі з Google Research і NYU і прыняты на конферэнцыі ICLR 2026.

Ёсць адна важлівая дэталі, якую варта ведаць: Google ніколі не выдала код асабліво для свога алгорытму, таму спільнатэка взялася за ўсё сама. Праект RyanCodrai/turbovec спрамованы на вектарны пошук, тое ў чым ён выкорыстоўваецца для выкарыстоўвання даных, тады як адзінэцкі праект hackimov/turboquant-kv прыменяе тую ж ідэю для стыснення кэша KV у мовных мадэлях. Оба праекты ўжо ўтварыліся як незалежныя праекты з відкрытым кодам.

Іншымі словамі, выкарыстоўванне turbovec означае выкарыстоўванне рэалізацыі алгорытму з Google Research, створанай спільнайяўпрацай, і на тых тэстах, якія сама команда FAISS выкарыстоўвае, ён перамагае FAISS ад Meta, які давно ўжо ўважаецца стандартам для пошуку вектараў у памяці.

Як працюе алгорытм

Калі пазнаёмся з яго працэю, бачым, што метод на дзівную лепы. Ён выконваецца за чатыры крокі.

1. Раздзеліце дужыну ад напрамку

Кожны вектар-эмбедынг мае велічыну (яго норму L2) і напрамак. Выдзерніце велічыну і зберагучы яе як адзін чысло з паводлівым знакам на кожны вектар, а тое, што застаецца, — гэта напрамак дужынай 1 на высака-вымірнай сферы. Гэта можа здавацца незначным, але ўсё, што будзе пасля, залежыць ад гэтага, таму што вектары, якія знаходзяцца на паверхні сферы, можна обрабатваць за дапамою геаметрыі.

2. Аберніце наэнтэзіянальна

Далей кожны вектар умножаецца на тую ж самую адзінаковую абяротную матрыцу, якая генеруецца адно раз з адкладанням QR матрыцы гаусавай матрыцы. Гэты крок на першы пагляд здаецца чымсь на кшталт магічнага труку.

Інтуіцыя: у высокіх вымерах абярот за дапамою вэлкіх цыфр робіць распад кожнай коордынаты прыемлемым для прагнозавання. Пасля абяроту кожная коордыната кожнага вектара парадкуюцца за вядомым, ўздымлёным распадам Бета, які з ростам вымераў прыбліжаецца да гаусавага. Распад застаецца тым жа незалежна ад вхідных дадзеных. Прававыя дакументы, атрыбуты продуктав і медычная літэратура ўсе стаюць статыстычна схожымі, таму гэты прыем не залежыць ад дадзеных. Матэматыкі называюць гэтаю концентрацыяю меры на сферы, і гэта пояснюе, чаму не патрэбны практычныя пасэсы: абярот выканае ту самую працу, яку інакш выканаў бы натрэнаваны кодбук.

3. Выберыце лепшыя катэгорыі

Знаючы распад кожнай коордынаты, можна загадзя вырахаваць найкрашчы спосаб разбівання значэнняў на групы. Двухбітная квантызацыя дае чатыры групы на кожную коордынату, а чатырохбітная — шанцзе. Гэты метод называецца скэлярной квантызацыяю Lloyd-Max і адпавядае на простае пытанне: пры вядомым распадзе, дзе трэба разместы лініі дзелення, каб сярэжныя паклёныя памылкі былі як магчыма ніжэйшыя? Калі распад вядомы, адпаведны адказ даецца у закрытай форме. А так як распад пасля ротацыі ідэнтычны для всіх вектараў, групы вылічваюцца на адной матэматыцы, а не на падставе вашых дадзеных.

4. Упакоўка бітоў

Кожная коордыната цяпер являе сабою маленькое цэлое чысло: ад 0 да 3 пры двухбітной квантызацыі або ад 0 да 15 пры чатырохбітной. Пры ўпакоўцы 1536-вымірны вектар, які ў фармаце float32 займаў 6,144 байта, пры двухбітной квантызацыі захопівае 384 байта, а пры чатырохбітной — 768 байта. Гэта 16 разоў і 8 разоў большая ступень стыснення.

Пошук без распаковкі

Запіты ніколі не дэкомпрэсуюць збераганыя даныя. Запіт адначаса перамешчаецца ў той жа прастор, а пасля прагледваецца безпосерэдна з кодамі, квантаванымі з вялікім запасам, за дапамою загадзя створаных табелей абырання. Внутрэшній цыкл выкарыстоўвае інструкцыі SIMD: NEON для ARM, AVX-512BW для сучасных x86, а таксама AVX2 як альтэрнатыва.

Самэльце бібліятэка, на адміністрацыю ад алгорытму, здобывае свою цэннасць. Яе ручная рэалізацыя інструкцый SIMD працюе на 12–20 процэнтаў быстрэй за FastScan з бібліятэкі FAISS на ARM, а на архітэктурах x86 даганяе яго або перавыплывае яго.

За гэтым методам таксама стоіць тэорычны рэзультат. У стацыянцы TurboQuant практычна падтверджваецца, што ступень спякання дадзеных залічваецца ў межах прыблізна 2,7 раза ад ніжней межы, вялікай за межу спякання па тэорыі інформацыі, заданай Шанноном. Проста кажучы: тэорыя інформацыі вялічына, на якую можна стыснуць дадзеныя, не прымусіваючы ўтрачыць інфармацыю, а TurboQuant дасягае 2,7 раза гэтай межы без жадных трэнінгаў. Ніхто не можа парадоксальна павысіць качэнне для заданага бюджэту бітоў, і гэта падтверджваецца формальным доказам у стацыянцы.

Тры сцэны, калі гэта корыстна

Памяць, якая падходзіць

Вернімся да пачатковых цыфраў: 31 ГБ для фармата float32 проты 4 ГБ за дапамогою turbovec у рэжыме 2-х бітоў. Нямаць такога маленькага індэкса змінюе можлівасці.

  • Ён можа знаходзіцца на тым жа серверэ, што і аплікацыя, без неабязковай окрэмай інстанцыі базы дадзеных вектараў.
  • Распрацоўшчыкі можаць запускаць яго на ноутбуках для локальных тэстаў.
  • Дыявалізаваюцца дышэўнейшыя варыянты памяці ў воблаковых інстанцыях, што значна скарочвае выклікі.
  • Весь індэкс застаецца ў RAM, без запісу на дыск і без разбівання на часткі між вузламі.

Для калекцыяў у дыяпазоне 100 тыс. да 100 млн вектараў, які пакрывае большасць баз знанняў, сайтаў дакументацыі, архіўаў падтрымкі і каталагаў продуктам, гэта і ёсць разлік межаю часу, калі трэба праектаваць сістэму з урахоўваннем вектарнага індэкса, і часу, калі можна ставіцца да яго як да звычайнага об’екта Python.

Прыватнасць і сэтапы з абсалютным ізоляцыям

Працэсы выкарыстоўвання індэкса выклікаюць серьёзныя проблемы з прыватнасцю. Два атакі ілуструюць гэта:

  • BadRAG досягае 98,2% рэйтынгу успеху, отруюючы лішы 0,04% корпусу дакументаў за дапамогою рэтэльна створаных адварсарыянскіх дакументаў.
  • Vec2Text вярнэўшы короткія первісныя тэксты з іх эмбеддынгаў, правільна ідэнтыфікуе іх у 92% случаў.

Эмбеддынгі не маюць крыптаграфічнага захавання, таму кожны, у каго ёсць права на чытанне дадзейнаў у сховішчы вектараў, можа вярнуць тое, што было уключана. Кожны вызов хмарнага сховішча вектараў, кожны запіт embed() да OpenAI і кожны запіт upsert() да Pinecone — гэта моменты, калі дадзеныя пакідаюць вашу зону захавання.

Большасць рэальных рэалізацый ужо ўжо працуюць без жадных звязоў з інтэрнэтам. У UC San Diego сістэма Onyx обслужвае 37 000 корыстувачаў без патрэбы ў інтэрнэце, а Ramp, Thales, L3Harris і Astranis выкорыстоўваюць падобныя рашэнні. Слоган самай компаніі turbovec — «ніякіх кераваных служб, ніякіх дадзэйнаў, якія пакідаюць ваш камп’ютар чыста VPC» — чыста паслугоўвае гэй групе. Яго можна суставіць з локальна размешчаным модэлем эмбеддынга, такім як BGE-M3 чыста BGE-large-en-v1.5, і тады працэс выкарыстоўвання дадзэйнаў не выконвае жадных звязоў з зовнішнім сеткам.

Няма кнігі кодаў для навчання

Гэты прынтэль ёсць структурным і лёгка ўпусціць з увагі. Класычная квантызацыя продуктав, тое самае PQ у IndexPQ і IndexIVFPQ, выклікае патрэбу ў кнізе кодаў, трэнаванай на рэпрэзентатыўных даных. Калі даныя змінююцца — напрыклад, з’яўляюцца новыя катэгорыі продуктав, новыя мовы або новыя тыпы дакументаў — кніга кодаў стае застарэлай, і практычнасць методу падвяршаецца.

TurboQuant зовсім не выкарыстоўвае кнігу кодаў. Адбываецца адбытковая ротацыя, якая дазволяе матэматычным формулам працаваць незалежна ад таго, як выглядаюць вхідныя даны. У практыцы гэта значыць:

  • Работа з потокавым дадзенням вядзецца чыста, без неабходнасці паказовага ператрэнавання.
  • Змена модэляў укладкі, ад OpenAI да BGE да Voyage, не вымагае перзначэння індэкса з нуля.
  • Індэксы для калькуляцыі праваў на выкарыстоўванне не патрабуюць калібравання для кожнага корыстувальніка.
  • Проблема «холаднага старта», калі недастатнька колькасць вектараў для стварэння адпаведнай кнігі кодаў, знікла.

Для сістэм, які развіваюцца паступова або включаюць разныя тыпы дакументаў, такая простата ёсць справжнім прынтам у працы.

Калі варта выбраць іншы спосаб

Дзеяныя шаблоны пошуку лепшая застосаваць у іншых сцэнарыях, і лепшая чыста сказаць пра гэта.

  • Пошук з высокім рывнем відтворэння рэзультатаў. HNSW з вектарамі цалай точнасці застаецца золатым стандартам. turbovec пасвячае калькі пунктав высокага рывня відтворэння ў борг за 16-кратную стыснення. Гэта прыемна для большай часткі задач RAG, але стварае проблемы, калі пропуск рэзультата мае вялікія наследкі.
  • Фільтрацыя метаданаў і гібрыдны пошук. turbovec ёсць толькі індэкс, без базы дадзенаў. Такія запіты, як «знайсці вектары, блізкія да X, толькі ў дакументах з атрыбутам compliance, якія былі вырэджаны пасля гада 2025», выклікаюць патрэбу ў справжней базе вектарных дадзенаў, такой як Qdrant, Weaviate, Milvus або pgvector.
  • Нізкадымензійныя эмбеддынгі (256 дымэнзій або менейш). Як сама інструкцыя turbovec паведамляе, ў прыкладзе GloVe з d=200 ён адстае ад FAISS на 3-6 пунктав пры выкарыстоўванні методу recall, таму што апрыксімацыя з Beta на Гаусса ёсць болей слабой, калі дымэнзій мало, і перадчынства тэорыі зменшаюцца. Калі сістэма выкарыстоўвае старэйшыя або менш дымэнзійныя мадэлі эмбеддынга, FAISS ёсць безпечнейшым выборам.
  • Масштаб мільярда вектараў. turbovec абрабатвае кожны стыснуты вектар абоўсюды. Гэта падходзіць да прыблізна 100 мільйонаў вектараў. Перад гэтым розмерам патрэбна дадатковая абрабоцкая тэхніка, такая як IVF або партыцыяцыя на адной з графаў, а turbovec гэта не падтрымляе.
  • Перадача на адпаведныя сервісы. Команды, якія хочуць кераваны база дадзеных вектараў з ключам API, знайдуць, што turbovec ёсць непаслужыцельным інструментам, незалежна ад якосці яго рэалізацыі.

Пачатак работы

Для запошуку ў памяці для 100 К да 100 М вектараў з размерамі 384 або больш, а таксама для команды, якая гатова адмаўляць сабе інфраструктуру, прыклад практычнаг падходу: запісціце з PyPI:

pip install turbovec

Прэекты на Rust аддуюць крэйт у замене:

cargo add turbovec

Для базовага выкарыстоўвання патрэбна калькі ліній, каб стварыць і запытаць індэкс:

from turbovec import TurboQuantIndex

# Build the index
index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(document_embeddings)
# Search
scores, indices = index.search(query_embedding, k=10)
# Persist
index.write("kb.tq")
loaded = TurboQuantIndex.load("kb.tq")

Гэта ўсё, што трэба для простага случая.

Выбір шырыні біта

Эта самая значныя настройка, а альтэрнатывы ў яе досыць простыя.

  • 2-бітны: 16 разоў большая ступень стыснення па супэрнатыўнасці да float32, большая розніца ў рэзультатах адзыскання і большая чуласць да высоты вектора.
  • 4-бітны: ступень стыснення 8 разоў, пры чым рэзультаты адзыскання практычна адпавядаюць FAISS для 1536- і 3072-высотных вектораў у OpenAI. Оба варыянты доходзяць да значэння 1,0 пры k ад 4 да 8.

Розумны стандартны выбар — 4-бітны. Пераходзіце на 2-бітны толькі пасля таго, як пераканаецеся ў рэальным тыражы мемарыяў і ў адзысканні рэзультатаў для вашых сабецкіх запытанняў.

Выбір тыпу індэкса

Існуе два варыянты. TurboQuantIndex адрэсуее вектары па ўпорадку ўведэння, што робіць ўсё простым і трохі шырэй за час адпаведнай дзеянні, калі ID-ы проста следуюць за порадкам ўведэння. IdMapIndex дазваляе выкарыстоўваць саве uint64 ID-ы і вычысляе елементы за сталячы час, таму ён падходзіць, калі ключы выкарыстоўваюцца з базы дадзенаў або дакументы вычысляюцца.

Для большасці сістэм RAG IdMapIndex ёсць лепшым стандартным варыянтом, адколькі ID-ы з базы дадзенаў застаюцца пасля вычыслення і перзбудовы, не нарабляючы проблем з зовнішнімі апыланнямі.

from turbovec import IdMapIndex
import numpy as np

index = IdMapIndex(dim=1536, bit_width=4)
index.add_with_ids(vectors, np.array([1001, 1002, 1003], dtype=np.uint64))
scores, ids = index.search(query, k=10)  # returns your IDs
index.remove(1002)  # O(1) by ID

Інтэграцыя модэляў

Для аператыў з абмежаным доступам да інтэрнэту модэль інкапсулявання павінна працаваць локальна, адтак як выклік API OpenAI паскладжвае перавагі, якія дае прыватнасць. Две комбінацыі працавалі эфектыва:

  • BGE-M3 з turbovec. Моцны багатыязычны модэль, які працуе локальна і ўзяты як стандарт для международных баз знанняў.
  • BGE-large-en-v1.5 з turbovec. Толькі для англійскай мовы, меншы і шырэй, і ўзяты як стандарт для англійскай документацыі.

Калі прыватнасць не ўсё такі важлівы трэбаванне, text-embedding-3-small (1536 вымераў) або text-embedding-3-large (3072) ад OpenAI працуюць добра з turbovec. Толькі памятайце, што саме выклік інкапсулявання з воблака, а не сам індэкс, ёсць прычыной вытэкання дадзэнняў.

Інтэграцыя з фрэймворкамі

turbovec адказвае за першасортную інтэграцыю з LangChain, LlamaIndex і Haystack:

pip install turbovec[langchain]
pip install turbovec[llama-index]
pip install turbovec[haystack]

Стак, які ўжо створэны на аднай з эйх сістэм, должны выкорыстоўваць гэты падход, адколькі ён супакоўвае максымальна мало працы.

Ліміты, якія трэба памятаць

  • Адна машына, у памяці. Не існуе розпадзеленага рэжыму, таму горызонтальнае масштабаванне значыць шардаванне на роўні аплікацыі.
  • Повны скан. Кожны стыснуты вектар скануецца пад кожны запіт. SIMD дапамагае падтрымваць высокую швальнасць да прыблізна 100 мільйонаў вектароў, а пасля гэтага патрэбны методы тыпу IVF або графовыя структуры.
  • Залежнасц ад апаратуры. Прырост на 12–20 процэнтав быў зафіксаваны на чыпах серыі Apple M. Старэйшыя чыпы ARM або x86 без падтрымкі AVX-512 даўаюць меншы прырост, хоця ў большасці конфігурацыяў яны все ж лепшыя за FAISS.
  • Эфектыўнасц пры нізкім колькістве выміраў. Пры менш чым 256 вымірах FAISS перамагае з явным перадзеем. Метод дастаёна ў сваім найкрашчым стане пры 768 і больш вымірах, якія выдаюць сучасныя мадэлі эмбедынгу.

Большыя тэндэнцыі

turbovec заполняе адзін конкрэтны ніш: пошук вектараў у памяці, корпусы срэдніх размераў, інфраструктура, якая належыць вам, а таксама размеры, якія выдаюць сучасныя мадэлі эмбедынга. Ён не прагне заменіць Qdrant чыра Pinecone. Гэта болей нізкія будуючыя елементы для таго месца, дзе іншае была бы выкарыстоўвана FAISS, з лепшым стысненнем і без практыкі навчання.

Історыя стварэння, можа, ўсё ж цікавейшая частка. На конферэнцыі ICLR 2026 была прынята статыя чатырох автараў з Google Research; автары не выпусцілі коду, а два развіццявальнікаў зямлёйскай спяльноты незалежна створылі рэалізацыі — адну для стыснення KV-cache і другую для пошуку вектараў. Рэалізацыя для пошуку вектараў перамагае існуючыя раўнаважнікі на сэрвісах тых сэрвісаў самымі ўласнымі крытэрыямі якосты.

Шлях адаптавання акадэмічных алгорытмав у практычныя рашынкавыя раёшанні, а пасля — у бібліятэкі высокай якосці, якія працуюць лепшая за стандартныя інструменты, будзе павтарацца, адколькі рэзультаты даследаванняяў развіваюцца быстрэй, чым віробнікі можаць іх ператворыць у готовыя продукты. turbovec — адны з такіх прыкладаў. Розумеўшы, як ён працуе і дзе ён паслужыць, можна корыстацца гэтымі знаннямі для тых, хто сёньдзе праектуе сістэмы пошуку.

Супаўзяныя матэрыялы

  • GraphRAG vs Vector RAG: Па чым Vector Search не працуе у масштабе — Vector RAG сталкніваецца з проблемамі ў ізоляцыі частак, логічных выводах між дакументамі і працэсе масштабавання. Пазнакоміцеся з тым, як GraphRAG стварае спецыяльныя структуры і апускі, каб вырашыць гэтыя проблемы, і калі крашчэ выбраць адны з варыянтаў.
  • Усё працэўнае па аблікаванні вектарных баз дадзэнняя для RAG: хранэнне частак, HNSW, IVF і пераранжаванне — Як вектарныя базы дадзэнняя для RAG храняць частакі, шукаюць мільйоны вектараў за дапамогою HNSW і IVF, дадаюць гібрыдны спосаб шукання і пераранжавання, а таксама парабялююць памеры сэмабільнасці.
  • Чы роўна ж патрэбны эмбеддынгі? Спарэння вектарных і безвектарных методаў RAG — У тэстах FinanceBench паўстае спарэння между вектарным і безвектарным методам PageIndex у сцэнарыях адна-документнага, калькі-документнага і з адхыленнямі, з адпаведнымі тэстамі значамасці.