اتصل بنا للحصول على مزيد من المعلومات

إطار عمل الاستدلال من Microsoft يوفر نماذج لغة كبيرة بحجم 1 بت للأجهزة المحلية

الذكاء الاصطناعي

إطار عمل الاستدلال من Microsoft يوفر نماذج لغة كبيرة بحجم 1 بت للأجهزة المحلية

mm
فهم 1-bit LLMs وإطار عمل BitNet.cpp من Microsoft

في أكتوبر 17 ، 2024 ، أعلنت شركة مايكروسوفت عن إطلاق BitNet.cpp، إطار عمل استدلالي مصمم لتشغيل نماذج اللغة الكبيرة الكمية ذات البت الواحد (LLMs). يعد BitNet.cpp تقدمًا كبيرًا في جيل الذكاء الاصطناعي، حيث يتيح نشر نماذج اللغة الكبيرة الكمية ذات البت الواحد بكفاءة على وحدات المعالجة المركزية القياسية، دون الحاجة إلى وحدات معالجة رسومية باهظة الثمن. يعمل هذا التطور على إضفاء الطابع الديمقراطي على الوصول إلى نماذج اللغة الكبيرة الكمية، مما يجعلها متاحة على مجموعة واسعة من الأجهزة وإعطاء إمكانيات جديدة في تطبيقات الذكاء الاصطناعي على الجهاز.

فهم نماذج اللغة الكبيرة ذات البت الواحد

تتطلب نماذج اللغة الكبيرة (LLMs) تقليديًا موارد حسابية كبيرة بسبب استخدامها لأرقام الفاصلة العائمة عالية الدقة (عادةً FP16 أو BF16) لأوزان النموذج. وقد جعلت هذه الضرورة نشر نماذج اللغة الكبيرة مكلفًا ويستهلك الكثير من الطاقة.

في جوهرها، تستخدم نماذج LLM ذات البت الواحد تقنيات التكميم المتطرفة لتمثيل أوزان النموذج باستخدام ثلاث قيم ممكنة فقط: -1 و1 و0، ومن هنا جاء مصطلح "1 بت" (حيث يتطلب الأمر أكثر من بت واحد بقليل لترميز ثلاث حالات).

نظام الوزن الثلاثي

المفهوم

إن التكميم المكون من بت واحد في BitNet.cpp عبارة عن نظام وزن ثلاثي. يعمل BitNet بثلاث قيم ممكنة فقط لكل معلمة:

  • -1 (نفي)
  • 0 (محايد)
  • 1 (إيجابي)

يؤدي هذا إلى متطلبات تخزين تبلغ حوالي 1.58 بت لكل معلمة، ومن هنا جاءت التسمية بيتنت b1.58يؤدي هذا الانخفاض الكبير في عرض بت المعلمة إلى انخفاض مذهل في استخدام الذاكرة والتعقيد الحسابي، حيث يتم استبدال معظم عمليات الضرب ذات الفاصلة العائمة بإضافات وطرح بسيطة.

مؤسسة رياضية

تتضمن التكمية ذات البت الواحد تحويل الأوزان والتنشيطات إلى تمثيلها الثلاثي من خلال الخطوات التالية:

1. ثنائيات الوزن

تتضمن عملية تقسيم الأوزان إلى ثنائيات تركيزها حول المتوسط ​​(α)، مما يؤدي إلى تمثيل ثلاثي. يتم التعبير عن التحويل رياضيًا على النحو التالي:

Wfâ € <=توقيع(W-α)

أين:

  • W هي مصفوفة الوزن الأصلية.
  • α هو متوسط ​​الأوزان.
  • علامة(x) عائدات +1 if x> 0 و -1 غير ذلك.

2. التنشيط الكمي

تضمن عمليات التنشيط الكمية أن تكون المدخلات مقيدة بعرض بت محدد:

أين:

  • Qb = 2(ب-1)2^{(ب-1)} هو الحد الأقصى لمستوى التكميم لـ b-عرض البت.
  • γ هي القيمة المطلقة القصوى لـ x (كما تدل ∣∣x∣∣∣∞).
  • ε هو رقم صغير لمنع الفائض أثناء العمليات الحسابية.

3. عملية بت لاينر

تحل طبقة BitLinear محل عمليات ضرب المصفوفة التقليدية بعملية مبسطة:

y=Wfâ € <×x^eâ € <×(Qbâ € <βγâ € <)

أين:

  • β هو عامل مقياس يستخدم لتقليل أخطاء التقريب.
  • γ يقوم بقياس التنشيطات.
  • س_ب هو عامل التكميم.

