5.15 트러블슈팅

dataset이 load되지 않는다

  • 수집/변환 뒤 finalize()를 호출했는가?
  • meta/info.json의 codebase version과 설치 LeRobot이 호환되는가?
  • path를 손으로 만들지 않고 API가 제공한 template을 썼는가?
  • Parquet footer와 MP4 index가 정상적으로 닫혔는가?

영상과 관절이 어긋난다

  • frame index가 아니라 timestamp로 연결했는가?
  • camera buffering latency와 motor timestamp clock source가 같은가?
  • variable frame rate video를 constant rate로 가정하지 않았는가?
  • action이 observation 이전/이후 어느 시점의 command인지 정의했는가?

loss는 감소하지만 로봇이 거의 움직이지 않는다

  • action normalization과 inverse normalization이 같은가?
  • state/action joint order가 배포 robot과 같은가?
  • LoRA alpha/r scaling과 target module을 확인했는가?
  • 새 action projection이 실제로 trainable인가?
  • dataset에서 정지 frame이 지나치게 많지 않은가?

동작이 떨리거나 chunk 경계에서 튄다

  • chunk의 첫 action이 현재 state와 연속적인가?
  • temporal ensemble 또는 execution horizon을 비교했는가?
  • absolute와 delta action을 혼동하지 않았는가?
  • 제어기 자체 rate와 policy rate가 정수비인지 확인했는가?

GPU memory가 부족하다

  • batch size를 줄이고 gradient accumulation을 기록한다.
  • mixed precision과 activation checkpointing 지원을 확인한다.
  • LoRA rank와 target modules를 줄인다.
  • image resolution/camera 수를 줄일 때 성능 영향 ablation을 수행한다.
  • OOM 직전 run의 partial checkpoint를 신뢰하지 않는다.

inference가 20 Hz를 만족하지 못한다

  • capture/preprocess/model/postprocess/communication을 따로 계측한다.
  • action chunk queue와 asynchronous worker를 사용한다.
  • stale observation과 queue underrun 정책을 정의한다.
  • latency를 숨기기 위해 safety check를 제거하지 않는다.
이 장의 예제 코드·설정 파일 (5)

이 장의 자가 점검·가상실습