LeRobot documentation
Büyük Veri Setlerini LeRobot Veri Seti v3.0'a Taşıma
Büyük Veri Setlerini LeRobot Veri Seti v3.0'a Taşıma
Bu eğitim, büyük ölçekli robotik veri setlerinin LeRobot Dataset v3.0 formatına taşınmasını açıklar. Ana örnek olarak, SLURM kümelerinde binlerce shard içeren çok terabaytlık veri setlerinin işlenmesini gösteren DROID 1.0.1 veri setini kullanacağız.
Dosya Düzenlemesi: v2.1 ve v3.0
Dataset v3.0, verilerin düzenlenme ve saklanma şeklini temelden değiştirir:
v2.1 Yapısı (Bölüm tabanlı):
dataset/ ├── data/chunk-000/episode_000000.parquet ├── data/chunk-000/episode_000001.parquet ├── videos/chunk-000/camera/episode_000000.mp4 └── meta/episodes.jsonl
v3.0 Yapısı (Dosya tabanlı):
dataset/
├── data/chunk-000/file-000.parquet # Multiple episodes per file
├── videos/camera/chunk-000/file-000.mp4 # Consolidated video chunks
└── meta/episodes/chunk-000/file-000.parquet # Structured metadataBireysel bölüm dosyalarından dosya tabanlı parçalara geçiş, performansı önemli ölçüde artırır ve depolama yükünü azaltır.
Dataset v3.0'da Yenilikler
Dataset v3.0, büyük veri setlerinin işlenmesi için önemli iyileştirmeler sunar:
🏗️ Geliştirilmiş Dosya Düzeni
- Dosya tabanlı yapı: Bölümler artık tekil bölüm dosyaları yerine parçalı dosyalarda gruplandırılır
- Yapılandırılabilir dosya boyutları: veri ve video dosyaları için
- Daha iyi depolama verimliliği: Daha iyi sıkıştırma ve azaltılmış aşırı yük
📊 Modern Meta Veri Yönetimi
- Parquet tabanlı meta veriler: JSON Lines yerine verimli parquet formatı kullanıldı
- Yapılandırılmış bölüm erişimi:
dataset.meta.episodesüzerinden doğrudan pandas DataFrame erişimi - Bölüm başına istatistikler: Bölüm düzeyinde geliştirilmiş istatistik takibi
🚀 Performans İyileştirmeleri
- Bellek eşlemeli erişim: PyArrow bellek eşlemesi yoluyla RAM kullanımında iyileştirme
- Daha hızlı yükleme: Veri seti başlatma süresinde önemli ölçüde azalma
- Daha iyi ölçeklenebilirlik: Milyonlarca epizod içeren veri setleri için tasarlandı
Ön koşullar
Büyük veri setlerini taşımadan önce, aşağıdaki gereksinimleri karşıladığınızdan emin olun:
- LeRobot v3.0 desteğiyle yüklendi. Yükleme Kılavuzumuza göz atın.
- Yeterli depolama: Ham veri kümeleri çok büyük olabilir (ör. DROID 2 TB gerektirir)
- Küme erişimi (büyük veri kümeleri için önerilir): SLURM veya benzeri bir iş zamanlayıcı
- Veri setine özgü bağımlılıklar: DROID için TensorFlow Dataset araçlarına ihtiyacınız olacaktır
DROID Veri Setini Anlama
DROID 1.0.1, büyük ölçekli robotik veri setlerinin mükemmel bir örneğidir:
- Boyutu: 1,7 TB (RLDS formatı), 8,7 TB (ham veri)
- Yapı: 2048 önceden tanımlı TensorFlow veri kümesi parçası
- İçerik: Franka Emika Panda robotlarından 76.000'den fazla robot manipülasyon yörüngesi
- Kapsam: Birden fazla ortam ve nesne üzerinde gerçek dünya manipülasyon görevleri
- Biçim: Başlangıçta TensorFlow Records/RLDS biçiminde olup LeRobot biçimine dönüştürülmesi gerekiyor
- Barındırma:
gsutilile herkese açık erişime sahip Google Cloud Storage
Veri seti, aşağıdakilerle çeşitli manipülasyon gösterimleri içerir:
- Çoklu kamera görünümleri (bilek kamerası, dış kameralar)
- Doğal dil görev açıklamaları
- Robotun proprioseptif durumu ve eylemleri
- Başarı/başarısızlık açıklamaları
DROID Özellik Şeması
DROID_FEATURES = {
# Episode markers
"is_first": {"dtype": "bool", "shape": (1,)},
"is_last": {"dtype": "bool", "shape": (1,)},
"is_terminal": {"dtype": "bool", "shape": (1,)},
# Language instructions
"language_instruction": {"dtype": "string", "shape": (1,)},
"language_instruction_2": {"dtype": "string", "shape": (1,)},
"language_instruction_3": {"dtype": "string", "shape": (1,)},
# Robot state
"observation.state.gripper_position": {"dtype": "float32", "shape": (1,)},
"observation.state.cartesian_position": {"dtype": "float32", "shape": (6,)},
"observation.state.joint_position": {"dtype": "float32", "shape": (7,)},
# Camera observations
"observation.images.wrist_left": {"dtype": "video", "shape": (180, 320, 3), "names": ["height", "width", "channels"]},
"observation.images.exterior_1_left": {"dtype": "video", "shape": (180, 320, 3), "names": ["height", "width", "channels"]},
"observation.images.exterior_2_left": {"dtype": "video", "shape": (180, 320, 3), "names": ["height", "width", "channels"]},
# Actions
"action.gripper_position": {"dtype": "float32", "shape": (1,)},
"action.cartesian_position": {"dtype": "float32", "shape": (6,)},
"action.joint_position": {"dtype": "float32", "shape": (7,)},
# Standard LeRobot format
"observation.state": {"dtype": "float32", "shape": (8,)}, # joints + gripper
"action": {"dtype": "float32", "shape": (8,)}, # joints + gripper
}Yaklaşım 1: Tek Bilgisayara Taşıma
Adım 1: Bağımlılıkları Yükle
Özellikle DROID için:
pip install tensorflow pip install tensorflow_datasets
Diğer veri setleri için, kaynak formatınıza uygun okuyucuları yükleyin.
Adım 2: Ham Verileri İndir
DROID'ı gsutil kullanarak Google Cloud Storage'dan indirin:
# Install Google Cloud SDK if not already installed
# https://cloud.google.com/sdk/docs/install
# Download the full RLDS dataset (1.7TB)
gsutil -m cp -r gs://gresearch/robotics/droid/1.0.1 /your/data/
# Or download just the 100-episode sample (2GB) for testing
gsutil -m cp -r gs://gresearch/robotics/droid_100 /your/data/Büyük veri kümeleri önemli miktarda zaman ve depolama alanı gerektirir:
- Tam DROID (1,7 TB): Bant genişliğine bağlı olarak indirme işlemi birkaç gün sürebilir
- İşleme süresi: Tam veri setinin yerel taşınması için 7+ gün
- Yükleme süresi: Hugging Face Hub'a göndermek için 3+ gün
- Yerel depolama: İşlenmiş LeRobot formatı için ~400GB
Adım 3: Veri Setini Taşı
python examples/port_datasets/port_droid.py \
--raw-dir /your/data/droid/1.0.1 \
--repo-id your_id/droid_1.0.1 \
--push-to-hubGeliştirme ve Test
Geliştirme için tek bir shard taşıyabilirsiniz:
python examples/port_datasets/port_droid.py \
--raw-dir /your/data/droid/1.0.1 \
--repo-id your_id/droid_1.0.1_test \
--num-shards 2048 \
--shard-index 0Bu yaklaşım daha küçük veri kümeleri veya testler için işe yarar, ancak büyük veri kümeleri küme hesaplama gerektirir.
Yaklaşım 2: SLURM Küme Taşıması (Önerilen)
DROID gibi büyük veri kümeleri için, birden fazla düğüm arasında paralel işleme, işleme süresini dramatik bir şekilde azaltır.
Adım 1: Küme Bağımlılıklarını Yükle
pip install datatrove # Hugging Face's distributed processing libraryAdım 2: SLURM Ortamınızı Yapılandırın
Bölüm bilgilerinizi bulun:
sinfo --format="%R" # List available partitions
sinfo -N -p your_partition -h -o "%N cpus=%c mem=%m" # Check resourcesBir CPU bölümü seçin - veri seti taşıma için GPU gerekmez.
Adım 3: Paralel Taşıma İşlerini Başlat
python examples/port_datasets/slurm_port_shards.py \
--raw-dir /your/data/droid/1.0.1 \
--repo-id your_id/droid_1.0.1 \
--logs-dir /your/logs \
--job-name port_droid \
--partition your_partition \
--workers 2048 \
--cpus-per-task 8 \
--mem-per-cpu 1950MParametre Kılavuzu
--workers: Paralel iş sayısı (DROID'un shard sayısı için en fazla 2048)--cpus-per-task: Kare kodlama paralelleştirmesi için 8 CPU önerilir--mem-per-cpu: ham kareleri yüklemek için ~16GB toplam RAM (8×1950M)
Binlerce iş başlatmadan önce küme yapılandırmanızı test etmek için daha az sayıda işçiyle (ör. 100) başlayın.
Adım 4: İlerlemeyi İzleyin
Çalışan işleri kontrol edin:
squeue -u $USERGenel ilerlemeyi izleyin:
jobs_status /your/logs
Bireysel iş günlüklerini denetleyin:
less /your/logs/port_droid/slurm_jobs/JOB_ID_WORKER_ID.out
Hatalı işleri ayıklayın:
failed_logs /your/logs/port_droid
Adım 5: Parçaları Birleştir
Tüm taşıma işleri tamamlandığında:
python examples/port_datasets/slurm_aggregate_shards.py \
--repo-id your_id/droid_1.0.1 \
--logs-dir /your/logs \
--job-name aggr_droid \
--partition your_partition \
--workers 2048 \
--cpus-per-task 8 \
--mem-per-cpu 1950MAdım 6: Hub'a Yükle
python examples/port_datasets/slurm_upload.py \
--repo-id your_id/droid_1.0.1 \
--logs-dir /your/logs \
--job-name upload_droid \
--partition your_partition \
--workers 50 \
--cpus-per-task 4 \
--mem-per-cpu 1950MUpload, işlem yoğunluğu yerine ağ yoğunluğu nedeniyle daha az işçi (50) kullanır.
Veri Seti v3.0 Dosya Yapısı
Tamamlanmış veri setiniz bu modern yapıya sahip olacaktır:
dataset/
├── meta/
│ ├── episodes/
│ │ └── chunk-000/
│ │ └── file-000.parquet # Episode metadata
│ ├── tasks.parquet # Task definitions
│ ├── stats.json # Aggregated statistics
│ └── info.json # Dataset information
├── data/
│ └── chunk-000/
│ └── file-000.parquet # Consolidated episode data
└── videos/
└── camera_key/
└── chunk-000/
└── file-000.mp4 # Consolidated video filesBu, eski bölüm başına dosya yapısının yerine verimli ve optimal boyutlu parçaları geçirir.
Dataset v2.1'den Geçiş
v2.1 biçiminde mevcut veri setleriniz varsa, göç aracını kullanın:
python src/lerobot/scripts/convert_dataset_v21_to_v30.py \
--repo-id your_id/existing_datasetBunu otomatik olarak yapar:
- Dosya yapısını v3.0 biçimine dönüştürür
- JSON Lines'tan parquet'e meta verileri taşır
- İstatistikleri birleştirir ve bölüm başına istatistikler oluşturur
- Sürüm bilgilerini günceller
Performans Avantajları
Dataset v3.0, büyük veri kümeleri için önemli iyileştirmeler sunar:
- Daha hızlı yükleme: Başlatma süresinde 3-5 kat azalma
- Bellek verimliliği: Bellek eşleme yoluyla daha iyi RAM kullanımı
- Ölçeklenebilir işleme: Milyonlarca bölümü verimli bir şekilde işler
- Depolama optimizasyonu: Dosya sayısının azaltılması ve sıkıştırmanın iyileştirilmesi