GN⁺: 스마트 홈 제어를 위한 완전 로컬 LLM 음성 비서 구축하기
(johnthenerd.com)- Siri와 Google 어시스턴트를 사용한 경험이 있음. 이들은 기기를 제어할 수 있지만, 커스터마이징이 불가능하고 클라우드 서비스에 의존함.
- 새로운 것을 배우고자 하며, 삶에서 사용할 수 있는 멋진 것을 원함. 새로운 어시스턴트는 빈정대고 비꼬는 성격을 가지길 원함.
- 모든 것이 로컬에서 실행되기를 원함. 예외 없이. 커피 머신이 국가의 반대편 서버와 대화할 이유가 없음.
- 기본적인 "불 켜기" 기능 이상을 원함. 미래에 새로운 기능을 추가할 수 있기를 바람.
아키텍처
- 방화벽, NIPS, VLAN 라우팅을 위해 Protectli Vault VP2420 사용.
- 인터넷에 HomeAssistant를 노출시켜 VPN 없이 원격으로 사용할 수 있도록 함. 이를 위해 극단적인 보안 조치를 취함.
- 저렴한 가격에 2.5기가를 얻기 위해 TRENDnet TEG-3102WS 관리형 스위치 선택.
- eBay에서 대부분의 부품을 구매하여 가능한 저렴하게 조립한 컴퓨터에 RTX 4060Ti 두 개 사용. LLM에 대량의 컨텍스트를 공급하는 데 필요한 VRAM이 중요함.
- HomeAssistant(와 WAF)를 실행하기 위해 Minisforum UM690 사용. Raspberry Pi 4도 가능하지만, 많은 서비스를 실행하고 Whisper가 CPU에 상당한 요구를 함.
- 이더넷 케이블의 거대한 혼란.
추론 엔진
- HomeAssistant 외부에서도 사용할 수 있는 범용 LLM을 원하기 때문에 vLLM을 선택함. 매우 빠르며, 동시에 여러 클라이언트에 서비스를 제공할 수 있는 유일한 엔진임.
- OpenAI 호환 API 서버를 지원하여 생활을 훨씬 쉽게 만듦.
- VRAM 대 성능의 트레이드오프가 완벽하게 맞는 Mistral AI의 Mixtral 모델을 선택함.
모델 양자화
- 전체 fp32 모델을 실행할 수 없기 때문에 양자화된 버전을 선택함.
- 양자화는 MP3와 같이 품질을 약간 저하시키고 리소스 요구 사항을 대폭 개선함.
- GPTQ와 AWQ 중에서 선택해야 했으며, 스마트 홈 상태 전체를 모델에 전달해야 하므로 GPTQ를 선택함.
HomeAssistant 통합
- HomeAssistant OS의 기본 Whisper와 Piper 애드온을 사용했지만, HuggingFace에서 사용자 지정 GlaDOS 음성 모델을 다운로드함.
- HomeAssistant에 이미 OpenAI 통합이 있지만, 기기를 제어할 수 없고 OpenAI 서버 대신 가짜 OpenAI 서버와 대화하도록 강제하는 base_url 설정이 없어 전체 확장 기능을 사용하지 않음.
- 사용자 지정 통합을 찾았지만, 소프트웨어가 그렇게 작동하지 않는다는 것을 알고 있음. 설치 후 두 가지 문제가 더 발생함.
문제 해결
- Mixtral은 특이한 채팅 템플릿을 사용함. 시스템 프롬프트를 허용하지 않고 발견되면 예외를 발생시킴.
- vLLM은 OpenAI의 함수 호출 API를 지원하지 않음. 지원한다 해도 함수 호출에 특화된 모델을 실행해야 함.
- Mixtral을 수정하기 위해 채팅 템플릿을 "시스템 프롬프트"를 받아들이도록 변경함. Librechat을 UI로 사용하여 시스템 프롬프트가 제대로 작동하도록 함.
JSON 출력
- 모델이 함수를 호출할 수 없더라도 JSON을 출력하도록 요청하고 실행할 수 있음.
- 사용자 지정 통합을 포크하여 HomeAssistant 서비스를 JSON으로 실행하는 기능을 추가함.
GlaDOS 프롬프트
- GlaDOS 프롬프트를 수정하여 나만의 어시스턴트에서 사용함.
- JSON 출력을 좋아하는 문제가 발생함. 간단한 질문에도 서비스 호출을 시도하는 JSON을 출력함.
해결책
- 사용자가 작업을 요청한 경우 알려진 텍스트를 삽입하도록 요청함. "$ActionRequired"를 선택함.
- 포크에서 이를 필터링하여 문제를 해결함.
최종 프롬프트
- 더 많은 기기와 불필요한 엔티티가 적은 초기 프롬프트를 업데이트함.
- 요청하지 않은 경우 작업을 수행하지 않도록 장려함.
- 여러 시도 끝에 거의 완벽하게 작동하는 것을 얻음(4060Ti의 메모리 버스 제한으로 인해 약간 느림).
GN⁺의 의견
- 이 프로젝트는 개인 정보 보호와 사용자 맞춤형 경험을 중시하는 사람들에게 매우 흥미로울 수 있음.
- 로컬에서 실행되는 LLM을 사용하여 스마트 홈을 제어하는 것은 데이터 보안과 응답 속도 측면에서 큰 이점을 제공함.
- 사용자가 직접 시스템을 구축하고 커스터마이징하는 과정은 기술 교육과 DIY 문화를 장려하는 좋은 예시임.
정리가 잘 되어있어서 재미나게 봤네요.
Home Assistant가 LLM 기능을 추가할 예정이라고 하니, 앞으로는 더 간단하게 이용 가능할듯 하네요.
제가 보는 인테리어 쇼 유튜브 채널에서도 IoT 상품 만든다고 하던데, 그런 곳에서도 이런걸 이용할 수 있게 처음부터 고민해주면 더 흥미로워 질듯
Hacker News 의견
-
Home Assistant 창립자의 의견:
- Home Assistant는 올해 유사한 기능을 기본적으로 통합할 계획임.
- 표준화된 로컬 LLM API의 필요성을 강조하며, 모델이 무엇을 할 수 있는지 쿼리할 수 있는 기능을 원함.
- LLM이 유용하게 작동하기 위해 OpenAI 기능과 유사한 기능을 지원하는 로컬 LLM을 보고 싶어함.
- JSON 생성 시 오류 없이 직접 실행 가능한 결과물을 원함.
-
다른 사용자의 경험:
- 설치 후 결과에 대한 명확한 설명이 부족함을 지적함.
- GPT-4와 비교하여 작은 모델로 복잡한 작업을 수행하는 데 한계가 있음을 언급함.
- 실제 출력 예시를 보고 싶어함.
-
로컬 LLM을 테스트한 사용자:
- llava-v1.5-7b-q4 모델이 집 자동화 작업에 효과적임을 밝힘.
- GPT-4와 비슷한 수준의 결과를 얻었다고 함.
-
Home Assistant 사용자의 피드백:
- AI에 대한 이해가 부족함을 인정하며, 시작하기 위한 템플릿에 감사함을 표함.
- Home Assistant를 여러 곳에 배치하여 유용하게 사용하고 있음을 언급함.
-
마이크 어레이에 대한 질문:
- 취미로 사용하는 마이크 어레이의 진보 상태에 대해 궁금해함.
- Echo 장치와 비교하여 마이크 성능에 대한 의문을 제기함.
-
하드웨어 및 설정에 대한 질문:
- 사용한 GPU 모델과 가격 비교에 대한 질문을 함.
- 양자화 선택에 대한 구체적인 정보를 요청함.
- VRAM 제약으로 인해 낮은 양자화 수준에서도 정확도가 유지될 것으로 기대함.
-
마이크 선택 및 음성 인식 구현에 대한 추가 정보 요청:
- 향후 마이크 선택 및 음성 인식 구현에 대한 자세한 정보를 기대함.
-
OpenAI API를 사용한 사용자의 경험:
- OpenAI의 API를 사용하여 간단한 파이썬 래퍼를 작성함.
- 로컬 음성 인식 및 생성을 위해 ESP32-Box와 Willow 프로젝트를 사용함.
-
네트워킹 설정에 대한 질문:
- 복잡한 네트워킹 설정 대신 tailscale을 사용하지 않은 이유에 대해 궁금해함.
- 해당 인프라가 제공하는 유연성에 대한 설명을 요청함.