LeRobot documentation

EVO1

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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=evo1 yapı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-train ile 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

  1. LeRobot'u Yükleme Kılavuzu'nu izleyerek yükleyin.

  2. 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]"
  3. flash-attn tekerleğini yalnızca Python, PyTorch, CUDA ve GPU yığınıyla uyumluysa yükleyin. flash_attn kullanı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.image gibi, policy.max_views'a kadar görsel gözlemler
  • observation.state
  • action
  • Veri setindeki task alanındaki dil görevi talimatı veya policy.task_field ile 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=evo1

Varsayı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

ParametreVarsayılanAçıklama
policy.vlm_model_nameOpenGVLab/InternVL3-1B-hfYerel olarak dönüştürülmüş InternVL3 checkpoint'i veya yerel model dizini
policy.training_stagestage1stage1 eylem başlığını eğitir; stage2 VLM dallarını ince ayarlar
policy.apply_training_stage_defaultstrueKontrol noktası yüklendikten sonra aşama ince ayar varsayılanlarını yeniden uygular
policy.vlm_num_layers14Politika için korunan InternVL3 dil katmanı sayısı
policy.dtypebfloat16İstenen VLM dtype
policy.use_flash_attntrueYüklüyse FlashAttention ister; değilse geriye düşer
policy.enable_gradient_checkpointingtrueDesteklenen InternVL3 modüllerinde checkpointing'i etkinleştirir
policy.gradient_checkpointing_use_reentrantfalseDesteklendiğinde gradient checkpointing'e iletilen reentrant ayarı
policy.chunk_size50Her parça için tahmin edilen gelecek eylem sayısı
policy.n_action_steps50Örnekleme biriminden tüketilen eylem sayısı
policy.max_state_dim24Dolgu boyutunu belirt
policy.max_action_dim24Eylem dolgu boyutu
policy.postprocess_action_dimnullEVO1 son işlemeden sonra döndürülen isteğe bağlı eylem boyutu
policy.binarize_gripperfalseLIBERO tarzı değerlendirme için işlenmiş gripper kanalını ikileştirir
policy.task_fieldtaskDil 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, revizyon 515921f4a2c1d3f3ad523721eafa26fdf2af315b. Temiz indirme değerlendirmesi, LeRobot revizyonu e40b58a8dfa9e7b86918c374791599d070518d11 kullanılarak gerçekleştirildi.

70.000. adımdaki tek çalışımlı Stage-2 kontrol noktası şunu üretti:

SuiteBaşarılı bölümlerBölümlerBaşarı oranı
LIBERO Uzamsal48550097.0%
LIBERO Nesne49650099.2%
LIBERO Hedef48350096.6%
LIBERO-1046950093.8%
Genel1,9332,00096.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-5k

Stage 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-80k

Yazar 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=1

Yerel 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}"
done

Her suite için bu ufuklarla on görev kimliğinin tamamını çalıştırın:

env.taskenv.episode_length
libero_spatial280
libero_object280
libero_goal300
libero_10520

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