एआई मॉडल और प्लेटफ़ॉर्म

माइक्रोसॉफ्ट का इन्फरेंस फ्रेमवर्क 1-बिट लार्ज लैंग्वेज मॉडल्स को स्थानीय डिवाइसेस पर लाता है

mm
Unite.AI को Google पर अपने पसंदीदा स्रोतों में जोड़ें

17 अक्टूबर, 2024 को, माइक्रोसॉफ्ट ने BitNet.cpp की घोषणा की, जो 1-बिट क्वांटाइज्ड लार्ज लैंग्वेज मॉडल्स (LLMs) चलाने के लिए डिज़ाइन किया गया एक इन्फरेंस फ्रेमवर्क है। BitNet.cpp जेन एआई में एक महत्वपूर्ण प्रगति है, जो मानक सीपीयू पर 1-बिट एलएलएम्स को कुशलता से तैनात करने की अनुमति देता है, बिना महंगे जीपीयू की आवश्यकता के। यह विकास एलएलएम्स तक पहुंच को लोकतांत्रिक बनाता है, उन्हें विभिन्न प्रकार के उपकरणों पर उपलब्ध कराता है और ऑन-डिवाइस एआई अनुप्रयोगों में नए अवसर प्रदान करता है।

1-बिट लार्ज लैंग्वेज मॉडल्स को समझना

लार्ज लैंग्वेज मॉडल्स (एलएलएम्स) ने पारंपरिक रूप से महत्वपूर्ण गणनात्मक संसाधनों की आवश्यकता के कारण उच्च-सटीक फ्लोटिंग-पॉइंट संख्याओं (आमतौर पर एफपी16 या बीएफ16) का उपयोग मॉडल वजन के लिए किया है। यह आवश्यकता एलएलएम्स को तैनात करने को महंगा और ऊर्जा-गहन बना देती है।

1-बिट एलएलएम्स का केंद्र मॉडल वजन को तीन संभावित मानों में प्रस्तुत करने के लिए चरम क्वांटीकरण तकनीकों का उपयोग करते हैं: -1, 0, और 1, इसलिए “1.58-बिट” (क्योंकि यह तीन राज्यों को एन्कोड करने के लिए थोड़ा अधिक एक बिट की आवश्यकता होती है)।

(MSFT )

टर्नरी वेट सिस्टम

संकल्पना

BitNet.cpp में 1-बिट क्वांटीकरण एक टर्नरी वेट सिस्टम है। बिटनेट केवल तीन संभावित मानों के साथ काम करता है:

  • -1 (नकारात्मक)
  • 0 (तटस्थ)
  • 1 (सकारात्मक)

इसका परिणाम प्रति पैरामीटर लगभग 1.58 बिट्स की स्टोरेज आवश्यकता है, जिससे बिटनेट बी1.58 नाम मिलता है। पैरामीटर बिट चौड़ाई में यह अत्यधिक कमी मेमोरी उपयोग और गणनात्मक जटिलता में एक प्रभावशाली कमी की ओर ले जाती है, क्योंकि अधिकांश फ्लोटिंग-पॉइंट गुणन को सरल जोड़ और घटाव के साथ बदल दिया जाता है।

गणितीय आधार

1-बिट क्वांटीकरण में वजन और सक्रियण को उनके टर्नरी प्रतिनिधित्व में परिवर्तित करना शामिल है:

1. वेट बाइनराइजेशन

वजन को बाइनराइज करने में वजन को उनके माध्य (α) के आसपास केंद्रित करना शामिल है, जिससे एक टर्नरी प्रतिनिधित्व होता है। यह परिवर्तन गणितीय रूप से इस प्रकार व्यक्त किया जाता है:

Wf​=Sign(W−α)

जहां:

  • W मूल वजन मैट्रिक्स है।
  • α वजन का माध्य है।
  • Sign(x) +1 लौटाता है अगर x > 0 और -1 अन्यथा।

2. एक्टिवेशन क्वांटाइजेशन

सक्रियण को क्वांटाइज करना सुनिश्चित करता है कि इनपुट एक निर्दिष्ट बिट चौड़ाई के भीतर सीमित हैं:

x^e​=Quant(x)=Clip(γx×Qb​​,−Qb​+ϵ,Qb​−ϵ)

