თქვენ გაქვთ დიდი LLM მოთხოვნები თქვენი მონაცემთა ტრანსპორტირება? ეს შეიძლება დაეხმაროს. იგი იძლევა ულტრაბგერითი Rust საავტომობილო და ახლა მხარს უჭერს ადაპტური სატვირთო. ეს გააუმჯობესდა Throughput ~5× (≈80% სწრაფი runtime) AI- ის ნედლეული workflows. და საუკეთესო, თქვენ არ უნდა შეცვალოთ ნებისმიერი კოდი, რადგან სატვირთო ხდება ავტომატურად, შეესაბამება თქვენი ტრანსპორტი და შენარჩუნება GPUs სრულიად გამოიყენება. CocoIndex აქ არის ის, რაც ჩვენ გაიგეთ, როდესაც Cocoindex- ში ადაპტური batching მხარდაჭერა შექმნა. მაგრამ პირველ რიგში, დაგვიკავშირდით ზოგიერთი კითხვაზე, რომელიც შეიძლება იყოს თქვენი mixnd. რატომ Batching აჩქარებს დამუშავებას? 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: როდესაც ელემენტებს ინდივიდუალურად დამუშავებს, თითოეული ელემენტზე მუდმივი overhead იღებს, რაც სწრაფად იღებს საერთო runtime, განსაკუთრებით როდესაც თითოეული ელემენტზე კომპიუტერული შედარებით მცირეა. გარდა ამისა, მრავალფეროვანი ელემენტების შეუშავება პარტნიოებში მნიშვნელოვანია შეამციროს ამ overhead- ის თითოეული ელემენტზე მუდმივი ეფექტურობა. Batching საშუალებას იძლევა მუდმივი ღირებულების გაუმჯობესებას მრავალი ელემენტებში, ხოლო ასევე საშუალებას იძლევა ტექნიკური და პროგრამული გაუმჯობესებას, რომელიც გაუმჯობესებს მონაცემებს დამოკიდებული სამუშაო ეფექტურობის გაუმჯობესებას. ეს გაუმჯობ Batching მნიშვნელოვანია გაუმჯობესებს ეფექტურობის მიერ ოპტიმიზაციის ორივე კომპიუტერული ეფექტურობის და რესურსების გამოყენების. იგი უზრუნველყოფს მრავალფეროვანი, compounding უპირატესობა: 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: In combination, these effects lead to orders-of-magnitude improvements in throughput. Batching transforms many small, inefficient computations into large, highly optimized operations that fully exploit modern hardware capabilities. For AI workloads — including large language models, computer vision, and real-time data processing — batching is not just an optimization; it is essential for achieving scalable, production-grade performance. What batching looks like for ჩვეულებრივი Python კოდი Non-batching კოდი – მარტივი მაგრამ ნაკლებად ეფექტური ყველაზე ბუნებრივი გზა, რათა დაჯავშნა pipeline არის დამუშავება მონაცემები ნაწილაკს. მაგალითად, ორი ფართო loop როგორიცაა ეს: 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) This is easy to read and reason about: each chunk flows straight through multiple steps. სამთო Batching – უფრო ეფექტური, მაგრამ რთული თქვენ შეგიძლიათ სწრაფად გააუმჯობესოთ batching, მაგრამ მაშინაც კი, რაც მარტივი ვერსია "ეს მხოლოდ batch everything once" იძლევა კოდი მნიშვნელოვნად უფრო რთული: # 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 მხარდაჭერა CocoIndex ბეჭდვა სიზუსტით და საშუალებას გაძლევთ მიიღოთ საუკეთესო ორივე მსოფლიოში - შენარჩუნება მარტივი თქვენი კოდი შემდეგ ბუნებრივი წნევის, ხოლო მიიღოს ეფექტურობა batching უზრუნველყოფს CocoIndex runtime. We already enabled batching support for the following built-in ფუნქციები: ტექსტი კონტაქტი TransformerEmbed კონტაქტი კონტაქტი ეს არ შეცვალოს API. Your existing code will just work without any change – still following the natural flow, while enjoying the efficiency of batching. მორგებული ფუნქციები, საშუალებას batching არის როგორც მარტივი, როგორიცაა: Set in the custom function decorator. batching=True Change the arguments and return type to . list მაგალითად, თუ გსურთ შექმნათ საბაჟო ფუნქცია, რომელიც აირჩიებს API- ს სურათების miniature შექმნას. @cocoindex.op.function(batching=True) def make_image_thumbnail(self, args: list[bytes]) -> list[bytes]: ... იხილეთ Batching დოკუმენტაცია დამატებითი დეტალები. იხილეთ Batching დოკუმენტაცია დამატებითი დეტალები. როგორ არის CocoIndex Batches საერთო მიმოხილვა Batching მუშაობს, რომ მოცემულ მოთხოვნებს შეუწყოს დასაწყისში და აირჩიოს სწორი დრო, რათა მათ გაქირავდეს ერთი batch. ეს დრო არის მნიშვნელოვანია - მიიღეთ ეს სწრაფად, და თქვენ შეესაბამება გადაცემის, მოცულობა, და რესურსების გამოყენება ყველა ერთხელ. 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: ბევრი მაღალი ეფექტურობის სისტემები მიიღებენ a : ისინი გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გაფართოებას გა hybrid approach მიუხედავად ამისა, Batching ყოველთვის მოიცავს პრაქტიკული მოდელები, სამუშაო სიჩქარე თვისებები და სისტემის შეზღუდვები ყველა ეფუძნება იდეალური პარამეტრები. ოპტიმალური შესრულების მიღება ხშირად მოითხოვს მონიტორინგი, პროფიგურაცია და დინამიკურად შეესაბამება ეს პარამეტრები რეალურ დროის პირობებში. tunable parameters and trade-offs CocoIndex’s approach Framework დონე: Adaptive, knob-free CocoIndex იყენებს a ავტომატურად შეესაბამება მოთხოვნა დატვირთვის. პროცესი მუშაობს როგორც შემდეგი: simple and natural batching mechanism ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად, ამჟამად. Auto batch window: როდესაც მიმდინარე batch დასრულდება, CocoIndex დაუყოვნებლივ იღებს ყველა მოთხოვნებს, რომლებიც გაქვთ შეუზღუდავი და მკურნალობა მათ, როგორც შემდეგი batch. ეს მოთხოვნების კომპლექტი აშენებს ახალი batch window. სისტემა შემდეგ დაიწყება დამუშავება ეს batch დაუყოვნებლივ. Adaptive batching: არ არსებობს ამინერები, არ არსებობს მუდმივი batch ზომაები, და არ არსებობს წინასწარ კონფიგურაცია მოთხოვნები. თითოეული batch ზომა ბუნებრივ განკუთვნილია სატვირთო, რომელიც მოვიდა წინა batch მომსახურების დროს. მაღალი სატვირთო დროები ავტომატურად იწვევს უფრო დიდი batches, მაქსიმალური GPU გამოყენება. დაბალი სატვირთო დროები იწვევს მცირე batches, მინიმალური latency ადრე მოთხოვნები. CocoIndex- ის batching მექანიზმი არის ეს მუდმივად დამუშავებს მოთხოვნებს პარიტში, ხოლო საშუალებას გაძლევთ პარიტში ზომა რეალურ დროში მოთხოვნებს, უმაღლესი გადაცემის მიღება, არ მოითხოვს მექანიკური სტუდენციას ან კომპლექსური ჰურისტტიკა. In essence, self-tuning რატომ ეს არის კარგი? : With few requests, batches are tiny (often size 1), so you’re effectively running at near single-call latency. Low latency when sparse მაღალი გადაზიდვის მასშტაბით: როდესაც გადაზიდვის სიჩქარე იზრდება, უფრო მეტი მოთხოვნები შეესაბამება თვითმფრინავი პარიტში, ასე რომ შემდეგი პარიტი უფრო დიდია - გამოყენება ავტომატურად იზრდება. No tuning: თქვენ არ გჭირდებათ Tune W ან K. სისტემა განკუთვნილია თქვენი ტრანსპორტის ნიმუში. Function-level batching: packing the batch intelligently ფუნქციონალური დონეზე Batching: Batch შეფუთვა ინტელექტურად ფუნქციონალური დონეზე, CocoIndex საშუალებას აძლევს თითოეული ფუნქციონირება გადამუშავოთ ფანჯარა ფანჯარა - ყველა ხარისხის მოთხოვნები ახლა, როდესაც წინა ფანჯარა დასრულდება - ყველაზე ეფექტური და უსაფრთხო გზა მისი კონკრეტული მოდელი ან ბიბლიოთეკა. Framework მიწოდება ფანჯარა სწრაფად, მაგრამ საშუალებას გაძლევთ მაქსიმალური ფართოობა და ფართო სიჩქარე. how it’s processed is up to the function მიიღეთ ფუნქციონირება, როგორც მაგალითად. ძირითადი სიტყვები-transformers ბიბლიოთეკა შეიძლება აღიაროთ გაზიანებები უარყოფითი სიგრძე, მაგრამ შიდა მას გაზიანებს მათ (დაზღუდული ზომა: 32) უზრუნველყოფს, რომ თითოეული კომფორტულად შეესაბამება მოწყობილობების მექანიზმში, ხოლო GPU kernels მათი ოპტიმიზირებული “შემოთ ადგილი.” CocoIndex ავტომატურად იყენებს ამ default micro-batch ზომა. SentenceTransformerEmbed micro-batches Batching არ არის მხოლოდ შეესაბამება მონაცემები მახასიათებლები - ეს არის ასევე შეზღუდვა დახურული კომპიუტერის. Transformer runtimes ზოგადად , რომელიც საშუალებას გაძლევთ GPU- ს აწარმოოს ერთგული, მაღალი გადაცემის kernels. თუმცა, ეს იმას ნიშნავს, რომ შუა სექციები გადაიხადოს სიგრძე სექციების ღირებულება. მაგალითად, 64-token და 256-token ელემენტების შეფუთვა იწვევს, რომ 64-token ელემენტებს დამუშავებს ~4x უფრო ღირებულა, ვიდრე საჭიროა. CocoIndex გადაიხადოს ეს მიერ and forming micro-batches of roughly equal lengths, reducing padding overhead and keeping GPU utilization high. pad every sequence in a batch to the length of the longest sequence sorting requests by token count სხვა ფუნქციები შეუძლიათ გამოიყენოთ საკუთარი სტრატეგიები: ზოგიერთი შეიძლება უბრალოდ გაგზავნოს სრული პარიტი backend, ხოლო სხვები შეიძლება გააკეთოს როგორც SIMD პლაჟები ან merge-writes. CocoIndex გაგრძელებს მექანიკური - მისი პასუხისმგებლობა არის, რომ , ყველა ფუნქცია სრული კონტროლი, როგორ გაუმჯობესოთ გადაცემის და მინიმალური overhead. custom packing schemes deliver the batch window efficiently and without delay დიზაინი Balance : Framework გააკეთა შეფუთვა შეფუთვა, ხოლო ფუნქციები თვითმართველობის ოპტიმიზირება მახასიათებლები, კომპიუტერები, და kernel ეფექტურობა - უზრუნველყოფს მაღალი გადაცემის სხვადასხვა სამუშაო სიჩქარები გარეშე მოცულობა ერთი ზომა-ფაილი ყველა გადაწყვეტილებები. simplicity, flexibility, and performance Conclusion კონტაქტი Batching არის ერთ-ერთი ყველაზე ეფექტური სტრატეგიები გააუმჯობესების კომპიუტერული workloads. გაძლევთ და , batching შეცვალოს, რაც შეიძლება იყოს ბევრი მცირე, ეფექტური კომპიუტერები ნაკლებად, მაღალი ოპტიმიზირებული ოპერაციები. amortizing fixed overhead across multiple items larger, more efficient GPU operations minimizing data transfer CocoIndex აწარმოებს batching რამდენიმე ინტეგრირებული ფუნქციები უკვე გაფართოება batching ქვეშ კაბა, და საბაჟო ფუნქციები შეიძლება მიიღოს იგი მარტივი ეს იღებს კომბინირება მექანიკური მართვის ხაზები, ტერმინები, ან სატვირთო ზომა, საშუალებას აძლევთ განვითარებლები შეუზღუდავი მათი მოდელები და პროგრამები. effortless and automatic batching=True უმაღლესი ხარისხის ხარისხის ხარისხის ხარისხის ხარისხის ხარისხის ხარისხის ხარისხის ხარისხის , როგორიცაა მცირე მოდელები ან მარტივი ოპერაციები. Batching არის ასევე ყველაზე ეფექტური, როდესაც ძირითადი API ან ბიბლიოთეკა , როგორც ნაწილიური მხარდაჭერა შეიძლება შეზღუდოთ მიღების - მაგალითად, ზოგიერთი ბიბლიოთეკები, როგორიცაა Ollama, მხოლოდ შეუზღუდავი გაუმჯობესებები შეტანილი. fixed overhead represents a significant portion of total computation fully supports batched operations როგორც წესი, Batching არის a : ეს მაქსიმალურად გაუმჯობესებს გადაცემას, შეამციროს მოცულობა, სადაც მნიშვნელოვანია, და საშუალებას გაძლევთ აღჭურვილობა გამოიყენოს სრული პოტენციას - ყველა ამავე დროს გაძლევთ განვითარების გამოცდილება მარტივი და პროგნოზირებული. CocoIndex აღსანიშნებს მოცულობა, რათა უზრუნველყოს უპირატესობები ავტომატურად შეტანა სხვადასხვა სამუშაო სიჩქარით. high-leverage optimization მხარდაჭერა ჩვენთვის, რათა CocoIndex ⭐ Star on GitHub და გაუზიაროს თქვენი საზოგადოება, თუ თქვენ ნახავთ, ეს სასარგებლო! მხარდაჭერა ჩვენთვის, რათა CocoIndex ⭐ Star on GitHub და გაუზიაროს თქვენი საზოგადოება, თუ თქვენ ნახავთ, ეს სასარგებლო! GitHub