4P by GN⁺ | ★ favorite | 댓글 1개
  • Pi-C.A.R.D는 Raspberry Pi에서 완전히 로컬로 실행되는 AI 음성 비서로, 대화형 LLM 기능을 Raspberry Pi 하드웨어에서 구현하는 프로젝트임
  • 상호작용 방식은 wake word 기반 main.py와 GPIO 버튼 기반 main_button.py 두 가지이며, 대화 중에는 wake word를 반복하지 않아도 됨
  • 대화 기록은 config.py에서 조절할 수 있고, 메모리 크기를 줄이면 더 빠른 응답을 얻을 수 있음
  • 빠르고 가볍게 만들기 위해 whisper.cppllama.cpp 같은 C++ 구현을 사용하며, 외부 정보 접근 판단에는 fine-tuned BERT인 tool-bert2를 사용함
  • 카메라 기반 기능은 README 여러 곳에서 설정 방법이 나오지만, 현재는 llama.cpp의 vision model 지원 변화 때문에 임시로 제거된 상태라는 주의가 붙어 있음

Pi-C.A.R.D가 하는 일

  • Pi-C.A.R.D는 Raspberry Pi에서 실행되는 AI 기반 비서로, ChatGPT 같은 표준 LLM이 대화 환경에서 수행하는 작업을 로컬에서 처리하는 것을 목표로 함
  • 이름은 Raspberry Pi - Camera Audio Recognition Device의 약자임
  • 프로젝트는 계속 개발 중이며, 이슈나 풀 리퀘스트를 받을 수 있다고 안내함
  • 새로 추가된 Docker 지원으로 설정과 수정이 더 쉬워지기를 기대한다고 밝힘
  • 비디오 소개는 아직 제공되지 않았고, 추후 제공 예정임

동작 방식

  • wake word 방식

    • main.py를 실행하면 시스템이 wake word를 듣고 대화를 시작함
    • 기본 wake word는 "raspberry", "barry", "razbear"
    • 대화가 시작된 뒤에는 매번 wake word를 반복할 필요가 없음
    • "stop", "exit", "goodbye" 같은 말을 하면 대화를 종료함
    • wake word와 관련 동작은 config.py에서 바꿀 수 있음
  • 버튼 방식

    • 브레드보드, 전선, 버튼을 사용하면 GPIO 버튼으로 대화를 시작할 수 있음
    • 버튼을 누른 뒤 명령을 말하는 방식이며, README 기준으로 더 매끄러운 상호작용 방식으로 소개됨
    • 버튼 설정은 main_button.py 안내를 따름
    • 버튼 버전에서는 버튼으로 대화를 시작하거나, assistant를 언제든 중단할 수 있음
  • 대화 메모리

    • 챗봇은 설정 가능한 대화 메모리를 가짐
    • 이전 발화를 반복하게 하거나, 앞선 주제를 더 자세히 다루게 할 수 있음
    • 더 빠른 응답을 원하면 config.py에서 메모리 값을 더 작게 설정할 수 있음

로컬 실행의 목표와 한계

  • 프로젝트의 목표는 Raspberry Pi라는 비교적 저렴한 하드웨어에서 완전히 오프라인인 음성 비서를 얼마나 효율적으로 만들 수 있는지 확인하는 것임
  • 모든 처리를 로컬에서 수행하므로 클라우드 기반 시스템만큼 강력하거나 빠르지는 않음
  • README는 최근 1년 동안 작은 LLM 모델에서 큰 진전이 있었고, 이 프로젝트도 함께 개선될 수 있다고 봄
  • 앱으로 만들지 않은 이유는 완전 오프라인 음성 비서를 Raspberry Pi에서 빠르게 실행하는 것이 가장 어려운 부분이라고 봤기 때문임
  • 이 방식이 동작하면 더 강력한 하드웨어에서는 유사한 시스템이 더 빠르게 동작할 수 있다고 설명함

실행과 설정

  • 저장소를 다운로드하고 요구사항과 설정을 마친 뒤 다음 명령으로 실행함
python main.py
  • 버튼 버전은 다음 명령으로 실행함
python main_button.py
  • Docker 실행은 권장 방식으로 소개되며 다음 명령을 사용함
sudo docker-compose build
sudo docker-compose up
  • Docker 지원은 최근 추가된 기능이라 완벽히 동작하지 않을 수 있음
  • Docker 방식은 wake-word 버전만 동작하며, GPIO 접근을 컨테이너로 전달하는 방법은 아직 확실하지 않음

