LeRobot documentation

π₀-FAST (باي-صفر-فاست)

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

π₀-FAST (باي-صفر-فاست)

π₀-FAST هو نموذج رؤية ولغة وإجراء للتحكم العام في الروبوتات يستخدم التنبؤ التلقائي بالرمز التالي لنمذجة الإجراءات المستمرة للروبوت.

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

يجمع π₀-FAST بين قوة نماذج الرؤية واللغة مع نهج جديد لتجزئة الإجراءات يُسمى FAST (تجزئة تسلسل الإجراءات في مجال التردد). وهذا يتيح تدريب نماذج VLA ذاتية التراجع على مهام تتطلب مهارة عالية يصعب تنفيذها باستخدام التقسيم القياسي القائم على التجميع، مع تدريب أسرع حتى 5 أضعاف مقارنةً بالأساليب القائمة على الانتشار مثل π₀.

An overview of Pi0-FAST

لماذا FAST؟

تعتمد الأساليب القياسية لتجزئة أفعال الروبوت على مخططات تقسيم بسيطة لكل بُعد ولكل خطوة زمنية. وعلى الرغم من أن هذا مقبول للأفعال البسيطة، إلا أنه ينهار بسرعة عند التعامل مع المهارات المعقدة والدقيقة التي تتطلب دقة عالية وتحكماً بتردد عالٍ.

تحل FAST هذه المشكلة عن طريق ضغط تسلسلات الإجراءات باستخدام تقنيات معالجة الإشارات، مما يؤدي إلى تسلسل كثيف من رموز الإجراءات يمكن التنبؤ بها بشكل ذاتي التراجع—تمامًا مثل رموز اللغة.

كيف تعمل عملية الترميز السريع FAST

يضغط مُجزّئ FAST تسلسلات الإجراءات من خلال الخطوات التالية:

  1. التطبيع: خذ قطعة فعل مستمرة من الشكل (H, D) حيث H هو الأفق وD هو بُعد الفعل. قسّم باستخدام إحدى طرق التطبيع المدعومة (يُوصى باستخدام الفواصل العشرية Quantiles للتعامل مع القيم الشاذة).

  2. تحويل جيب التمام المنفصل (DCT): تطبيق DCT (عبر scipy) على كل بُعد من أبعاد الحركة بشكل منفصل. يُعد DCT خوارزمية ضغط تُستخدم بشكل شائع في مشفرات الصور والصوت (JPEG، MP3).

  3. التكميم: تقريب وإزالة المعاملات غير المهمة لكل بُعد من أبعاد الإجراء، مما ينتج عنه مصفوفة ترددات متناثرة.

  4. Flatten: تسطيح المصفوفة إلى متجه أحادي البُعد، مع وضع المكونات منخفضة التردد أولاً.

  5. ترميز زوج البايت (BPE): تدريب مُجزِّئ BPE لضغط معاملات DCT إلى رموز إجراء كثيفة، مما يحقق عادةً ضغطًا بنسبة 10x مقارنةً بأساليب التجزئة السابقة.

يمكن لهذا النهج تحويل أي نموذج VLM موجود إلى نموذج VLA من خلال تدريبه على التنبؤ برموز FAST هذه.

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

  1. قم بتثبيت LeRobot باتباع دليل التثبيت الخاص بنا.

  2. قم بتثبيت تبعيات π₀-FAST من خلال تشغيل:

    pip install -e ".[pi]"

تدريب مُرمِّز FAST مخصص

لديك خياران لمُقسِّم FAST:

  1. استخدام مُجزِّئ الرموز المُدرَّب مسبقًا: تم تدريب مُجزِّئ الرموز lerobot/fast-action-tokenizer على أكثر من مليون تسلسل حقيقي لإجراءات الروبوت، ويعمل كمُجزِّئ رموز عام.

  2. تدريب مُجزِّئ خاص بك: للحصول على أفضل أداء على مجموعة البيانات الخاصة بك، يمكنك ضبط المُجزِّئ على بياناتك الخاصة.

