// pytorch → photons

مهندس برمجيات · أنظمة ذكاء اصطناعي · باريس

أجعل ⁦PyTorch⁩ يعمل على مسرّعات ذكاء اصطناعي جديدة

أبني الطبقة البرمجية التي تحوّل نماذج ⁦PyTorch⁩ إلى عمل يستطيع المسرّع تنفيذه، من ⁦compiler backends⁩ و ⁦runtimes⁩ إلى الكود المتصل بالـ ⁦firmware⁩.

انتقل للأسفل

// layer_00 · signal

نبذة

برمجيات ذكاء اصطناعي تصل النماذج بالعتاد

صورة شخصية للحسين جميل

الحسين جميل

أنظمة ذكاء اصطناعي من ⁦PyTorch⁩ إلى العتاد

باريس، فرنسا

في ⁦Arago⁩ بنيت المسار البرمجي الذي يتيح تشغيل أحمال ⁦PyTorch⁩ على مسرّع ذكاء اصطناعي فوتوني: تكامل ⁦backend⁩ ، وتوزيع العمل في ⁦runtime⁩ ، وكود الإطلاق.

قبل ذلك درّبت سياسات تحكم لروبوتات المشي والهياكل الخارجية في ⁦Wandercraft⁩ ، ثم طوّرت أنظمة رؤية حاسوبية للأتمتة الروبوتية في ⁦EyePick⁩. درست في ⁦École Polytechnique⁩ و ⁦Sorbonne Université⁩.

أستمتع بالبرمجيات التي يجب أن تتعامل مع العتاد والفيزياء وزمن الاستجابة والبشر. وخارج العمل أعود غالبًا إلى مشروع جانبي أو الموسيقى أو التسلق أو لغز كان من الأفضل أن أتركه.

// hidden_layers · experience

الخبرة

مسرّعات ذكاء اصطناعي وروبوتات ورؤية حاسوبية، من نماذج البحث الأولية إلى برمجيات الإنتاج

عمل كان عليه أن ينجح خارج دفتر التجارب.

مهندس برمجيات، مسرّعات ذكاء اصطناعي

Arago · باريس، فرنسا

  • بنيت مسارات ⁦backend⁩ في ⁦PyTorch/ATen⁩ لمسرّع ذكاء اصطناعي فوتوني: ⁦kernels⁩ مخصصة، تنفيذ ⁦graphs⁩ ، وتكامل مع الإطار.
  • عملت على ⁦dispatch⁩ في ⁦runtime⁩ لتقسيم ⁦graphs⁩ ، تخصيص سريع، ⁦peer transfers⁩ ، ترتيب ⁦launches⁩ ، وطوابير متزامنة.
  • ربطت كود المضيف بتدفقات ⁦firmware⁩ ، حيث تتحول ⁦launches⁩ إلى ⁦device primitive graphs⁩ لأنوية ⁦mono⁩ ونقاط مزامنة.
  • عمل قريب من العتاد: إصدار ⁦ISA⁩ مخصصة، واجهات ⁦drivers⁩ ، إعداد الأجهزة، ⁦simulation⁩ ، و ⁦validation⁩.
عرض المزيد

منظومة تسريع مصممة حول ⁦PyTorch⁩ وطريقة العمل المعتادة لفرق الذكاء الاصطناعي.

المشكلة
ضرب المصفوفات الفوتوني ليس سوى ⁦kernel⁩ واحد. يحتاج المنتج إلى مسار كامل من ⁦PyTorch⁩ عبر ⁦runtime⁩ و ⁦firmware⁩ ثم العودة إلى ⁦tensors⁩ يمكن للمستخدم التعامل معها بصورة طبيعية.
ما بنيته
⁦compiler lowering⁩ ، ⁦runtime⁩ على المضيف، مسارات ⁦drivers⁩ ، تخصيص سريع، نقل ⁦device-to-device⁩ ، ⁦launch queues⁩ ، و ⁦dispatch firmware⁩.
العقدة الصعبة
تذهب مناطق من ⁦graph⁩ أو عمليات منفردة إلى الأجهزة، تُفكك إلى ⁦primitive graphs⁩ ، تُنفَّذ على ⁦mono cores⁩ ، وتعود إلى ⁦PyTorch⁩ عبر ⁦events⁩. ويجب أن يبقى الإحساس قريبًا من مكدس مسرّع عادي.
⁦PyTorch⁩⁦Runtime⁩⁦Firmware⁩⁦Accelerators⁩
لماذا لا يوجد مستودع للكود ←

