LeRobot documentation

EVO1

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

EVO1

EVO1 هو سياسة رؤية-لغة-إجراء للتحكم في الروبوتات، مبني حول هيكل أساسي InternVL3 ورأس إجراء مستمر يعتمد على مطابقة التدفق. يكشف تكامل LeRobot عن EVO1 كنوع سياسة قياسي، مما يتيح تدريبه وتقييمه باستخدام واجهات برمجة التطبيقات المعتادة لمجموعة بيانات LeRobot ونقطة التفتيش ومعالج البيانات.

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

The policy embeds one or more camera images and the language task prompt with InternVL3, pads robot state/action vectors to fixed maximum dimensions, and predicts future action chunks with a flow-matching action head. During inference, the policy samples an action chunk and returns n_action_steps actions from that chunk before sampling again.

ما تغطيه تكامل LeRobot

  • إعداد policy.type=evo1 القياسي من خلال LeRobot
  • تضمين الصور والنصوص في InternVL3 مع خيار الرجوع إلى FlashAttention
  • التحكم في الضبط الدقيق القائم على المراحل لتشغيلات الضبط الدقيق الخاصة برأس الإجراء فقط وتشغيلات الضبط الدقيق لنماذج الرؤية-اللغة
  • التنبؤ بالإجراء باستخدام مطابقة التدفق المستمر
  • حفظ/تحميل نقاط التفتيش عبر واجهات برمجة تطبيقات سياسات LeRobot
  • التدريب باستخدام lerobot-train والتقييم باستخدام واجهات برمجة التطبيقات القياسية للاستدلال على السياسات

قد يتضمن مشروع EVO1 الأوسع نطاقًا سكربتات تدريب إضافية وأدوات لمجموعات البيانات. تركز هذه الصفحة على مسار سياسة التحكم في الروبوت الخاصة بـ LeRobot.

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

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

  2. قم بتثبيت تبعيات EVO1:

    pip install -e ".[training,evo1]"

    لتدريب LIBERO وتقييمه، قم بتثبيت إضافة LIBERO أيضًا:

    pip install -e ".[training,evo1,libero]"
  3. ثبّت عجلة flash-attn فقط إذا كانت متوافقة مع بيئة Python وPyTorch وCUDA وبطاقة GPU لديك. يلجأ EVO1 إلى الانتباه القياسي عندما لا يتوفر flash_attn.

يستخدم EVO1 تطبيق InternVL الأصلي في مكتبة transformers الخاصة بـ Hugging Face، لذا يجب أن يشير policy.vlm_model_name إلى نقطة تفتيش محوّلة بشكل أصلي مثل OpenGVLab/InternVL3-1B-hf (لاحظ لاحقة -hf). يقوم التشغيل الأول بتنزيل نقطة تفتيش VLM المُهيّأة، بينما تعيد التشغيلات اللاحقة استخدامها من ذاكرة التخزين المؤقت في Hugging Face.

متطلبات البيانات

يتوقع EVO1 مجموعة بيانات LeRobot تتضمن:

  • من واحد إلى policy.max_views من الملاحظات البصرية، على سبيل المثال observation.images.image
  • observation.state
  • action
  • تعليمات مهمة اللغة في حقل task في مجموعة البيانات، أو حقل آخر مُهيأ بواسطة policy.task_field

تُملأ متجهات الحالة والإجراء حتى policy.max_state_dim وpolicy.max_action_dim. ثم تُقصّ التنبؤات مرة أخرى إلى بُعد إجراء مجموعة البيانات قبل إرجاعها.

الاستخدام

للاستخدام EVO1 في تكوين LeRobot، حدد:

policy.type=evo1

بشكل افتراضي، تهيّئ سياسة EVO1 الجديدة نموذج VLM الخاص بها من:

policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf

بمجرد توفر نقطة تفتيش بصيغة LeRobot لنموذج EVO1، قم بتحميلها باستخدام:

policy.path=your-org/your-evo1-checkpoint

