
Echo Dot 2로 28M LLM을 적당한 속도로 구동하기
요약
제한된 하드웨어인 Amazon Echo Dot 2에서 llama.cpp를 활용해 28M 파라미터 규모의 LLM을 로컬로 구동하는 실험 사례를 소개합니다. llama-server를 백그라운드에 상주시키고 KV 캐시를 재사용하여 지연 시간을 획기적으로 단축하는 최적화 방법을 다룹니다.
핵심 포인트
- Echo Dot 2(ARMv7, 512MB RAM)에서 로컬 LLM 구동 성공
- llama-server 상주 및 cache_prompt 활용으로 지연 시간 17초에서 2.3초로 단축
- 28M 모델 사용 시 명령 수행에 적합한 속도 확보 가능
- Sherpa-ONNX를 결합한 완전 오프라인 음성 파이프라인 구축
- 범용 챗봇보다는 로컬 의도 파서(Intent Parser)로서의 활용 권장
코드와 지침은 여기에서 확인할 수 있습니다: https://github.com/albertoZurini/echo-dot-2-playground 안녕하세요! 며칠간 실험해 본 결과, Amazon Echo Dot 2에서 완전히 로컬 음성 파이프라인을 실행할 수 있었습니다. 이 커뮤니티에게 흥미로운 점은 이 기기가 매우 제한적인 하드웨어임에도 불구하고 오프라인 음성 인식과 함께 llama.cpp를 구동할 수 있다는 것입니다. Echo Dot 2는 ARMv7 프로세서와 512 MB의 RAM을 갖추고 있습니다. 저는 llama.cpp를 armeabi-v7a용으로 컴파일하여 지속적인 llama-server 프로세스를 통해 모델을 실행했습니다. 서버를 유지하는 것이 중요한데, 그렇지 않으면 요청마다 모델이 처음부터 로드되기 때문입니다. 작은 실험의 경우, 일부 ESP32 음성 프로젝트에서 사용되는 것과 같은 일반적인 모델 계열인 28M 파라미터 모델을 사용했습니다. Echo Dot에서는 프롬프트 처리 중 약 7 토큰/초, 생성 중에는 약 4 토큰/초에 도달합니다. 이는 명백히 빠르지 않지만, 전등 켜기나 볼륨 변경과 같은 짧고 구조화된 명령에는 충분합니다. 또한 MobileLLM-143M-Q4_K_M.gguf도 테스트했습니다. 작동은 하지만, 간단한 명령어 하나에 대한 전체 프리필(prefill) 및 생성 과정이 약 20초가 걸려 이 하드웨어에서는 대화형 음성 비서로 사용하기에는 너무 느리게 느껴집니다. 가장 큰 개선점은 추론 아키텍처를 변경하면서 얻었습니다. 매 발화마다 llama-cli를 시작하는 대신, 어시스턴트는 한 번 llama-server를 시작하고 백그라운드에 상주하게 합니다. 요청 프롬프트는 모든 불변 지침과 출력 형식을 처음에 유지하고, 사용자의 텍스트를 맨 끝에 배치합니다. 이 요청은 cache_prompt=true를 사용하여, llama.cpp가 안정적인 접두사(prefix)에 대한 KV 캐시를 재사용하고 변경되는 사용자 텍스트만 처리하도록 합니다. 제 테스트에서는 이로 인해 콜드한 llama-cli 호출 시 약 17초였던 워밍업 쿼리 지연 시간(warm query latency)이 상주 서버와 캐시된 프롬프트를 사용하여 약 2.3초로 줄었습니다. 나머지 파이프라인은 오프라인 스트리밍 음성-텍스트 변환을 위해 Sherpa-ONNX를 사용합니다.
호출어 (wake word) 서비스가 어시스턴트에게 로컬 이벤트를 보내면, 어시스턴트는 음성을 녹음하고 STT (Speech-to-Text)를 실행한 다음 전사된 텍스트 (transcript)를 로컬 llama.cpp 서버로 전송합니다. 모델은 대화형 응답 대신 단순한 JSON 액션 (JSON actions)을 출력하도록 제한되어 있으며, 이를 통해 낮은 토큰 생성 속도에도 불구하고 생성 길이를 짧게 유지하고 결과의 유용성을 확보합니다. 이것은 범용 챗봇 (general-purpose chatbot)이 아닙니다. 모델이 너무 작고 하드웨어가 너무 느리기 때문입니다. 그보다는 오디오나 텍스트를 클라우드로 보내지 않고 음성을 기기 동작으로 변환할 수 있는 아주 작은 로컬 의도 파서 (intent parser)에 가깝습니다. 저는 음성으로 간단한 도구들을 실행할 수 있었고, 모든 상호작용을 Echo Dot 내부에서 유지할 수 있었습니다. 코드와 빌드 관련 노트는 여기에 있습니다: https://github.com/albertoZurini/echo-dot-2-playground 다른 사람들은 이러한 오래된 ARM 하드웨어에서 어떤 작은 GGUF 모델이나 llama.cpp 설정을 시도해 볼지 궁금합니다. 주요 제약 사항은 RAM, 모델 로딩 시간, 그리고 캐시된 접두사 (cached prefix)가 실제로 도움이 될 만큼 프롬프트를 충분히 작게 유지하는 것입니다. submitted by /u/alberto_zurini [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기