تدريب مُجزِّئ خاص بك

lerobot-train-tokenizer \
    --repo_id "user/my-lerobot-dataset" \
    --action_horizon 10 \
    --encoded_dims "0:6" \
    --vocab_size 1024 \
    --scale 10.0 \
    --normalization_mode QUANTILES \
    --output_dir "./my_fast_tokenizer" \
    --push_to_hub true \
    --hub_repo_id "username/my-action-tokenizer"

معلمات المُجزِّئ الرئيسية

معاملالوصفافتراضي
--repo_idمعرّف مستودع مجموعة بيانات LeRobotمطلوب
--action_horizonعدد الإجراءات المستقبلية في كل شريحة10
--encoded_dimsنطاقات الأبعاد مفصولة بفواصل لتشفيرها (على سبيل المثال، "0:6,7:23")"0:6,7:23"
--vocab_sizeحجم مفردات BPE1024
--scaleمعامل توسيع DCT للكم10.0
--normalization_modeوضع التطبيع (MEAN_STD، MIN_MAX، QUANTILES، QUANTILE10، IDENTITY)QUANTILES
--sample_fractionنسبة الأجزاء التي يتم أخذ عينة منها في كل حلقة0.1

الاستخدام

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

policy.type=pi0_fast

التدريب

لتدريب π₀-FAST، يمكنك استخدام سكربت تدريب LeRobot:

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0_fast \
    --output_dir=./outputs/pi0fast_training \
    --job_name=pi0fast_training \
    --policy.pretrained_path=lerobot/pi0fast-base \
    --policy.dtype=bfloat16 \
    --policy.gradient_checkpointing=true \
    --policy.chunk_size=10 \
    --policy.n_action_steps=10 \
    --policy.max_action_tokens=256 \
    --steps=100000 \
    --batch_size=4 \
    --policy.device=cuda

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

معاملالوصفافتراضي
--policy.gradient_checkpointing=trueيقلل من استهلاك الذاكرة بشكل كبير أثناء التدريبfalse
--policy.dtype=bfloat16استخدم التدريب بدقة مختلطة من أجل الكفاءةfloat32
--policy.chunk_sizeعدد خطوات الإجراء للتنبؤ (أفق الإجراء)50
--policy.n_action_stepsعدد خطوات الإجراء التي يجب تنفيذها50
--policy.max_action_tokensالحد الأقصى لعدد رموز FAST لكل شريحة إجراء256
--policy.action_tokenizer_nameمُقسِّم FAST للاستخدامlerobot/fast-action-tokenizer
--policy.compile_model=trueتفعيل torch.compile لتسريع التدريبfalse
--policy.optimizer_fused=trueاستخدم AdamW المدمج؛ يتم تجاهله عند الاستئنافNone

الاستدلال

التخزين المؤقت لـ KV للاستدلال السريع

يدعم π₀-FAST تقنية تخزين مفاتيح القيم (KV-caching)، وهي تحسين شائع الاستخدام في استدلال نماذج اللغة الكبيرة. تقوم هذه التقنية بتخزين أزواج المفاتيح والقيم من آلية الانتباه، مما يتجنب الحسابات المكررة أثناء فك الترميز التلقائي التوليد.

# KV-caching is enabled by default
policy.use_kv_cache=true

مثال على الاستدلال

from lerobot.policies.pi0_fast import PI0FastPolicy, PI0FastConfig

# Load the policy
policy = PI0FastPolicy.from_pretrained("your-model-path")

# During inference
actions = policy.predict_action_chunk(batch)

بنية النموذج

يستخدم π₀-FAST معمارية مبنية على PaliGemma:

  • مشفّر الرؤية: برج SigLIP البصري لفهم الصور
  • نموذج اللغة: Gemma 2B لمعالجة تعليمات اللغة والتنبؤ برموز الإجراءات

