कृत्रिम बुद्धिमत्ता
LLM डिप्लॉयमेंट का अनुकूलन: vLLM PagedAttention और कुशल AI सर्विंग का भविष्य

बड़े भाषा मॉडल (LLM) को वास्तविक दुनिया के अनुप्रयोगों पर तैनात करना अद्वितीय चुनौतियाँ प्रस्तुत करता है, विशेष रूप से गणना संसाधनों, विलंबता और लागत प्रभावशीलता के संदर्भ में। इस व्यापक गाइड में, हम LLM सर्विंग की भूमिका का अन्वेषण करेंगे, विशेष रूप से vLLM (वेक्टर भाषा मॉडल) पर ध्यान केंद्रित करेंगे, जो इन शक्तिशाली मॉडलों को तैनात करने और उनसे बातचीत करने के तरीके को बदल रहा है।
बड़े भाषा मॉडलों की सेवा की चुनौतियाँ
विशिष्ट समाधानों में गोता लगाने से पहले, आइए उन प्रमुख चुनौतियों का निरीक्षण करें जो LLM सेवा को एक जटिल कार्य बनाती हैं:
गणना संसाधन
LLM अपने विशाल पैरामीटर गणना के लिए प्रसिद्ध हैं, जो अरबों से लेकर सैकड़ों अरबों तक हो सकती हैं। उदाहरण के लिए, GPT-3 में 175 अरब पैरामीटर हैं, जबकि अधिक हाल के मॉडल जैसे GPT-4 में और भी अधिक अनुमानित हैं। यह भारी आकार महत्वपूर्ण गणना आवश्यकताओं का अनुवाद करता है अनुमान के लिए।
उदाहरण:
एक अपेक्षाकृत मामूली LLM पर विचार करें जिसमें 13 अरब पैरामीटर हों, जैसे LLaMA-13B। यहां तक कि इस मॉडल को आवश्यकता है:
– मॉडल पैरामीटर को संग्रहीत करने के लिए लगभग 26 जीबी मेमोरी (16-बिट सटीकता मानकर)
– सक्रियण, ध्यान तंत्र, और मध्यवर्ती गणना के लिए अतिरिक्त मेमोरी
– वास्तविक समय अनुमान के लिए महत्वपूर्ण GPU गणना शक्ति
विलंबता
कई अनुप्रयोगों में, जैसे कि चैटबॉट या वास्तविक समय सामग्री पीढ़ी, निम्न विलंबता एक अच्छे उपयोगकर्ता अनुभव के लिए महत्वपूर्ण है। हालांकि, LLM की जटिलता महत्वपूर्ण प्रसंस्करण समय का कारण बन सकती है, विशेष रूप से लंबी अनुक्रमों के लिए।
उदाहरण:
एक ग्राहक सेवा चैटबॉट की कल्पना करें जो एक LLM द्वारा संचालित है। यदि प्रत्येक प्रतिक्रिया का उत्पादन करने में कई सेकंड लगते हैं, तो बातचीत उपयोगकर्ताओं के लिए अस्वाभाविक और निराशाजनक महसूस होगी।
लागत
LLM को पैमाने पर चलाने के लिए आवश्यक हार्डवेयर बहुत महंगा हो सकता है। उच्च-अंत GPUs या TPUs अक्सर आवश्यक होते हैं, और इन प्रणालियों की ऊर्जा खपत महत्वपूर्ण है।
उदाहरण:
NVIDIA A100 GPUs (अक्सर LLM अनुमान के लिए उपयोग किया जाता है) का एक समूह चलाने की लागत प्रति दिन हजारों डॉलर हो सकती है बादल गणना शुल्क में।
पारंपरिक दृष्टिकोण LLM सेवा
अधिक उन्नत समाधानों का अन्वेषण करने से पहले, आइए कुछ पारंपरिक दृष्टिकोणों पर संक्षेप में चर्चा करें LLM की सेवा करने के लिए:
हगिंग फेस ट्रांसफॉर्मर के साथ सरल तैनाती
हगिंग फेस ट्रांसफॉर्मर लाइब्रेरी LLM को तैनात करने का एक सीधा तरीका प्रदान करती है, लेकिन यह उच्च-थ्रूपुट सेवा के लिए अनुकूलित नहीं है।
उदाहरण कोड:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_name = "meta-llama/Llama-2-13b-hf"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
def generate_text(prompt, max_length=100):
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_length=max_length)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generate_text("The future of AI is"))
यह दृष्टिकोण काम करता है, लेकिन यह उच्च-यातायात अनुप्रयोगों के लिए उपयुक्त नहीं है क्योंकि इसका संसाधनों का उपयोग अकुशल है और सेवा के लिए अनुकूलन की कमी है।
टॉर्चसर्व या समान फ्रेमवर्क का उपयोग करना
टॉर्चसर्व जैसे फ्रेमवर्क अधिक मजबूत सेवा क्षमताएं प्रदान करते हैं, जिनमें लोड संतुलन और मॉडल संस्करण शामिल हैं। हालांकि, वे अभी भी LLM सेवा की विशिष्ट चुनौतियों का समाधान नहीं करते हैं, जैसे कि बड़े मॉडलों के लिए कुशल मेमोरी प्रबंधन।
LLM सेवा में मेमोरी प्रबंधन को समझना
कुशल मेमोरी प्रबंधन बड़े भाषा मॉडल (LLM) को सेवा देने के लिए महत्वपूर्ण है क्योंकि व्यापक गणना संसाधनों की आवश्यकता होती है। निम्नलिखित छवियां मेमोरी प्रबंधन के विभिन्न पहलुओं को दर्शाती हैं, जो LLM प्रदर्शन को अनुकूलित करने के लिए महत्वपूर्ण हैं।
सेगमेंटेड बनाम पेज्ड मेमोरी
इन दो आरेख सेगमेंटेड मेमोरी और पेज्ड मेमोरी प्रबंधन तकनीकों की तुलना करते हैं, जो आम तौर पर ऑपरेटिंग सिस्टम (ओएस) में उपयोग की जाती हैं।
- सेगमेंटेड मेमोरी: यह तकनीक मेमोरी को अलग-अलग सेगमेंट में विभाजित करती है, प्रत्येक एक अलग कार्यक्रम या प्रक्रिया के लिए। LLM सेवा संदर्भ में, विभिन्न सेगमेंट मॉडल के विभिन्न घटकों के लिए आवंटित किए जा सकते हैं, जैसे कि टोकनाइजेशन, एम्बेडिंग, और ध्यान तंत्र। प्रत्येक सेगमेंट स्वतंत्र रूप से बढ़ या घट सकता है, लचीलापन प्रदान करता है लेकिन सेगमेंट को ठीक से प्रबंधित नहीं किए जाने पर खंडित होने की संभावना है।
- पेज्ड मेमोरी: यहाँ, मेमोरी को निश्चित आकार के पेज में विभाजित किया जाता है, जो भौतिक मेमोरी पर मैप किए जाते हैं। पेज को आवश्यकतानुसार स्वैप किया जा सकता है, मेमोरी संसाधनों का कुशल उपयोग सुनिश्चित करता है। LLM सेवा में, यह मॉडल वजन और मध्यवर्ती गणनाओं के लिए आवश्यक बड़ी मात्रा में मेमोरी के प्रबंधन के लिए महत्वपूर्ण हो सकता है।
मेमोरी प्रबंधन OS बनाम vLLM
यह छवि पारंपरिक OS मेमोरी प्रबंधन की तुलना vLLM द्वारा उपयोग की जाने वाली मेमोरी प्रबंधन दृष्टिकोण से करती है।
- ओएस मेमोरी प्रबंधन: पारंपरिक ऑपरेटिंग सिस्टम में, प्रक्रियाओं (जैसे प्रक्रिया ए और प्रक्रिया बी) को भौतिक मेमोरी में पेज (पेज 0, पेज 1, आदि) आवंटित किए जाते हैं। यह आवंटन समय के साथ खंडित हो सकता है क्योंकि प्रक्रियाएं मेमोरी का अनुरोध और रिलीज करती हैं।
- vLLM मेमोरी प्रबंधन: vLLM फ्रेमवर्क एक की-वैल्यू (KV) कैश का उपयोग करके मेमोरी का अधिक कुशलता से प्रबंधन करता है। अनुरोध (जैसे अनुरोध ए और अनुरोध बी) को KV कैश (KV ब्लॉक 0, KV ब्लॉक 1, आदि) के ब्लॉक आवंटित किए जाते हैं। यह दृष्टिकोण खंडित होने को कम करता है और मेमोरी उपयोग को अनुकूलित करता है, तेजी से और अधिक कुशल मॉडल सेवा की अनुमति देता है।
LLM में ध्यान तंत्र
ध्यान तंत्र ट्रांसफॉर्मर मॉडल का एक मूलभूत घटक है, जो आमतौर पर LLM के लिए उपयोग किया जाता है। यह आरेख ध्यान सूत्र और इसके घटकों को दर्शाता है:
- प्रश्न (Q): डिकोडर चरण में एक नया टोकन या मॉडल द्वारा देखा गया अंतिम टोकन।
- कुंजी (K): पिछला संदर्भ जिस पर मॉडल को ध्यान देना चाहिए।
- मूल्य (V): पिछले संदर्भ पर भारित योग।
सूत्र ध्यान स्कोर की गणना करता है क्वेरी को कुंजी के साथ डॉट उत्पाद लेकर, कुंजी आयाम के वर्गमूल द्वारा स्केलिंग करके, सॉफ्टमैक्स फंक्शन लागू करके, और अंत में मूल्य के साथ डॉट उत्पाद लेकर। यह प्रक्रिया मॉडल को प्रत्येक टोकन के उत्पादन के दौरान इनपुट अनुक्रम के प्रासंगिक भागों पर ध्यान केंद्रित करने की अनुमति देती है।
सेवा थ्रूपुट तुलना
यह छवि विभिन्न फ्रेमवर्क (HF, TGI, और vLLM) के बीच सेवा थ्रूपुट की तुलना प्रस्तुत करती है LLaMA मॉडल का उपयोग करके विभिन्न हार्डवेयर सेटअप पर।
- LLaMA-13B, A100-40GB: vLLM HuggingFace Transformers (HF) की तुलना में 14x – 24x उच्च थ्रूपुट और HuggingFace Text Generation Inference (TGI) की तुलना में 2.2x – 2.5x उच्च थ्रूपुट प्राप्त करता है।
- LLaMA-7B, A10G: समान रुझान देखे जाते हैं, vLLM दोनों HF और TGI को महत्वपूर्ण रूप से बेहतर प्रदर्शन करता है।
vLLM: एक नई LLM सेवा आर्किटेक्चर
vLLM, जिसे UC बर्कले के शोधकर्ताओं द्वारा विकसित किया गया है, LLM सेवा प्रौद्योगिकी में एक महत्वपूर्ण कदम दर्शाता है। आइए इसकी प्रमुख विशेषताओं और नवाचारों का अन्वेषण करें:
पेज्डएटेंशन
vLLM के केंद्र में पेज्डएटेंशन है, एक नवीन ध्यान अल्गोरिदम जो ऑपरेटिंग सिस्टम में वर्चुअल मेमोरी प्रबंधन से प्रेरित है। यहाँ यह कैसे काम करता है:
– की-वैल्यू (KV) कैश विभाजन: इसके बजाय कि पूरे KV कैश को स्मृति में संग्रहीत किया जाए, पेज्डएटेंशन इसे निश्चित आकार के ब्लॉक में विभाजित करता है।
– गैर-समीपस्थ भंडारण: ये ब्लॉक स्मृति में गैर-समीपस्थ रूप से संग्रहीत किए जा सकते हैं, अधिक लचीला मेमोरी प्रबंधन की अनुमति देते हैं।
– मांग पर आवंटन: ब्लॉक केवल तभी आवंटित किए जाते हैं जब उन्हें आवश्यकता होती है, मेमोरी अपशिष्ट को कम करते हैं।
– कुशल साझा: कई अनुक्रम एक ही ब्लॉक साझा कर सकते हैं, समानांतर नमूना और बीम खोज जैसी तकनीकों के लिए अनुकूलन की अनुमति देते हैं।
स्पष्टीकरण:
“`
पारंपरिक KV कैश:
[टोकन 1 KV][टोकन 2 KV][टोकन 3 KV]…[टोकन एन KV]
(समीपस्थ मेमोरी आवंटन)
पेज्डएटेंशन KV कैश:
[ब्लॉक 1] -> भौतिक पता ए
[ब्लॉक 2] -> भौतिक पता सी
[ब्लॉक 3] -> भौतिक पता बी
…
(गैर-समीपस्थ मेमोरी आवंटन)
“`
यह दृष्टिकोण मेमोरी खंडित होने को काफी कम कर देता है और GPU मेमोरी का बहुत अधिक कुशल उपयोग सुनिश्चित करता है।
निरंतर बैचिंग
vLLM निरंतर बैचिंग लागू करता है, जो आने वाले अनुरोधों को गतिशील रूप से संसाधित करता है, निर्धारित बैचों का गठन करने के लिए प्रतीक्षा करने के बजाय। इससे कम विलंबता और उच्च थ्रूपुट होता है।
उदाहरण:
एक अनुरोध प्रवाह की कल्पना करें:
“`
समय 0ms: अनुरोध ए आता है
समय 10ms: अनुरोध ए की प्रक्रिया शुरू होती है
समय 15ms: अनुरोध बी आता है
समय 20ms: अनुरोध बी की प्रक्रिया शुरू होती है (ए के साथ समांतर में)
समय 25ms: अनुरोध सी आता है
…
“`
निरंतर बैचिंग के साथ, vLLM प्रत्येक अनुरोध को तुरंत संसाधित कर सकता है, निर्धारित बैचों में उन्हें समूहित करने के लिए प्रतीक्षा करने के बजाय।
कुशल समांतर नमूना
उन अनुप्रयोगों के लिए जिन्हें प्रति प्रोम्प्ट कई आउटपुट नमूने की आवश्यकता होती है (जैसे रचनात्मक लेखन सहायक), vLLM की मेमोरी साझा करने की क्षमताएं उत्कृष्ट हैं। यह साझा प्रीफिक्स के लिए KV कैश का पुन: उपयोग करते हुए कई आउटपुट उत्पन्न कर सकता है।
उदाहरण कोड vLLM का उपयोग करते हुए:
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-2-13b-hf")
prompts = ["भविष्य की AI है"]
# प्रति प्रोम्प्ट 3 नमूने उत्पन्न करें
sampling_params = SamplingParams(n=3, temperature=0.8, max_tokens=100)
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(f"प्रोम्प्ट: {output.prompt}")
for i, out in enumerate(output.outputs):
print(f"नमूना {i + 1}: {out.text}")
यह कोड दिए गए प्रोम्प्ट के लिए कुशलता से कई नमूने उत्पन्न करता है, vLLM के अनुकूलन का लाभ उठाता है।
vLLM प्रदर्शन का बेंचमार्किंग
vLLM के प्रभाव को वास्तव में सराहने के लिए, आइए कुछ प्रदर्शन तुलनाओं पर एक नज़र डालें:
थ्रूपुट तुलना
प्रदान की गई जानकारी के आधार पर, vLLM अन्य सेवा समाधानों को महत्वपूर्ण रूप से बेहतर प्रदर्शन करता है:
– हगिंग फेस ट्रांसफॉर्मर की तुलना में 24x उच्च थ्रूपुट
– हगिंग फेस टेक्स्ट जेनरेशन इन्फरेंस (TGI) की तुलना में 2.2x से 3.5x उच्च थ्रूपुट
स्पष्टीकरण:
“`
थ्रूपुट (टोकन/सेकंड)
|
| ****
| ****
| ****
| **** ****
| **** **** ****
| **** **** ****
|————————
HF TGI vLLM
“`
मेमोरी दक्षता
vLLM का पेज्डएटेंशन परिणामस्वरूप लगभग-अनुकूल मेमोरी उपयोग होता है:
– केवल लगभग 4% मेमोरी अपशिष्ट, पारंपरिक प्रणालियों में 60-80% की तुलना में
– यह दक्षता एक ही हार्डवेयर के साथ बड़े मॉडलों की सेवा करने या अधिक समांतर अनुरोधों को संभालने की अनुमति देती है
vLLM के साथ शुरुआत करना
अब जबकि हमने vLLM के लाभों का अन्वेषण किया है, आइए इसकी स्थापना और उपयोग की प्रक्रिया पर एक नज़र डालें आपके परियोजनाओं में।
6.1 स्थापना
vLLM स्थापित करना पाइप का उपयोग करके सीधा है:
!pip install vllm
6.2 ऑफलाइन अनुमान के लिए बुनियादी उपयोग
यहाँ vLLM का उपयोग करके ऑफलाइन पाठ उत्पादन का एक सरल उदाहरण है:
from vllm import LLM, SamplingParams
# मॉडल को प्रारंभ करें
llm = LLM(model="meta-llama/Llama-2-13b-hf")
# प्रोम्प्ट तैयार करें
prompts = [
"एक छोटी कविता लिखें जो कृत्रिम बुद्धिमत्ता के बारे में है:",
"क्वांटम कंप्यूटिंग को सरल शब्दों में समझाएं:"
]
# नमूना पैरामीटर सेट करें
sampling_params = SamplingParams(temperature=0.8, max_tokens=100)
# प्रतिक्रियाएं उत्पन्न करें
outputs = llm.generate(prompts, sampling_params)
# परिणाम प्रिंट करें
for output in outputs:
print(f"प्रोम्प्ट: {output.prompt}")
print(f"उत्पन्न पाठ: {output.outputs[0].text}\n")
यह स्क्रिप्ट मॉडल को लोड करती है, नमूना पैरामीटर सेट करती है, और कई प्रोम्प्ट के लिए पाठ उत्पन्न करती है।
6.3 vLLM सर्वर सेट अप करना
ऑनलाइन सेवा के लिए, vLLM एक ओपनएआई-संगत एपीआई सर्वर प्रदान करता है। यहाँ इसकी स्थापना का तरीका है:
1. सर्वर शुरू करें:
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-2-13b-hf
2. कर्ल का उपयोग करके सर्वर को क्वेरी करें:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model": "meta-llama/Llama-2-13b-hf", "prompt": "कृत्रिम बुद्धिमत्ता के लाभों में शामिल हैं:", "max_tokens": 100, "temperature": 0.7}'
यह सेटअप आपको ओपनएआई के एपीआई के साथ संगत इंटरफेस के साथ अपने LLM की सेवा करने की अनुमति देता है, इसे मौजूदा अनुप्रयोगों में एकीकृत करना आसान बनाता है।
उन्नत विषय vLLM पर
जबकि vLLM LLM सेवा में महत्वपूर्ण सुधार प्रदान करता है,还有 अतिरिक्त विचार और उन्नत विषय हैं जिन्हें अन्वेषण किया जा सकता है:
7.1 मॉडल क्वांटाइजेशन
अधिक कुशल सेवा के लिए, विशेष रूप से सीमित मेमोरी वाले हार्डवेयर पर, क्वांटाइजेशन तकनीकों का उपयोग किया जा सकता है। जबकि vLLM खुद क्वांटाइजेशन का समर्थन नहीं करता है, इसे क्वांटाइज्ड मॉडल के साथ उपयोग किया जा सकता है:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch # एक क्वांटाइज्ड मॉडल लोड करें model_name = "meta-llama/Llama-2-13b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", load_in_8bit=True) tokenizer = AutoTokenizer.from_pretrained(model_name) # इसे vLLM के साथ उपयोग करें from vllm import LLM llm = LLM(model=model, tokenizer=tokenizer)
7.2 वितरित अनुमान
बहुत बड़े मॉडल या उच्च-यातायात अनुप्रयोगों के लिए, कई GPU या मशीनों पर वितरित अनुमान आवश्यक हो सकता है। जबकि vLLM मूल रूप से इसका समर्थन नहीं करता है, इसे रे जैसे फ्रेमवर्क का उपयोग करके वितरित प्रणालियों में एकीकृत किया जा सकता है:
import ray
from vllm import LLM
@ray.remote(num_gpus=1)
class DistributedLLM:
def __init__(self, model_name):
self.llm = LLM(model=model_name)
def generate(self, prompt, params):
return self.llm.generate(prompt, params)
# वितरित LLM को प्रारंभ करें
llm1 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf")
llm2 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf")
# उन्हें समांतर में उपयोग करें
result1 = llm1.generate.remote("प्रोम्प्ट 1", sampling_params)
result2 = llm2.generate.remote("प्रोम्प्ट 2", sampling_params)
# परिणाम प्राप्त करें
print(ray.get([result1, result2]))
7.3 निगरानी और दृश्यता
उत्पादन में LLM की सेवा करते समय, निगरानी महत्वपूर्ण है। जबकि vLLM में निर्मित निगरानी नहीं है, आप प्रमोशस और ग्राफाना जैसे उपकरणों के साथ एकीकृत कर सकते हैं:
from prometheus_client import start_http_server, Summary
from vllm import LLM
# मीट्रिक परिभाषित करें
REQUEST_TIME = Summary('request_processing_seconds', 'request processing time')
# vLLM को प्रारंभ करें
llm = LLM(model="meta-llama/Llama-2-13b-hf")
# मीट्रिक को उजागर करें
start_http_server(8000)
# मॉडल का उपयोग निगरानी के साथ करें
@REQUEST_TIME.time()
def process_request(prompt):
return llm.generate(prompt)
# आपका सेवा लूप यहाँ हो सकता है
यह सेटअप आपको अनुरोध प्रसंस्करण समय जैसे मीट्रिक को ट्रैक करने की अनुमति देता है, जिसे ग्राफाना डैशबोर्ड में देखा जा सकता है।
निष्कर्ष
बड़े भाषा मॉडलों को कुशलता से सेवा देना AI के युग में एक जटिल लेकिन महत्वपूर्ण कार्य है। vLLM, अपने नवीन पेज्डएटेंशन अल्गोरिदम और अनुकूलित कार्यान्वयन के साथ, LLM तैनाती प्रौद्योगिकी में एक महत्वपूर्ण कदम दर्शाता है।
थ्रूपुट में नाटकीय सुधार, मेमोरी अपशिष्ट में कमी, और अधिक लचीले सेवा विकल्पों को सक्षम करके, vLLM विभिन्न अनुप्रयोगों में शक्तिशाली भाषा मॉडलों के एकीकरण के लिए नए अवसर खोलता है। चाहे आप एक चैटबॉट, सामग्री पीढ़ी प्रणाली, या कोई अन्य NLP-संचालित अनुप्रयोग बना रहे हों, vLLM जैसे उपकरणों को समझना और उपयोग करना सफलता के लिए महत्वपूर्ण होगा।