जहां:

  • Qb = 2(b−1)2^{(b-1)} बिट चौड़ाई के लिए अधिकतम क्वांटीकरण स्तर है।
  • γ x का अधिकतम पूर्ण मान है (संकेत द्वारा ∣∣x∣∣∞ द्वारा संकेत दिया गया है)।
  • ε एक छोटी संख्या है जो गणना के दौरान ओवरफ्लो को रोकने के लिए है।

3. बिटलीनियर ऑपरेशन

बिटलीनियर लेयर पारंपरिक मैट्रिक्स गुणन को एक सरलीकृत ऑपरेशन से बदल देती है:

y=Wf​×x^e​×(Qb​βγ​)

जहां:

  • β एक स्केलिंग फैक्टर है जिसका उपयोग अनुमान त्रुटियों को कम करने के लिए किया जाता है।
  • γ सक्रियण को स्केल करता है।
  • Q_b क्वांटीकरण फैक्टर है।

यह परिवर्तन कुशल गणना की अनुमति देता है जबकि मॉडल के प्रदर्शन को बनाए रखता है।

प्रदर्शन के निहितार्थ

मेमोरी दक्षता

टर्नरी वेट सिस्टम मेमोरी आवश्यकताओं को काफी कम कर देता है:

  • पारंपरिक एलएलएम्स: 16 बिट प्रति वजन
  • बिटनेट.सीपीपी: 1.58 बिट प्रति वजन

यह कमी पारंपरिक 16-बिट मॉडल की तुलना में लगभग 90% मेमोरी बचत के बराबर है, जिससे बड़े मॉडल एक ही हार्डवेयर प्रतिबंधों के भीतर फिट हो सकते हैं।

ऊर्जा दक्षता

अनुमान गति, ऊर्जा दक्षता (एप्पल एम2)

 

अनुमान गति: दोनों सीपीयू पर तेज

अनुमान गति, ऊर्जा दक्षता (आई7-13700एच)

1. अनुमान गति: दोनों सीपीयू पर तेज

अनुमान गति प्रति सेकंड संसाधित टोकन की संख्या के रूप में दर्शाई जाती है। यहाँ कुछ पर्यवेक्षण हैं:

  • एप्पल एम2 अल्ट्रा पर: बिटनेट.सीपीपी 30बी मॉडल के लिए लामा .सीपीपी की तुलना में 5.07x गति प्राप्त करता है, जिसमें 125एम मॉडल के लिए 593.43 टोकन प्रति सेकंड की चोटी है, जो 1.37x गति है। 3.8बी और 7बी जैसे बड़े मॉडल के लिए, बिटनेट.सीपीपी 84.77 टोकन प्रति सेकंड से अधिक की गति बनाए रखता है, जो विभिन्न स्तरों पर इसकी दक्षता को दर्शाता है।
  • इंटेल आई7-13700एच पर: बिटनेट.सीपीपी गति में और भी अधिक नाटकीय सुधार प्राप्त करता है। 7बी मॉडल के आकार पर, बिटनेट.सीपीपी लामा .सीपीपी की तुलना में 5.68x गति प्राप्त करता है। 125एम जैसे छोटे मॉडल के लिए, यह 389.08 टोकन प्रति सेकंड संसाधित करता है, जो लामा .सीपीपी की तुलना में 2.37x तेज है।

2. ऊर्जा दक्षता: एज डिवाइसेस के लिए एक गेम-चेंजर

प्रदान की गई ग्राफ़ में ऊर्जा लागत तुलना भी शामिल है, जो प्रति टोकन प्रसंस्करण में एक महत्वपूर्ण ऊर्जा खपत में कमी दिखाती है:

  • एप्पल एम2 अल्ट्रा पर: बिटनेट.सीपीपी की ऊर्जा बचत महत्वपूर्ण है। 700एम मॉडल के लिए, यह लामा .सीपीपी की तुलना में प्रति टोकन 55.4% कम ऊर्जा की खपत करता है, जो 0.314 से 0.140 तक गिर जाती है। यह रुझान बड़े मॉडल के लिए जारी रहता है, जिसमें 70बी मॉडल में 70.0% ऊर्जा खपत में कमी देखी जाती है।
  • इंटेल आई7-13700एच पर: बिटनेट.सीपीपी 71.9% ऊर्जा बचत प्रदान करता है 700एम मॉडल के लिए, जो 1.367 से 0.384 तक गिर जाती है। हालांकि लामा .सीपीपी के लिए 70बी मॉडल के लिए ऊर्जा डेटा उपलब्ध नहीं है, बिटनेट.सीपीपी की ऊर्जा खपत 17.33 पर रहती है।