خريطة الـ ⁦Runtime⁩

رسم ⁦PyTorch⁩ → تقسيم ⁦compiler⁩ → تنفيذ على أكثر من جهاز

01

رسم الحساب في ⁦PyTorch⁩

⁦input⁩ aten.mm norm gelu ⁦copy⁩ aten.mm add ⁦output⁩
  • عمليات ⁦ATen⁩ تُكوّن رسم اعتماد حقيقيًا
  • حواف ⁦tensors⁩ تساعد على تحديد مكان تنفيذ العمل
  • المناطق القابلة للتسريع تُعزل قبل الإطلاق
02

⁦compiler⁩ + ⁦runtime⁩ على المضيف

01 خفض مستوى الرسم
02 توزيع العمل
03 تخطيط الإطلاقات والنقل
03

تنفيذ على كل جهاز

رسم فرعي ⁦A⁩

⁦Device 0⁩

⁦launch -> DAG primitives⁩

جلسات التنفيذ

⁦queue 0⁩ ⁦queue 1⁩ ⁦queue 2⁩

رسم ⁦primitives⁩ داخل الجهاز

نواة التحكم
وحدة حساب ليزرية
مزامنة + أحداث الجهاز
⁦PCIe⁩ / ربط الأجهزة
رسم فرعي ⁦B⁩

⁦Device 1⁩

⁦node -> DAG primitives⁩

جلسات التنفيذ

⁦queue 0⁩ ⁦queue 1⁩ ⁦queue 2⁩

رسم ⁦primitives⁩ داخل الجهاز

نواة التحكم
وحدة حساب ليزرية
مزامنة + أحداث الجهاز
04

النتيجة

  • قد يكون الإطلاق رسمًا فرعيًا مترجمًا أو عملية ⁦PyTorch⁩ واحدة
  • يحوّل ⁦firmware⁩ الرسم إلى ⁦DAG⁩ من ⁦primitives⁩ لأنوية ⁦mono⁩
  • تنتقل ⁦tensors⁩ الوسيطة عبر ⁦PCIe⁩ أو روابط الأجهزة

مخطط مبسّط — مصطلحات عامة فقط

مهندس Machine Learning

EyePick · باريس، فرنسا

  • بنيت خطوط رؤية حاسوبية لأتمتة روبوتية بزمن قريب من الحقيقي في الصناعة والزراعة والمطابخ.
  • عملت على كشف الشذوذ وتصنيف الصور لأغراض ضبط الجودة.
  • كيّفت نماذج مبنية على ⁦ResNet⁩ عندما تعرقلت خطوط شبيهة بـ ⁦YOLO⁩ بسبب قيود الترخيص.

متدرب Reinforcement Learning

Wandercraft · باريس، فرنسا

  • درّبت سياسات تحكم ⁦RL⁩ لروبوت ⁦Cassie⁩ ثنائي الأرجل وهيكل ⁦Eve⁩ الخارجي.
  • استخدمت ⁦NVIDIA Isaac Gym⁩ و ⁦Ray RLlib⁩ للمحاكاة المتوازية وتدريب السياسات بشكل موزع.
  • عملت على نقل ⁦sim-to-real⁩ عبر ⁦imitation learning⁩ و ⁦domain adaptation⁩ و ⁦visual adaptation⁩.

متدرب خوارزميات ذكاء اصطناعي

