في منشور سابققدّمنا TorchNeuron، الواجهة الخلفية الأصلية لـ PyTorch الخاصة بـ AWS Trainium (حزمة الـ torch-neuronx ). بها، يشغّل Transformers شيفرة النمذجة الخاصة به على Trainium كما يفعل على أي جهاز آخر، وبالتالي يمكن تشغيل أي نموذج من Transformers على الـ Hub. أي منها يعمل فعلاً؟
يُجيب مساحة (Space) الـ torch-neuronx model support عن ذلك السؤال لأشهر النماذج على الـ Hub. تخبرك ما إذا كان النموذج يعمل على Trainium دون تعديل، وتمنحك السكربت اللازم لتشغيله بنفسك.
ابحث عن نموذج
تفتح المساحة على عرض Selected : وهو اختيارنا الخاص من النماذج المنتقاة بين أفضل النماذج على الـ Hub حسب التنزيلات ودرجة الانتشار. يعرض كل صف النتيجة، وعدد أنوية Trainium التي تم تقسيم النموذج عليها، والزمن الفعلي للتشغيل (شاملاً الترجمة/التجميع)، وأقصى ذاكرة للجهاز.
للبحث عن نموذج معيّن، انتقل إلى عرض Trending أو Downloads واكتب جزءاً من اسمه. تتبع هذه العروض ترتيبات الـ Hub نفسها، مهمة واحدة في كل مرة، سواء كان النموذج قد اختُبر أم لا. وعندما يُستثنى نموذج عن قصد، تخبرك المساحة بالسبب (في معظم الأحيان لم يكن ضمن الأولويات، وأحياناً يكون غير متوافق فعلاً). يمكنك أيضاً اختيار إصدارات مترجم Neuron (neuronx-cc) وTransformers التي تريد الاطلاع عليها.
حتى وقت كتابة هذا المقال، يُختبر نماذج Transformers فقط، واختيارنا محدود بنماذج
text-generationوimage-text-to-text. نخطط للتوسّع نحو diffusers وsentence transformers ومهام transformers أخرى.
شغّله بنفسك
اختر نموذجاً لترى كيفية تشغيله. تعرض المساحة حزمة Neuron التي اختُبر عليها النموذج، والحزم الواجب تثبيتها فوقها، وسكربت الـ run.py الذي تم تشغيله. يتبع السكربت وصفة إعلان TorchNeuron: إذ يحمّل النموذج بـ from_pretrained، مقسّماً عند الحاجة إلى ذلك، ثم يولّد النصوص باستخدام ذاكرة تخزين مؤقت ثابتة و torch.compile(backend="neuron").
على مثيل Trainium2 (trn2) مزوّد ب تلك الحزمة، مثل حاوية الـ AWS Neuron Deep Learning Container، ثبّت الحزم ثم شغّل:
python3 run.py
لا حاجة إلى torchrun: يُشغِّل السكربت نفسه torch.distributed رتبًا عندما يكون النموذج مجزّأً.
تبدأ أول تشغيلة بترجمة رسوم النموذج البرمجية. لتجاوز تلك الخطوة، انسخ الرسوم التي بناها المترجم نفسه أثناء الاختبار، من حاوية NEFF cache العامة. تمنحك الـ Space الأمر مع إصدار المترجم الصحيح:
hf buckets sync hf://buckets/aws-neuron/torch-neuronx-neff-cache/neuronxcc-<version> /tmp/neff_cache
ماذا تعني كلمة "runs"
يحمّل كل اختبار النموذج على trn2 مثيل (instance)، مُقسّمًا على أقل عدد ممكن من أنوية Trainium التي تتسع لأوزانه. معظم النماذج تُقسّم بتوازي الموترات (tensor parallelism). أما نماذج مزيج الخبراء (mixture-of-experts) التي لا تخطيط لتوازي الموترات فتستخدم توازي الخبراء فقط. ثم يولّد الاختبار 32 رمزًا (token) ويتحقق منها. على نواة واحدة، تُقارن الرموز بتلك الناتجة عن تشغيل CPU لنفس النسخة (checkpoint). وعندما يكون النموذج مجزّأًا، يتحقق نموذج حَكَم صغير من أن النص إنجليزية سليمة.
في وقت كتابة هذه السطور، لا تُختبر إلا النماذج التي تتسع على 4 أجهزة Trainium2، أي 16 نواة على الأكثر. ولا يقول PASS أي شيء عن الإنتاجية أو عن التوليدات الأطول.
النتائج عبارة عن مجموعة بيانات
كل ما يعرضه الـ Space يأتي من aws-neuron/torch-neuronx-model-support مجموعة البيانات العامة، مع ملف Parquet واحد لكل زوج من neuronx-cc وإصدارات المكتبة.
يحتوي كل صف على نتيجة نموذج، والخطأ عند فشله، وإصدارات الحزمة الكاملة و run.py الذي جرى. يمكنك الاستعلام عنها مباشرة:
import pandas as pd
df = pd.read_parquet("hf://datasets/aws-neuron/torch-neuronx-model-support/data")
df[df.model_id == "Qwen/Qwen3-0.6B"][["neuronx_cc", "library", "library_version", "neuron_cores", "result"]]
بطاقة مجموعة البيانات توضح المعنى الدقيق لكل نتيجة.
في المرة القادمة التي تتساءل فيها عما إذا كان نموذج ما يعمل على Trainium، ابحث عنه.