ओलामा कैसे समानांतर अनुरोधों का संभालता है

ओलामा को समानांतर अनुरोधों के निष्पादन के लिए स्थापित करें।

Page content

जब Ollama सर्वर एक ही समय में दो अनुरोध प्राप्त करता है, तो इसका व्यवहार इसके विन्यास और उपलब्ध प्रणाली संसाधनों पर निर्भर करता है।

पांच अद्भुत गैल्ला खेत में खड़े हैं

समानांतर अनुरोध संचालन

  • समानांतर प्रसंस्करण: Ollama समानांतर अनुरोधों के प्रसंस्करण का समर्थन करता है. यदि प्रणाली में पर्याप्त उपलब्ध स्मृति (CPU अनुमान के लिए RAM, GPU अनुमान के लिए VRAM) है, तो कई मॉडल एक साथ लोड किए जा सकते हैं, और प्रत्येक लोड किए गए मॉडल कई अनुरोधों को समानांतर में प्रसंस्करण कर सकते हैं। यह OLLAMA_NUM_PARALLEL वातावरण चर द्वारा नियंत्रित किया जाता है, जो प्रत्येक मॉडल द्वारा साथ में प्रसंस्करण कर सकने वाले अधिकतम समानांतर अनुरोधों की संख्या निर्धारित करता है। डिफ़ॉल्ट रूप से, यह 4 (या 1, यदि स्मृति उपलब्धता पर निर्भर) तक सेट किया गया है, लेकिन इसे समायोजित किया जा सकता है।

  • बैचिंग: जब एक ही मॉडल के लिए कई अनुरोध एक ही समय में प्राप्त होते हैं, तो Ollama उन्हें बैच में जोड़ता है और एक साथ प्रसंस्करण करता है। इसका मतलब है कि दोनों अनुरोध समानांतर में प्रसंस्करण किए जाते हैं, और उपयोगकर्ता एक ही समय में प्रतिक्रिया के स्ट्रीमिंग को देखेंगे। सर्वर बैच भरने के लिए अप्रचलित रूप से इंतजार नहीं करता है; प्रसंस्करण जैसे ही अनुरोध उपलब्ध होते हैं, शुरू हो जाता है।

कतार और सीमाएं

  • कतार: यदि समानांतर अनुरोधों की संख्या विन्यास के बाहर होती है (उदाहरण के लिए, एक मॉडल के लिए OLLAMA_NUM_PARALLEL से अधिक अनुरोध), तो अतिरिक्त अनुरोध कतार में रखे जाते हैं। कतार पहले आए, पहले जाए (FIFO) के तरीके से काम करती है।

  • कतार सीमाएं: कतार में अधिकतम अनुरोधों की संख्या OLLAMA_MAX_QUEUE (डिफ़ॉल्ट: 512) द्वारा नियंत्रित की जाती है। यदि कतार पूरी हो जाती है, तो नए अनुरोध 503 त्रुटि प्राप्त करते हैं, जो सर्वर बोझित है।

  • मॉडल लोडिंग: एक समय में लोड किए जा सकने वाले अलग-अलग मॉडलों की संख्या OLLAMA_MAX_LOADED_MODELS द्वारा नियंत्रित की जाती है। यदि एक अनुरोध एक नए मॉडल को लोड करने की आवश्यकता है और स्मृति पर्याप्त नहीं है, तो Ollama अशांत मॉडलों को बाहर निकाल देता है ताकि जगह बने रहे, और अनुरोध कतार में रखा जाता है जब तक मॉडल लोड नहीं हो जाता।

उदाहरण परिदृश्य

यदि एक ही मॉडल के लिए दो अनुरोध एक ही समय में प्राप्त होते हैं और सर्वर के समानांतरता को कम से कम 2 तक सेट किया गया है, तो दोनों अनुरोध एक बैच में एक साथ प्रसंस्करण किए जाएंगे, और दोनों उपयोगकर्ता एक साथ प्रतिक्रिया प्राप्त करेंगे। यदि समानांतरता 1 तक सेट की गई है, तो एक अनुरोध तुरंत प्रसंस्करण किया जाएगा, और दूसरा कतार में रखा जाएगा जब तक पहला पूरा नहीं हो जाता।