يتيح هذا التحويل إجراء عمليات حسابية فعالة مع الحفاظ على أداء النموذج.

الآثار المترتبة على الأداء

كفاءة الذاكرة

يقلل نظام الوزن الثلاثي من متطلبات الذاكرة بشكل كبير:

  • ماجستير القانون التقليدي:16 بت لكل وزن
  • بت نت.cpp:1.58 بت لكل وزن

يؤدي هذا التخفيض إلى توفير في الذاكرة بنحو 90% بالمقارنة مع النماذج التقليدية ذات 16 بت، فإن هذا يسمح للنماذج الأكبر أن تتناسب مع نفس القيود المادية.

كفاءة إستهلاك الطاقة

سرعة الاستدلال وكفاءة الطاقة (Apple M2)

 

سرعة الاستدلال: أسرع على كلا وحدتي المعالجة المركزية

سرعة الاستدلال وكفاءة الطاقة (i7-13700H)

1. سرعة الاستدلال: أسرع على كلا وحدتي المعالجة المركزية

سرعة الاستدلال يُمثَّل بعدد الرموز المُعالَجة في الثانية. فيما يلي تفصيل للملاحظات:

  • على Apple M2 Ultra: يصل BitNet.cpp إلى ما يصل إلى 5.07x تسريع للنماذج الأكبر (30B) مقارنةً بـ Llama.cpp، مع سرعة قصوى تبلغ 593.43 رمزًا في الثانية لنموذج 125M، وهو 1.37x بالنسبة للنماذج الأكبر مثل 3.8B و7B، تحافظ BitNet.cpp على سرعة تزيد عن 84.77 رمزًا في الثانية، مما يُظهر كفاءتها عبر المقاييس.
  • على Intel i7-13700H: يحقق BitNet.cpp تحسينات أكثر دراماتيكية في السرعة. في حجم النموذج 7B، يوفر BitNet.cpp تسريع مذهل يصل إلى 5.68x بالمقارنة مع Llama.cpp. بالنسبة للنماذج الأصغر مثل 125M، فإنه يعالج 389.08 رمزًا في الثانية، والذي هو 2.37x أسرع من Llama.cpp.

2. كفاءة الطاقة: تغيير جذري لأجهزة الحافة

تتضمن الرسوم البيانية المقدمة أيضًا مقارنات تكلفة الطاقة، مما يدل على انخفاض كبير في استهلاك الطاقة لكل رمز تمت معالجته:

  • على Apple M2 Ultra: إن توفير الطاقة من خلال BitNet.cpp كبير. بالنسبة لطراز 700M، فإنه يستهلك شنومك٪ أقل من الطاقة لكل رمز مميز مقارنة بـ Llama.cpp، حيث انخفض من 0.314 إلى 0.140يستمر هذا الاتجاه بالنسبة للنماذج الأكبر حجمًا، حيث يُظهر طراز 70B تخفيض بنسبة 70.0٪ في استهلاك الطاقة.
  • على Intel i7-13700H: يقدم BitNet.cpp 71.9٪ توفير في الطاقة بالنسبة لطراز 700M، مع انخفاض الاستهلاك من 1.367 إلى 0.384على الرغم من عدم توفر بيانات الطاقة لنموذج 70B في Llama.cpp، إلا أن BitNet.cpp يظل فعالاً، مع استهلاك الطاقة عند 17.33 للطراز 70B.

3. تجاوز معيار سرعة القراءة البشرية

أحد أكثر الأفكار المثيرة للاهتمام التي يمكن استخلاصها من هذه الرسوم البيانية هو الإشارة إلى سرعة القراءة البشرية، تم وضع علامة عليه 5-7 رموز في الثانيةيوضح هذا الخط الأحمر أن كلا التنفيذين، وخاصة BitNet.cpp، يمكنهما تجاوز سرعات القراءة البشرية بسهولة حتى بالنسبة للنماذج الأكبر حجمًا:

  • On ابل M2 الترايتجاوز BitNet.cpp سرعة القراءة البشرية لجميع أحجام النماذج، حيث تكون أقل سرعة هي 8.67 رمزًا في الثانية لنموذج 70B.
  • On انتل i7-13700Hلا يزال نموذج 100B يحقق 1.70 رمزًا في الثانية، والتي تلامس تقريبًا النطاق الأدنى لسرعة القراءة البشرية، في حين أن جميع النماذج الأصغر حجمًا تتجاوز هذا المعيار.

اعتبارات التدريب