Poppins — سابقًا Mila · باريس، فرنسا

  • نفّذت صعوبة تكيفية للعبة علاجية مخصصة للأطفال المصابين بعسر القراءة.
  • استخدمت ⁦clustering⁩ ومقاييس اللعب لضبط الصعوبة دون طلب ⁦feedback⁩ مباشر من الأطفال.
  • عملت على الخوارزمية وعلى دمجها داخل اللعبة.

// weights · toolkit

المهارات والخلفية

الأدوات التي أستخدمها، وما درسته، وأين أدرّس

البرمجة

  • ⁦Python⁩
  • ⁦C++⁩
  • ⁦C⁩
  • ⁦OCaml⁩
  • ⁦Java⁩
  • ⁦C#⁩
  • ⁦SQL⁩

أنظمة ⁦AI⁩

  • تشغيل ⁦PyTorch⁩
  • خفض مستوى الرسم
  • عمل ⁦runtime⁩
  • ⁦ISA⁩ مخصصة
  • ⁦Kernels⁩
  • تنفيذ متعدد الأنوية

تعلم آلي

  • رؤية حاسوبية
  • تعلم معزز
  • تعلم بالتقليد
  • ⁦Sim-to-real⁩
  • نشر نماذج

الروبوتات

  • ⁦NVIDIA Isaac Gym⁩
  • ⁦Ray RLlib⁩
  • تحكم روبوتي
  • أتمتة صناعية
  • واجهات ⁦VR⁩ للروبوتات

الأدوات

  • ⁦Linux⁩
  • ⁦Git⁩
  • ⁦Docker⁩
  • تصحيح أخطاء
  • تكامل ⁦HW/SW⁩

الدراسة

  • ⁦École Polytechnique⁩

    شهادة هندسة — بمستوى ⁦MSc⁩ · ⁦2020 — 2024⁩

  • ⁦Sorbonne University — UPMC⁩

    ⁦Master 2⁩ — أنظمة ذكية · ⁦2023 — 2024⁩

  • ⁦Lycées Buffon & Louis-le-Grand⁩

    ⁦CPGE — MPSI → MP*⁩ · ⁦2018 — 2020⁩

التدريس

  • ⁦Master X-HEC⁩

    محاضر ضيف في ⁦machine learning⁩ لطلاب ماجستير هندسة وأعمال.

  • ⁦Lycée Saint-Louis⁩

    ممتحن شفهي رياضيات لطلاب ⁦CPGE⁩.

اللغات

العربية لغة أم · الفرنسي ثنائي اللغة · الإنجليزي ثنائي اللغة · الإسباني متوسط

الاهتمامات

  • ⁦MMA⁩
  • ألغاز
  • كمان
  • تسلق

// forward_pass · selected_work

المشاريع

مشاريع مختارة مع كود أو عروض عملية أو كليهما

مفتوح المصدر · تعلم معزز · ⁦MuJoCo⁩

⁦DropRL⁩ — منظومة تدريب واحدة لبيئات متعددة

إطار مبني على ⁦Ray RLlib⁩ ومحوره البيئة: أضف مجلد المهمة، واختر الخوارزمية في ⁦YAML⁩ ، ثم درّب واستأنف التدريب وأنشئ العرض.

⁦Python⁩⁦Ray RLlib⁩⁦MuJoCo⁩
المشكلة
غالبًا ما تخلط مشاريع التعلم المعزز بين البيئة وكود التدريب، فتتحول كل مهمة جديدة إلى عملية ربط جديدة.
ما بنيته
إطار مبني على ⁦Ray RLlib⁩ ومحوره البيئة: أضف مجلد المهمة، واختر الخوارزمية في ⁦YAML⁩ ، ثم درّب واستأنف التدريب وأنشئ العرض.
العقدة الصعبة
الحفاظ على قابلية نقل المهام والإعدادات و ⁦checkpoints⁩ مع دعم بيئة مشي كاملة لروبوت ⁦Cassie⁩.
/ droprl · cassie · إشارات ⁦debug⁩ للـ ⁦RL⁩ متزامنة مع الفيديو t = 0.0s
/ droprl · snake-v0 · وكيل ⁦AI⁩ التكرار 0 · المكافأة 0.0 · النقاط 0
نجمة · السياسة ⁦π⁩

