الصورة الرمزية الخاصة بـ ماكسيميليان جيبليك

ليرة تركية؛ د: يحتوي KVPress على أحدث تقنيات ضغط ذاكرة التخزين المؤقت KV، مما يتيح دورات LLM ذات سياق طويل موفرة للذاكرة. 🚀

إحدى الميزات الرئيسية لنماذج اللغات الكبيرة (LLMs) هي نافذة السياق– الحد الأقصى لعدد الرموز المميزة التي يمكنهم معالجتها في طلب واحد. مع تطور LLMs، أصبحت نوافذ السياق الخاصة بها أكبر بشكل متزايد.

تفتح نوافذ السياق الأكبر حجمًا إمكانيات مذهلة:

  • الاسترجاع في السياق: الرجوع بسهولة إلى كميات كبيرة من النص ضمن استعلام واحد.
  • التعلم في السياق: تكييف السلوك مع أمثلة محددة داخل نفس الجلسة.
  • الاستدلال الموسع: التعامل مع سلاسل طويلة جدًا من الأفكار دون كسر السياق.

ومع ذلك، فإن هذه النوافذ الموسعة لها تكلفة – حيث يصبح من الصعب إدارة الذاكرة المأخوذة من السياق الطويل في ذاكرة التخزين المؤقت KV. على سبيل المثال، التعامل مع مليون رمز باستخدام Llama 3-70B في متطلبات float16 330 جيجابايت لـ KV Cache، مما يجعلها غير قابلة للتطبيق للعديد من التطبيقات.

في هذه التدوينة، سنتناول حلًا واحدًا لهذه المشكلة: ضغط ذاكرة التخزين المؤقت KV لتوليد أكثر كفاءة. ولتحقيق ذلك، سوف نستكشف:

  • ما هي ذاكرة التخزين المؤقت KV ولماذا هي مهمة.
  • KVPress، مجموعة أدوات قوية من NVIDIA مصممة لضغط ذاكرة التخزين المؤقت KV بشكل فعال.
  • الأعمال الداخلية لـ KVPress وكيف تحقق الضغط.

قبل البدء، استكشف KVPress في هذه المساحة (ستجد أمثلة في النهاية إذا لزم الأمر):

ما هي ذاكرة التخزين المؤقت KV ولماذا يهم؟

ذاكرة التخزين المؤقت كيلو فولت
الشكل 1: ذاكرة التخزين المؤقت لقيمة المفتاح داخل وحدة الانتباه (المصدر: NVIDIA)

في نماذج الانحدار الذاتي، يحدث إنشاء النص رمزا بعد رمز، حيث يعتمد كل توقع على جميع الرموز المميزة السابقة للسياق. على سبيل المثال:

  • لإنشاء الرمز المميز 1000، يجب أن يأخذ النموذج في الاعتبار تمثيلات الرموز المميزة من 1 إلى 999.
  • لإنشاء الرمز المميز 1001، يجب معالجة نفس المعلومات (الرموز المميزة من 1 إلى 999) مرة أخرى، إلى جانب الرمز المميز 1000.

ويصبح هذا الحساب المتكرر غير فعال مع نمو التسلسل، وخاصة بالنسبة للنماذج الكبيرة. تعمل KV Cache على تحسين هذه العملية عن طريق تخزين النتائج الوسيطة – المفاتيح (K) والقيم (V) – من طبقات الانتباه، بحيث يمكن للنموذج إعادة استخدامها للرموز المميزة المستقبلية بدلاً من إعادة حسابها.

المشكلة: ذاكرة التخزين المؤقت KV وعبء القياس الخطي

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

حجم ذاكرة التخزين المؤقت KV

تأتي القيم المخزنة في ذاكرة التخزين المؤقت KV من جميع كتل الانتباه التي يستخدمها النموذج. ولذلك، فإن حجمه يعتمد على بنية النموذج، التي تحدد عدد رؤوس الانتباه. وبشكل أكثر تحديدًا، يتم تحديد الذاكرة التي تستهلكها ذاكرة التخزين المؤقت KV بالمعادلة التالية:

