الدرس 5 — الأُطر والبيئات
جزآن في درس واحد لأنّهما متلازمان عملياً: تختار إطاراً للتعلّم العميق، ثم تكتشف أنّ نصف مشكلاتك تنصيب وإصدارات لا رياضيات.
PyTorch وTensorFlow: الحال في 2026
الإطاران يفعلان الشيء نفسه: بناء شبكات عصبية، وحساب المشتقّات تلقائياً، والتدريب على معالج رسومي. والاختيار بينهما لم يعد مسألة قدرة بل مسألة منظومة.
| PyTorch | TensorFlow | |
|---|---|---|
| الاستخدام في البحث | مسيطر تقريباً | نادر في الأوراق الجديدة |
| الأسلوب | قريب من بايثون العادية | أثقل، طبقات تجريد أكثر |
| التصحيح | خلال التنفيذ، بأدوات بايثون | أصعب تاريخياً |
| النماذج المدرَّبة مسبقاً | معظم Hugging Face | متوفّرة، أقلّ |
| النشر على الهاتف والمتصفّح | ممكن، أدوات أحدث | قوّة تاريخية |
| منحنى التعلّم | ألطف | أشدّ |
التوصية للمتعلّم الجديد: PyTorch. الأبحاث والدروس والنماذج المدرَّبة كلّها هناك، وأسلوبه يشبه بايثون التي تعرفها. أمّا TensorFlow فيبقى منطقياً إذا كان فريقك يستخدمه أو إذا كان هدفك النشر على أجهزة محدودة.
كان الفرق الكبير بين الإطارين هو الرسم البياني الساكن مقابل الديناميكي: TensorFlow يطلب تعريف الحساب كاملاً قبل تشغيله، وPyTorch يبنيه سطراً بسطر أثناء التنفيذ فتستطيع تصحيحه كأيّ كود بايثون. وقد تبنّى TensorFlow لاحقاً التنفيذ الفوري، فذاب الفرق التقني، لكنّ ميزة المنظومة كانت قد حُسمت.
Keras وأُطر أعلى مستوى
Keras واجهة عالية المستوى تختصر بناء الشبكات الشائعة إلى أسطر قليلة، وهي مدمجة في TensorFlow وتدعم أُطراً أخرى في إصداراتها الحديثة. وفي عالم PyTorch يلعب PyTorch Lightning دوراً مشابهاً: يزيل الكود المتكرّر للتدريب (الحلقات، الحفظ، التوزيع على عدّة معالجات) ويترك لك المنطق.
القاعدة: تعلّم الحلقة اليدوية مرّة واحدة لتفهم ما يحدث، ثم استخدم إطاراً عالي المستوى لتوفير الوقت.
Hugging Face: حيث تسكن النماذج
منصّة Hugging Face صارت مستودع النماذج الفعلي: مئات آلاف النماذج المدرَّبة مسبقاً في اللغة والصورة والصوت، مع مكتبات لتحميلها واستخدامها وصقلها في أسطر قليلة.
الأثر العملي هائل: في معظم المهامّ، لا تدرّب من الصفر. تأخذ نموذجاً مدرَّباً وتصقله على بياناتك. وهذا يحوّل مشروعاً كان يحتاج ملايين الأمثلة إلى مشروع يكفيه بضعة آلاف.
البيئات: المشكلة التي لا يتوقّعها أحد
سيناريو متكرّر: كود يعمل عندك، ويرفض العمل عند زميلك، برسالة خطأ لا علاقة لها ظاهرياً بالموضوع. السبب في 90 % من الحالات: إصدارات مكتبات مختلفة.
المكتبات تتطوّر، والدوالّ تتغيّر، والتوافق بين النسخ ليس مضموناً. ومشروعان على الجهاز نفسه قد يحتاجان إصدارين متعارضين من المكتبة نفسها.
الحلّ: بيئة معزولة لكلّ مشروع. مجلّد خاصّ يحتوي نسخة بايثون ومكتباتها، مستقلّاً عن باقي النظام.
| الأداة | ملاحظات |
|---|---|
| venv | مدمج في بايثون، كافٍ لمعظم الحالات |
| conda / mamba | يدير أيضاً مكتبات غير بايثونية (CUDA مثلاً)، مفيد في التعلّم العميق |
| uv / poetry | أحدث، أسرع، إدارة تبعيات أدقّ |
الأداة أقلّ أهمّية من العادة. بيئة واحدة لكلّ مشروع، دائماً.
تثبيت الإصدارات
بيئة معزولة لا تكفي إن لم تُسجّل الإصدارات. ملفّ requirements.txt يحتوي أرقاماً مثبّتة (pandas==2.2.1) يعيد بناء البيئة نفسها بعد سنة. وملفّ يحتوي أسماء بلا أرقام يعطي بيئة مختلفة كلّ شهر.
ثلاث عادات تكفي لتفقد القدرة على إعادة نتيجة قديمة: التنصيب في بيئة النظام العامّة، وترك الإصدارات حرّة، وعدم تثبيت البذرة العشوائية (seed) في الكود. الثلاثة رخيصة الإصلاح ومكلفة الإهمال.
المعالج الرسومي: ما يجب معرفته فقط
النقطة العملية الوحيدة: تدريب التعلّم العميق يحتاج معالجاً رسومياً، وتشغيله يقتضي توافقاً بين إصدار الإطار وإصدار مكتبات CUDA وتعريف بطاقة الرسوميات. وهذا التوافق هو مصدر أشهر ساعات محبطة في المجال.
طريقة تجنّب المشكلة كلّها: استخدم Colab أو صورة جاهزة في البداية. التعامل مع تنصيب CUDA محلياً معركة تُخاض حين تصبح ضرورية فعلاً، لا في الأسبوع الأول.
في ثلاث جمل
ابدأ بـPyTorch: الأبحاث والدروس والنماذج المدرَّبة كلّها هناك، وTensorFlow يبقى منطقياً للنشر على أجهزة محدودة أو إذا استخدمه فريقك. وHugging Face يغيّر قواعد اللعبة لأنّه يجعل الصقل على نموذج مدرَّب بديلاً عن التد ريب من الصفر. وبيئة معزولة لكلّ مشروع مع إصدارات مثبّتة هي الفرق بين عمل قابل للتكرار وعمل يعمل على جهازك وحده.
التالي — الدرس 6: الملخّص والأسئلة الشائعة ←