Да ли имате масивне ЛЛМ позиве у вашем току трансформације података? Можда ће моћи да помогне. Покренут је ултра-производним Руст мотором и сада подржава адаптивно избацивање из кутије. Ово је побољшало промет за ~5× (≈80% брже време покретања) за В-нативе радне токове. И најбоље од свега, не морате мењати било који код јер се пацкинг дешава аутоматски, прилагођавајући се вашем саобраћају и задржавајући ГПУ-је у потпуности искоришћене. CocoIndex Ево шта смо научили док градимо подршку за адаптивну партицију у Цоцоиндекс-у. Али прво, хајде да одговоримо на нека питања која могу бити на вашем мешању. Zašto batching ubrzava obradu? This consists of all the preparatory and administrative work required before the actual computation can begin. Examples include GPU kernel launch setup, Python-to-C/C++ transitions, scheduling of tasks, memory allocation and management, and bookkeeping performed by the framework. These overhead tasks are largely independent of the input size but must be paid in full for each call. Fixed overhead per call: This portion of the computation scales directly with the size and complexity of the input. It includes floating-point operations (FLOPs) performed by the model, data movement across memory hierarchies, token processing, and other input-specific operations. Unlike the fixed overhead, this cost increases proportionally with the volume of data being processed. Data-dependent work: Када се ставке обрађују појединачно, фиксни оверхеад се понавља за сваку ставку, што може брзо доминирати укупним радним временом, посебно када је израчунавање по елементу релативно мало. Насупрот томе, обрада више ставки заједно у сетовима значајно смањује утицај по елементу овог оверхеад-а. Бацкинг омогућава да се фиксни трошкови амортизују преко многих ставки, док такође омогућавају хардверске и софтверске оптимизације које побољшавају ефикасност рада зависног од података. Ове оптимизације укључују ефикасније коришћење ГПУ цеви, бољу употребу кеша и мање лансирања језгра, што све доприноси већем пропусту и нижој укупној латен Bating značajno poboljšava performanse optimizovanjem računalne efikasnosti i korišćenja resursa. Each function or API call carries a fixed overhead — GPU kernel launches, Python-to-C/C++ transitions, task scheduling, memory management, and framework bookkeeping. By processing items in batches, this overhead is spread across many inputs, dramatically reducing the per-item cost and eliminating repeated setup work. Amortizing one-time overhead: Larger batches allow the GPU to execute operations as dense, highly parallel matrix multiplications, commonly implemented as General Matrix–Matrix Multiplication (GEMM). This mapping ensures the hardware runs at higher utilization, fully leveraging parallel compute units, minimizing idle cycles, and achieving peak throughput. Small, unbatched operations leave much of the GPU underutilized, wasting expensive computational capacity. Maximizing GPU efficiency: Batching minimizes the frequency of memory transfers between CPU (host) and GPU (device). Fewer Host-to-Device (H2D) and Device-to-Host (D2H) operations mean less time spent moving data and more time devoted to actual computation. This is critical for high-throughput systems, where memory bandwidth often becomes the limiting factor rather than raw compute power. Reducing data transfer overhead: Batching pretvara mnoge male, neučinkovite izračune u velike, visoko optimizovane operacije koje u potpunosti iskorištavaju moderne hardverske mogućnosti. Za AI radna opterećenja – uključujući velike jezikovne modele, računarsku viziju i obradu podataka u realnom vremenu – batching nije samo optimizacija; to je neophodno za postizanje skalabilnih performansi na nivou proizvodnje. Kako bating izgleda za normalan Python kod Не-бацхинг код – једноставан, али мање ефикасан Најприроднији начин да организујете цевовод је да обрадите податке комад по комад. for file in os.listdir(directory): content = file.read() chunks = split_into_chunks(content) for chunk in chunks: vector = model.encode([chunk.text]) # one item at a time index.upsert(file_id=file.name, chunk_offset=chunk.offset, vector=vector) Ово је лако прочитати и размишљати о томе: сваки комад тече право кроз више корака. Ручно паковање – ефикасније, али компликованије Можете га убрзати бацкинг-ом, али чак и најједноставнија "само бацк-све једном" верзија чини код знатно компликованијим: # 1) Collect payloads and remember where each came from batch_texts = [] metadata = [] # (file_id, chunk_id) for file in os.listdir(directory): content = file.read() chunks = split_into_chunks(content) for chunk in chunks: batch_texts.append(chunk.text) metadata.append((file.name, chunk.offset)) # 2) One batched call (library will still mini-batch internally) vectors = model.encode(batch_texts) # 3) Zip results back to their sources for (file_name, chunk_offset), vector in zip(metadata, vectors): index.upsert(file_id=file.name, chunk_offset=chunk.offset, vector=vector) Штавише, партиципање свега одједном обично није идеално јер следећи кораци могу почети тек након што је овај корак завршен за све податке. CocoIndex Batching подршка ЦоцоИндекс прелази празнину и омогућава вам да добијете најбоље од оба света - одржавајући једноставност вашег кода пратећи природни ток, док добијате ефикасност од партидирања које пружа ЦоцоИндекс покретање. Већ смо омогућили подршку партија за следеће уграђене функције: Уметнички текст Трансформаторска пресуда КолумбијаУреди КолумбијаУреди То не мења ватру. Your existing code will just work without any change – still following the natural flow, while enjoying the efficiency of batching. За прилагођене функције, омогућавање партиципације је једноставно као: Set batching=True у декоратору прилагођених функција. Промените аргументе и вратите тип на листу. На пример, ако желите да креирате прилагођену функцију која позива АПИ да бисте креирали минијатуре за слике. @cocoindex.op.function(batching=True) def make_image_thumbnail(self, args: list[bytes]) -> list[bytes]: ... Погледајте партиципациону документацију за више детаља. Погледајте партиципациону документацију за више детаља. Како Кокоиндекс Батес Zajednički pristupi Batiranje funkcioniše tako što prikuplja dolazne zahteve u red i odlučuje o pravom trenutku da ih isprati kao jednu partiju.To vreme je ključno – napravite to ispravno, a vi balansirate prodor, latenciju i upotrebu resursa sve odjednom. Two widely used batching policies dominate the landscape: In this approach, the system flushes all requests that arrived within a fixed window of W milliseconds. Time-based batching (flush every W milliseconds): The maximum wait time for any request is predictable, and implementation is straightforward. It ensures that even during low traffic, requests will not remain in the queue indefinitely. Advantages: During periods of sparse traffic, idle requests accumulate slowly, adding latency for early arrivals. Additionally, the optimal window W often varies with workload characteristics, requiring careful tuning to strike the right balance between latency and throughput. Drawbacks: Here, a batch is triggered once the queue reaches a pre-defined number of items, K. Size-based batching (flush when K items are queued): The batch size is predictable, which simplifies memory management and system design. It is easy to reason about the resources each batch will consume. Advantages: When traffic is light, requests may remain in the queue for an extended period, increasing latency for the first-arriving items. Like time-based batching, the optimal K depends on workload patterns, requiring empirical tuning. Drawbacks: Многи системи високих перформанси усвајају а : они испирају партију када или временски прозор В истекне или ред достигне величину К - у зависности од тога који долази први.Ова стратегија ухвати предности оба метода, побољшавајући одзивност током ријетког саобраћаја док одржава ефикасне величине партије током врхунског оптерећења. hybrid approach Uprkos tome, bating uvek uključuje Uzorci saobraćaja, karakteristike radnog opterećenja i sistemske ograničenja utiču na idealna podešavanja.Doseći optimalne performanse često zahteva praćenje, profilisanje i dinamično podešavanje ovih parametara kako bi se uskladili sa uslovima u realnom vremenu. tunable parameters and trade-offs Кокоиндекс приступ Ниво оквира: прилагодљив, слободан од чворова Кокоиндекс имплементира а који се аутоматски прилагођава уносном оптерећењу захтева. Процес ради на следећи начин: simple and natural batching mechanism Kontinuirano čekanje: Dok se aktuelna serija obrađuje na uređaju (npr. GPU), svi novi dolazni zahtevi se ne obrađuju odmah. Umesto toga, oni su čekani. Аутоматски прозор партије: Када се тренутна партија заврши, ЦоцоИндек одмах узима све захтеве који су акумулирани у реду и третира их као следећу партију. Adaptive batching: Nema časova, nema fiksnih veličina serija i nema unapred konfigurisanih pragova. veličina svake serije se prirodno prilagođava saobraćaju koji je stigao tokom prethodnog servisnog vremena serije. Механизам бацања кокоиндекса је Он континуирано обрађује захтеве у сетовима док омогућава величини серије да одражава потражњу у реалном времену, постижући висок проток без потребе за ручним подешавањем или сложеном еуристиком. In essence, self-tuning Zašto je ovo dobro? Ниска латенција када је ретка: Са неколико захтјева, партије су мале (често величина 1), тако да ефикасно радите на близу латенције једног позива. Висок проток када је заузет: Када се саобраћај повећава, више захтева се акумулира током серије у лету, тако да је следећа серија већа - коришћење се аутоматски повећава. Нема подешавања: Не морате подешавати В или К. Систем се прилагођава вашем обрасцу саобраћаја по дизајну. Function-level batching: packing the batch intelligently Бацкинг на нивоу функције: паковање партије интелигентно Na nivou funkcije, CocoIndex omogućava svakoj funkciji da rukuje prozorom serije – svim zahtevima u redovima u trenutku kada prethodna serija završi – na najefikasniji i bezbedniji način za svoj specifični model ili biblioteku. Omogućava maksimalnu fleksibilnost i efikasnost. how it’s processed is up to the function Узми то Основна библиотека реченица-трансформатора може прихватити партије произвољне дужине, али их интерно дели на (подразумевана величина: 32) како би се осигурало да се сваки удобно уклапа у меморију уређаја, док се GPU језгро држи у оптималном "слатком месту". SentenceTransformerEmbed micro-batches Бацкинг није само о уклапању података у меморију - то је такође о минимизирању трошеног рачунања. , омогућавајући ГПУ да изврши униформне, високопропусне језгре. Међутим, то значи да кратке секвенце плаћају трошкове најдуже секвенце у серији. На пример, мешање 64-токена и 256-токена резултира у томе што се 64-токене обрађују ~4 пута скупље него што је потребно. и формирајући микро-групе приближно једнаке дужине, смањујући преклапање преко главе и одржавајући коришћење ГПУ-а високо. pad every sequence in a batch to the length of the longest sequence sorting requests by token count Друге функције могу применити своје стратегије: неке могу једноставно пренети пуну партију на бацкенд, док друге могу имплементирати као што су СИМД плочице или спој-писа. КоцоИндекс остаје агностичан према методи - његова одговорност је да , дајући свакој функцији пуну контролу о томе како максимизирати проток и минимизирати прекомерну потрошњу. custom packing schemes deliver the batch window efficiently and without delay Овај дизајн балансира : оквир се бави оркестрацијом партиципације, док се саме функције оптимизују за меморију, рачунање и ефикасност језгра - осигуравајући висок проток преко различитих радних оптерећења без присиљавања решења за све у једној величини. simplicity, flexibility, and performance Conclusion Закључак Batching je jedna od najefikasnijih strategija za ubrzavanje računarskih radnih opterećenja. Омогућава , и , партиципација претвара оно што би било много малих, неефикасних рачунања у мање, високо оптимизованих операција. amortizing fixed overhead across multiple items larger, more efficient GPU operations minimizing data transfer CocoIndex pravi batching Неколико уграђених функција већ ослобађа партиципацију испод капуљаче, а прилагођене функције могу га усвојити са једноставним Ово уклања сложеност ручног управљања редовима, тајмерима или величинама партија, омогућавајући програмерима да се фокусирају на своје моделе и апликације. effortless and automatic batching=True Предности перформанси бацхинг-а су најизраженије када , као што је са мањим моделима или лаганим операцијама. Бацкинг је такође најефикаснији када је основни АПИ или библиотека , јер делимична подршка може ограничити добитке - на пример, неке библиотеке као што је Оллама показују само скромна побољшања током пакета. fixed overhead represents a significant portion of total computation fully supports batched operations Ukratko, batching je a : максимизира промет, смањује кашњење где је то важно и омогућава хардверу да ради близу свог пуног потенцијала - све док задржава искуство програмера једноставно и предвидљиво. high-leverage optimization Подржите нас тако што ћете CocoIndex дати ⭐ Звезду на ГитХубу и поделити са својом заједницом ако вам је корисно! Podržite nas dajući и поделите са својом заједницом ако вам је корисно! CocoIndex a ⭐ Star on GitHub GitHub