مقاس(كيلو فولت)=2×دقة×نلأذهصق×نحهأدق×د×نرسكهنق

\text{الحجم}(\text{KV}) = 2 \times \text{precision} \times n_{layers} \times n_{heads} \times d \times n_{tokens}

يساهم كل من هذه العوامل في زيادة استخدام الذاكرة. لجعل هذا الأمر ملموسًا أكثر، دعونا نفكر في مثال ملموس – Llama 3-70B يركض bfloat16 الدقة (على النحو الموصى به من قبل مؤلفي النموذج) مع حجم سياق يبلغ مليون رمز مميز:

مقاس(كيلو فولت)=2×2×80×8×128×1م=327.6غيغابايت

\text{الحجم}(\text{KV}) = 2 \مرات 2 \مرات 80 \مرات 8 \مرات 128 \مرات 1M = 327.6 \text{GB}

نظرًا لأن bfloat16 يستخدم 2 بايت لكل معلمة، فإن أوزان النموذج وحدها تتطلب 140 جيجابايت (70 بايت × 2 بايت). وهذا يعني أن تشغيل النموذج بحجم سياق رمزي يبلغ 1 مليون يتطلب حوالي 470 جيجابايت من الذاكرة، وتمثل ذاكرة التخزين المؤقت KV وحدها نسبة مذهلة تبلغ 70% من هذا الإجمالي.

KVPress: مجموعة أدوات لضغط ذاكرة التخزين المؤقت KV

كما رأينا، تعد ذاكرة التخزين المؤقت KV عامل تمكين بالغ الأهمية وعائقًا كبيرًا لنشر نماذج اللغة الكبيرة (LLMs) ذات نوافذ السياق الطويلة. تتطلب معالجة مشكلة قياس الذاكرة خطيًا تقنيات ضغط مبتكرة، وهذا هو بالضبط ما تتدخل فيه KVPress.

KVPress، التي طورتها NVIDIA، عبارة عن مجموعة أدوات Python مصممة لمواجهة تحديات الذاكرة الخاصة بذاكرة التخزين المؤقت الكبيرة KV من خلال توفير مجموعة من تقنيات الضغط الحديثة. كما أنه يتكامل مع الأساليب الأخرى، مثل تكميم ذاكرة التخزين المؤقت KV، وهي طريقة مدمجة في مكتبة المحولات لتقليل استخدام الذاكرة (مصطلح الدقة في المعادلة أعلاه)، مما يزيد من فائدتها (التفاصيل هنا).

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

KVPress في العمل

في جوهرها، تستفيد KVPress المطابع، وهي عبارة عن خوارزميات ضغط متقدمة مصممة خصيصًا لتقليل مساحة الذاكرة الخاصة بذاكرة التخزين المؤقت KV.

تعتمد العديد من هذه المطابع على النتيجة المستخدمة في كل رأس لتشذيب أزواج KV ذات الأهمية الأقل. على سبيل المثال، يقوم KnormPress بتشذيب أزواج KV ذات معيار القيمة الأدنى الأدنى (الورق)، ويقوم SnapKVPress بتشذيب أزواج KV المرتبطة بأوزان الاهتمام المنخفضة لأحدث الاستعلامات (الورق).

يتم دمج هذه المكابس بسلاسة في طبقات الانتباه للنموذج باستخدام الخطافات الأمامية.

اضغط على KV في العمل
الشكل 2: تصور ضغط KV (المصدر: NVIDIA)

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

تتكامل هذه المطابع بسلاسة مع العرف transformers خط الأنابيب، مما يتيح سهولة التطبيق والتجريب.

إليك كيفية استخدام المكبس مع KVPress باستخدام إحدى المكابس العديدة، ExpectedAttentionPress. تعمل هذه الصحافة على تقليم أزواج KV المرتبطة بأقل وزن انتباه متوقع للاستعلامات المستقبلية.