التدريب

المرحلة 1

تجمّد المرحلة 1 نموذج VLM وتدرّب رأس الإجراء:

lerobot-train \
  --dataset.repo_id=your_org/your_dataset \
  --policy.type=evo1 \
  --policy.training_stage=stage1 \
  --policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf \
  --policy.device=cuda \
  --policy.chunk_size=50 \
  --policy.n_action_steps=50 \
  --policy.max_state_dim=24 \
  --policy.max_action_dim=24 \
  --policy.optimizer_lr=1e-5 \
  --batch_size=4 \
  --steps=5000 \
  --output_dir=./outputs/evo1_stage1

المرحلة 2

يحمّل المرحلة 2 سياسة المرحلة 1، لكنه يبدأ مُحسِّناً ومجدولاً جديدين:

lerobot-train \
  --dataset.repo_id=your_org/your_dataset \
  --policy.path=./outputs/evo1_stage1/checkpoints/005000/pretrained_model \
  --policy.training_stage=stage2 \
  --policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf \
  --policy.device=cuda \
  --policy.chunk_size=50 \
  --policy.n_action_steps=50 \
  --policy.max_state_dim=24 \
  --policy.max_action_dim=24 \
  --policy.optimizer_lr=1e-5 \
  --batch_size=4 \
  --steps=80000 \
  --output_dir=./outputs/evo1_stage2

بشكل افتراضي، يعيد policy.training_stage تطبيق الإعدادات الافتراضية للضبط الدقيق الخاصة بتلك المرحلة. وهذا أمر مهم عند بدء المرحلة 2 من نقطة تفتيش المرحلة 1، لأن إعدادات نقطة تفتيش المرحلة 1 تخزّن أعلام ضبط الدقة الخاصة بنموذج اللغة البصرية (VLM) معطّلة. وتتمتع إعدادات المرحلة الافتراضية بأولوية على أعلام policy.finetune_* المخزّنة أو المُدخلة يدوياً، ما لم يكن policy.apply_training_stage_defaults=false، لذا اضبط هذا العلم فقط عند التحكم يدوياً في كل أعلام الضبط الدقيق.

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

معاملافتراضيالوصف
policy.vlm_model_nameOpenGVLab/InternVL3-1B-hfنقطة تفتيش InternVL3 أو دليل نموذج محلي تم تحويلها بشكل أصلي
policy.training_stagestage1stage1 يدرب رأس الإجراء؛ stage2 يضبط فروع VLM
policy.apply_training_stage_defaultstrueيعيد تطبيق الإعدادات الافتراضية لضبط المرحلة بعد تحميل نقطة التفتيش
policy.vlm_num_layers14عدد طبقات اللغة في InternVL3 التي تُحفظ للسياسة
policy.dtypebfloat16نوع البيانات المطلوب لنموذج VLM
policy.use_flash_attntrueيتطلب FlashAttention عند تثبيته؛ وإلا فإنه يعود إلى
policy.enable_gradient_checkpointingtrueيتيح إنشاء نقاط تفتيش على وحدات InternVL3 المدعومة
policy.gradient_checkpointing_use_reentrantfalseالإعداد المعاد الدخول الذي يُمرَّر إلى نقطة التفتيش للتدرجات عند دعمه
policy.chunk_size50عدد الإجراءات المستقبلية المتوقعة لكل شريحة
policy.n_action_steps50عدد الإجراءات المستهلكة من المقطع المُسحوب
policy.max_state_dim24بُعد الحشو للحالة
policy.max_action_dim24بُعد حشو الإجراء
policy.postprocess_action_dimnullبعد المعالجة اللاحقة لـ EVO1
policy.binarize_gripperfalseيحوّل قناة الماسك بعد المعالجة إلى قيم ثنائية لتقييم بنمط LIBERO
policy.task_fieldtaskحقل الدفعة المستخدم كموجّه للغة

الاستدلال

جرّبها مع نقطة تحقق مدرّبة من EVO1:

# --inference.type=rtc is optional
lerobot-rollout \
  --policy.path=your-org/your-evo1-checkpoint \
  --inference.type=rtc \
  ...

النتائج

تقييم LIBERO

نتيجة مرجعية

اجتاز نقطة التفتيش المُطلَقة للمرحلة 2 التحقق من التنزيل النظيف والتشغيل: zuoxingdong/evo1_libero، المراجعة 515921f4a2c1d3f3ad523721eafa26fdf2af315b. استخدم تقييم التنزيل النظيف مراجعة LeRobot e40b58a8dfa9e7b86918c374791599d070518d11.

أنتج نقطة التفتيش لمرحلة 2 في التشغيل الواحد عند الخطوة 70,000:

Suiteالحلقات الناجحةالحلقاتمعدل النجاح
LIBERO المكانية48550097.0%
LIBERO Object49650099.2%
هدف LIBERO48350096.6%
LIBERO-1046950093.8%
الإجمالي1,9332,00096.65%

تستخدم هذه النتائج نقطة تحقق واحدة مُدرَّبة وبذرة تقييم 1000؛ وهي ليست متوسطًا متعدد البذور أو تقديرًا للثقة.

وصفة التدريب المرجعية

يسجّل نقطة التفتيش المُصدَّرة إعداد مرحلة 2 المُحلَّلة بالكامل في train_config.json. استخدمت التجربة المُقاسة وحدتي معالجة رسومية H100 مع عمليتي DDP وحجم دفعة 64 لكل عملية، مما يعطي حجم دفعة عالمي 128. استخدمت كلتا المرحلتين نفس البنية. جاء نموذج VLM الأساسي من المراجعة 014c0583a0d4bedf29fbe2dbff4f865eb998e171 من OpenGVLab/InternVL3-1B-hf. لا يسجّل المصنوع المُصدَّر التزام LeRobot للتدريب الدقيق أو قفل تبعياته الأصلي، لذلك تعيد الأوامر أدناه إنتاج الإعداد والبنية المُسجَّلين من نسخة حالية بدلاً من إعادة بناء بيئة البرمجية بتطابق تام على مستوى البت.

من نسخة المصدر الخاصة بـ LeRobot، ثبّت الاعتمادات المقفّلة وقم بتنزيل تلك المراجعة الدقيقة من VLM:

uv sync --locked --extra training --extra evo1 --extra libero
VLM_DIR=$(uv run hf download OpenGVLab/InternVL3-1B-hf \
  --revision=014c0583a0d4bedf29fbe2dbff4f865eb998e171)

تجمّد المرحلة 1 نموذج VLM وتدرّب رأس الإجراء لعدد 5,000 خطوة:

uv run accelerate launch --num_processes=2 -m lerobot.scripts.lerobot_train \
  --dataset.repo_id=lerobot/libero \
  --dataset.revision=a1aaacb7f6cd6ee5fb43120f673cebb0cfea7dd4 \
  --dataset.video_backend=torchcodec \
  --dataset.return_uint8=true \
  --dataset.image_transforms.enable=true \
  --dataset.use_imagenet_stats=true \
  --dataset.eval_split=0.0 \
  --policy.type=evo1 \
  --policy.training_stage=stage1 \
  --policy.apply_training_stage_defaults=true \
  --policy.vlm_model_name="${VLM_DIR}" \
  --policy.vlm_num_layers=14 \
  --policy.dtype=bfloat16 \
  --policy.device=cuda \
  --policy.use_amp=true \
  --policy.use_flash_attn=true \
  --policy.enable_gradient_checkpointing=true \
  --policy.gradient_checkpointing_use_reentrant=false \
  --policy.image_resolution='[448,448]' \
  --policy.chunk_size=50 \
  --policy.n_action_steps=50 \
  --policy.max_state_dim=24 \
  --policy.max_action_dim=24 \
  --policy.dropout=0.2 \
  --policy.optimizer_lr=1e-5 \
  --policy.optimizer_weight_decay=1e-3 \
  --policy.optimizer_grad_clip_norm=1.0 \
  --policy.scheduler_warmup_steps=1000 \
  --policy.push_to_hub=false \
  --use_policy_training_preset=true \
  --batch_size=64 \
  --steps=5000 \
  --save_checkpoint=true \
  --save_checkpoint_to_hub=false \
  --save_freq=2500 \
  --log_freq=10 \
  --env_eval_freq=0 \
  --num_workers=4 \
  --prefetch_factor=2 \
  --persistent_workers=true \
  --seed=1000 \
  --trackio.enable=false \
  --output_dir=./outputs/evo1-libero-stage1-g128-5k