3. मानव-पढ़ने की गति बेंचमार्क को पार करना

इन ग्राफ़ से एक दिलचस्प अंतर्दृष्टि मानव-पढ़ने की गति का उल्लेख है, जो 5-7 टोकन प्रति सेकंड पर चिह्नित है। यह लाल रेखा दिखाती है कि दोनों कार्यान्वयन, विशेष रूप से बिटनेट.सीपीपी, मानव-पढ़ने की गति से अधिक हो सकते हैं, यहां तक कि सबसे बड़े मॉडल के लिए भी:

  • एप्पल एम2 अल्ट्रा पर, बिटनेट.सीपीपी सभी मॉडल आकारों के लिए मानव-पढ़ने की गति से अधिक है, जिसमें 70बी मॉडल के लिए 8.67 टोकन प्रति सेकंड की न्यूनतम गति है।
  • इंटेल आई7-13700एच पर, 100बी मॉडल अभी भी 1.70 टोकन प्रति सेकंड प्राप्त करता है, जो मानव-पढ़ने की गति के निचले स्तर को लगभग छूता है, जबकि सभी छोटे मॉडल इस बेंचमार्क से अधिक हैं।

प्रशिक्षण विचार

स्ट्रेट-थ्रू एस्टिमेटर (एसटीई)

1-बिट क्वांटीकरण में गैर-विभेदकारी कार्यों को पेश करने के कारण, प्रशिक्षण में एक विशेष तकनीक शामिल होती है जिसे स्ट्रेट-थ्रू एस्टिमेटर (एसटीई) कहा जाता है। इस दृष्टिकोण में, ग्रेडिएंट गैर-विभेदक बिंदुओं के माध्यम से अपरिवर्तित प्रवाहित होते हैं। पाइथन में एक सरल कार्यान्वयन यह है:

class StraightThroughEstimator(Function):
@staticmethod
def forward(ctx, input):
return input.sign()

@staticmethod
def backward(ctx, grad_output):
return grad_output

मिश्रित सटीकता प्रशिक्षण

प्रशिक्षण के दौरान स्थिरता बनाए रखने के लिए, मिश्रित सटीकता का उपयोग किया जाता है:

  • वजन और सक्रियण: 1-बिट सटीकता में क्वांटाइज़ किया गया।
  • ग्रेडिएंट और ऑप्टिमाइज़र राज्य: उच्च सटीकता में संग्रहीत।
  • लेटेंट वजन: प्रशिक्षण के दौरान सटीक अद्यतन सुविधा के लिए उच्च सटीकता में बनाए रखा जाता है।

बड़ा शिक्षण दर रणनीति

1-बिट मॉडल के साथ एक अनोखी चुनौती यह है कि छोटे अद्यतन वजन को बाइनराइज़ नहीं कर सकते हैं। इसे कम करने के लिए, शिक्षण दर बढ़ाई जाती है, जो पारंपरिक दृष्टिकोणों की तुलना में तेजी से अभिसरण और बेहतर अनुकूलन सुनिश्चित करती है।

समूह क्वांटाइजेशन और मानकीकरण

बिटनेट.सीपीपी समूह क्वांटाइजेशन और मानकीकरण को मॉडल समांतरता में सुधार के लिए पेश करता है। इसके बजाय पूरे वजन मैट्रिक्स के लिए पैरामीटर की गणना करने के, बिटनेट वजन और सक्रियण को कई समूहों (जी) में विभाजित करता है।

यह समूहीकरण अतिरिक्त अंतर-समूह संचार के बिना कुशल समांतर प्रसंस्करण की अनुमति देता है, जिससे बड़े पैमाने पर मॉडल प्रशिक्षण और अनुमान संभव हो जाता है।

कार्यान्वयन नोट्स और अनुकूलन

सीपीयू अनुकूलन

बिटनेट.सीपीपी शीर्ष सीपीयू प्रदर्शन प्राप्त करने के लिए कई निम्न-स्तरीय अनुकूलन का लाभ उठाता है:

  • वेक्टरीकृत ऑपरेशन: बिट मैनिपुलेशन को कुशलता से करने के लिए एसआईएमडी निर्देशों का उपयोग करता है।
  • कैश-अनुकूल मेमोरी एक्सेस: डेटा को कैश मिस को कम करने के लिए संरचित करता है।
  • समांतर प्रसंस्करण: कार्यभार को प्रभावी ढंग से कई सीपीयू कोरों में वितरित करता है।