مقدر مباشر (STE)

نظرًا لأن التكميم أحادي البت يقدم وظائف غير قابلة للاشتقاق، فإن التدريب يتضمن تقنية متخصصة تُعرف باسم مقدر مباشر (STE)في هذا النهج، تتدفق التدرجات دون تغيير عبر نقاط غير قابلة للتفاضل. فيما يلي تنفيذ مبسط في بايثون:

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

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

تدريب مختلط الدقة

للحفاظ على الاستقرار أثناء التدريب، دقة مختلطة يتم توظيف:

  • الأوزان والتفعيلات:تم تحديدها بدقة 1 بت.
  • التدرجات وحالات المحسن:مخزنة بدقة أعلى.
  • الأوزان الكامنة:تم الحفاظ عليها بدقة عالية لتسهيل التحديثات الدقيقة أثناء التدريب.

استراتيجية معدل التعلم الكبير

إن التحدي الفريد الذي تواجهه النماذج ذات البت الواحد هو أن التحديثات الصغيرة قد لا تؤثر على الأوزان الثنائية. وللتخفيف من هذا، يتم زيادة معدل التعلم، مما يضمن تقاربًا أسرع وتحسينًا أفضل مقارنة بالطرق التقليدية.

التكميم الجماعي والتطبيع

يقدم BitNet.cpp التكميم الجماعي والتطبيع لتعزيز التوازي النموذجي. بدلاً من حساب المعلمات لمصفوفة الأوزان بالكامل، يقسم BitNet الأوزان والتنشيطات إلى مجموعات متعددة (G).â € <

يتيح هذا التجميع معالجة متوازية فعالة دون الحاجة إلى اتصال إضافي بين المجموعات، مما يتيح تدريب النموذج على نطاق واسع والاستدلال عليه.

ملاحظات التنفيذ والتحسينات

تحسين وحدة المعالجة المركزية

يستفيد BitNet.cpp من العديد من التحسينات منخفضة المستوى لتحقيق أقصى أداء لوحدة المعالجة المركزية:

  • العمليات الموجهة:يستخدم تعليمات SIMD لإجراء عمليات التلاعب بالبت بكفاءة.
  • الوصول إلى الذاكرة الصديقة للذاكرة المؤقتة:هيكلة البيانات لتقليل أخطاء ذاكرة التخزين المؤقت.
  • المعالجة المتوازية:يقوم بتوزيع عبء العمل على نوى وحدة المعالجة المركزية المتعددة بشكل فعال.

فيما يلي مثال لوظيفة رئيسية تنفذ التكميم والاستدلال في BitNet:

 
def bitlinear_forward(input, weight, scale):
    # Quantize the input using absmax quantization
    input_q = quantize(input)
    
    # Perform binary matrix multiplication
    output = binary_matmul(input_q, weight)
    
    # Scale the output to match the original precision
    return output * scale

def quantize(x):
    # Perform absmax quantization
    scale = torch.max(torch.abs(x))
    return torch.clamp(x / scale, -1, 1) * scale

دعم المجموعات

يدعم الإصدار الحالي من BitNet.cpp ما يلي 1-bit LLMs متاحة على Hugging Face:

  • بت نت_b1_58-كبير (0.7 مليار معلمة)
  • بت نت_b1_58-3ب (3.3 مليار معلمة)
  • رموز Llama3-8B-1.58-100B (8.0 مليار معلمة)

تتوفر هذه النماذج للعامة لإثبات قدرات الاستدلال التي يتمتع بها الإطار. ورغم عدم تدريبها أو إصدارها رسميًا من قبل Microsoft، فإنها توضح تنوع الإطار.

دليل التثبيت

للبدء باستخدام BitNet.cpp، اتبع الخطوات التالية:

المتطلبات الأساسية المسبقة

  1. Python > = 3.9
  2. CMake > = 3.22
  3. قعقع > = 18
  4. كوندا (ينصح به بشده)

في حالة ويندوز يجب على المستخدمين تثبيت Visual Studio مع تمكين المكونات التالية:

  • تطوير سطح المكتب باستخدام C++
  • أدوات C++-CMake لنظام Windows
  • بوابة لنظام التشغيل Windows
  • مُجمِّع C++-Clang لنظام Windows
  • دعم MS-Build لمجموعة أدوات LLVM (Clang)

في حالة ديبيان / أوبونتو للمستخدمين، يتوفر برنامج التثبيت التلقائي:

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

