
بقلم: سارة | محررة نماذج الذكاء الاصطناعي · صوت تحريري بإشراف بشري
أصدر مشروع llama.cpp الإصدار b10242، وجوهره تقني صرف: نقل حساب عقوبات التكرار (penalties) من المعالج المركزي إلى backend الـ CUDA، بما يعني أن نماذج اللغة التي تعمل على بطاقات NVIDIA ستحسب تعديلات تكرار الرموز والتردد والحضور مباشرةً على الـ GPU بدلاً من الارتداد إلى CPU في كل خطوة توليد.
الدافع وراء هذا التغيير أداءٌ ونزاهة عددية في آنٍ معاً. المشكلة القديمة كانت في أن sampler العقوبات يعمل على المعالج المركزي حتى حين يكون باقي خط الاستدلال على الـ GPU، مما يستدعي نقل بيانات كل دورة. الإصدار الجديد يُدمج هذا الحساب مباشرةً ضمن سلسلة الـ sampler على الـ backend، ويُضيف معالجةً صريحة لحالة الرموز المُعطَّلة: قيمها تبقى -Inf دون أن تتحوّل إلى NaN — وهو خطأ عددي كان يُلوّث نتائج التوليد في حالات الحافة.
التغييرات التقنية الرئيسية في هذا الإصدار تشمل عدة محاور متكاملة:
- تحديث بنية
llama_sampler_penaltiesلترث منllama_sampler_backendوتتعامل مع مدخلات backend العقوبات مباشرةً، مع تطبيق منطق تهيئة وتنفيذ يشمل تعديلات التردد والحضور على الـ GPU. - ضبط قيمة
penalty_last_nتلقائياً بناءً على حجم السياق النموذجي إذا لم يُحدَّد، مع التحقق من أنpenalty_last_nوn_prevلا تأخذان قيماً سالبة. - إضافة دعم عقوبات top-k في backend sampling، مما يُتيح تطبيق العقوبات بعد مرحلة top-k مع نافذة تاريخ قابلة للضبط.
- استبدال مصفوفة المقارنة بين
penalty_last_nوالمرشّحين بـ tensor لحساب عدد الرموز بحجم المفردات كاملاً، وهو أكثر كفاءةً للنوافذ الكبيرة. - التحقق من صحة معامل
repeat_penalty: يجب أن يكون عدداً منتهياً وأكبر من الصفر، مع اختبارات تُغطي القيم غير الصالحة. - إضافة دعم لتكوين مواضع العقوبات في سلسلة الـ sampler، مما يمنح المطوّرين مرونةً في تحديد أين تُطبَّق العقوبات ضمن الخط.
- تغطية اختبارية موسّعة تشمل: حالة الرمز المُعطَّل كـ
-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.