यदि अनुरोध अलग-अलग मॉडलों के लिए हैं और पर्याप्त स्मृति है, तो दोनों मॉडल लोड किए जा सकते हैं और अनुरोध समानांतर में प्रसंस्करण किए जा सकते हैं। यदि नहीं, तो एक मॉडल को बाहर निकालना पड़ सकता है, और अनुरोध कतार में रखा जाएगा।

सारांश सारणी

परिदृश्य परिणाम
दो अनुरोध, एक ही मॉडल, पर्याप्त समानांतरता दोनों एक साथ समानांतर में प्रसंस्करण (बैच के रूप में)
दो अनुरोध, एक ही मॉडल, समानांतरता=1 एक प्रसंस्करण, दूसरा कतार में रखा जाएगा जब तक पहला पूरा नहीं हो जाता
दो अनुरोध, अलग-अलग मॉडल, पर्याप्त स्मृति दोनों मॉडल लोड किए जाएंगे, अनुरोध समानांतर में प्रसंस्करण किए जाएंगे
दो अनुरोध, अलग-अलग मॉडल, पर्याप्त स्मृति नहीं एक कतार में रखा जाएगा जब तक स्मृति उपलब्ध हो या एक मॉडल बाहर निकाला जाए

सारांश में, Ollama के लिए बहुत सारे समानांतर अनुरोधों को कुशलता से प्रसंस्करण करने के लिए यह आवश्यक है कि सर्वर के लिए समानांतरता के लिए विन्यास किया गया हो और पर्याप्त संसाधन हों। अन्यथा, अनुरोध कतार में रखे जाएंगे और क्रम में प्रसंस्करण किए जाएंगे।

अपर्याप्त स्मृति संचालन

जब Ollama आगमन अनुरोधों के लिए अपर्याप्त स्मृति के साथ भेंट करता है, तो यह एक बैचिंग यंत्रों और संसाधन प्रबंधन रणनीतियों के संयोजन का उपयोग करता है ताकि स्थायित्व बनाए रखा जा सके:

अनुरोध कतार

  • जब स्मृति तत्काल आवंटित नहीं की जा सकती है, तो नए अनुरोधों को एक पहले आए, पहले जाए (FIFO) कतार में रखा जाता है।
  • कतार के आकार को OLLAMA_MAX_QUEUE (डिफ़ॉल्ट: 512 अनुरोध) द्वारा नियंत्रित किया जाता है।
  • यदि कतार क्षमता तक पहुंच जाती है, तो नए अनुरोध 503 “सर्वर बोझित” त्रुटि प्राप्त करते हैं।

मॉडल प्रबंधन

  • जब मॉडल अशांत हो जाते हैं, तो उन्हें स्मृति से बाहर निकाल दिया जाता है ताकि कतार में अनुरोधों के लिए संसाधन मुक्त किया जा सके।
  • एक समय में लोड किए गए मॉडलों की संख्या OLLAMA_MAX_LOADED_MODELS (डिफ़ॉल्ट: 3×GPU गिनती या 3) द्वारा सीमित की जाती है।

स्मृति अनुकूलन

  • एक ही मॉडल के लिए अनुरोधों के बैचिंग के उपाय करने के लिए अधिकतम स्मृति दक्षता के लिए प्रयास किए जाते हैं।
  • GPU अनुमान के लिए, प्रति मॉडल पूर्ण VRAM आवंटन आवश्यक है - आंशिक लोड समर्थित नहीं है।

असफलता के परिदृश्य

महत्वपूर्ण स्मृति अभाव: जब भी कतार में अनुरोध उपलब्ध संसाधनों के बाहर होते हैं, तो Ollama:

  • डिस्क पर पृष्ठ ले सकता है (प्रदर्शन के बहुत गंभीर गिरावट के साथ)
  • “स्मृति के बाहर” त्रुटि लौटा सकता है
  • बहुत गंभीर मामलों में मॉडल उदाहरण को गिरा सकता है
