LeRobot documentation
EVO1
EVO1
EVO1, InternVL3 omurgası ve sürekli akış eşleştirme (flow-matching) eylem başlığı etrafında inşa edilmiş, robot kontrolü için bir Görüntü-Dil-Eylem (Vision-Language-Action) politikasıdır. Bu LeRobot entegrasyonu, EVO1'i standart bir politika türü olarak sunar; böylece standart LeRobot veri seti, checkpoint ve işlemci (processor) API'leriyle eğitilebilir ve değerlendirilebilir.
Model Genel Bakış
Politika, bir veya daha fazla kamera görüntüsünü ve dil görevi istemini InternVL3 ile gömme (embedding) yapar, robot durum/aksiyon vektörlerini sabit maksimum boyutlara doldurur (padding) ve bir akış eşleştirme (flow-matching) aksiyon başlığı ile gelecekteki aksiyon parçacıklarını tahmin eder. Çıkarım sırasında politika, bir aksiyon parçacığı örnekler ve yeniden örneklemeye geçmeden önce bu parçacıktan n_action_steps aksiyon döndürür.
LeRobot Entegrasyonunun Kapsamı
- LeRobot üzerinden standart
policy.type=evo1yapılandırması - Opsiyonel FlashAttention yedeği ile InternVL3 görsel/metin gömme
- Eylem başlığına özgü ve VLM ince ayar çalışmaları için aşama tabanlı ince ayar denetimleri
- Sürekli akış-eşleştirme eylem tahmini
- LeRobot politika API'leri üzerinden checkpoint kaydetme/yükleme
lerobot-trainile eğitim ve standart politika çıkarım API'leri ile değerlendirme
Daha geniş kapsamlı EVO1 projesi ek eğitim betikleri ve veri seti araçlarını içerebilir. Bu sayfa, LeRobot robot kontrolü politikası yoluna odaklanmaktadır.
Kurulum Gereksinimleri
LeRobot'u Yükleme Kılavuzu'nu izleyerek yükleyin.
EVO1 bağımlılıklarını yükleyin:
pip install -e ".[training,evo1]"LIBERO eğitimi ve değerlendirmesi için LIBERO ek paketini de yükleyin:
pip install -e ".[training,evo1,libero]"flash-attntekerleğini yalnızca Python, PyTorch, CUDA ve GPU yığınıyla uyumluysa yükleyin.flash_attnkullanılamıyorsa EVO1 standart dikkate geri düşer.
EVO1, yerel Hugging Face transformers InternVL uygulamasını kullandığından policy.vlm_model_name, OpenGVLab/InternVL3-1B-hf gibi yerel olarak dönüştürülmüş bir kontrol noktasına işaret etmelidir (dikkat edin -hf son eki). İlk çalıştırma, yapılandırılan VLM kontrol noktasını indirir ve sonraki çalıştırmalar bunu Hugging Face önbelleğinden yeniden kullanır.
Veri Gereksinimleri
EVO1, aşağıdaki özelliklere sahip bir LeRobot veri seti bekler:
- Örneğin
observation.images.imagegibi,policy.max_views'a kadar görsel gözlemler observation.stateaction- Veri setindeki
taskalanındaki dil görevi talimatı veyapolicy.task_fieldile yapılandırılmış başka bir alan
Durum ve eylem vektörleri policy.max_state_dim ve policy.max_action_dim boyutlarına kadar doldurulur. Tahminler, döndürülmeden önce veri seti eylem boyutuna kırpılır.
Kullanım
LeRobot yapılandırmasında EVO1'i kullanmak için şunları belirtin:
policy.type=evo1Varsayılan olarak, yeni bir EVO1 politikası VLM'ini şundan başlatır:
policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf
LeRobot formatında bir EVO1 kontrol noktası kullanılabilir olduğunda, onu şu şekilde yükleyin:
policy.path=your-org/your-evo1-checkpoint
Eğitim
Aşama 1
Aşama 1, VLM'yi dondurur ve eylem başını eğitir:
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
Aşama 2
Stage 2, Stage 1 politikasını yükler ancak yeni bir optimizör ve zamanlayıcı başlatır:
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
Varsayılan olarak, policy.training_stage ilgili aşama için ince ayar varsayılanlarını yeniden uygular. Stage 1 kontrol noktasından Stage 2'ye başlanırken bu önemlidir, çünkü Stage 1 kontrol noktası yapılandırması VLM ince ayar bayraklarını devre dışı olarak saklar. policy.apply_training_stage_defaults=false olmadıkça, bu aşama varsayılanları, kaydedilen veya manuel olarak sağlanan policy.finetune_* bayraklarından önceliklidir; bu nedenle bu bayrağı yalnızca tüm ince ayar bayraklarını manuel olarak kontrol ettiğinizde ayarlayın.
Temel Eğitim Parametreleri
| Parametre | Varsayılan | Açıklama |
|---|---|---|
policy.vlm_model_name | OpenGVLab/InternVL3-1B-hf | Yerel olarak dönüştürülmüş InternVL3 checkpoint'i veya yerel model dizini |
policy.training_stage | stage1 | stage1 eylem başlığını eğitir; stage2 VLM dallarını ince ayarlar |
policy.apply_training_stage_defaults | true | Kontrol noktası yüklendikten sonra aşama ince ayar varsayılanlarını yeniden uygular |
policy.vlm_num_layers | 14 | Politika için korunan InternVL3 dil katmanı sayısı |
policy.dtype | bfloat16 | İstenen VLM dtype |
policy.use_flash_attn | true | Yüklüyse FlashAttention ister; değilse geriye düşer |
policy.enable_gradient_checkpointing | true | Desteklenen InternVL3 modüllerinde checkpointing'i etkinleştirir |
policy.gradient_checkpointing_use_reentrant | false | Desteklendiğinde gradient checkpointing'e iletilen reentrant ayarı |
policy.chunk_size | 50 | Her parça için tahmin edilen gelecek eylem sayısı |
policy.n_action_steps | 50 | Örnekleme biriminden tüketilen eylem sayısı |
policy.max_state_dim | 24 | Dolgu boyutunu belirt |
policy.max_action_dim | 24 | Eylem dolgu boyutu |
policy.postprocess_action_dim | null | EVO1 son işlemeden sonra döndürülen isteğe bağlı eylem boyutu |
policy.binarize_gripper | false | LIBERO tarzı değerlendirme için işlenmiş gripper kanalını ikileştirir |
policy.task_field | task | Dil istemi olarak kullanılan batch alanı |
Çıkarım
Eğitilmiş bir EVO1 kontrol noktasıyla deneyin:
# --inference.type=rtc is optional
lerobot-rollout \
--policy.path=your-org/your-evo1-checkpoint \
--inference.type=rtc \
...Sonuçlar
LIBERO Değerlendirmesi
Referans sonucu
Yayınlanan Stage-2 checkpoint, temiz indirme ve rollout doğrulamasından başarıyla geçti:
zuoxingdong/evo1_libero, revizyon515921f4a2c1d3f3ad523721eafa26fdf2af315b. Temiz indirme değerlendirmesi, LeRobot revizyonue40b58a8dfa9e7b86918c374791599d070518d11kullanılarak gerçekleştirildi.
70.000. adımdaki tek çalışımlı Stage-2 kontrol noktası şunu üretti:
| Suite | Başarılı bölümler | Bölümler | Başarı oranı |
|---|---|---|---|
| LIBERO Uzamsal | 485 | 500 | 97.0% |
| LIBERO Nesne | 496 | 500 | 99.2% |
| LIBERO Hedef | 483 | 500 | 96.6% |
| LIBERO-10 | 469 | 500 | 93.8% |
| Genel | 1,933 | 2,000 | 96.65% |
Bu sonuçlar, tek bir eğitilmiş checkpoint ve 1000 değerlendirme tohumu kullanılarak elde edilmiştir; bunlar çoklu tohum ortalaması veya güven tahmini değildir.
Referans eğitim tarifi
Yayınlanan checkpoint, tam olarak çözümlenmiş Stage-2 yapılandırmasını train_config.json dosyasında kaydeder.
Ölçülen çalıştırma, iki DDP süreci ve süreç başına 64 batch ile iki H100 GPU kullandı; bu da 128 küresel batch değerine karşılık gelir. Her iki aşama da aynı topolojiyi kullandı. Temel VLM, OpenGVLab/InternVL3-1B-hf deposunun 014c0583a0d4bedf29fbe2dbff4f865eb998e171 revizyonundan geldi.
Yayınlanan artefakt, tam LeRobot eğitim commit'ini veya orijinal bağımlılık kilidini kaydetmediğinden, aşağıdaki komutlar yazılım ortamını bit bit yeniden oluşturmak yerine, mevcut bir checkout üzerinden kaydedilen yapılandırmayı ve topolojiyi yeniden üretir.
LeRobot kaynak kodundan, kilitlenmiş bağımlılıkları yükleyin ve tam olarak o VLM revizyonunu indirin:
uv sync --locked --extra training --extra evo1 --extra libero
VLM_DIR=$(uv run hf download OpenGVLab/InternVL3-1B-hf \
--revision=014c0583a0d4bedf29fbe2dbff4f865eb998e171)Aşama 1, VLM'yi dondurur ve 5.000 adım boyunca eylem başını eğitir:
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-5kStage 2, Stage-1 politikasını yükler ancak yeni bir optimizör ve zamanlayıcı başlatır. 80.000 adım boyunca eğitim yapılır; raporlanan kontrol noktası, 70.000. adımda kaydedilen kontrol noktasıdır:
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-80kYazar biçimi değerlendirme profili
Yazar formatındaki EVO1 LIBERO profili, ham LIBERO kamera özellik adlarını (observation.images.agentview_image ve observation.images.robot0_eye_in_hand_image) kullanır, her 14 eylemde yeniden planlama yapar ve simülatörü adım atmadan önce gripper komutunu ikileştirir. EVO1 politikası son işlemcisi, dolgulu 24B eylemi 7B LIBERO eylem uzayına geri kırpabilir ve bu gripper ikileştirmesini uygulayabilir. Bir yazar formatı kontrol noktasını aynı görev başına bir bölüm ayarında değerlendirmek için, varsayılan image/image2 eşlemesi yerine ham kamera adlarını koruyun ve LIBERO eylem son işleme bayraklarını ayarlayın:
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=1Yerel lerobot/libero v3 profili
Revizyon a1aaacb7f6cd6ee5fb43120f673cebb0cfea7dd4, kamera özelliklerini image ve image2 olarak saklar. Bu örnek, her görevi taze bir süreçte başlatarak on LIBERO Object görevinin tamamını değerlendirir:
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}"
doneHer suite için bu ufuklarla on görev kimliğinin tamamını çalıştırın:
env.task | env.episode_length |
|---|---|
libero_spatial | 280 |
libero_object | 280 |
libero_goal | 300 |
libero_10 | 520 |
Her satır için suite ve horizon değerlerini ayarlayın. Bu, her suite için 500 ve toplamda 2.000 episode sağlar; ayrıca döngünün görev başına yeni süreç oluşturması, ölçülen RNG sıfırlama topolojisiyle eşleşir.
Referanslar
Lisans
Bu LeRobot entegrasyonu, LeRobot tarafından kullanılan Apache 2.0 Lisansını takip eder. Yayınlanan checkpoint ve verilerin lisansları için upstream EVO1 ve InternVL3 model sayfalarını kontrol edin.
Update on GitHub