사용 소프트웨어와 도구

  • 빠르고 가벼운 시스템을 만들기 위해 가능한 곳에는 C++ 구현을 사용함
  • 오디오 전사는 whisper.cpp를 사용하며, quick-start 가이드를 따라 설정해야 함
  • README는 vision 기능에 llama.cpp를 사용한다고 설명하지만, 상단 주의문에서는 llama.cpp가 vision model을 더 이상 적극 지원하지 않아 카메라 기능이 임시 제거됐다고 밝힘
  • assistant가 실제 비서에 가깝게 동작하도록 몇 가지 도구 접근 기능을 제공함
    • 도구 접근 판단은 tool-bert를 통해 수행함
    • tool-bert2는 외부 정보 접근 시점을 결정하는 fine-tuned BERT임
    • 이 모델을 만드는 방법은 tool-bert 저장소에 안내되어 있음
    • 도구 접근을 활성화하려면 .env.example에서 필요한 키와 시크릿을 확인해야 함

카메라와 비전 기능 상태

  • README 본문에는 Raspberry Pi에 카메라를 연결하면 사진을 찍고, 보이는 것을 설명하고, 해당 이미지에 대해 질문할 수 있다고 소개함
  • 비전 기능 설정은 config.py에서 vision_modelvlm으로 바꾸는 방식임
  • 사용할 모델로 Qwen2-VL-2B-Instruct가 언급됨
  • 입력 이미지 토큰 크기가 동적이므로 촬영한 사진 크기를 줄이면 추론 시간을 단축할 수 있다고 설명함
  • 하지만 프로젝트 상단 주의문에 따르면 현재 카메라 기능은 임시 제거된 상태임

필요한 하드웨어

  • 기본 하드웨어 구성은 Raspberry Pi 5 Model B, USB 마이크, 스피커임
  • USB 마이크와 스피커는 Raspberry Pi의 USB 포트에 연결함
  • 카메라는 Raspberry Pi의 카메라 포트에 연결함
  • README에서 사용한 구성품은 다음과 같음
  • Raspberry Pi 5는 새 카메라 포트를 사용하므로 새 카메라 커넥터가 필요함
  • 카메라 커넥터는 선택 사항이지만, 카메라 기능을 쓰려면 구매해야 함
  • GPIO 버튼 설정에는 튜토리얼의 앞부분이 도움이 됐다고 안내함
  • 프로젝트는 Raspberry Pi 5에서 동작하도록 맞추는 데 초점을 두지만, 다른 기기에서도 동작할 수 있다고 설명함

로드맵과 진행 상태

  • 구현 완료로 표시된 항목에는 기본 대화 기능, 카메라 기능, 응답 시간 벤치마크, 오버클러킹 테스트, whisper 시간 단축 방법 탐색이 포함됨
  • assistant를 중단하고 새 질문을 하는 기능, custom tuned model 사용, 외부 서비스 함수 모델인 tool-bert 개선도 완료로 표시됨
  • 휴대용 전원 연결 테스트와 더 많은 기기 테스트를 위한 Docker화도 완료됨
  • 남은 항목에는 개선된 튜토리얼과 비디오, entropix를 사용한 선택적 모델 생성, 다른 언어 테스트, 더 많은 외부 서비스 추가가 있음
  • 진행 상황 추적용 Notion 보드는 아직 완성되지 않았으며 링크가 제공됨

댓글과 토론