बिटनेट में एक प्रमुख कार्य जो क्वांटाइजेशन और अनुमान को लागू करता है:

def bitlinear_forward(input, weight, scale):
# इनपुट को एब्समैक्स क्वांटाइजेशन का उपयोग करके क्वांटाइज़ करें
input_q = quantize(input)

# बाइनरी मैट्रिक्स गुणन करें
output = binary_matmul(input_q, weight)

# आउटपुट को मूल सटीकता से मेल खाने के लिए स्केल करें
return output * scale

def quantize(x):
# एब्समैक्स क्वांटाइजेशन करें
scale = torch.max(torch.abs(x))
return torch.clamp(x / scale, -1, 1) * scale

सUPPORTED मॉडल

बिटनेट.सीपीपी की वर्तमान रिलीज़ निम्नलिखित 1-बिट एलएलएम्स को हगिंग फेस पर समर्थन करती है:

  • bitnet_b1_58-large (0.7बी पैरामीटर)
  • bitnet_b1_58-3B (3.3बी पैरामीटर)
  • Llama3-8B-1.58-100B-tokens (8.0बी पैरामीटर)

इन मॉडलों को सार्वजनिक रूप से उपलब्ध कराया गया है ताकि फ्रेमवर्क की अनुमान क्षमताओं को प्रदर्शित किया जा सके। हालांकि वे आधिकारिक तौर पर माइक्रोसॉफ्ट द्वारा प्रशिक्षित या जारी नहीं किए गए हैं, वे फ्रेमवर्क की बहुमुखी प्रकृति को प्रदर्शित करते हैं।

स्थापना गाइड

बिटनेट.सीपीपी के साथ शुरू करने के लिए, निम्नलिखित चरणों का पालन करें:

पूर्वापेक्षाएँ

  1. पाइथन >= 3.9
  2. सीएमके >= 3.22
  3. क्लैंग >= 18
  4. कोंडा (बहुत अनुशंसित)

विंडोज़ उपयोगकर्ताओं के लिए, विज़ुअल स्टूडियो को निम्नलिखित घटकों के साथ स्थापित किया जाना चाहिए:

  • सी++ के साथ डेस्कटॉप विकास
  • विंडोज़ के लिए सी++-सीएमके टूल्स
  • विंडोज़ के लिए गिट
  • विंडोज़ के लिए सी++-क्लैंग कम्पाइलर
  • एलएलवीएम टूलसेट (क्लैंग) के लिए एमएस-बिल्ड समर्थन

डेबियन/उबंटू उपयोगकर्ताओं के लिए, एक स्वचालित स्थापना स्क्रिप्ट उपलब्ध है:

bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

कदम-दर-कदम स्थापना

  1. रिपॉजिटरी क्लोन करें:
    git clone --recursive https://github.com/microsoft/BitNet.git

    cd BitNet
  2. निर्भरताएँ स्थापित करें:
    # एक नया कोंडा वातावरण बनाएं (अनुशंसित)
    conda create -n bitnet-cpp python=3.9
    conda activate bitnet-cpp


    pip install -r requirements.txt
  3. परियोजना का निर्माण और तैयारी करें: आप सीधे हगिंग फेस से एक मॉडल डाउनलोड कर सकते हैं और इसे क्वांटाइज़ प्रारूप में परिवर्तित कर सकते हैं:
    python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s

    वैकल्पिक रूप से, मॉडल को मैन्युअल रूप से डाउनलोड और परिवर्तित करें:

    huggingface-cli download HF1BitLLM/Llama3-8B-1.58-100B-tokens --local-dir models/Llama3-8B-1.58-100B-tokens

    python setup_env.py -md models/Llama3-8B-1.58-100B-tokens -q i2_s

बिटनेट.सीपीपी के साथ अनुमान चलाना

अनुमान चलाने के लिए, निम्नलिखित कमांड का उपयोग करें:

python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "सैंड्रा रसोई में गई। सैंड्रा कहाँ है?" -n 6 -temp 0.7

