Cmpnd تطلق dspy-wsp: نهج جديد لبرمجة فضاء الأوزان في DSPy

كشفت Cmpnd عن dspy-wsp، وهو مُحسِّن أولي يقدّم برمجة فضاء الأوزان إلى DSPy. يتيح هذا النهج المبتكر لنموذج frontier LLM قراءة أوزان نموذج آخر وتعديلها مباشرة دون الحاجة إلى تدرجات أو حلقات تدريب أو مجموعات بيانات ضبط دقيق. تُقدَّم dspy-wsp في صورة WeightSpace، وهو مُحسِّن يمكن دمجه في أي برنامج ومقياس في DSPy. في اختبارات Cmpnd، أدى إنفاق ما يقرب من 5 إلى 10 دولارات على استدعاءات GPT-6-Astra إلى تحسين أداء كل نموذج قرار جرى تقييمه. يمكن مراجعة خيارات النشر والمواصفات عبر إضافة GPULeaderboard.com لمتصفح Chrome.
باختصار
- ما هو: مُحسِّن DSPy (
WeightSpace) يقوم فيه نموذج LLM كاتب بتعديل أوزان نموذج طالب. رخصة MIT،pip install dspy-wsp، يتطلب DSPy 3.5. - الحجم: جرى اختباره على نماذج قرار مفتوحة تتراوح بين 0.6B و9B معامل. عدّلت دورة واحدة من 25 تمريرة طبقة واحدة أو رأسًا واحدًا.
- يعمل على: أُجريت جميع التجارب على جهاز Mac واحد. استخدمت نماذج 2B نحو 6 غيغابايت من الذاكرة. يتطلب نموذج d1-omni-600M ذاكرة 4 غيغابايت أو أكثر (Mac أو GPU).
- الأداء: حسّن WeightSpace وحده الدرجات بنحو 1.9 إلى 16.1 نقطة على Typed Decisions. مع ReAnchor، تراوحت المكاسب بين 6.5 و20.0 نقطة.
- الأفضل: ارتفع نموذج d1-omni-600M من 50.9% إلى 69.1% (+18.3) عند الجمع بين WeightSpace وReAnchor.
- الأسوأ: حقق نموذج Clef-Flash (9B) زيادة +1.9 فقط من WeightSpace وحده. وبموجب قواعد أكثر صرامة من الورقة الأصلية، لم يحقق نموذج d1-omni-600M سوى +2.8.
- الخلاصة: الأفضل: تعديل فعّال من حيث التكلفة وخالٍ من التدرجات يُسلَّم كرقعة صغيرة قابلة للتحقق. الأسوأ: تجريبي للغاية، بطيء (يستغرق من 78 إلى 167 دقيقة لكل تشغيل)، وأقل فعالية على النماذج الأكبر.
ما هي برمجة فضاء الأوزان؟
تتصور برمجة فضاء الأوزان (WSP) أوزان الشبكة العصبية كبرنامج يمكن قراءته وإعادة كتابته. ينبع هذا المفهوم من بحث في MIT: Sparks of Weight-Space Programming.
يحلل نموذج متقدم، وتحديدًا GPT-6-Astra في البحث، موترات الأوزان ويستنتج وظيفة كل مكوّن ويعدّلها لتتوافق مع هدف محدد مصاغ باللغة الإنجليزية البسيطة. يؤكد الباحثون أن WSP تمثل قدرة ناشئة وليست منهجية ثابتة. ورغم استبعاد التدرجات من تجاربهم، فإن ذلك لا يمنع استخدامها مستقبلًا.
كيف تختلف عن الضبط الدقيق أو تحسين الأوامر؟
من المفيد مقارنة الرافعات الثلاث الشائعة التي يستخدمها المطورون عادةً:
- تحسين الأوامر يعدّل النص: التعليمات والأمثلة، دون تغيير أوزان النموذج.
- الضبط الدقيق يضبط الأوزان عبر الانحدار التدرجي، ويتطلب بيانات تدريب وحلقة تدريب وعادةً GPU.
- برمجة فضاء الأوزان تغيّر الأوزان عبر الاستدلال. يصوغ المحرر فرضية، ويكتب كودًا لتعديلها، ويتحقق من النتيجة ببضع تمريرات أمامية.
كيف تعمل dspy-wsp؟
تحوّل dspy-wsp حلقة البحث تلك إلى مُحسِّن DSPy موحّد. يحدد مستودع GitHub ثلاثة مكونات رئيسية:
- الطالب: النموذج الصغير الذي يعمل عليه برنامج DSPy الخاص بك. تُحمَّل أوزانه في عملية Python محلية.
- الكاتب: نموذج LLM متقدم، يُوصى باستخدام
gpt-6-astraلأقصى جهد استدلالي. - الصندوق الرملي: نواة ينفّذ فيها الكاتب الكود. يستخدم macOS أداة
sandbox-execالمدمجة، بينما يستخدم Linux أداة bubblewrap.
يعمل الكاتب على شكل أدوار، يتكون كل دور من شرح موجز يتبعه كتلة كود واحدة. يمكن أن تكون هذه الكتلة إما:
- كتلة Python تقرأ أو تعدّل الأوزان داخل الصندوق الرملي، أو
- كتلة أمامية تنفّذ برنامج DSPy الخاص بك على أمثلة تدريبية.
بمجرد استنفاد الميزانية، يُختار أفضل تعديل للكاتب كرقعة. ثم تقارن مجموعة تحقق مخفية الأوزان الأصلية والمعدّلة باستخدام الأمثلة والبذور نفسها.
ما البيانات التي يراها الكاتب؟
يحدد المستودع فصل البيانات بوضوح:
trainsetيمثل مجموعة تدريب الكاتب.holdoutيخصص جزءًا من بيانات التدريب لمجموعة فحص. يمكن للكاتب تقييم التعديلات على هذه المجموعة لكنه لا يرى الأمثلة.valsetيبقى مخفيًا ولا يُشغَّل إلا مرة واحدة في الختام.- يمكن للمقاييس إرجاع
dspy.Prediction(score=..., feedback=...). نص التغذية الراجعة مرئي للكاتب.
ما الذي غيّره الكاتب فعليًا؟
يفصّل تقرير النتائج كل تعديل جرى. كانت التغييرات صغيرة وموجهة.
كيف يبدو الكود؟
يوضح مثال المستودع فرز تذاكر الدعم. يستخدم التوقيع مخرجات من نوع القرار فقط:
import dspy
from typing import Literal
from dspy_wsp import WeightSpace, load_decision_backend
class Triage(dspy.Signature):
"""Triage a support ticket."""
ticket: str = dspy.InputField()
urgent: bool = dspy.OutputField(desc="Does this ticket need a reply today?")
team: Literal["billing", "technical", "account"] = dspy.OutputField(desc="Which team should handle it?")
backend = load_decision_backend("d1") # d1-omni-600M
optimizer = WeightSpace(
metric=metric,
writer_lm=dspy.LM("openai/gpt-6-astra", model_type="responses", reasoning_effort="max"),
backend=backend,
max_passes=25,
holdout=0.25,
run_dir="runs/triage",
)
compiled = optimizer.compile(dspy.Predict(Triage), trainset=train, valset=test)
compiled(ticket="I was charged twice this month.") # runs on the edited weights
بعد تنفيذ compile، يستخدم البرنامج النموذج المحلي المعدّل بدلًا من واجهة برمجة تطبيقات مستضافة. يمكن عرض ملخص التغييرات باستخدام compiled.wsp_patch.summary().
رابط ذو صلة: cmpnd.ai
المصدر: MarkTechPost