네트워크 없이 구동되는 오프라인 로봇, 젯슨 오린과 젬마 3 탑재
Reddit 사용자가 Wi-Fi나 셀룰러 연결 없이 엔비디아 젯슨 오린 NX와 소형 언어 모델인 Gemma 3 4B만으로 완전한 오프라인 로봇을 제작했습니다. 프롬프트 구조 최적화를 통해 캐시 적용 시 첫 토큰 생성 시간(TTFT)을 약 200ms로 단축하고 30개 이상의 센서 데이터를 실시간으로 자연어로 처리하는 점이 기술적으로 주목받습니다.
이 로봇은 'Sparky(스파키)'라는 이름으로, 젯슨(Jetson) 디바이스 위에서 완전히 독립적으로 구동됩니다. llama.cpp를 활용해 Gemma 3 4B 모델을 Q4_K_M 양자화 포맷으로 구동하며, q8_0 KV 캐시(KV cache)와 플래시 어텐션(flash attention)을 적용했습니다. 12K 컨텍스트(context)를 사용하며, 모델 카드에서 제공하는 기본 시스템 역할과 샘플러 설정을 유지합니다. 캐시 적용 시 첫 토큰 생성 시간(TTFT, Time To First Token)은 약 200ms이며, 지속적으로 초당 14~15개의 토큰(tok/s)을 생성합니다.
음성 인식(STT)을 위한 SenseVoiceSmall, 43Hz로 입모양을 동기화하는 음성 합성(TTS)용 Piper, 그리고 상단 디스플레이에 얼굴을 표현하는 PixiJS가 탑재되었습니다. 현재 Gemma 3 자체에 비전(Vision) 및 광학 문자 인식(OCR) 기능이 내장되어 있어 기존에 사용하던 BLIP 서브프로세스는 제거되었습니다. 30개 이상의 센서 데이터는 매 대화 턴마다 자연어로 변환되어 프롬프트에 통합됩니다.
이번 프로젝트의 가장 큰 성과는 캐시 안정성을 위한 프롬프트 구조 최적화입니다. 프롬프트 상단에는 페르소나와 도구(tools)를 배치하고, 중간에 대화 기록을 둔 뒤, 변동성이 큰 센서 및 비전 데이터는 가장 최근 사용자 메시지의 끝부분에 배치했습니다. 이처럼 동적으로 변하는 컨텍스트를 시스템 블록 밖으로 이동시키는 것만으로 캐시 적용 TTFT가 수 초에서 약 200ms로 극적으로 단축되었습니다.
기기 외부의 네트워크 연결(네트워크 인터페이스)은 전혀 없으며, 오직 버튼 행, 조이스틱, 아날로그 엔코더 노브만을 통해 기기 내부에서 모든 설정을 변경할 수 있습니다.
현재 다른 분들 중에서 Orin급 하드웨어에서 Gemma 3 4B(E4B, 최신 버전 명칭 반영)를 구동하고 계신 분이 있는지 궁금합니다. 초당 토큰 생성 속도(tok/s)를 비교해 보고, 프리픽스 캐시(prefix cache)를 낭비하지 않으면서 센서나 도구 컨텍스트를 어떻게 처리하고 계신지 알아보고 싶습니다.