Consistency LLM: LLM को parallel decoder में बदलकर inference speed अधिकतम 3.5x बढ़ाना
(hao-ai-lab.github.io)- लंबा response बनाते समय token को एक-एक करके generate करने वाला autoregressive (AR) decoding latency का मुख्य bottleneck है, और CLLM इसे n-token इकाइयों में parallel decoding से कम करने का तरीका है
- Consistency Large Language Models(CLLMs) pre-trained LLM को fine-tune करके इस तरह train किए जाते हैं कि वह किसी भी n-token state को AR greedy result वाले fixed point पर तेज़ी से map कर सके
- Jacobi decoding सैद्धांतिक रूप से AR greedy generation जैसे ही result पर converge करता है, लेकिन मौजूदा LLMs में औसतन केवल 1.05x के सीमित speedup तक ही पहुँचा, इसलिए इसकी व्यावहारिक उपयोगिता कम रही
- CLLM ने Spider, Human-Eval, GSM8k, MT-bench प्रयोगों में 2.4x~3.4x generation speedup दिखाया, और Medusa2, Eagle जैसे fast inference तरीकों के बराबर या उनसे बेहतर माना गया
- inference के समय auxiliary model component या target model architecture में बदलाव की ज़रूरत नहीं होती, इसलिए speed improvement के साथ memory efficiency भी हासिल की जा सकती है
CLLM जिस decoding bottleneck को लक्ष्य बनाता है
- LLMs का उपयोग programming, legal, health advice जैसे कई क्षेत्रों में होता है, लेकिन inference चरण में वे आमतौर पर autoregressive (AR) decoding से token एक-एक करके generate करते हैं
- response जितना लंबा होता है, token-by-token generation के कारण latency उतनी बढ़ती है, और user को महसूस होने वाला wait time भी लंबा हो जाता है
- मौजूदा fast inference तरीके अक्सर एक बार में कई token बनाने के लिए architecture modification, auxiliary component, या draft model की मांग करते हैं
Jacobi decoding कैसे काम करता है और इसकी सीमाएँ
- Jacobi decoding Jacobi और Gauss-Seidel fixed-point iteration से निकला तरीका है, और greedy decoding में इसे AR generation के समान सिद्ध किया गया है
- यह sequential generation को n variables और n nonlinear equations की system में बदलता है, ताकि Jacobi iteration के जरिए parallel computation संभव हो सके
- इसका ठोस flow इस प्रकार है
- input prompt से अगले n tokens का random guess किया जाता है
- prompt और n-token sequence को LLM में डालकर बार-बार update किया जाता है
- जब sequence बदलना बंद कर दे, तो fixed point तक पहुँचा माना जाता है
- अंतिम n-token sequence greedy strategy में AR decoding द्वारा generate किए गए output पर converge करता है
- शुरुआती random guess से अंतिम AR generation result तक जाने वाले path को Jacobi trajectory कहा जाता है
- मूल Jacobi decoding ने वास्तविक LLMs में AR decoding की तुलना में औसतन केवल 1.05x के आसपास का सीमित speedup दिखाया
- AR से train किए गए LLMs के लिए, अगर पहले token में गलती हो तो बाद के tokens का सही अनुमान लगाना कठिन होता है
- अधिकांश Jacobi iterations n-token sequence में केवल एक token ही सुधारते हैं, इसलिए trajectory लंबी हो जाती है
- Lookahead decoding और speculative decoding, Jacobi decoding और मौजूदा AR decoding की inefficiency को कम करने की कोशिश करते हैं, लेकिन inference के समय अतिरिक्त memory cost पैदा करते हैं
Consistency LLM का training objective
- CLLM pre-trained LLM को इस तरह adapt करता है कि वह Jacobi trajectory के किसी भी point से लगातार fixed point की ओर बढ़े
- यह लक्ष्य diffusion model acceleration तकनीक consistency models के उद्देश्य से मिलता-जुलता है
- target model से एकत्र की गई Jacobi trajectories का उपयोग करके, model को ऐसे loss से train किया जाता है जो Jacobi iteration के दौरान single-step convergence को प्रोत्साहित करे
- हर target model को CLLM में बदलने की training दो भागों में बनी होती है
- Jacobi trajectory preparation
- हर prompt के लिए n-token units में सभी truncated segments पर Jacobi decoding को क्रमशः चलाया जाता है
- पूरी response sequence लगातार fixed points को जोड़कर बनी संरचना बन जाती है
- trajectory में generate की गई हर sequence को एक training data item माना जाता है
- लंबी response में पूरे लंबे input के evaluation से speed slowdown से बचने के लिए n-token truncation का उपयोग किया जाता है
- Consistency loss और AR loss की joint optimization
- consistency loss model को एक साथ कई token predict करने के लिए प्रेरित करता है
- AR loss यह सुनिश्चित करता है कि CLLM target LLM के distribution से बहुत दूर न जाए, जिससे generation quality बनी रहे
- Jacobi trajectory preparation
Loss function की संरचना
- target LLM को
pऔर CLLM कोqθमाना जाता है, जहाँqθकोpके parameters से initialize किया जाता है - Global consistency (GC) loss CLLM को प्रेरित करता है कि Jacobi trajectory की किसी भी state
yको input देने पर वह fixed pointy*output करे - Local consistency (LC) loss Jacobi trajectory की पड़ोसी states
y(j)औरy(j+1)को एक जैसा output देने के लिए align करता है - distributions के बीच distance
D(·||·)के लिए GKD method में चर्चा किए गए विकल्प अपनाए गए, और इस प्रयोग में मुख्य रूप से forward KL का उपयोग किया गया - AR loss target LLM
pके generated resultlके आधार पर पारंपरिक autoregressive loss लागू करता है, ताकि target LLM distribution से विचलन न हो - कुल training loss consistency loss और weight
wसे गुणा किए गए AR loss के योग से बनता है
प्रयोग सेटअप और परिणाम
- प्रयोगों में तीन specialized domain tasks और एक open-domain dialogue benchmark शामिल थे
- Spider: text-to-SQL
- Human-Eval: Python code completion
- GSM8k: गणित
- MT-bench: open-domain dialogue
- task के अनुसार target models के रूप में fine-tuned coder LLM, Deepseek-coder-7B-instruct, LLaMA-2-7B, ABEL-7B-001 का उपयोग किया गया
- training और evaluation दोनों NVIDIA A100 40GB server पर किए गए
- specialized domains में, मूल target model, Medusa2, speculative decoding जैसे baselines की तुलना में CLLM ने सबसे बड़ा speed improvement दिखाया
- MT-bench में ShareGPT dataset पर LLaMA2-7B से train किया गया CLLM, lookahead decoding के साथ मिलकर Medusa2 जैसा speedup हासिल करता है
- MT-bench score भी तुलना योग्य स्तर पर था
- CLLM को target model की मूल architecture में बदलाव की ज़रूरत नहीं होती
- auxiliary component न होने से memory efficiency अधिक रहती है
Training cost
- CLLM fine-tuning cost को मध्यम स्तर का बताया गया है
- LLaMA-7B ने Spider dataset पर केवल लगभग 1 million tokens pass करके 3.4x speedup हासिल किया
- CodeSearchNet-Python जैसे बड़े dataset में, Jacobi trajectory generation के लिए dataset के केवल 10% का उपयोग करके लगभग 2.5x speedup मिला
- कुल token संख्या का अनुमान इस सूत्र से लगाया गया
- प्रति prompt औसत trajectories × औसत trajectory length × prompts की संख्या
- dataset के अनुसार अनुमानित training cost इस प्रकार है
- Spider: 2 million tokens, pre-training cost का
< 0.01% - CodeSearchNet-Python: 100 million tokens, pre-training cost का
~0.1% - GSM8K: 10 million tokens, pre-training cost का
~0.01% - ShareGPT: 200 million tokens, pre-training cost का
~0.2%
- Spider: 2 million tokens, pre-training cost का
Fast forwarding और stationary tokens
- target LLM आमतौर पर एक Jacobi iteration में केवल एक सही token generate करता है
- CLLM में एक Jacobi iteration के भीतर कई लगातार tokens को सही predict करने की fast forwarding घटना दिखाई देती है
- target LLM में पहले सही generate हुए tokens भी बाद की iterations में गलत tokens में बदल सकते हैं
- CLLM यह क्षमता दिखाता है कि पहले tokens में गलती होने पर भी वह सही token पहले से predict कर लेता है, और बाद में भी उसे बनाए रखता है
- ऐसे tokens को stationary tokens कहा जाता है
- fast forwarding और stationary tokens, CLLM के Jacobi decoding को तेज़ी से converge करने में मदद करते हैं, जिससे generation speed बेहतर होती है
भाषाई pattern learning
- देखा गया कि CLLM training के जरिए collocations जैसी भाषाई अवधारणा सीखता है
- collocations का अर्थ ऐसे शब्दों या terms की शृंखला से है जो random chance की तुलना में अधिक बार साथ दिखाई देते हैं
- प्राकृतिक भाषा और code दोनों में collocations के उदाहरण मिलते हैं
- प्राकृतिक भाषा:
talk to,remind … of … - verb+noun structure:
make a decision,catch a cold - domain-specific grammar structure:
SELECT … FROM …,if … else
- प्राकृतिक भाषा:
- consistency generation objective, CLLM को Jacobi trajectory के किसी भी point पर ऐसी संरचनाओं का अनुमान लगाने में सक्षम बनाता है, जिससे iteration steps कम करने के लिए कई शब्द एक साथ predict करने का प्रोत्साहन मिलता है
सामग्री और code
- अधिक जानकारी paper में देखी जा सकती है
- implementation codebase के रूप में उपलब्ध है
- CLLM checkpoints भी सार्वजनिक किए गए हैं
1 टिप्पणियां
Hacker News की राय
यह उस अनुभव जैसा है जब मैंने “फ्री ड्रॉइंग” (कोई lecture नहीं) की class ली थी
बचपन से मुझे कहा जाता था कि मैं अच्छा drawing करता हूँ, लेकिन सच में याद यही है कि मैं पहले बनाई हुई मिलती-जुलती detailed drawings को दोहराता था या बहुत समय लगाकर बनाता था। मुझे लगता है कि समय और धैर्य हो तो कोई भी किसी scene को काफी भरोसेमंद ढंग से बना सकता है
class में कोई नियम या lecture नहीं थे, और हर कोई अपनी पसंद का material लाता था। कोई ink लाया, कोई pencil, मैं charcoal लेकर गया, और सिर्फ model poses के बीच का समय तय था। शुरुआती कुछ poses करीब 1 minute के बहुत छोटे थे, फिर धीरे-धीरे लंबे होकर 5 minute poses तक गए, और आप कभी भी drawing फाड़कर उसी pose को फिर से बना सकते थे
छोटे warm-up असल में proportions और outlines को पहली कोशिश में सही करने के लिए मजबूर करते थे, और इस आम धारणा के उलट कि जल्दबाजी करने से सब बिगड़ता है, लगता है कि skill सीखते या सुधारते समय जल्दबाजी एक stress factor की तरह काम करती है जो ध्यान और learning को प्रेरित करती है
class से पहले भी शायद मैं उसी quality की drawing बना सकता था, लेकिन मुझे यकीन है कि उसमें 5–10 गुना ज्यादा समय लगता। भटकने न देना और जल्दबाजी की गलतियों की कीमत महसूस कराना—यह तरीका असरदार था
हालांकि इस technique को Consistency कहना थोड़ा अफसोसजनक है। performance improvement के लिए यह नाम ठीक लगता है, लेकिन inference speed improvement के लिए कम सही लगता है; मैं समझता हूँ कि इसका मतलब “एक-एक token generate करने पर आखिर में जो result आता, उसके साथ consistency” है। मैं तो इसे Proficiency LLM कहना पसंद करूँगा, जहाँ वही output expected हो, लेकिन उसी conclusion तक लड़खड़ाते हुए पहुँचने वाली रोक-टोक न हो
Drawing में हर कोशिश के लिए allowed time तय करके उसे धीरे-धीरे छोटा किया जा सकता है। CLLM में Jacobi trajectory में अंतिम state से increasingly दूर states को final state पर map करवाकर training process को और कठिन बनाया जा सकता है
“consistency” term diffusion image generation के consistency model और consistency LLM के बीच similarity से लिया गया है, क्योंकि उनकी training process एक-दूसरे जैसी है
Students lab में जाते, specimen पाते, और instruction बस इतना होता: “इसे 30 minutes में draw करो। शुरू”
“drawing ऐसे करते हैं”, “यह करो और वह मत करो” जैसी कोई बात नहीं थी; असल में यह कुछ ऐसा था: “तुम anxious हो या तुम्हें लगता है कि तुम draw नहीं कर सकते, इससे फर्क नहीं पड़ता। बहाने मत बनाओ, बस draw करो। अभी”
हम सबने draw किया, और पूरी गर्मियों में जैसे-जैसे और animals आते रहे और वही training repeat होती रही, हम सब बहुत ज्यादा improve हुए
उस class ने सिखाया कि कोई भी—सचमुच कोई भी—draw कर सकता है। Group attitude “पता नहीं यह संभव भी है या नहीं” से बदलकर “बिलकुल कर सकते हैं। यह आसान, रोजमर्रा की और कोई बड़ी बात नहीं है” हो गया
यह approach strongly recommend करने लायक है, और university में ली गई classes में यह सबसे liberating और surprising class थी
Authors कहते हैं कि Jacobi decoding greedy autoregressive decoding के समान है, लेकिन व्यवहार में repetition और overly generic answers से बचने के लिए sampling temperature को 0 से ऊपर रखना अक्सर जरूरी नहीं लगता क्या?
मैं इस decoding strategy को बिल्कुल नहीं जानता, इसलिए शायद इसे reflect करने का कोई आसान तरीका मैं miss कर रहा हूँ
CLLM training के context में, Jacobi decoding से मिले static fixed point को training objective में map करने के बजाय, हम इसे dynamic fixed point कहते हैं। नई progress के लिए GitHub repository देखते रहें
Desired statistics वाले n-token completion की ओर trajectory को approach करने के लिए train करने वाला fine-tuning step अभी भी संभव होगा, लेकिन fixed-point verification step को कैसे replace किया जा सकता है, यह मुझे ठीक से समझ नहीं आता। शायद “likelihood के लिए इस fixed threshold से ऊपर था या नहीं, यह check करो” जैसा कुछ हो सकता है
LLM के अंदर सच में क्या हो रहा है, इसे वास्तव में समझने से पहले यह काफी risky optimization जैसा लगता है। उदाहरण के लिए geometric interpretation पर भरोसा करने वालों के पास कुछ कहने को होगा, और “fill” tokens इस्तेमाल करने पर यह harmful भी लग सकता है
साथ ही “मन में पूरा sentence बना लेने के बाद शब्द-दर-शब्द बोलते हैं” वाली assumption कोई universal fact नहीं, बस assumption है, और हमारे मन में चलने वाली activity को बहुत ज्यादा सरल बना देती है। क्या बोलने या type करने से पहले सचमुच पूरा plan होता है? एक Buddhist के रूप में मुझे यह illusion के करीब लगता है। और आगे, simultaneous thoughts का क्या? क्या हम sentence units में linearly सोचते हैं?
खैर, math काफी cool है
LLM को हमारे mind जैसा कोई magical thing न मानें। यह बस एक और program है जो meaningful sentences बनाता है
अगर किसी complex past event को कई branches में समझाने को कहा जाए, तो लोग पूरे event scope को समेटने के लिए sentence के बीच में pieces, additions और side branches तेजी से insert करते हैं। sentence-level granularity hypothesis को मैंने किसी serious scientific context में नहीं देखा लगता
कभी-कभी sentence के बीच में grammatical dead end में फँसकर किसी awkward word या phrase से thought को खत्म करना पड़ता है, या बस रुककर शुरू से फिर बोलना पड़ता है
यह phenomenon sentence level पर अचानक टूट जाए, इसकी कोई साफ वजह भी नहीं दिखती
हैरानी है कि इसे और ज़्यादा ध्यान नहीं मिल रहा। यह inference performance में साफ़ फ़ायदा लगता है
इस fine-tuning की लागत वाजिब है, और मूल pretraining लागत के लगभग 0.01% के स्तर की है। performance gain भी काफ़ी consistent दिखता है
मुझे कोई और paper ठीक से याद नहीं जो सुझाव देता हो कि LLM inference performance को इतना बढ़ाया जा सकता है। क्या पहले ऐसा हुआ है?
ख़ासकर कम-से-कम output quality बनाए रखते हुए, query latency के साथ-साथ overall throughput भी सुधारते हुए, अतिरिक्त computation की मांग किए बिना, और implementation भी अपेक्षाकृत practical रखते हुए व बहुत अधिक complexity न जोड़ते हुए
यह parallel/Jacobi decoding पर हुए काम के ऊपर बना है, इसलिए insight को incremental भी कहा जा सकता है। पहले के नतीजे भी ज़रूरी और अहम थे, लेकिन parallel decoding की संभावना से real-world value निकालने वाला नतीजा शायद यही हो सकता है
इसलिए यह काम वाकई दिलचस्प है, और मेरी जानकारी में पहले भी इसे कम सफल रूप में आज़माया गया है, लेकिन इसका वास्तविक असर कितना बड़ा होगा यह अभी स्पष्ट नहीं है
ज़्यादा data से training करने पर speed और बढ़ती है। वजह यह है कि model ज़्यादा बार आने वाले collocations और phrases से सीख सकता है
details के लिए paper देखें, और यह भी दिखता है कि training data size बढ़ने पर speedup eventually saturate हो जाता है
शुरुआत में मुझे लगा था कि यह बाद के tokens का अनुमान लगाने के लिए unembed head ज़्यादा इस्तेमाल करने वाले Medusa-type papers में से है, लेकिन ऐसा बिल्कुल नहीं था
वाकई कमाल है। कोई additional parameters भी नहीं, बस auxiliary training loss जोड़ते हैं
training technique और decoding technique पूरी तरह अलग हैं, और जैसा बताया गया, CLLM को additional parameters या tree-based verification के लिए attention mask setup की ज़रूरत नहीं होती
लगता है जल्द ही हमें एहसास होगा कि models को train करना ज़रूरी नहीं है
ज़रूरत अच्छी indexing और sampling की है
मूल रूप से किसी स्तर पर सभी LLMs को dataset के database जैसा माना जा सकता है, जिसके ऊपर एक शानदार natural language interface लगा है
दोनों stored data को explore करने के अलग-अलग तरीके ही हैं
LLM stored data को explore नहीं करता। LLM training data का database नहीं है
https://news.ycombinator.com/item?id=40266791
क्या मेरे जैसे किसी अनजान व्यक्ति के लिए कहीं “AI expert से पूछें” जैसी जगह है?
उदाहरण के लिए, मैं पूछना चाहता हूँ कि LLM एक ही prompt मिलने पर भी उसी deterministic तरीके से response क्यों नहीं देता
मैं यह सीखना चाहता हूँ, और शायद YouTube पर “1 घंटे में LLM बनाएं” जैसे videos follow करने पड़ें
selection process में response को manipulate करने के कई knobs हो सकते हैं। अगर आप इसे deterministic बनाना चाहते हैं और software तक direct access है, तो इस्तेमाल हो रहे software के अनुसार
top-k = 1याtemperature = 0.0set करने पर यह deterministic हो जाता हैआम तौर पर default setting deterministic नहीं होती, क्योंकि पूरी तरह deterministic बनाने पर result quality अच्छी नहीं रहने की tendency होती है
LLM model tokens के लिए probability vector output करता है, और LLM user random numbers का इस्तेमाल करके likely list से token चुनता है
prompt input करने पर यह next word की probability calculate करता है, और इस process को repeat करके आखिर में sentence बनाता है। learned probabilities training data पर आधारित होती हैं
इस base probability model की वजह से यह 100% deterministic नहीं होता। ऊपर से ChatGPT जैसे models जानबूझकर
temperatureparameter रखते हैं ताकि पूरे process में randomness जोड़ी जा सकेअगर और पढ़ना चाहें, तो यह जवाब इस paper पर आधारित था: The Matrix: A Bayesian learning model for LLMs, https://arxiv.org/abs/2402.03175
लेकिन temperature को जितना संभव हो उतना low set करने पर answer quality बहुत low होने की tendency होती है। system किसी local optimum से बाहर नहीं निकल पाता और repeat करता रहता है। ऐसे answers “deterministic” तो हो सकते हैं, लेकिन अच्छे नहीं
https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-...
free lunch नहीं होता, इसलिए मुझे लगता है कि यहाँ भी कोई path loss है
उदाहरण के लिए, कुछ Jacobi trajectories definition के हिसाब से higher-temperature paths को exclude करती हैं। data retrieval के point of view से यह उल्टा positive भी हो सकता है, लेकिन अगर creativity maximize करनी हो तो negative हो सकता है
मुझे नहीं पता कि “no free lunch” हमेशा खास तौर पर meaningful तरीके से apply होता है या नहीं। कुछ चीज़ें Pareto frontier पर नहीं होतीं
“अनुमानित decoding तरीके में inference के समय अतिरिक्त memory cost आती है” वाले हिस्से पर और विस्तार से समझना चाहूँगा
अनुमानित decoding में एक छोटा model तेज़, लेकिन संभवतः कम सटीक “branches” बनाता है, और फिर बड़ा model इन branches को verify करता है। लेकिन अनुमानित decoding में केवल एक token के बराबर memory चाहिए होती है, और दूसरी branches के tokens inference के दौरान बस mask कर दिए जाते हैं। अगर context size 1000 हो और 5-token वाली करीब 30 branches हों, तो memory overhead 3% है, जिसे नज़रअंदाज़ किया जा सकता है। अगर context size branches की संख्या की तुलना में बहुत छोटा है, तो क्या 50-token के context window वाले generative LLM user को generation speed की चिंता होगी, ऐसा लगता नहीं
साथ ही, अनुमानित decoding technique greedy sampling तक सीमित नहीं है। इसे original model के बिल्कुल समान काम करना चाहिए और expected probability से sampling करनी चाहिए। अनुमानित decoding से जुड़े ज़्यादातर literature में पहले ही 2.6~3.5 गुना speed improvement report किया गया है। यह blog post 2.4~3.4 गुना generation speed बताती है, तो पता नहीं यह इतना बड़ा upgrade है या नहीं
ऊपर अनुमानित decoding का ज़िक्र किया गया था और लेखक ने जिन techniques से तुलना की है वे Medusa2 और Eagle लगती हैं, लेकिन मुख्य समस्या वैसी ही है। token को पहले से predict करने का कोई भी तरीका इस्तेमाल करें, कुछ खास points ऐसे होते हैं जहाँ अगले token को predict करने से पहले पिछले token की बिल्कुल ज़रूरत होती है। यह model या technique पर निर्भर समस्या नहीं, बल्कि गणितीय रूप से क्या संभव है, इसका सवाल है। अगर पाँचवें अगले token की probability distribution पिछले चार tokens पर बहुत निर्भर करती है, तो 5 tokens को एक साथ कैसे predict किया जा सकता है? चाहे अनुमानित decoding हो, Jacobi decoding हो, या multi-token parallel decoding—बात वही है
अगर यह तरीका सिर्फ greedy sampling support करता है, तो इसका फायदा क्या है, इस पर सवाल है। खासकर जब दूसरी techniques पहले ही अपेक्षित speed improvement हासिल कर रही हैं। greedy sampling speed improvement की तुलना random sampling speed improvement से करना apples और oranges की तुलना जैसा है, और इस तरीके को random sampling के हिसाब से बदलने के बाद भी ऊपर बताई मुख्य समस्या के कारण वही speed improvement बची रहेगी या नहीं, इस पर संदेह है
consistency training के ज़रिए यह दिखाया गया हो सकता है कि पिछले tokens में गलत guesses होने पर भी LLM अगले n tokens predict कर सकता है
दूसरी ओर, गणितीय रूप से p(x_t|x_1,...,x_t-1) का x_1 से x_t-1 तक सभी पर निर्भर होना सही है, लेकिन असल में x_t को predict करने के लिए शायद x_1 से x_t-2 तक ही चाहिए और x_t-1 पर attention नगण्य हो सकती है। इसलिए x_1 से x_t-2 और गलत x_t-1 के साथ भी x_t predict किया जा सकता है
दिलचस्प चीज़ है। यह ऐसा idea है जो कई लोगों के दिमाग में आया होगा, लेकिन लेख और presentation अच्छी तरह व्यवस्थित थे