Vai jums ir masveida LLM zvanus jūsu datu transformācijas plūsmā? Tas tiek darbināts ar ļoti efektīvu Rust dzinēju un tagad atbalsta adaptīvo partiju izlaišanu no kastes. Tas ir uzlabojis caurlaidību par ~5× (≈80% ātrāks izpildes laiks) AI dzimtām darba plūsmām. Un vislabāk, jums nav jāmaina nekāds kods, jo partija notiek automātiski, pielāgojot to jūsu datplūsmai un saglabājot GPU pilnībā izmantotu. CocoIndex Lūk, ko mēs iemācījāmies, veidojot adaptīvo partiju atbalstu Cocoindex. Bet vispirms atbildēsim uz dažiem jautājumiem, kas varētu būt jūsu maisījumā. Kāpēc batching paātrina apstrādi? 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: Kad priekšmeti tiek apstrādāti atsevišķi, katram priekšmetam atkārtoti rodas fiksēta pārslodze, kas var ātri dominēt kopējā darbības laikā, it īpaši, ja aprēķins katram priekšmetam ir salīdzinoši mazs. Pretēji tam, vairāku priekšmetu apstrāde kopā partijās ievērojami samazina šā pārslodzes ietekmi uz katru priekšmetu. Batching ļauj amortizēt fiksētās izmaksas daudzos priekšmetos, vienlaikus ļaujot arī aparatūras un programmatūras optimizācijas, kas uzlabo datu atkarīgo darbu efektivitāti. Batching ievērojami uzlabo veiktspēju, optimizējot gan aprēķinu efektivitāti, gan resursu izmantošanu. 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: Kombinācijā šie efekti noved pie apjoma uzlabojumiem caurlaidībā. Batching pārvērš daudzus mazus, neefektīvus aprēķinus lielās, ļoti optimizētās operācijās, kas pilnībā izmanto mūsdienu aparatūras iespējas. AI darba slodzēm - ieskaitot lielus valodu modeļus, datora redzi un reāllaika datu apstrādi - batching nav tikai optimizācija; tas ir būtisks, lai sasniegtu skalējamu, ražošanas līmeņa veiktspēju. Kā batching izskatās parastam Python kodam Nekompilācijas kods – vienkāršs, bet mazāk efektīvs Visdabiskākais veids, kā organizēt cauruļvadu, ir apstrādāt datus gabals pēc gabala. 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) To ir viegli izlasīt un saprast: katrs gabals plūst taisni pa vairākiem soļiem. Manuālā batšana – efektīvāka, bet sarežģītāka Jūs varat paātrināt to, partiju, bet pat visvienkāršākā "tikai partiju visu vienu reizi" versija padara kodu ievērojami sarežģītāku: # 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) Turklāt visu vienlaicīgi sadalīšana parasti nav ideāla, jo nākamie soļi var sākties tikai pēc tam, kad šis solis ir pabeigts visiem datiem. CocoIndex batching atbalsts CocoIndex pārklāj plaisu un ļauj jums iegūt labāko no abām pasaulēm - saglabāt jūsu koda vienkāršību, sekojot dabiskajai plūsmai, vienlaikus iegūstot efektivitāti, ko nodrošina CocoIndex izpildes laiks. Mēs jau esam aktivizējuši partiju atbalstu šādām iebūvētajām funkcijām: Iebūvēts teksts PārveidotājsEmbed Lāčplēsis Lāčplēša diena Tas nemainīs uguni. Your existing code will just work without any change – still following the natural flow, while enjoying the efficiency of batching. Attiecībā uz pielāgotām funkcijām, ļaujot batching ir tikpat vienkārša kā: Set batching=True pielāgotās funkcijas dekoratorā. Mainīt argumentus un atgriezt tipu uz sarakstu. Piemēram, ja vēlaties izveidot pielāgotu funkciju, kas izsauc API, lai izveidotu attēlu miniatūras. @cocoindex.op.function(batching=True) def make_image_thumbnail(self, args: list[bytes]) -> list[bytes]: ... Skatiet batching dokumentāciju sīkākai informācijai. Skatiet batching dokumentāciju sīkākai informācijai. Kā CocoIndex batches Kopīgas pieejas Batching darbojas, apkopojot ienākošos pieprasījumus rindā un izlemjot pareizo brīdi, lai izskalotu tos kā vienu partiju. 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: Daudzas augstas veiktspējas sistēmas izmanto a : tie izskalo partiju, kad beidzas laika logs W vai rindas sasniedz izmēru K - atkarībā no tā, kas nāk vispirms. hybrid approach Neskatoties uz to, batching vienmēr ietver Satiksmes modeļi, darba slodzes īpašības un sistēmas ierobežojumi ietekmē ideālos iestatījumus.Lai sasniegtu optimālu veiktspēju, bieži vien ir nepieciešama šo parametru uzraudzība, profilēšana un dinamiska pielāgošana, lai tie atbilstu reāllaika apstākļiem. tunable parameters and trade-offs CocoIndex pieeja Rāmja līmenis: pielāgojams, bez pogām CocoIndex ievieš a kas automātiski pielāgojas ienākošās pieprasījuma slodzei. process darbojas šādi: simple and natural batching mechanism Nepārtraukta rindā: kamēr pašreizējā partija tiek apstrādāta ierīcē (piemēram, GPU), nekādi jauni ienākošie pieprasījumi netiek nekavējoties apstrādāti. Automātiskais partiju logs: Kad pašreizējā partija ir pabeigta, CocoIndex nekavējoties ņem visus pieprasījumus, kas ir uzkrājušies rindā, un izturas pret tiem kā pret nākamo partiju. Pielāgojams sūtījums: nav īsziņu, nav fiksētu sūtījumu izmēru un nav iepriekš konfigurētu slieksņu. Katras sūtījuma izmērs dabiski pielāgojas datplūsmai, kas ieradās iepriekšējās sūtījuma kalpošanas laikā. CocoIndex batching mehānisms ir Tas nepārtraukti apstrādā pieprasījumus partijās, vienlaikus ļaujot partijas izmēram atspoguļot reāllaika pieprasījumu, sasniedzot augstu caurlaidību, neprasot manuālu pielāgošanu vai sarežģītu heuristiku. In essence, self-tuning Kāpēc tas ir labs? Zems aizkavēšanās ātrums, ja ir maz pieprasījumu: ar dažiem pieprasījumiem partijas ir mazas (bieži 1 izmērs), tāpēc jūs efektīvi darbojat ar gandrīz vienreizēju aizkavēšanos. Augsta caurlaidība aizņemts: Kad satiksmes pieaugums, vairāk pieprasījumu uzkrājas lidojuma partijas laikā, tāpēc nākamā partija ir lielāka - izmantošana automātiski palielinās. Nav pielāgošanas: Jums nav nepieciešams pielāgot W vai K. Sistēma pielāgojas jūsu satiksmes modeli pēc dizaina. Function-level batching: packing the batch intelligently Funkcijas līmeņa batching: batch iepakošana gudri Funkciju līmenī CocoIndex ļauj katrai funkcijai apstrādāt partijas logu — visas rindas pieprasījumus brīdī, kad iepriekšējā partija beidzas — visefektīvākajā un drošākajā veidā attiecībā uz tā konkrēto modeli vai bibliotēku. Tas nodrošina maksimālu elastību un efektivitāti. how it’s processed is up to the function Ņemiet to Pamatā esošā teikumu transformatoru bibliotēka var pieņemt patvaļīgas garuma partijas, bet iekšēji tā tos sadala (parastā izmērs: 32) lai nodrošinātu, ka katrs ērti iekļaujas ierīces atmiņā, vienlaikus saglabājot GPU kodoli optimālā "saldā vietā." SentenceTransformerEmbed micro-batches Batching nav tikai par datu ievietošanu atmiņā - tas ir arī par izšķērdētu aprēķinu samazināšanu. , ļaujot GPU izpildīt vienādus, augstas caurlaidības kodolus. Tomēr tas nozīmē, ka īsās sekvences maksā par garākās sekvences izmaksām partijā. Piemēram, 64-token un 256-token elementu sajaukšana noved pie tā, ka 64-token elementus apstrādā ~4x dārgāk nekā nepieciešams. un veidojot apmēram vienāda garuma mikro partijas, samazinot pārklājumu un saglabājot GPU izmantošanu augstu. pad every sequence in a batch to the length of the longest sequence sorting requests by token count Citas funkcijas var piemērot savas stratēģijas: daži var vienkārši pārsūtīt pilnu partiju uz aizmuguri, bet citi var īstenot CocoIndex joprojām ir agnostiķis attiecībā uz metodi - tā atbildība ir , dodot katrai funkcijai pilnīgu kontroli pār to, kā maksimāli palielināt caurlaidību un samazināt pārslodzi. custom packing schemes deliver the batch window efficiently and without delay Šis dizains līdzsvaro : sistēma pārvalda partiju organizēšanu, savukārt pašas funkcijas optimizē atmiņas, aprēķinu un kodola efektivitāti - nodrošinot augstu caurlaidību dažādās darba slodzēs, neprasot vienveidīgu visu risinājumu. simplicity, flexibility, and performance Conclusion Secinājums Batching ir viena no visefektīvākajām stratēģijām, lai paātrinātu aprēķinu darba slodzes. Ļaujot un , batching pārveido to, kas būtu daudz mazu, neefektīvu aprēķinu mazāk, ļoti optimizētas operācijas. amortizing fixed overhead across multiple items larger, more efficient GPU operations minimizing data transfer CocoIndex padara batching Vairākas iebūvētās funkcijas jau izmanto batching zem vāka, un pielāgotas funkcijas var pieņemt to ar vienkāršu Tas novērš sarežģītību manuāli pārvaldīt rindas, laiku vai partiju izmērus, ļaujot izstrādātājiem koncentrēties uz saviem modeļiem un lietojumprogrammām. effortless and automatic batching=True Paaugstinātas veiktspējas ieguvumi ir visizteiktākie, kad , piemēram, ar mazākiem modeļiem vai vieglām operācijām. Batching ir arī visefektīvākais, ja pamatā esošais API vai bibliotēka , jo daļējs atbalsts var ierobežot ieguvumus - piemēram, dažas bibliotēkas, piemēram, Ollama, rāda tikai pieticīgus uzlabojumus batching laikā. fixed overhead represents a significant portion of total computation fully supports batched operations Īsāk sakot, batching ir a : tas palielina caurlaidību, samazina aizkavēšanos, kur tas ir svarīgi, un ļauj aparatūrai darboties tuvu tās pilnīgajam potenciālam - viss, vienlaikus saglabājot izstrādātāja pieredzi vienkāršu un paredzamu. high-leverage optimization Atbalstīt mūs, dodot CocoIndex ⭐ Zvaigzne par GitHub un dalīties ar savu kopienu, ja jums tas ir noderīgi! Atbalstīt mūs, dodot Un dalīties ar savu kopienu, ja jums tas ir noderīgi! CocoIndex a ⭐ Star on GitHub GitHub