सेटिंग कंट्रोल करने वाला विन्यास उद्देश्य डिफ़ॉल्ट मूल्य
OLLAMA_MAX_QUEUE अधिकतम कतार अनुरोध 512
OLLAMA_NUM_PARALLEL प्रति लोड किए गए मॉडल समानांतर अनुरोध 4 (या 1 यदि सीमित)
OLLAMA_MAX_LOADED_MODELS अधिकतम समानांतर लोड किए गए मॉडल 3×GPU गिनती या 3

प्रशासकों को स्मृति उपयोग की निगरानी करनी चाहिए और अपनी हार्डवेयर क्षमताओं के आधार पर इन पैरामीटर को समायोजित करना चाहिए। अपर्याप्त स्मृति प्रबंधन बड़े मॉडलों (7B+ पैरामीटर) या बहुत सारे समानांतर अनुरोधों के चलाने के समय महत्वपूर्ण होता है।

Ollama अनुकूलन रणनीतियाँ

GPU त्वरण के साथ एक्सपोर्ट OLLAMA_CUDA=1 और CPU थ्रेड्स के लिए एक्सपोर्ट OLLAMA_NUM_THREADS=84 के साथ सक्षम करें। हार्डवेयर बढ़ाव

  • RAM: 13B मॉडलों के लिए 32GB+, 70B मॉडलों के लिए 64GB+
  • संग्रहण: तेज़ मॉडल लोडिंग/स्वैपिंग के लिए NVMe SSDs
  • GPU: बड़े मॉडलों के लिए 16GB+ VRAM वाले NVIDIA RTX 3080/4090

कार्यात्मक रणनीतियाँ

  • अनुरोध बैचिंग: एक साथ कई प्रश्नों को प्रसंस्करण करके स्मृति बोझ के वितरण करें
  • स्वचालित मॉडल अनलोडिंग: Ollama को अशांत मॉडलों को स्मृति से हटाने की अनुमति दें
  • आम उपयोग किए गए मॉडलों के लिए कैश: सामान्य मॉडलों को स्मृति में रखे रहें

निगरानी और आउटपुट निर्माण

  • nvidia-smi (GPU) और htop (CPU/RAM) का उपयोग करके बॉटलनेक की पहचान करें
  • स्मृति त्रुटियों के लिए:
  • क्वांटाइज़ किए गए मॉडलों के लिए अपग्रेड करें
  • समानांतर अनुरोधों को कम करें
  • स्वैप स्पेस को बढ़ाएं

उदाहरण अनुकूलन कार्य प्रविधि:

# क्वांटाइज़ किए गए मॉडल के साथ GPU त्वरण का उपयोग करें
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048

# लोड किए गए मॉडलों और समानांतर अनुरोधों को सीमित करें
export OLLAMA_MAX_LOADED_MODE旗下=2
export OLLAMA_NUM_PARALLEL=4

ये समायोजन उत्पादन गुणवत्ता के साथ 30-60% स्मृति उपयोग कम कर सकते हैं, विशेष रूप से जब बड़े मॉडलों या उच्च अनुरोध आयामों के साथ काम करते हैं।

Ollama: अनुरोधों के बैचिंग विरोध बनाम समानांतर निष्पादन

Ollama में बैचिंग अनुरोधों के समूह बनाने की विधि के बारे में बताता है और उन्हें एक इकाई के रूप में प्रसंस्करण करता है। यह गणना संसाधनों के अधिक कुशल उपयोग की अनुमति देता है, विशेष रूप से जब उपकरण जो समानांतरीकृत ऑपरेशन (जैसे GPU) के लिए लाभ उठाते हैं।

जब एक ही मॉडल के लिए कई अनुरोध एक ही समय में प्राप्त होते हैं, तो Ollama यदि स्मृति अनुमति देता है, तो उन्हें एक बैच में एक साथ प्रसंस्करण कर सकता है। यह आउटपुट के लिए अधिक उच्च आउटपुट और प्रति अनुरोध लैटेंसी कम कर सकता है, क्योंकि मॉडल बैच के ऊपर अनुकूलित मैट्रिक्स ऑपरेशन का उपयोग कर सकता है।

बैचिंग तब विशेष रूप से प्रभावी होता है जब अनुरोध आकार और जटिलता में समान होते हैं, क्योंकि यह बेहतर हार्डवेयर उपयोग की अनुमति देता है।

