LeRobot documentation

Eğitim Veri Seti Akışı

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

Eğitim Veri Seti Akışı

Eğitim zamanı veri seti akışı, lerobot-train'in bir LeRobotDataset v3'ü önce tam Parquet ve video yüklemesini indirmeden tüketmesini sağlar. Bunu mevcut genel anahtar üzerinden etkinleştirin:

lerobot-train \
  --dataset.repo_id=OWNER/DATASET \
  --dataset.streaming=true \
  --policy.type=act \
  --output_dir=outputs/train/act_streaming

Bu özellik, --dataset.streaming_encoding=true parametresinden bağımsızdır. streaming_encoding, kayıt sırasında videoların nasıl yazılacağını kontrol eder; dataset.streaming ise eğitim sırasında mevcut bir veri setinin nasıl okunacağını kontrol eder. Kayıt ve rollout kodlayıcıları, bu eğitim yolu tarafından kullanılmaz.

Bir epoch'un nasıl okunduğu

Her dağıtık rank, deterministik ve kare dengeli, tam bölümlerden oluşan bir kümeye sahiptir. Her DataLoader işçisi için bir tam kapsama havuzu, o işçinin bu bölümlerdeki payını, her kapsama döneminde seçilen her kareyi bir kez ziyaret ederek karıştırır. Parquet sütunları ve sıkıştırılmış MP4 bayt aralıkları, aynı bayt-farkında kabul sınırından önceden alınır. Zaman geçmişi ve gelecek pencereleri, harita tarzı yüklemedeki aynı sınır dolgu maskeleri dahil olmak üzere, tam bölümün içinde çözümlenir.

--dataset.streaming=false olduğunda varsayılan harita tarzı LeRobotDataset davranışı değişmez.

Workers, shard'lar ve eşzamanlılık

Her rank, tam bölümlerin kare dengeli bir dilimine sahiptir. Bir rank içinde, --num_workers, map-stili veri kümeleri için olduğu gibi, DataLoader işçi süreçlerinin sayısını belirler. Her işçi, rank’ın bölümlerinin ayrık, kare dengeli bir kısmına sahiptir; kendi tam kapsama havuzu, kendi bayt bütçesi payı ve kendi iş parçacığı havuzları vardır:

AşamaEşzamanlılıkAyar
Rank bölmeHer rank için bir adet ayrık tüm-epizot shardDağıtık dünya boyutu
DataLoader işçileriHer işçi için sıralama diliminin bir ayrık parçası--num_workers
Bölüm almaParquet satırları ve MP4 bayt aralıkları, paralel olarakmax_num_shards, --num_workers parametresinden ayarlanır
Örnek derleme ve çözümlemeZaman pencereleri ve video kareleri, paralel olarak--dataset.streaming_decode_threads
Sıralı örnek tamponuPlanlayıcı sırasına göre önde tutulan çözümlenmiş örnekler--dataset.streaming_decoded_queue_size

Neden birden fazla işçi. Örnek derleme ve parti devri Python kodu çalıştırır ve bir süreç, Python kodunu bir anda yalnızca bir iş parçacığında çalıştırır (GIL). Tek bir işçiyle, bir sıranın (rank) çözümleme iş parçacıkları birbirini bekler, bu da sıranın yalnızca yaklaşık 2 CPU çekirdeğini kullanmasına neden olur. Her işçi ayrı bir süreçtir, bu nedenle N işçi örnekleri paralel olarak derler ve çözer.

Havuz boyutu ve parti çeşitliliği. streaming_episode_pool_size, her işçinin havuzunu belirler. Bu değeri ayarlamazsanız, rank 32 bölümü karıştırır ve N işçinin her biri bunların 32/N'ini alır. Her işçi ayrıca streaming_prefetch_episodes bölümünü önceden yükler ve ayrı bir Python süreci olduğundan, daha fazla işçi daha fazla bellek kullanır: 3 kameraya sahip tek bir veri setinde, 4 işçi toplamda yaklaşık 8 GB kullanırken, tek işçi yaklaşık 3 GB kullanıyordu. DataLoader her partiyi tek bir işçiden alır, bu nedenle bir parti, tek bir işçinin havuzundaki bölümleri karıştırır. Daha büyük bir havuz, her partide daha fazla bölüm karıştırır, ancak daha fazla bellek kullanır ve ilk örnekten önce daha fazla veri getirir.