Hacker News 의견들
  • 사용자의 프라이버시를 지키고 데이터가 제3자 서버로 가지 않게 하려고, 인터넷 연결이 전혀 필요 없는 완전 오프라인 음성 비서를 만들고 싶었음
    좋은 시도이고 고마움

    • Apple/Google이 기기 카메라/마이크가 표시등이 켜졌을 때만 캡처될 수 있고, 앱이나 운영체제 상위 계층도 이를 속일 수 없다는 걸 증명·검증 가능하게 만드는 기술을 넣어주면 좋겠음
    • 어떤 “비서”든 가장 원하는 1순위 기능은 오프라인 동작
      이게 Pi5에서만 도는지, 아니면 Raspberry Pi가 아닌 다른 보드에서도 도는지 궁금함
    • 이름도 좋고, 오래된 Picard facepalm 밈을 쓴 것도 더 좋음
      진지하게는 이름 때문에 눈길이 갔고, 소개를 읽고 “말하는 모든 걸 Amazon에 업로드하지 않는 Alexa라면 나한테도 쓸 만하겠다”는 생각이 듦
      기본 깨우기 단어가 “hey assistant”라면 “Computer”를 추천함 :) 물론 목소리는 https://en.wikipedia.org/wiki/Majel_Barrett처럼 들려야 함
  • 필요한 건 RPi 4에서 감당 가능하고, HomeAssistant와 통합되며, 오프라인 전용이라 내 데이터를 어디에도 보내지 않는 음성 비서임
    지금까지 본 것들과 비교하면 이 프로젝트가 거의 모든 조건을 만족하는 듯해서 잘 만든 것 같음
    덧붙여 Alexa 같은 용도에 쓸 만한 RPi 호환 마이크 추천이 있으면 궁금함

    • Rhasspy를 살펴보면 좋음
      4B에서 대규모 언어 모델을 실용적으로 돌리기는 어렵지만, 꼭 대규모 언어 모델 기반이 필요하진 않음
      Rhasspy 커뮤니티에서는 마이크가 붙은 위성 장치에서 저렴하고 가벼운 깨우기 단어 감지를 로컬로 하고(여기엔 4B도 충분할 것), 실제 녹음은 더 좋은 결과를 위해 로컬 네트워크로 중앙 허브에 스트리밍하는 패턴이 흔함
    • https://www.robotshop.com/products/respeaker-usb-microphone-...
    • Playstation 3/4 카메라는 마이크도 달려 있어서 결과가 괜찮았음
      eBay에서 15~20달러 정도에 구할 수 있음
    • HA에 통합된 Voice Assistant 기능을 확인해봤는지 궁금함: https://www.home-assistant.io/voice_control/
      NabuCasa가 Rhasspy 메인 개발자를 고용해 이 기능을 작업하게 했고, 업데이트마다 계속 좋아지고 있음
  • “왜 Pi-card인가? Raspberry Pi - Camera Audio Recognition Device”라면, LCARS 기회를 놓친 듯함
    LLM Camera Audio Recognition Service로 하고, 당연히 “computer”라는 키워드에 반응하면 됐을 텐데. Pi가 아닌 곳에서도 돌면 LCARS가 될 수 있겠음

    • Pi-C.A.R.D는 완벽함
      100% Picard로 읽히고, LCARS보다 더 알아보기 쉬움
    • 그래서 멋진 LCARS 물건을 가질 수 없는 것임: https://en.wikipedia.org/wiki/LCARS#Legal
    • 또는 LLM Offline Camera, User Trained Understanding Speech로 해서 LOCUTUS도 가능함
    • Beneficial Audio Realtime Recognition Electronic Transformer 같은 이름이어야 함
  • 이걸 써보는 게 기대됨
    공개적이고 안정적이며 유연하고 프라이버시 중심인 음성 비서는 아직도 매우 부족하다고 알고 있어서, 이 프로젝트가 힘을 얻었으면 함
    약 1년 전 가족들이 Alexa를 정말 들이고 싶어 했지만, 집에 Bezos 감시 장치를 두고 싶지 않아서 직접 만들어보자고 설득했음. Pi 4에서 Mycroft를 골랐는데 잘 안 됐고, 깨우기 단어 감지는 들쭉날쭉했으며, 통합 기능도 부족했고, 그 시점엔 사실상 방치된 프로젝트처럼 보였음. 프로젝트와 막히던 통합 기능들에 기여하려 했지만 생활에 치여 다시 돌아가지 못했고, 다행히 가족들도 Alexa를 잊어버림

    • Target에서 팔던 일부 메이커 제품에 판지 상자, 위쪽의 아케이드 RGB-LED 버튼, 스피커, RPi용 “hat”에 달린 마이크 4개가 들어 있었음
      nano인지 pico인지, 아무튼 SO-DIMM 정도 크기의 보드였음. 깨우기 단어는 없고 흰색으로 켜진 버튼을 누르면 색이 두 번 바뀌었는데, 한 번은 눌림 확인, 또 한 번은 듣는 중 표시였음. 말을 마치면 다시 색이 바뀌고 응답을 말해줬음
      백엔드에는 Google 쪽 무언가를 썼고, 설정하고 계속 동작시키기가 정말 답답했지만 작동은 했음. 그런 장치가 두 개 있어서, 비슷한 걸 직접 호스팅하게 해줄 무언가를 기다려왔음
    • 이 글을 읽고 정말 고무됐고 도움이 되길 바람
      여기에 더 많은 작업을 할 계획임. 현재 품질을 가늠할 수 있는 짧은 동작 데모가 YouTube에 몇 개 있음: https://www.youtube.com/watch?v=OryGVbh5JZE
  • 이걸 일반 Linux 머신에서 실행할 수 있는지 궁금함
    아니면 그렇게 가능한 비슷한 프로젝트를 알고 있는지도 궁금함
    예전에 검색해봤지만 이 분야는 복잡하고, 제약 조건들이 미묘했음

    • Raspberry Pi는 일반 Linux 머신과 매우 비슷하고, 가장 큰 차이는 Intel/AMD CPU가 아니라 ARM이라 지원 범위가 약간 좁다는 정도임
      전반적으로 Pi-C.A.R.D는 Python과 C++를 쓰는 듯하니, Python과 C++를 실행·컴파일할 수 있는 곳이라면 어디서든 돌리는 데 별문제가 없을 것 같음
  • 약 3년 전 초기 세대 RPI 4에서 이런 걸 만들어보려 했지만, 하드웨어 한계와 내 지식 한계에 부딪혔음
    지금 실제로 되는 걸 보니 정말 멋짐

  • GPU를 꽂을 수 있는 raspi hat이 있으면 멋질 듯하지만, 실용적이거나 가능한지는 잘 모르겠음
    오늘의 그래픽카드는 내일의 전자폐기물이니, 이런 DIY raspi 프로젝트를 강화하는 데 두 번째 생명을 얻을 수도 있겠음

    • 단일 플랫폼을 둘러싼 생태계를 제외하면, Raspberry Pi의 차별점 대부분은 폼팩터와 전력 소모에 있음
      저렴한 CUDA 코어를 활용하려고 GPU/어댑터/전원공급장치를 붙이면 전력·가격·크기 측면에서 더 나은 SoC나 x86 NUC 솔루션보다 오히려 나쁠 가능성이 큼
    • 암호화폐 채굴용으로는 PCIe 슬롯 하나를 4개의 x1 PCIe 슬롯으로 바꾸거나, 아예 12개 이상의 x1 PCIe 슬롯이 있는 보드를 쓰곤 했음
      PCIe에 어떤 마법이 들어가는지는 모르지만, 적어도 시판 보드 중 하나인 Atomic Pi에는 “노출된” PCIe 인터페이스가 있었음
      어쨌든 GPU는 작은 PCB 위에 있고, 그 PCB가 USB3 케이블을 통해 메인보드 PCIe 슬롯의 더 작은 PCB에 연결됐음. 요지는 PCIe가 무엇이든, USB3 케이블을 통해 GPU로 전달되어 작업하게 만들 수 있다는 것임
  • 하드웨어 목록에 스피커가 보이는데, 이게 말로 응답도 하는지 궁금함

    • 맞음
      지금은 https://espeak.sourceforge.net/를 쓰고 있어서 듣기에 아주 즐겁지는 않음
      추가로 대규모 언어 모델 응답을 스트리밍하므로 답을 받기까지 오래 걸리진 않음. 청크 단위로 처리하다 보니 가끔 단어 일부만 잠깐 발화되기도 함. 물론 어떤 모델을 쓰는지, 문맥 크기가 얼마나 되는지에 따라 기다리는 시간도 달라짐
  • Picard는 왜 항상 Earl Grey 차의 온도 취향까지 지정해야 하는 걸까?
    그 정도로 똑똑한 AI라면 이미 취향을 학습했어야 하지 않나?

    • 완전히 주제 밖이지만, 아마 실제로는 그렇게 할 필요가 없을 것임
      드라마에서 많은 인물들이 복제기에 더 유연하게 지시함. “Tea, Earl Grey, Hot”은 Picard의 습관 같고, Enterprise-D의 복제기보다 더 원시적인 음식·음료 장치에서 생긴 버릇일 수 있음
    • 아마 취향보다 너무 미지근한, 소송에 대비한 강한 기본값을 덮어쓰려면 구체적으로 말해야 하는지도 모름
      결핍 이후 세계에도 소송이 남아 있을까? 아마도
    • 습관의 힘일지도 모름
      Starfleet 사람들 대부분은 복제기를 잘 쓰는 법을 모르는 것 같음. 그만큼 똑똑한 장치가 있는데도 설명서를 읽어본 적 없는 평범한 가전처럼 쓰고, 기능의 90%를 놓친 뒤 복제 음식 맛이 나쁘다고 불평함
    • 오히려 그는 충분히 구체적으로 말하지 않는 편임
      https://i.redd.it/hluqexh3oqc91.jpg
    • 한 번 “Tea, Earl Grey”라고만 했을 때 컴퓨터가 “Tea, Earl Grey, luke warm”으로 알아들었던 것임
  • 깨우기 단어는 어떻게 동작하는지 궁금함
    계속 듣고 있다가 마지막 몇 초에 깨우기 단어나 문구가 없으면 무시하는 방식인가?

    • 대체로 그런 아이디어가 맞음
      좀 더 정확히는 여러 오디오 청크를 저장해두고 가장 오래된 것을 버리는 방식, 즉 이동 창(rolling window)