مشروع تخرّج · ⁦VR⁩ · روبوتات

لمسة عاطفية — ⁦VR⁩

تجربة ⁦Unity VR⁩ تتضمن التحكم بذراع ⁦Franka Emika⁩ عبر ⁦Redis⁩ ، معايرة تتبع اليد، وتقييم المتعة والشدة داخل الخوذة.

⁦Unity⁩⁦VR⁩⁦Franka⁩⁦Redis⁩
المشكلة
مواءمة ضربة فرشاة في ⁦VR⁩ مع لمس روبوت حقيقي بدقة كافية لدراسة فيزيولوجيا النفس.
ما بنيته
تجربة ⁦Unity VR⁩ تتضمن التحكم بذراع ⁦Franka Emika⁩ عبر ⁦Redis⁩ ، معايرة تتبع اليد، وتقييم المتعة والشدة داخل الخوذة.
العقدة الصعبة
مزامنة العرض والروبوت/اللمس والإجابات الذاتية دون أن ينهار وهم التجربة.

⁦Unity⁩ · ⁦VR⁩ · ⁦Franka Emika⁩ · ⁦Redis⁩ · تتبع اليد

محاكاة اللمس

محاكاة لمس عاطفي

ضربة فرشاة على يد افتراضية. كان هذا المحفّز الأساسي في الدراسة.

البروتوكول والواجهة

المعايرة

معايرة تتبع اليد

يؤكد المشارك وضعيات اليد، ثم يتابع عدًا تنازليًا قبل بدء التجارب.

تقييم داخل ⁦VR⁩

واجهة المتعة والشدة

يجرى التقييم داخل الخوذة حتى لا يُقطع تسلسل التجربة.

مشروع جامعي · ⁦Unity⁩ · ⁦ADHD⁩

لعبة ألغاز لدراسة ⁦ADHD⁩

⁦Hub⁩ في ⁦Unity⁩ مع أربع ألعاب ألغاز صغيرة، غرف ⁦pixel-art⁩ ، ⁦fog-of-war⁩ ، منطق شبكي، وألغاز فيزيائية.

⁦Unity⁩⁦C#⁩تصميم ألعاب
المشكلة
بناء لعبة ضمن مشروع بحثي جامعي لدراسة انتقال الأطفال المصابين بـ ⁦ADHD⁩ بين الاستكشاف واستغلال ما تعلّموه.
ما بنيته
⁦Hub⁩ في ⁦Unity⁩ مع أربع ألعاب ألغاز صغيرة، غرف ⁦pixel-art⁩ ، ⁦fog-of-war⁩ ، منطق شبكي، وألغاز فيزيائية.
العقدة الصعبة
نحو ⁦200⁩ ساعة عمل فردي: حلقة اللعب، تصميم المراحل، الميكانيكا، الإضاءة، ونسخة جاهزة لاختبارات المستخدمين.

المركز واختيار المستوى

معبد مركزي فيه تماثيل كعلامات وبوابات لكل لعبة صغيرة.

مشروع جامعي فردي · نحو ⁦200⁩ ساعة · صُمم لاختبارات مع أطفال مصابين بـ ⁦ADHD⁩

٤ ألعاب صغيرة

لغز صناديق ملوّنة

غرفة بأسلوب ⁦Sokoban:⁩ ادفع الصناديق إلى البلاطات المطابقة للونها.

جسر هش

الأرقام على الصناديق تبيّن كم بلاطة تبقى صامدة قبل انهيار الجسر.

انزلاق على الجليد وفخاخ

جليد بلا احتكاك، فخاخ مسامير، وهامش خطأ ضيق للغاية.

متاهة المصباح

متاهة دائرية، ولا يكشف ⁦fog-of-war⁩ إلا الخانات القريبة من اللاعب.

