# π₀ (باي0)

π₀ هو نموذج **رؤية-لغة-إجراء للتحكم العام في الروبوتات**، من شركة Physical Intelligence. تم تكييف تنفيذ LeRobot من مستودعهم مفتوح المصدر [OpenPI](https://github.com/Physical-Intelligence/openpi).

## نظرة عامة على النموذج

يمثل π₀ اختراقًا في مجال الروبوتات بوصفه أول نموذج أساسي شامل للروبوتات طورته [Physical Intelligence](https://www.physicalintelligence.company/blog/pi0). وعلى عكس برامج الروبوت التقليدية التي تُعدّ متخصصين ضيقي النطاق مُبرمجةً لتنفيذ حركات متكررة، صُمم π₀ ليكون سياسةً شاملةً قادرةً على فهم المدخلات البصرية، وتفسير تعليمات اللغة الطبيعية، والتحكم في مجموعة متنوعة من الروبوتات عبر مهام مختلفة.

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/lerobot-pi0%20(1).png"
  alt="An overview of Pi0"
  width="85%"
/>

### رؤية الذكاء المادي

كما وصفت شركة Physical Intelligence، وعلى الرغم من أن الذكاء الاصطناعي حقق نجاحًا ملحوظًا في المجالات الرقمية، بدءًا من لعب الشطرنج وصولًا إلى اكتشاف الأدوية، إلا أن الذكاء البشري لا يزال يتفوق بشكل كبير على الذكاء الاصطناعي في العالم المادي. ولإعادة صياغة مفارقة مورافيك، فإن الفوز بلعبة شطرنج يمثل مشكلة "سهلة" للذكاء الاصطناعي، لكن طي قميص أو تنظيف طاولة يتطلب حل بعض أصعب مشاكل الهندسة التي تم تصوّرها على الإطلاق. يمثل π₀ خطوة أولى نحو تطوير ذكاء اصطناعي مادي يمكّن المستخدمين ببساطة من طلب تنفيذ أي مهمة يرونها من الروبوتات، تمامًا كما يفعلون مع نماذج اللغة الكبيرة.

### البنية والمنهجية

يجمع π₀ بين عدة ابتكارات رئيسية:

- **مطابقة التدفق**: يستخدم طريقة مبتكرة لإثراء نماذج الرؤية واللغة المدربة مسبقًا بإخراجات إجراءات مستمرة عبر مطابقة التدفق (وهي نسخة من نماذج الانتشار)
- **التدريب عبر تجسيدات متعددة**: تم التدريب على بيانات من 8 منصات روبوتية مختلفة تشمل UR5e وBimanual UR5e وFranka وBimanual Trossen وBimanual ARX وMobile Trossen وMobile Fibocom
- **التدريب المسبق على نطاق الإنترنت**: يرث المعرفة الدلالية من نموذج لغة-رؤية مُدرَّب مسبقًا يحتوي على 3 مليارات من المعاملات
- **التحكم عالي التردد**: يُخرج أوامر المحرك بتردد يصل إلى 50 هرتز للتعديل الدقيق في الوقت الفعلي

## متطلبات التثبيت

1. قم بتثبيت LeRobot باتباع [دليل التثبيت](./installation) الخاص بنا.
2. قم بتثبيت تبعيات Pi0 عن طريق تشغيل الأمر التالي:

   ```bash
   pip install -e ".[pi]"
   ```

## بيانات التدريب والقدرات

يُدرَّب π₀ على أكبر مجموعة بيانات تفاعل روبوتي حتى الآن، مع دمج ثلاث مصادر بيانات رئيسية:

1. **التدريب المسبق على نطاق الإنترنت**: بيانات اللغة والرؤية من الويب لفهم الدلالات
2. **مجموعة بيانات X-Embodiment المفتوحة**: مجموعات بيانات مفتوحة المصدر للتلاعب بالروبوتات
3. **مجموعة بيانات Physical Intelligence**: مجموعة بيانات كبيرة ومتنوعة لمهام رشيقة عبر 8 روبوتات مختلفة

## الاستخدام

للاستخدام π₀ في LeRobot، حدد نوع السياسة على النحو التالي:

```python
policy.type=pi0
```

## التدريب

لتدريب π₀، يمكنك استخدام سكربت تدريب LeRobot القياسي مع الإعداد المناسب:

```bash
lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0 \
    --output_dir=./outputs/pi0_training \
    --job_name=pi0_training \
    --policy.pretrained_path=lerobot/pi0_base \
    --policy.repo_id=your_repo_id \
    --policy.compile_model=true \
    --policy.gradient_checkpointing=true \
    --policy.dtype=bfloat16 \
    --policy.freeze_vision_encoder=false \
    --policy.train_expert_only=false \
    --steps=3000 \
    --policy.device=cuda \
    --batch_size=32
```

### معلمات التدريب الرئيسية

- **`--policy.compile_model=true`**: يُفعّل تجميع النموذج لتسريع التدريب
- **`--policy.gradient_checkpointing=true`**: يقلل من استهلاك الذاكرة بشكل كبير أثناء التدريب
- **`--policy.dtype=bfloat16`**: استخدم تدريب الدقة المختلطة من أجل الكفاءة
- **`--batch_size=32`**: حجم الدفعة للتدريب، عدّل هذا بناءً على ذاكرة وحدة معالجة الرسوميات لديك
- **`--policy.pretrained_path=lerobot/pi0_base`**: النموذج الأساسي π₀ الذي تريد ضبطه، والخيارات هي:
  - [lerobot/pi0_base](https://huggingface.co/lerobot/pi0_base)
  - [lerobot/pi0_libero](https://huggingface.co/lerobot/pi0_libero) (تم تدريبه خصيصًا على مجموعة بيانات Libero)
- **`--policy.optimizer_fused=true`**: يستخدم AdamW المدمج لخطوات المُحسِّن الأسرع؛ يتم تجاهل هذا العلم عند استئناف التشغيل

### شرح معلمات التدريب

| معامل               | افتراضي | الوصف                                 |
| ----------------------- | ------- | ------------------------------------------- |
| `freeze_vision_encoder` | `false` | لا تُجمِّد مُشفِّر الرؤية            |
| `train_expert_only`     | `false` | لا تُجمّد نموذج VLM، بل درّب جميع المعاملات |

**💡 نصيحة**: ضبط `train_expert_only=true` يُجمّد نموذج VLM ويدرب خبير الإجراءات والإسقاطات فقط، مما يتيح الضبط الدقيق مع تقليل استهلاك الذاكرة.

## الإجراءات النسبية

بشكل افتراضي، يتنبأ π₀ بإجراءات مطلقة. يمكنك تفعيل **الإجراءات النسبية** بحيث يتنبأ النموذج بإزاحات نسبية لحالة الروبوت الحالية. قد يحسّن ذلك استقرار التدريب لبعض التكوينات.

لاستخدام الإجراءات النسبية، أعد أولاً حساب إحصاءات مجموعة البيانات الخاصة بك في الفضاء النسبي عبر سطر الأوامر:

```bash
lerobot-edit-dataset \
    --repo_id your_dataset \
    --new_repo_id your_dataset \
    --operation.type recompute_stats \
    --operation.overwrite true \
    --operation.relative_action true \
    --operation.chunk_size 50 \
    --operation.relative_exclude_joints "['gripper']" \
    --push_to_hub true
```

أو ما يعادلها بلغة بايثون:

```python
from lerobot.datasets import LeRobotDataset, recompute_stats

dataset = LeRobotDataset("your_dataset")
recompute_stats(dataset, relative_action=True, chunk_size=50, relative_exclude_joints=["gripper"])
dataset.push_to_hub()
```

يجب أن يتطابق `chunk_size` مع `chunk_size` الخاص بسياساتك (الافتراضي 50 لـ π₀). يحدد `relative_exclude_joints` أسماء المفاصل التي يجب أن تبقى في الفضاء المطلق (مثل أوامر الماسك). استخدم `--push_to_hub true` لرفع الإحصائيات المحدّثة إلى Hub.

ثم درّب مع تمكين الإجراءات النسبية:

```bash
lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0 \
    --policy.use_relative_actions=true \
    --policy.relative_exclude_joints='["gripper"]' \
    ...
```

## رخصة

يتبع هذا النموذج **رخصة Apache 2.0**، بما يتوافق مع مستودع [OpenPI](https://github.com/Physical-Intelligence/openpi) الأصلي.