تحمّل المرحلة 2 سياسة المرحلة 1 لكنها تبدأ بمُحسِّن ومجدول جديدين. يتم التدريب لمدة 80,000 خطوة؛ والنقطة المحفوظة المُبلَّغ عنها هي تلك المحفوظة عند الخطوة 70,000:

uv run accelerate launch --num_processes=2 -m lerobot.scripts.lerobot_train \
  --dataset.repo_id=lerobot/libero \
  --dataset.revision=a1aaacb7f6cd6ee5fb43120f673cebb0cfea7dd4 \
  --dataset.video_backend=torchcodec \
  --dataset.return_uint8=true \
  --dataset.image_transforms.enable=true \
  --dataset.use_imagenet_stats=true \
  --dataset.eval_split=0.0 \
  --policy.path=./outputs/evo1-libero-stage1-g128-5k/checkpoints/005000/pretrained_model \
  --policy.training_stage=stage2 \
  --policy.apply_training_stage_defaults=true \
  --policy.vlm_model_name="${VLM_DIR}" \
  --policy.vlm_num_layers=14 \
  --policy.dtype=float32 \
  --policy.device=cuda \
  --policy.use_amp=true \
  --policy.use_flash_attn=true \
  --policy.enable_gradient_checkpointing=true \
  --policy.gradient_checkpointing_use_reentrant=false \
  --policy.image_resolution='[448,448]' \
  --policy.chunk_size=50 \
  --policy.n_action_steps=50 \
  --policy.max_state_dim=24 \
  --policy.max_action_dim=24 \
  --policy.dropout=0.2 \
  --policy.optimizer_lr=1e-5 \
  --policy.optimizer_weight_decay=1e-3 \
  --policy.optimizer_grad_clip_norm=1.0 \
  --policy.scheduler_warmup_steps=1000 \
  --policy.push_to_hub=false \
  --use_policy_training_preset=true \
  --batch_size=64 \
  --steps=80000 \
  --resume=false \
  --save_checkpoint=true \
  --save_checkpoint_to_hub=false \
  --save_freq=10000 \
  --log_freq=10 \
  --env_eval_freq=0 \
  --num_workers=4 \
  --prefetch_factor=2 \
  --persistent_workers=true \
  --seed=1000 \
  --trackio.enable=false \
  --output_dir=./outputs/evo1-libero-stage2-g128-80k

ملف تقييم بصيغة المؤلف

يستخدم ملف EVO1 LIBERO بصيغة المؤلف أسماء ميزات الكاميرا الخام الخاصة بـ LIBERO (observation.images.agentview_image وobservation.images.robot0_eye_in_hand_image)، ويعيد التخطيط كل 14 إجراءً، ويحوّل أمر المقبض إلى قيمة ثنائية قبل تحريك المحاكِ. يمكن لمعالج ما بعد السياسة الخاص بـ EVO1 اقتصاص الإجراء المُملأ ذي الأبعاد الـ 24 إلى فضاء إجراءات LIBERO ذي الأبعاد الـ 7 وتطبيق تحويل المقبض الثنائي ذلك. لتقييم نقطة تحقق بصيغة المؤلف ضمن نفس إعداد حلقة واحدة لكل مهمة، احتفظ بأسماء الكاميرا الخام بدلاً من تعيين image/image2 الافتراضي، وفعّل أعلام ما بعد معالجة إجراءات LIBERO:

lerobot-eval \
  --policy.path=your-org/your-evo1-libero-checkpoint \
  --policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf \
  --policy.device=cuda \
  --policy.use_flash_attn=true \
  --policy.n_action_steps=14 \
  --policy.postprocess_action_dim=7 \
  --policy.binarize_gripper=true \
  --env.type=libero \
  --env.task=libero_object \
  --env.camera_name_mapping="{agentview_image: agentview_image, robot0_eye_in_hand_image: robot0_eye_in_hand_image}" \
  --env.observation_height=448 \
  --env.observation_width=448 \
  --eval.batch_size=1 \
  --eval.n_episodes=1

ملف lerobot/libero v3 الأصلي

تخزّن المراجعة a1aaacb7f6cd6ee5fb43120f673cebb0cfea7dd4 ميزات الكاميرا على شكل image وimage2. يقيّم هذا المثال جميع مهام LIBERO Object العشرة، حيث يُطلق كل مهمة في عملية جديدة:

export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl

suite=libero_object
horizon=280
for task_id in {0..9}; do
  lerobot-eval \
    --policy.path=zuoxingdong/evo1_libero \
    --policy.pretrained_revision=515921f4a2c1d3f3ad523721eafa26fdf2af315b \
    --policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf \
    --policy.device=cuda \
    --policy.use_amp=true \
    --policy.dtype=bfloat16 \
    --policy.use_flash_attn=false \
    --policy.enable_gradient_checkpointing=false \
    --policy.vlm_num_layers=14 \
    --policy.image_resolution='[448,448]' \
    --policy.max_text_length=1024 \
    --policy.chunk_size=50 \
    --policy.n_action_steps=14 \
    --policy.max_state_dim=24 \
    --policy.max_action_dim=24 \
    --policy.num_inference_timesteps=32 \
    --policy.postprocess_action_dim=7 \
    --policy.binarize_gripper=true \
    --policy.gripper_threshold=0.0 \
    --policy.gripper_below_threshold_value=-1.0 \
    --policy.gripper_above_threshold_value=1.0 \
    --env.type=libero \
    --env.task="${suite}" \
    --env.task_ids="[${task_id}]" \
    --env.camera_name=agentview_image,robot0_eye_in_hand_image \
    --env.camera_name_mapping="{agentview_image: image, robot0_eye_in_hand_image: image2}" \
    --env.control_mode=relative \
    --env.obs_type=pixels_agent_pos \
    --env.observation_width=448 \
    --env.observation_height=448 \
    --env.init_states=true \
    --env.episode_length="${horizon}" \
    --env.render_mode=rgb_array \
    --env.max_parallel_tasks=1 \
    --eval.n_episodes=50 \
    --eval.batch_size=1 \
    --eval.use_async_envs=false \
    --eval.recording=false \
    --seed=1000 \
    --output_dir="./outputs/evo1-libero-stage2-70k-eval/${suite}/task-${task_id}" \
    --job_name="evo1-libero-stage2-70k-${suite}-task-${task_id}"
done

شغّل جميع معرّفات المهام العشرة لكل مجموعة باستخدام هذه الآفاق:

env.taskenv.episode_length
libero_spatial280
libero_object280
libero_goal300
libero_10520

اضبط suite وhorizon لكل صف. وهذا يمنح 500 حلقة لكل مجموعة و2,000 حلقة إجمالاً، بينما يطابق العملية الجديدة لكل مهمة في الحلقة طوبولوجيا إعادة تعيين مولّد الأرقام العشوائية المقاسة.

المراجع

رخصة

تتبع تكامل LeRobot هذا ترخيص Apache 2.0 المستخدم في LeRobot. تحقق من صفحات نموذجي EVO1 وInternVL3 الأصليين لمعرفة تراخيص نقاط التفتيش والبيانات المنشورة.

Update on GitHub