Sınırlar. Bayt bütçesi (streaming_byte_budget_gb) ve açıkça belirtilen video_decoder_cache_size rank başına kalır: her işçi bunların 1/N'ini alır. Bir işçinin en az bir epizoda ihtiyacı vardır, bu nedenle lerobot-train, rankın sahip olduğu epizot sayısını aşmayacak kadar işçi kullanır. --num_workers=0, veri setini eğitim sürecinde tutar. Burada eğitim iş parçacığı görüntü dönüşümlerini uygular, bu da aynı --seed değerinin aynı dönüşümleri vermesini sağlar.

MP4 yan dosyaları ve ilk çalıştırma

Video akışı, bir MP4 dizin yan dosyası (sidecar) kullanır. Veri seti başlatma işlemi önce revizyon anahtarlı yerel önbelleği kontrol eder, ardından geçerli bir yayımlanmış yan dosyası arar. İkisi de kullanılamıyorsa LeRobot, bir süreç kilidini (process lock) tutarak yan dosyayı yerelde oluşturur ve onu atomik olarak kurar. Başarısız veya yarıda kesilen bir oluşturma işlemi, önceki geçerli dosyanın yerini almaz. Aynı yan dosyaya ihtiyaç duyan diğer süreçler, kilit için en fazla --dataset.streaming_sidecar_lock_timeout_s (varsayılan olarak 30 dakika) kadar bekler. Dizinlenmesi daha uzun süren büyük veri setleri için bu değeri artırın.

Hub yük okumaları, meta veri anlık görüntüsünün commit'ine sabitlenir. Varlık kovası (Bucket) dizinleri, içerik özetleri dahil olmak üzere taze bir nesne listesiyle karşılaştırılır; bu nedenle aynı yoldaki bir video değiştirildiğinde, dosya boyutu değişmemiş olsa bile yan dosyası (sidecar) geçersiz kılınır. Bu liste başlangıç iş yükü ekler, ancak video yüklerini indirmez. Bir çalıştırma sırasında meta verileri ve yükleri değiştirmeden bırakın. Kararlı nesne kimliklerine sahip olmayan genel uzaktan dosya sistemleri, her açılışta dizinlerini yeniden oluşturur. Nesne parmak izi içermeyen mevcut Bucket yan dosyaları yerel olarak bir kez yeniden oluşturulur; güncellenmiş yan dosyanın yayımlanması, açık bir bakım sorumlusu eylemi olarak kalır.

Eğitim salt okunurdur: yan dosya (sidecar) yüklenmez veya veri seti deposu değiştirilmez. Düğüne yerel önbelleklere sahip bir kümede, ilk iş her düğümde bir kez oluşturulabilir. Paylaşılan LeRobot önbelleği bu yinelenmeyi önler.

Sidecar yapımı, her tamamlanan kaynak dizinini geçici bir arşive yazar. Yapılandırılan sayıda ayrıştırma sonucunu tutar. Dizi belleği, en büyük eşzamanlı kaynaklara bağlıdır; arşiv meta verileri hâlâ kaynak sayısıyla birlikte büyür. lerobot-build-mp4-sidecar çalıştırırken ayrıştırma eşzamanlılığını ayarlamak için --workers kullanın. Başarısız bir derleme, önceki sidecar'ı korur.

Yayınlanan schema-3 NPZ arşivleri, kanonik int64 tamsayı dizilerini korur. İlk açılış işlemi, arşivi $HF_LEROBOT_HOME/streaming-indexes altında salt okunur, bellek eşlemeli bir indekse dönüştürür. Türetilen indeks, en küçük kesin tamsayı türlerini kullanır. Sabit bir süre, bileşim ofseti, boyut veya bayt ofsetini yalnızca bir kez saklar. Salt okunur dizi görünümleri, mantıksal örnek sayısını korur. Sunum zaman damgaları, kesin float64 değerlerini korur. Senkron örnek dizileri, yoğun depolamayı korur.