Ollama में समानांतर निष्पादन का मतलब एक ही समय में कई अनुरोधों के निष्पादन है, या एक ही मॉडल के लिए या अलग-अलग मॉडलों के लिए, उपलब्ध स्मृति और विन्यास के आधार पर।

Ollama दो स्तरों के समानांतरता का समर्थन करता है:

  • बहुत सारे मॉडल लोडिंग: यदि पर्याप्त स्मृति उपलब्ध है, तो कई मॉडल लोड किए जा सकते हैं और एक साथ अनुरोधों के लिए सेवा कर सकते हैं।
  • प्रति मॉडल समानांतर अनुरोध: प्रत्येक लोड किए गए मॉडल कई अनुरोधों को समानांतर में प्रसंस्करण कर सकता है, जो OLLAMA_NUM_PARALLEL द्वारा नियंत्रित किया जाता है।

जब अनुरोध अधिक होते हैं तो अनुरोधों के लिए बैचिंग एक अच्छा विकल्प होता है, जबकि जब अनुरोध अलग-अलग होते हैं तो समानांतर निष्पादन अच्छा होता है।

अंतिम विचार

Ollama एक अद्वितीय उपकरण है जो अनुरोधों के बैचिंग और समानांतर निष्पादन के बीच संतुलन बनाए रखता है, जिससे उच्च उत्पादकता और अच्छी उपयोगकर्ता अनुभव के लिए अनुकूलन की अनुमति देता है।

संबंधित संसाधन

Ollama: अनुरोधों के बैचिंग विरोध बनाम समानांतर निष्पादन

Ollama में बैचिंग अनुरोधों के समूह बनाने की विधि के बारे में बताता है और उन्हें एक इकाई के रूप में प्रसंस्करण करता है। यह गणना संसाधनों के अधिक कुशल उपयोग की अनुमति देता है, विशेष रूप से जब उपकरण जो समानांतरीकृत ऑपरेशन (जैसे GPU) के लिए लाभ उठाते हैं।

जब एक ही मॉडल के लिए कई अनुरोध एक ही समय में प्राप्त होते हैं, तो Ollama यदि स्मृति अनुमति देता है, तो उन्हें एक बैच में एक साथ प्रसंस्करण कर सकता है। यह आउटपुट के लिए अधिक उच्च आउटपुट और प्रति अनुरोध लैटेंसी कम कर सकता है, क्योंकि मॉडल बैच के ऊपर अनुकूलित मैट्रिक्स ऑपरेशन का उपयोग कर सकता है।

बैचिंग तब विशेष रूप से प्रभावी होता है जब अनुरोध आकार और जटिलता में समान होते हैं, क्योंकि यह बेहतर हार्डवेयर उपयोग की अनुमति देता है।

Ollama में समानांतर निष्पादन का मतलब एक ही समय में कई अनुरोधों के निष्पादन है, या एक ही मॉडल के लिए या अलग-अलग मॉडलों के लिए, उपलब्ध स्मृति और विन्यास के आधार पर।

Ollama दो स्तरों के समानांतरता का समर्थन करता है:

  • बहुत सारे मॉडल लोडिंग: यदि पर्याप्त स्मृति उपलब्ध है, तो कई मॉडल लोड किए जा सकते हैं और एक साथ अनुरोधों के लिए सेवा कर सकते हैं।
  • प्रति मॉडल समानांतर अनुरोध: प्रत्येक लोड किए गए मॉडल कई अनुरोधों को समानांतर में प्रसंस्करण कर सकता है, जो OLLAMA_NUM_PARALLEL द्वारा नियंत्रित किया जाता है।

जब अनुरोध अधिक होते हैं तो अनुरोधों के लिए बैचिंग एक अच्छा विकल्प होता है, जबकि जब अनुरोध अलग-अलग होते हैं तो समानांतर निष्पादन अच्छा होता है।

अंतिम विचार

Ollama एक अद्वितीय उपकरण है जो अनुरोधों के बैचिंग और समानांतर निष्पादन के बीच संतुलन बनाए रखता है, जिससे उच्च उत्पादकता और अच्छी उपयोगकर्ता अनुभव के लिए अनुकूलन की अनुमति देता है।

संबंधित संसाधन