Skip to content

// pytorch → photons

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

أجعل ⁦PyTorch⁩ يعمل على عتاد غير تقليدي

⁦Backends⁩ و ⁦kernels⁩ و ⁦runtimes⁩ ومسارات ⁦drivers⁩ وربط ⁦firmware⁩ وعروض توضيحية. الجزء الأقل بريقًا بين شريحة بحثية وكود يمكن لأحد تشغيله فعلًا.

انتقل للأسفل

// layer_00 · signal

نبذة

أنظمة ذكاء اصطناعي وروبوتات وبرمجيات يجب أن تتفاعل مع العتاد

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

الحسين جميل

أنظمة ذكاء اصطناعي قريبة من الحديد

باريس، فرنسا

في ⁦Arago⁩ أعمل أساسًا على مسارات ⁦backend⁩ و ⁦runtime dispatch⁩ وكود ⁦launch⁩ لمسرّع ذكاء اصطناعي فوتوني.

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

أحب الكود الذي يضطر إلى التعامل مع الواقع: عتاد عنيد، فيزياء، زمن استجابة، بشر، وافتراضات خاطئة. وأعمل أيضًا على ⁦vibe coding⁩ ؛ كنت أبرمج قبل أن تصبح هوية شخصية.

// 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⁩ أولًا. ⁦APIs⁩ و ⁦runtime⁩ ومسارات ⁦firmware⁩ تتبع طريقة عمل فرق ⁦ML⁩.

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

خريطة الـ ⁦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

المشاريع

أعمال شخصية مع عروض توضيحية حقيقية

⁦open source · RL · MuJoCo⁩

⁦DropRL⁩ — مشي ثنائي الأرجل

خط أنابيب تدريب بـ ⁦Ray RLlib⁩ على ⁦MuJoCo⁩ ، مع ⁦policies⁩ قابلة للتصدير لمشي قريب من ⁦Cassie⁩.

⁦Python⁩⁦Ray RLlib⁩⁦MuJoCo⁩
المشكلة
جعل روبوت ثنائي شبيه بـ ⁦Cassie⁩ يمشي في المحاكاة دون أن يتعلّم حيلًا غريبة ترفع الرقم وتُفسد الحركة.
ما بنيته
خط أنابيب تدريب بـ ⁦Ray RLlib⁩ على ⁦MuJoCo⁩ ، مع ⁦policies⁩ قابلة للتصدير لمشي قريب من ⁦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⁩

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

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

لعبة ⁦2D⁩ · ⁦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⁩ لمسافات ⁦Wasserstein⁩ الالتفافية حسب ⁦Solomon et al⁩. ، ⁦SIGGRAPH 2015⁩.

⁦Python⁩هندسة
المشكلة
جعل مسافات النقل الأمثل قابلة للاستخدام على ⁦grids⁩ و ⁦meshes⁩ بدل أن تبقى فكرة نظرية مكلفة.
ما بنيته
تنفيذ ⁦Python⁩ لمسافات ⁦Wasserstein⁩ الالتفافية حسب ⁦Solomon et al⁩. ، ⁦SIGGRAPH 2015⁩.
العقدة الصعبة
الاستفادة من بنية المجال نفسه بدل بناء مصفوفة تكلفة كاملة.

ديموهات ⁦Barycenter⁩

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

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

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

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

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

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

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

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

// latent_space · selected_projects

أعمال أصغر

مستودعات لفهم موضوع، تجربة فكرة، أو إخراج ما عالق في الذهن

…والكثير غيرها.

// render_pass · first_obsession

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

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

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

// output_layer · return

تواصل

مشاريع، مشاكل أنظمة، عقد تقنية غريبة