विवरण:

  • -m मॉडल फ़ाइल पथ निर्दिष्ट करता है।
  • -p प्रॉम्प्ट पाठ परिभाषित करता है।
  • -n अनुमानित टोकन की संख्या निर्धारित करता है।
  • -temp अनुमान के दौरान नमूनाकरण यादृच्छिकता (तापमान) को समायोजित करता है।

आउटपुट उदाहरण

सैंड्रा रसोई में गई। सैंड्रा कहाँ है?

उत्तर: सैंड्रा रसोई में है।

बिटनेट.सीपीपी की तकनीकी विवरण

बिटलीनियर लेयर

बिटनेट.सीपीपी एक संशोधित ट्रांसफॉर्मर आर्किटेक्चर लागू करता है, जो मानक मैट्रिक्स गुणन को बिटलीनियर ऑपरेशन से बदल देता है। यह दृष्टिकोण वजन को शून्य के आसपास केंद्रित करता है और उन्हें अनुमान त्रुटियों को कम करने के लिए स्केल करता है। मुख्य परिवर्तन कार्य इस प्रकार दिखता है:


# 1-बिट वजन के लिए बाइनराइजेशन फंक्शन
def binarize_weights(W):
alpha = W.mean()
W_binarized = np.sign(W - alpha)
return W_binarized

वजन को केंद्रित करने और उन्हें स्केल करने का संयोजन अनुमान त्रुटि को न्यूनतम रखते हुए प्रदर्शन को बनाए रखने में मदद करता है।

उद्योग प्रभाव

बिटनेट.सीपीपी एलएलएम्स की तैनाती के लिए दूरगामी प्रभाव डाल सकता है:

  • सुलभता: एलएलएम्स को मानक उपकरणों पर चलाने की अनुमति देता है, जो शक्तिशाली एआई तक पहुंच को लोकतांत्रिक बनाता है।
  • लागत-प्रभावशीलता: महंगे जीपीयू की आवश्यकता को कम करता है, जो अपनाने की बाधा को कम करता है।
  • ऊर्जा दक्षता: मानक सीपीयू-आधारित अनुमान का लाभ उठाकर ऊर्जा की बचत करता है।
  • नवाचार: ऑन-डिवाइस एआई के लिए नए अवसर खोलता है, जैसे कि वास्तविक समय भाषा अनुवाद, वॉयस सहायक और गोपनीयता-केंद्रित अनुप्रयोग जो क्लाउड पर निर्भर नहीं हैं।

चुनौतियाँ और भविष्य की दिशा

1-बिट एलएलएम्स में आशा की किरण है, लेकिन कई चुनौतियाँ अभी भी बनी हुई हैं। इनमें विभिन्न कार्यों के लिए मजबूत 1-बिट मॉडल विकसित करना, 1-बिट गणना के लिए हार्डवेयर को अनुकूलित करना और डेवलपर्स को इस नए दृष्टिकोण को अपनाने के लिए प्रोत्साहित करना शामिल है। इसके अलावा, कंप्यूटर विजन या ऑडियो कार्यों के लिए 1-बिट क्वांटीकरण का अन्वेषण एक रोमांचक भविष्य की दिशा है।

निष्कर्ष

माइक्रोसॉफ्ट का बिटनेट.सीपीपी लॉन्च एक महत्वपूर्ण प्रगति है। मानक सीपीयू पर कुशल 1-बिट अनुमान को सक्षम करके, बिटनेट.सीपीपी एआई की सुलभता और स्थिरता बनाता है। यह फ्रेमवर्क अधिक पोर्टेबल और लागत-प्रभावी एलएलएम्स के लिए मंच तैयार करता है, जो ऑन-डिवाइस एआई के साथ क्या संभव है यह बढ़ाता है।

मैं पिछले पांच वर्षों से मशीन लर्निंग और डीप लर्निंग की दुनिया में खुद को डूबो रहा हूं। मेरा जुनून और विशेषज्ञता ने मुझे 50 से अधिक विविध सॉफ्टवेयर इंजीनियरिंग परियोजनाओं में योगदान देने के लिए प्रेरित किया है, जिनमें से अधिकांश में एआई/एमएल पर विशेष ध्यान केंद्रित किया गया है। मेरी जारी जिज्ञासा ने मुझे प्राकृतिक भाषा प्रसंस्करण की ओर आकर्षित किया है, जिस क्षेत्र को मैं आगे अन्वेषण करने के लिए उत्सुक हूं।