تُحدَّث يومياً

مصدرُك العربي
لمستقبل الذكاء الاصطناعي

أخبار، تقارير، أدوات وتحليلات يومية — كل ما تحتاجه لمتابعة ثورة الذكاء الاصطناعي باللغة العربية

✅ تم الاشتراك!
أخبار الذكاء الاصطناعي

llama.cpp b10242 ينقل عقوبات التكرار إلى CUDA backend

بقلم: سارة | محررة نماذج الذكاء الاصطناعي · صوت تحريري بإشراف بشري

أصدر مشروع llama.cpp الإصدار b10242، وجوهره تقني صرف: نقل حساب عقوبات التكرار (penalties) من المعالج المركزي إلى backend الـ CUDA، بما يعني أن نماذج اللغة التي تعمل على بطاقات NVIDIA ستحسب تعديلات تكرار الرموز والتردد والحضور مباشرةً على الـ GPU بدلاً من الارتداد إلى CPU في كل خطوة توليد.

الدافع وراء هذا التغيير أداءٌ ونزاهة عددية في آنٍ معاً. المشكلة القديمة كانت في أن sampler العقوبات يعمل على المعالج المركزي حتى حين يكون باقي خط الاستدلال على الـ GPU، مما يستدعي نقل بيانات كل دورة. الإصدار الجديد يُدمج هذا الحساب مباشرةً ضمن سلسلة الـ sampler على الـ backend، ويُضيف معالجةً صريحة لحالة الرموز المُعطَّلة: قيمها تبقى -Inf دون أن تتحوّل إلى NaN — وهو خطأ عددي كان يُلوّث نتائج التوليد في حالات الحافة.

التغييرات التقنية الرئيسية في هذا الإصدار تشمل عدة محاور متكاملة:

  1. تحديث بنية llama_sampler_penalties لترث من llama_sampler_backend وتتعامل مع مدخلات backend العقوبات مباشرةً، مع تطبيق منطق تهيئة وتنفيذ يشمل تعديلات التردد والحضور على الـ GPU.
  2. ضبط قيمة penalty_last_n تلقائياً بناءً على حجم السياق النموذجي إذا لم يُحدَّد، مع التحقق من أن penalty_last_n وn_prev لا تأخذان قيماً سالبة.
  3. إضافة دعم عقوبات top-k في backend sampling، مما يُتيح تطبيق العقوبات بعد مرحلة top-k مع نافذة تاريخ قابلة للضبط.
  4. استبدال مصفوفة المقارنة بين penalty_last_n والمرشّحين بـ tensor لحساب عدد الرموز بحجم المفردات كاملاً، وهو أكثر كفاءةً للنوافذ الكبيرة.
  5. التحقق من صحة معامل repeat_penalty: يجب أن يكون عدداً منتهياً وأكبر من الصفر، مع اختبارات تُغطي القيم غير الصالحة.
  6. إضافة دعم لتكوين مواضع العقوبات في سلسلة الـ sampler، مما يمنح المطوّرين مرونةً في تحديد أين تُطبَّق العقوبات ضمن الخط.
  7. تغطية اختبارية موسّعة تشمل: حالة الرمز المُعطَّل كـ -INF، حالة الرمز المُعاقَب سابقاً وليس ضمن المرشّحين، backend penalties بعد top-p مع نافذة تاريخ كبيرة، وحالة token_count.size() == n_active == n_max == 64 دون إدخالات حشو.

من ناحية التوافق، الإصدار متاح لكل المنصات المعتادة: macOS على Apple Silicon وIntel، وiOS كـ XCFramework، وLinux بصيغ CPU وVulkan وROCm 7.2 وOpenVINO وSYCL بدقة FP32 وFP16، وAndroid arm64، وWindows بصيغ CPU وCUDA 12 وCUDA 13 وOpenCL Adreno. التنزيلات متاحة مباشرةً من صفحة الإصدار، وتطبيق llama.app يعكس هذه التحديثات أيضاً.

للمطوّرين الذين يعتمدون على common_sampler_init مباشرةً: التوقيع تغيّر ليقبل معامل llama_n_ctx صراحةً، وهو تغيير يستدعي مراجعة الكود الحالي قبل الترقية إن كنت تستدعي هذه الدالة يدوياً. مَن يستخدم الـ binaries الجاهزة أو المكتبات عبر واجهات عالية المستوى لن يلاحظ فرقاً في الاستخدام، لكنه سيرى استقراراً أكبر في مخرجات التوليد عند ضبط عقوبات التكرار بقيم متطرفة. هذا الإصدار يُكمل مساراً بدأه b10236 الذي سرّع الاستدلال على Apple Silicon، ليُثبت أن المشروع يُحسّن خط الاستدلال من طرفين: الـ Metal على Mac والـ CUDA على Linux وWindows.

GitHub / ggml-org

مقالات ذات صلة

زر الذهاب إلى الأعلى