from transformers import pipeline
from kvpress import ExpectedAttentionPress

pipe = pipeline(
"kv-press-text-generation",
model="meta-llama/Llama-3.1-8B-Instruct",
device="cuda",
model_kwargs={"attn_implementation": "sdpa"}
)

context = "A very long text you want to compress once and for all"
question = "\nA question about the compressed context"  

press = ExpectedAttentionPress(compression_ratio=0.5)
answer = pipe(context, question=question, press=press)["answer"]

حاول استخدامه مباشرة في مساحة Hugging Face هذه أو في دفتر ملاحظات Google colab هذا!

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

يوضح المخطط أدناه توفير ذاكرة وحدة معالجة الرسومات الذي تم تحقيقه من خلال ضغط KVPress مع زيادة الأطوال السريعة. بالنسبة للمطالبات الأقصر، يتم تخصيص معظم الذاكرة لأوزان الطراز – حوالي 15 جيجابايت لـ Llama 3.1 8B في bfloat16. ومع ذلك، مع زيادة الأطوال السريعة، تصبح ذاكرة التخزين المؤقت KV مساهمًا رئيسيًا في استهلاك الذاكرة. بالنسبة لطول سياق يبلغ 128 كيلو بايت، يؤدي تطبيق KVPress بنسبة ضغط 50% إلى تقليل استخدام الذاكرة الأقصى من 45 جيجابايت إلى 37 جيجابايت. تعمل ذاكرة التخزين المؤقت KV الأصغر هذه أيضًا على تحسين سرعة فك التشفير، من 11 رمزًا مميزًا في الثانية إلى 17 رمزًا مميزًا في الثانية على وحدة معالجة الرسومات A100 (المصدر). .

استخدام الذاكرة
الشكل 3: استخدام الذاكرة مقابل طول السياق (المصدر: NVIDIA)

لقد عمل مجتمع البحث بنشاط على تطوير تقنيات مختلفة لضغط ذاكرة التخزين المؤقت لـ KV. تشجع KVPress الباحثين على المساهمة بأساليبهم وتوفر بالفعل أكثر من اثنتي عشرة مطبعة.

لتقييم أداء هذه المطابع، يتضمن KVPress واجهة سطر أوامر (CLI) بسيطة لقياسها على مجموعات البيانات القياسية طويلة السياق مثل RULER وInfiniteBench وLoogle. الرسم أدناه يقيس 9 مكابس مختلفة على مجموعة بيانات RULER بطول سياق 4K ونسبة ضغط مختلفة. أفضل أداء للصحافة في مجموعة البيانات هذه هو مزيج من AdaKVPress (ورقة) و ExpectedAttentionPress، تقنية تقليم جديدة غير منشورة أنشأها مؤلفو KVPress (مزيد من المعلومات هنا).

المعيار
الشكل 4: متوسط ​​النتيجة مقابل نسبة الضغط (المصدر: NVIDIA)

تفتح نوافذ السياق المتنامية لـ LLMs إمكانيات جديدة ولكنها تشكل تحديات كبيرة في الذاكرة من خلال توسيع نطاق KV Cache بشكل خطي. يعالج KVPress هذه المشكلة عن طريق ضغط ذاكرة التخزين المؤقت أثناء مرحلة التعبئة المسبقة الحرجة.

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

بفضل تكاملها السلس في مكتبة المحولات والتصميم المعياري، تعمل KVPress على تمكين الباحثين والمطورين من التعامل مع LLMs ذات السياق الطويل بكفاءة وتصميم تقنيات ضغط جديدة. إنه حل عملي لتوسيع نطاق برامج LLM بدون موارد الذاكرة الهائلة، مما يضمن بقاء الابتكار في متناول الجميع مع نمو النماذج.

شاركها.
اترك تعليقاً