Türetilmiş indeks ayrı bir önbellek nesli kullanır. Eski okuyucular mevcut önbellek biçimlerini korur. Yeni okuyucuyla yapılan ilk açılış, arşivi bir kez dönüştürebilir; sonraki açılışlar bunu yeniden kullanır. Dönüştürme işlemi bir süreç kilidi ve atomik bir değiştirme kullanır. Önbelleği paylaşan sıralar, aynı dosya destekli sayfaları yeniden kullanır. Her sıra, yalnızca bölümlerinde kullanılan kaynak dosyalar için kayıtlar oluşturur. Eski ve yeni önbellek nesilleri ek disk alanı gerektirebilir. Yan dosyanın değiştirilmesi, canlı okuyucuları geçersiz kılmadan yeni bir değiştirilemez nesil oluşturur.

Bu, tüm meta verilerin sabit boyutlu olmasını sağlamaz: bölüm meta verileri ve aralık tabloları hâlâ veri setiyle birlikte büyür ve karıştırılmış sıra parçaları üst üste binen kaynak dosyalara erişebilir. İşletim sisteminde yerleşik eşlenmiş sayfalar da RSS'e dahil edilir; sıralar tarafından paylaşılan belleği ölçerken orantılı küme boyutunu (PSS) kullanın. Parquet okumaları, satır gruplarını bölüm istatistiklerini kullanarak budar ve ardından tam bölgeye filtreler. İstatistiği olmayan gruplar aday olarak kalır, bu nedenle kullanışlı sınırları olmayan dosyalar hâlâ tüm dosya için yansıtılmış bir okuma gerektirebilir.

Veri seti yöneticileri, yan dosyayı (sidecar) önceden oluşturabilir:

lerobot-build-mp4-sidecar \
  --repo-id=OWNER/DATASET \
  --revision=COMMIT_SHA \
  --data-root=hf://datasets/OWNER/DATASET@COMMIT_SHA \
  --output=/tmp/dataset-mp4-sidecar.npz

Yayın işlemi her zaman açıkça yapılır. Tam veri seti yan dosyasını doğruladıktan sonra yalnızca --push ekleyin. Alt küme yan dosyaları yayınlanamaz.

Veri seti depoları için --push, özel lerobot-sidecars dalını oluşturur veya günceller. Kaynak veri seti dalı/etiketi değiştirilmez. Eğitim, sabitlenmiş video-kaynağı commit'ine bağlı bir anahtarla orada bir indeks arar ve kullanmadan önce doğrular. Bir etiket ve çözümlenmiş commit'i aynı yayımlanmış indeksi paylaşır; mevcut revizyon-anahtarlı yerel önbellekler yeniden kullanılabilir kalır. Kovalar hâlâ doğrudan meta/mp4-sidecars/ altında yayımlanır. Yayımlama, depo veya kova yazma erişimi gerektirir; eğitim yalnızca okuma erişimi gerektirir ve asla dal oluşturmaz veya dosya yüklemez.

Sidecar şeması v3, B-kareli videolar dahil olmak üzere MP4 kompozisyon zamanlamasını ve kodlayıcı gecikmesi düzenlemelerini korur. Eski sidecar'lar otomatik olarak ayrı bir revizyon anahtarlı önbellek girdisine yeniden oluşturulur; ayrıca açık bir yayınlama işleminden önce de yeniden oluşturulmaları gerekir. Yeniden sıralanan videolar, her alınan aralıkta son GOP'un sonunu içerir, böylece çözümlenmiş kare dizinleri ardışık kalır. Tekrarlanan veya birim hızı olmayan MP4 düzenleme zaman çizelgeleri, sessizce yanlış hizalı kareler döndürmek yerine reddedilir.

Yapılandırma

Üretim varsayılanları şunlardır:

SeçenekVarsayılanAnlam
streaming_episode_pool_size32 / N her biriHer işçi tarafından karıştırılan en fazla tamamlanmış bölüm sayısı
streaming_sampling_strategyremainingKalan kare ağırlıklandırması veya karıştırılmış round_robin
streaming_prefetch_episodes8Her işçinin havuzundan önce getirilen bölümler
streaming_byte_budget_gb8Rank başına sentezlenen maksimum MP4 bayt sayısı
streaming_decode_threads2Paralel örnek derleme ve video çözme işçileri
streaming_decoded_queue_size8Planlayıcı sırasına göre önceden tamponlanan çözümlenmiş örnekler
video_decoder_cache_sizepool × kameralarAçık video çözücü LRU sınırı işçi başına
streaming_native_http_connectionskaldırıldıRank başına yerel HTTP bağlantı sınırı
streaming_native_http_subranges1Yerel HTTP aralığı okuma başına eşzamanlı alt aralıklar
streaming_sidecar_lock_timeout_s1800Diğer bir sidecar derlemesi için beklenmesi gereken saniye
max_num_shards (--num_workers)16İşçi başına eşzamanlı olarak alınan bölümler

max_num_shards hariç tüm seçenekler --dataset.* bayraklarıdır. max_num_shards, StreamingLeRobotDataset argümanıdır; lerobot-train, bunu --num_workers değerinden ayarlar (en az 1).

Daha dengeli bölüm karışımı için --dataset.streaming_sampling_strategy=round_robin seçeneğini kullanın. Her turda, o anda mevcut olan bölümler karıştırılır ve her birinden karıştırılmış bir kare örneklenir; bir tur sırasında kabul edilen bölümler bir sonraki tura katılır. Her iki strateji de tam olarak bir kez epoch kapsamını ve aynı kaynak sınırlarını korur. Hiçbiri küresel bir düzgün permütasyon değildir: round-robin, sonlu öneklerde daha kısa bölümlere öncelik verir ve bu da decoder değişim sıklığını artırıp verimi düşürebilir. Sıra, --seed (varsayılan 1000) ile birlikte politika başlatma ve diğer tohumlu rastgele üreteçlerden gelir. Farklı tohumlar farklı bölüm ve çapa sıraları verir, aynı tohum ise sırayı tekrarlar. --seed=null sabit 42 streaming tohumunu kullanır. Bir checkpoint'i devam ettirirken aynı stratejiyi, --seed ve havuz ayarlarını koruyun. Checkpoint tohumu saklar, bu yüzden düz bir --resume sırayı korur. --seed streaming veri setine ulaşmadan önce başlatılmış bir çalışmadan gelen bir checkpoint, sırası için 42 tohumunu kullanmıştır: bu checkpoint'i devam ettirirken o sırayı korumak için --seed=42 parametresini geçirin.

Aktif bölüm kümesi, hem bölüm sayısı hem de yan dosyadan (sidecar) hesaplanan tam sentezlenmiş mini-MP4 boyutlarıyla sınırlandırılır. Tam sıralama bütçesinden büyük bir bölüm, eğitim yükünü (payload) getirmeden önce başarısız olur. Rezervasyonlar, bekleyen getirme işlemlerini, tamamlanan ön getirmeleri ve hâlâ çözümlenen bölümleri kapsar. Bütçe dolduğunda, spekülatif ön getirme duraklatılır ve yer değiştirme kabulü, son çözümlemenin baytlarını serbest bırakmasını bekler. EpisodeByteCache.reserved_bytes bu rezervasyonları raporlar; resident_bytes ise ilk örnek istenmeden önce bile tüm tamamlanmış yükleri raporlar.

Bu, sıkıştırılmış yük bütçesidir, süreç RSS sınırı değildir: aralık-alma/sentez geçici tamponları, çözücü durumu, Parquet tabloları ve çözülmüş tensörler ek bellek gerektirir. Çözücü LRU'su ve çözülmüş örnek kuyruğu ayrı sınırlara sahiptir. Belleği kısıtlı konaklarda daha küçük bir havuz veya bütçeyle başlayın:

lerobot-train \
  --dataset.repo_id=OWNER/DATASET \
  --dataset.streaming=true \
  --dataset.streaming_episode_pool_size=16 \
  --dataset.streaming_prefetch_episodes=4 \
  --dataset.streaming_byte_budget_gb=4 \
  --dataset.streaming_decode_threads=2 \
  --dataset.streaming_decoded_queue_size=8 \
  --num_workers=4 \
  --policy.type=act \
  --output_dir=outputs/train/act_streaming

