LeRobot documentation

Büyük Veri Setlerini LeRobot Veri Seti v3.0'a Taşıma

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 metadata

Bireysel 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: gsutil ile 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-hub

Geliş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 0

Bu 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 library

Adı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 resources

Bir 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 1950M

Parametre 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 $USER

Genel 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 1950M

Adı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 1950M

Upload, 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 files

Bu, 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_dataset

Bunu 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
Update on GitHub