التثبيت خطوة بخطوة

  1. استنساخ المستودع:
    git clone --recursive https://github.com/microsoft/BitNet.git

    cd BitNet
  2. تثبيت التبعيات:
    # Create a new Conda environment (recommended)
    conda create -n bitnet-cpp python=3.9
    conda activate bitnet-cpp


    pip install -r requirements.txt
  3. بناء المشروع وإعداده:يمكنك تنزيل نموذج مباشرة من Hugging Face وتحويله إلى تنسيق كمي:
    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

تشغيل الاستدلال باستخدام BitNet.cpp

لتشغيل الاستدلال باستخدام الإطار، استخدم الأمر التالي:

python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Sandra journeyed to the kitchen. Where is Sandra?" -n 6 -temp 0.7

التفسير:

  • -m يحدد مسار ملف النموذج.
  • -p يحدد النص الفوري.
  • -n يحدد عدد الرموز التي سيتم التنبؤ بها.
  • -temp ضبط عشوائية العينة (درجة الحرارة) أثناء الاستدلال.

مثال الإخراج

Sandra journeyed to the kitchen. Where is Sandra?

Answer: Sandra is in the kitchen.

التفاصيل الفنية لـ BitNet.cpp

طبقة البت الخطية

ينفذ BitNet.cpp بنية Transformer معدلة، ويستبدل عمليات ضرب المصفوفة القياسية بـ BitLinear العمليات. يقوم هذا النهج بمركزة الأوزان إلى الصفر قبل التكميم وقياسها لتقليل أخطاء التقريب. تبدو دالة التحويل الرئيسية على النحو التالي:

# Binarization function for 1-bit weights
def binarize_weights(W):
    alpha = W.mean()
    W_binarized = np.sign(W - alpha)
    return W_binarized

يضمن الجمع بين الأوزان المركزية والقياس أن يظل خطأ التكميم في حده الأدنى، وبالتالي الحفاظ على الأداء.

تأثير الصناعة

قد يكون لـ BitNet.cpp آثار بعيدة المدى على نشر LLMs:

  • سهولة الوصول والشمولية:يتيح تشغيل برامج LLM على الأجهزة القياسية، مما يجعل الوصول إلى الذكاء الاصطناعي القوي متاحًا للجميع.
  • فعالية التكلفة:يقلل من الحاجة إلى وحدات معالجة الرسوميات باهظة الثمن، مما يخفض حاجز التبني.
  • كفاءة إستهلاك الطاقة:يوفر الطاقة من خلال الاستفادة من الاستدلال القياسي المستند إلى وحدة المعالجة المركزية.
  • مساحات العمل:يفتح إمكانيات جديدة للذكاء الاصطناعي على الجهاز، مثل ترجمة اللغة في الوقت الفعلي، والمساعدين الصوتيين، والتطبيقات التي تركز على الخصوصية دون الاعتماد على السحابة.

التحديات والتوجهات المستقبلية

ورغم أن برامج ماجستير إدارة الأعمال ذات البت الواحد واعدة، إلا أن العديد من التحديات لا تزال قائمة. وتشمل هذه التحديات تطوير نماذج قوية ذات بت واحد لمهام متنوعة، وتحسين الأجهزة للحوسبة ذات البت الواحد، وتشجيع المطورين على تبني هذا النموذج الجديد. بالإضافة إلى ذلك، يمثل استكشاف الكميات ذات البت الواحد لمهام الرؤية الحاسوبية أو الصوت اتجاهًا مستقبليًا مثيرًا.

الخاتمة

إن إطلاق Microsoft لبرنامج BitNet.cpp يمثل تقدمًا كبيرًا. فمن خلال تمكين الاستدلال الفعال ببت واحد على وحدات المعالجة المركزية القياسية، يعمل برنامج BitNet.cpp على توفير إمكانية الوصول إلى الذكاء الاصطناعي واستدامته. ويهيئ هذا الإطار الطريق أمام المزيد من برامج التعلم الآلي المحمولة والفعّالة من حيث التكلفة، مما يدفع إلى تحقيق ما هو ممكن باستخدام الذكاء الاصطناعي على الجهاز.

لقد أمضيت السنوات الخمس الماضية منغمسًا في عالم رائع من التعلم الآلي والتعلم العميق. قادني شغفي وخبرتي إلى المساهمة في أكثر من 50 مشروعًا متنوعًا لهندسة البرمجيات ، مع التركيز بشكل خاص على الذكاء الاصطناعي / التعلم الآلي. جذبني فضولي المستمر أيضًا نحو معالجة اللغة الطبيعية ، وهو مجال أتوق لاستكشافه بشكل أكبر.