يستقبل النموذج الصور والتعليمات النصية وحالة الروبوت كمدخلات، ويخرج رموز FAST منفصلة يتم فك ترميزها مرة أخرى إلى إجراءات مستمرة.

خيارات التهيئة

معاملالوصفافتراضي
paligemma_variantنوع العمود الفقري لنموذج VLM (gemma_300m، gemma_2b)gemma_2b
max_state_dimأبعاد متجه الحالة الأقصى (مع التعبئة)32
max_action_dimأبعاد متجه الإجراء الأقصى (مع التعبئة)32
temperatureدرجة الحرارة للعينة (0.0 للاستخدام الجشع)0.0
max_decoding_stepsالحد الأقصى لخطوات فك الترميز256
use_kv_cacheتفعيل تخزين KV للاستدلال الأسرعtrue

المقارنة مع π₀

ميزةπ₀π₀-FAST
تمثيل الإجراءمطابقة التدفق (الانتشار)رموز التوليد التتابعي (FAST)
سرعة التدريب1xأسرع 5 مرات
المهارةعاليةعالية
طريقة الاستدلالإزالة الضوضاء التكراريةالترميز التوليفي
التخزين المؤقت لـ KVN/Aمدعوم

إعادة إنتاج نتائج π₀Fast

نعيد إنتاج نتائج π₀Fast على معيار LIBERO باستخدام تطبيق LeRobot. نأخذ النموذج الأساسي LeRobot PiFast lerobot/pi0fast-base ونقوم بتدريبه الدقيق لـ 40 ألف خطوة إضافية في bfloat16، مع حجم دفعة يبلغ 256 على 8 وحدات معالجة رسومية H100 باستخدام مجموعة بيانات HuggingFace LIBERO.

يمكن العثور على النموذج المُحسَّن هنا:

باستخدام أمر التدريب التالي:

lerobot-train \
  --dataset.repo_id=lerobot/libero \
  --output_dir=outputs/libero_pi0fast \
  --job_name=libero_pi0fast \
  --policy.path=lerobot/pi0fast-base \
  --policy.dtype=bfloat16 \
  --steps=100000 \
  --save_freq=20000 \
  --batch_size=4 \
  --policy.device=cuda \
  --policy.scheduler_warmup_steps=4000 \
  --policy.scheduler_decay_steps=100000 \
  --policy.scheduler_decay_lr=1e-5 \
  --policy.gradient_checkpointing=true \
  --policy.chunk_size=10 \
  --policy.n_action_steps=10 \
  --policy.max_action_tokens=256 \
  --policy.empty_cameras=1

ثم نقيّم النموذج المُحسَّن باستخدام تطبيق LeRobot LIBERO، من خلال تنفيذ الأمر التالي:

tasks="libero_object,libero_spatial,libero_goal,libero_10"
lerobot-eval \
  --policy.path=lerobot/pi0fast-libero \
  --policy.max_action_tokens=256 \
  --env.type=libero \
  --policy.gradient_checkpointing=false \
  --env.task=${tasks} \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --rename_map='{"observation.images.image":"observation.images.base_0_rgb","observation.images.image2":"observation.images.left_wrist_0_rgb"}'

ملاحظة: قمنا بإعداد n_action_steps=10، على غرار التنفيذ الأصلي لـ OpenPI.

النتائج

نحصل على النتائج التالية على معيار LIBERO:

النموذجLIBERO المكانيةLIBERO Objectهدف LIBEROLIBERO 10المتوسط
π₀-fast70.0100.0100.060.082.5

متوفر مجلد مخرجات التقييم الكامل، بما في ذلك مقاطع الفيديو، هنا

رخصة

يتبع هذا النموذج رخصة Apache 2.0، بما يتوافق مع مستودع OpenPI الأصلي.

المراجع

Update on GitHub