Strands Robots와 Storage Buckets를 활용한 데이터 통합 루프
Hugging Face Storage Buckets를 통해 로봇 데이터의 기록, 스트리밍 학습, 배포를 하나의 백엔드에서 처리하는 통합 루프를 구현했다. 이 루프의 중심에는 AWS가 공개한 오픈소스 SDK인 Strands Robots가 있다. Strands Robots는 `Robot()` 팩토리를 통해 SO-100이나 SO-101 같은 다양한 로봇 하드웨어를 추상화하여 제어한다. 팩토리는 로봇 팔, 휴머노이드, 모바일 베이스, 핸드 등이 등록된 레지스트리에서 이름을 대조해 해당 기기를 연결한다. 이를 통해 개발자는 시뮬레이션 환경에서 검증한 코드를 실물 하드웨어로 옮길 때 기기별 세부 설정 없이 동일한 인터페이스로 로봇을 운용할 수 있다.
데이터 저장소로는 2026년 3월에 발표된 Hugging Face Storage Buckets를 사용한다. 이는 Xet 기반의 객체 스토리지로, 기존 버전 관리 저장소와 달리 가변적(mutable)이며 버전 관리를 수행하지 않는다. 가변적 특성 덕분에 데이터 일부를 수정했을 때 전체를 새로 쓰지 않고 변경된 부분만 처리할 수 있다. 여기에 LeRobot 프로젝트 펄스(Project Pulse) 기준 8,000명 이상의 발행자가 90,000개 이상의 데이터셋과 모델에 사용 중인 LeRobot 데이터 포맷을 적용했다. Strands Robots로 기록한 데이터는 별도의 변환 과정 없이 LeRobot 데이터를 읽는 모든 도구에서 즉시 활용 가능하다.
전체 과정은 자연어 프롬프트로 데이터를 기록하고 이를 버킷에 동기화한 뒤, 로컬 복사본 없이 프레임 단위로 다시 읽어오는 흐름으로 이어진다. 기록에 사용한 `Robot()` 객체가 데이터를 스트리밍하고, 학습된 체크포인트를 동일한 객체에 배포한다. 실물 하드웨어에서 기록된 시연 데이터가 다시 버킷으로 돌아와 학습에 사용되는 루프를 형성한다. 구현 세부 사항은 `examples/notebooks/05_streaming_data_loop.ipynb` 경로의 노트북 파일에서 확인할 수 있다.
기록에서 동기화까지: 버킷을 워킹 레이어로 활용하는 방식
로봇의 카메라 프레임과 관절 상태-동작 텔레메트리(원격 측정 데이터)를 포함한 LeRobotDataset 포맷은 기록 즉시 버킷으로 동기화된다. 매일 데이터를 수집하고 학습시키는 루프를 반복하면 데이터셋 규모가 계속 커지는데, 이때마다 전체 데이터를 GPU 서버로 복사하는 방식은 동일한 바이트 전송 비용을 반복해서 지불하게 만든다. 이를 방지하기 위해 수정과 추가가 자유로운 버킷을 워킹 레이어(작업 계층)로 설정해 일차적으로 기록하고, 검증된 최종 결과물만 `push_to_hub()` 함수를 통해 버전 관리 저장소로 옮기는 구조를 취한다.
데이터셋 검증과 전송은 `sync_dataset_to_bucket` 함수가 담당하며 이는 기록 주기와 분리되어 작동한다. 해당 함수는 로컬의 데이터셋 루트 경로와 대상 버킷, 그리고 실행 식별자인 run_id를 인자로 받아 hf CLI(명령줄 인터페이스)를 통해 데이터를 전송한다. 학습된 모델이 없는 초기 단계에서도 전체 루프를 검증할 수 있도록, 실제 모델 대신 관절 동작만 생성하는 mock policy(가상 정책)를 사용해 데이터를 수집하고 버킷에 쌓는 과정을 테스트한다.
sync_dataset_to_bucket(root, bucket, run_id=...)명령줄에서 직접 제어할 때는 hf sync 명령어를 사용해 로컬 기록 폴더를 버킷 경로로 바로 보낼 수 있다. 이는 내부적으로 앞서 언급한 파이썬 함수를 래핑(Wrapping)한 형태다. 시뮬레이션 기록과 실물 하드웨어 기록 모두 동일한 포맷으로 저장되므로 같은 동기화 호출을 통해 버킷으로 전송한다.
hf sync ./recordings hf://buckets/my-org/robot-fave/run-021오픈 레코더를 직접 구동하는 환경에서는 `DatasetRecorder.sync_to_bucket` 메서드를 사용한다. 기록 중단 시점에 즉시 버킷으로 데이터를 밀어 넣으려면 `stop_recording` 함수에 버킷 인자를 전달해 동기화를 강제한다. 전송된 데이터는 `hf://buckets/{bucket}/{run_id}` 구조의 경로에 저장되며, 이후 스트리밍 읽기 단계에서 run_id를 식별자로 사용한다.
이러한 동기화 과정에서 발생하는 네트워크 부하를 획기적으로 줄이는 핵심 기술은 Xet 중복 제거다.
Xet 중복 제거를 통한 전송량 4배 절감 수치
Hugging Face Storage Buckets는 허브 전체의 업로드당 데이터 전송량을 약 4배 줄인다. 이는 Xet 기반의 중복 제거 기술을 적용해 데이터의 중복된 부분을 찾아내고 필요한 부분만 전송하기 때문이다. 기존의 버전 관리 저장소는 파일의 일부만 수정되어도 파일 전체를 다시 업로드해야 하는 구조적 제약이 있어 네트워크 대역폭 낭비와 전송 시간 증가를 초래했다.
전송 효율을 결정하는 핵심 기제는 콘텐츠 정의 청킹(Content-defined chunking)이다. 일반적인 고정 길이 방식은 데이터 중간에 단 몇 바이트만 삽입되어도 그 뒤에 오는 모든 데이터의 위치가 밀려나 시스템이 전체를 다시 전송하게 된다. 반면 콘텐츠 정의 청킹은 데이터의 내용 자체를 분석해 경계선을 정하므로, 수정된 바이트가 포함된 특정 조각만 변경될 뿐 그 이후의 데이터 경계선은 유지된다. 덕분에 시스템은 변경되지 않은 나머지 조각을 제외하고 바이트 수준에서 달라진 부분만 식별해 전송할 수 있다.
실제 벤치마크 결과, 500MB 크기의 파일을 업로드한 상태에서 전체 바이트의 1%만 변경해 재업로드했을 때 실제로 네트워크를 통해 전송된 데이터는 5.5MB에 불과했다. 파일 전체를 다시 보내는 기존 방식과 비교하면 전송량을 100분의 1 수준으로 낮춘 결과다.
이러한 최적화는 비용 산정 방식과도 연결된다. 엔터프라이즈 플랜에서는 전체 전송량이 아니라 중복 제거가 완료된 실제 데이터 점유 공간(deduplicated footprint)을 기준으로 과금을 진행한다. 데이터 전송이 빈번한 로봇 학습 루프에서 바이트 수준의 중복 제거는 인프라 운영 비용을 낮추는 실질적인 근거가 된다.
로컬 복사 없는 스트리밍 학습과 하드웨어 배포
`stream_dataset(...)` 함수는 데이터셋 전체를 로컬 디스크에 저장하지 않고 허브에서 프레임 단위로 데이터를 직접 읽어온다. 수십 기가바이트에 달하는 로봇 학습 데이터를 매번 다운로드하며 발생하는 대기 시간을 제거하는 방식이다. 특히 카메라 비디오 데이터는 온더플라이(On-the-fly) 디코딩을 통해 메모리 상에서 즉시 복호화하여 학습 모델에 입력하므로, 디스크 I/O 병목 현상을 줄이고 저장 공간 제약 없이 대규모 데이터셋을 학습 루프에 투입할 수 있다.
학습된 모델을 실물 하드웨어에 적용하는 과정은 인자 하나를 변경하는 것으로 끝난다. `Robot()` 객체를 생성할 때 `mode="real"` 인자를 부여하면 시뮬레이션 환경에서 동작하던 코드가 즉시 실물 로봇 하드웨어 제어 모드로 전환된다.
robot = Robot("so100", mode="real")하드웨어 추상화 계층이 동일하게 유지되므로 시뮬레이션에서 검증한 로직을 수정 없이 실물 기기에 배포할 수 있다. 이는 환경 설정 오류로 인한 하드웨어 손상 위험을 줄이고 배포 속도를 높인다. 실제 물체를 잡는 동작을 수행하려면 `create_policy("<hf_repo>")` 함수를 통해 학습된 체크포인트를 불러와 가상의 동작을 수행하던 mock policy를 실제 그리핑(Grasping)이 가능한 실전 정책으로 교체한다.
policy = create_policy("hf://datasets/my-robot-policy")정책을 교체하더라도 프롬프트나 데이터 포맷, 버킷 동기화 방식은 동일하게 유지된다. 개발자는 모델의 가중치만 변경하여 성능 개선 결과만을 빠르게 하드웨어에서 확인하며 반복 학습을 진행할 수 있다. 이 루프는 에이전트가 어떤 에피소드를 유지하고, 장면 변화에 따라 언제 다시 기록할지, 어떤 체크포인트가 기존 모델을 대체할지를 결정하는 기반이 된다.
한국 로봇 AI 실무자를 위한 인프라 선택 기준
로봇 학습 데이터는 고해상도 카메라 프레임과 관절 상태-동작 텔레메트리를 포함하며 기록 시간이 길어질수록 파일 크기가 기하급수적으로 증가한다. Hugging Face는 별도의 IAM(식별 및 액세스 관리) 설정이나 CORS(교차 출처 자원 공유) 규칙 설정 없이 기존 계정 권한만으로 운영하는 Storage Bucket을 제공한다. 이는 클라우드 인프라 전문가가 없는 소규모 로봇 연구실에서도 복잡한 권한 체계를 설계하거나 업로드 서비스를 직접 구축할 필요 없이 즉시 데이터 파이프라인을 구성할 수 있게 한다.
특히 고정된 카메라 두 대가 동일한 테이블에서 장시간 작업을 수행하는 환경에서는 조명이나 배경 같은 중복 픽셀이 수천 개의 에피소드에 걸쳐 반복적으로 기록된다. 이때 바이트 단위로 실제 변경된 부분만 식별해 저장하는 중복 제거 기술을 선택하면, 데이터 규모가 커질수록 스토리지 비용을 낮추고 GPU 전송 병목을 해결할 수 있다. 로컬 저장 공간의 제약과 전송 비용을 동시에 해결하려면 데이터셋 전체를 다운로드하지 않고 허브에서 직접 스트리밍하여 학습하는 아키텍처가 실무적인 대안이 된다.
로컬 복사본 없이 허브의 데이터를 직접 읽고 인자 하나로 실물 로봇에 배포하는 구조는 데이터 관리 비용을 낮추고 모델 업데이트 주기를 단축하여 하드웨어 최적화 속도를 높인다.