ذكاء ألعاب · ⁦pygame⁩

⁦Noine⁩ — لعبة الطاحونة

تنفيذ كامل بـ ⁦Pygame:⁩ قواعد، واجهة، وبوت ⁦Minimax⁩.

⁦Minimax⁩⁦Pygame⁩⁦Python⁩
المشكلة
بناء لعبة الطاحونة من البداية إلى النهاية، مع ذكاء اصطناعي يلعب بجدية.
ما بنيته
تنفيذ كامل بـ ⁦Pygame:⁩ قواعد، واجهة، وبوت ⁦Minimax⁩.
العقدة الصعبة
يتغيّر توليد الحركات بين وضع القطع وتحريكها ومرحلة الطيران؛ لذلك يجب أن يتتبع البحث حالة اللعبة بدقة.
/ ⁦noine⁩ — لعبة الطاحونة ·

اضغط على نقطة · كوّن طاحونة لتأخذ قطعة

نسخة ⁦Pygame⁩ الأصلية

لوحة ⁦Noine⁩ في منتصف اللعب مع قطع برتقالية وبيضاء
منتصف اللعبة
لوحة ⁦Noine⁩ أثناء أسر قطعة بعد تكوين طاحونة
مرحلة الطاحونة

هندسة · نقل أمثل

مسافات ⁦Wasserstein⁩ الالتفافية

حزمة ⁦Python⁩ مختبرة لحساب ⁦barycenters⁩ من ⁦Wasserstein⁩ الالتفافي على شبكات ثنائية وثلاثية الأبعاد وعلى ⁦meshes⁩ مثلثية.

⁦Python⁩نقل أمثل
المشكلة
جعل مسافات النقل الأمثل قابلة للاستخدام على ⁦grids⁩ و ⁦meshes⁩ بدل أن تبقى فكرة نظرية مكلفة.
ما بنيته
حزمة ⁦Python⁩ مختبرة لحساب ⁦barycenters⁩ من ⁦Wasserstein⁩ الالتفافي على شبكات ثنائية وثلاثية الأبعاد وعلى ⁦meshes⁩ مثلثية.
العقدة الصعبة
استخدام ⁦convolution⁩ وحلول معادلة الحرارة بدل بناء مصفوفة كثيفة لتكاليف كل زوج.

ديموهات ⁦Barycenter⁩

تحويل شكل ثنائي الأبعاد

تتحول نقاط إلى نجمة عبر ⁦barycenter⁩ من ⁦Wasserstein⁩ الالتفافي على شبكة ثنائية الأبعاد.

تحويل صورة ⁦RGB⁩

تمزج ⁦barycenters⁩ لكل قناة صورتين ملوّنتين مع بقاء بنية الكتلة مقروءة.

تحويل ⁦voxel⁩ ثلاثي الأبعاد

يتداخل ديناصور ⁦voxel⁩ و ⁦double torus⁩ عبر ⁦barycenter⁩ ثلاثي الأبعاد مُنعّم قليلًا.

نقل توزيع على سطح

تمتزج ⁦Gaussians⁩ بنواة حرارية على ⁦torus⁩ خلال ⁦13⁩ خطوة، فيبقى الانتشار والاندماج واضحين.

// latent_space · selected_projects

مشاريع أخرى

مشاريع مركّزة لفهم نظام أو اختبار فكرة أو حل مشكلة

توجد تجارب أخرى على ⁦GitHub⁩.

// render_pass · first_obsession

بدايات ثلاثية الأبعاد

تجارب ⁦3ds Max⁩ من عمر ⁦10⁩ إلى ⁦15⁩ سنة

تعلّمت ⁦3ds Max⁩ بمفردي لأنني أردت صنع غرف وشخصيات تشبه أعمال ⁦Pixar⁩. كانت هذه الرندرات أول مشاريعي الإبداعية الحقيقية على الحاسوب.

// output_layer · return

تواصل

لديك مشروع أو مشكلة أنظمة أو تحدٍ تقني غير معتاد؟