HF Storage Bucket'ta saklanan eksiksiz bir veri seti için, bucket'ın tanımlayıcısını ve depo türünü kullanın veya bucket URI'sini --dataset.root=hf://buckets/OWNER/BUCKET olarak iletin. Meta veriler (meta/), Parquet ve video dosyalarının tümü, o bucket'ın kökünde bulunmalıdır:

lerobot-train \
  --dataset.repo_id=OWNER/BUCKET \
  --dataset.repo_type=bucket \
  --dataset.streaming=true \
  --policy.type=act \
  --output_dir=outputs/train/act_bucket_streaming

Hub veri kümeleri varsayılan olarak repo_type=dataset kullanır. Tam yerel bir veri kümesi için --dataset.root parametresini ilgili dizinine ayarlayın. Eğitim, hem meta verileri hem de yükleri aynı kaynaktan çözümler; ayrı bir akış yük konumu bayrağına gerek yoktur.

Devam et ve karıştırma göçü

Daha önceki akış okuyucu, sınırlı bir satır karıştırma tamponu kullanıyordu. Bölüm okuyucu ise, tohum ve çağdan türetilen deterministik tam kapsama sıralamasına sahiptir. Kontrol noktasından devam etme, kontrol noktası parti boyutunu kullanarak sıralama başına örnek ofsetini geri yükler. Birden fazla işçi kullanıldığında, DataLoader işçilerden partileri sırayla aldığı için her işçi kendi ofsetini bu değerden türetir. Dağıtık dünya boyutunun, parti boyutunun veya --num_workers parametresinin değiştirilmesi, sahiplik veya parti sınırlarını değiştirir. Örnek düzeyinde tam karşılaştırmalar için, aynı dünya boyutu, parti boyutu ve işçi sayısı ile devam edin. Performans karşılaştırması yaparken aynı iç alma eşzamanlılığını koruyun.

Kontrol noktası (checkpoint) meta verileri, önceki çok işçili örnekleyiciyi (multi-worker sampler) tanımlamaz. Kontrol noktaları, dünya boyutu (world-size) ve parti boyutu (batch-size) kontrolleriyle güvenilir bir şekilde ayırt edilemez ve örnek-kesin (sample-exact) akışlı devam (streaming resume) için kullanılmamalıdır. Bunun yerine, kaydedilen politika ağırlıklarından (policy weights) yeni bir çalıştırma başlatın. Devam garantisi, rastgele görüntü dönüşümlerinin bit düzeyinde yeniden oynatılmasını değil, çapa (anchor) sırasını kapsar. Rastgele görüntü dönüşümleri, çözümleme (decoding) ile paralel olarak çözümleme iş parçacıklarında (decode threads) çalıştığından, sabit bir tohum (seed) bir çalıştırmadan diğerine aynı artırmaları (augmentations) yeniden üretmez.

Sorun Giderme

BelirtiNe yapılmalı
İlk parti uzun bir süre alırBir sidecar derlemesi için günlükleri kontrol edin. Ortak bir önbelleği yeniden kullanın veya doğrulanmış, eksiksiz bir sidecar'ı açıkça yayınlayın.
A sidecar kilidi zaman aşımına uğrarBaşka bir süreç aynı revizyonu indekslemeye devam ediyor olabilir. Bayat bir kilidi kaldırmadan önce sağlıklı olduğundan emin olun.
Bir rank hiçbir veriye sahip değildirHer rank'in en az bir seçili episode'a sahip olması için rank sayısını azaltın.
Bayt bütçesi aşıldıBölüm havuzunu düşürün, sıralama başına bayt bütçesini artırın veya daha küçük bölüm aralıklarına sahip bir yük düzeni kullanın.
Uzak okumalar kimlik doğrulaması yapamazHugging Face belirtecinin veya fsspec kimlik bilgilerin her işçiye (worker) erişilebilir olmasını sağlayın. Yardımcılar (sidecar) asla kimlik bilgilerini gömmez.
Yenileme istasyonları yüksekp95/p99 parti bekleme süresini karşılaştırın, ağ rekabetini azaltın, ön yükleme değerini kademeli olarak artırın, yan aracın revizyonla eşleştiğini kontrol edin.
Update on GitHub