# \[GN⁺\] 스마트 홈 제어를 위한 완전 로컬 LLM 음성 비서 구축하기

**URL:** https://discuss.pytorch.kr/t/gn-llm/3281
**Category:** 읽을거리&정보공유
**Tags:** vllm, geeknews, personal-assistant, llm-in-production, mixtral, glados, home-assistant, llm
**Created:** [1월 15, 2024, 8:39오전 UTC](https://discuss.pytorch.kr/t/gn-llm/3281 "2024-01-15T08:39:35Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![9bow](https://discuss.pytorch.kr/user_avatar/discuss.pytorch.kr/9bow/32/16301_2.png) [@9bow](https://discuss.pytorch.kr/u/9bow)
#### Post date: [1월 15, 2024, 8:39오전 UTC](https://discuss.pytorch.kr/t/gn-llm/3281/1 "2024-01-15T08:39:35Z")

</div>

_[GeekNews](https://news.hada.io/?utm_source=pytorchkr)의 [xguru](https://news.hada.io/user?id=xguru&utm_source=pytorchkr)님께 허락을 받고 GN에 올라온 글들 중에 AI 관련된 소식들을 공유하고 있습니다. 😺_

* * *

## 소개

[https://johnthenerd.com/videos/local-llm-assistant.mp4](https://johnthenerd.com/videos/local-llm-assistant.mp4)

- 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](https://github.com/vllm-project/vllm)을 선택함. 매우 빠르며, 동시에 여러 클라이언트에 서비스를 제공할 수 있는 유일한 엔진임.
- OpenAI 호환 API 서버를 지원하여 생활을 훨씬 쉽게 만듦.
- VRAM 대 성능의 트레이드오프가 완벽하게 맞는 Mistral AI의 [Mixtral 모델](https://mistral.ai/news/mixtral-of-experts/)을 선택함.

## 모델 양자화

- 전체 fp32 모델을 실행할 수 없기 때문에 [양자화된 버전](https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ)을 선택함.
- 양자화는 MP3와 같이 품질을 약간 저하시키고 리소스 요구 사항을 대폭 개선함.
- GPTQ와 AWQ 중에서 선택해야 했으며, 스마트 홈 상태 전체를 모델에 전달해야 하므로 GPTQ를 선택함.

## HomeAssistant 통합

- HomeAssistant OS의 기본 Whisper와 Piper 애드온을 사용했지만, [HuggingFace에서 사용자 지정 GlaDOS 음성 모델을 다운로드](https://huggingface.co/csukuangfj/vits-piper-en_US-glados/tree/main)함.
- HomeAssistant에 이미 [OpenAI 통합](https://www.home-assistant.io/integrations/openai_conversation/)이 있지만, 기기를 제어할 수 없고 OpenAI 서버 대신 가짜 OpenAI 서버와 대화하도록 강제하는 base\_url 설정이 없어 전체 확장 기능을 사용하지 않음.
- [사용자 지정 통합](https://github.com/jekalmin/extended_openai_conversation)을 찾았지만, 소프트웨어가 그렇게 작동하지 않는다는 것을 알고 있음. 설치 후 두 가지 문제가 더 발생함.

## 문제 해결

- Mixtral은 [특이한 채팅 템플릿](https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ/blob/gptq-4bit-32g-actorder_True/tokenizer_config.json#L42)을 사용함. 시스템 프롬프트를 허용하지 않고 발견되면 예외를 발생시킴.
- vLLM은 OpenAI의 함수 호출 API를 지원하지 않음. 지원한다 해도 함수 호출에 특화된 모델을 실행해야 함.
- Mixtral을 수정하기 위해 채팅 템플릿을 "시스템 프롬프트"를 받아들이도록 변경함. Librechat을 UI로 사용하여 시스템 프롬프트가 제대로 작동하도록 함.

## JSON 출력

- 모델이 함수를 호출할 수 없더라도 JSON을 출력하도록 요청하고 실행할 수 있음.
- 사용자 지정 통합을 포크하여 HomeAssistant 서비스를 JSON으로 실행하는 기능을 추가함.

## GlaDOS 프롬프트

- GlaDOS 프롬프트를 수정하여 나만의 어시스턴트에서 사용함.
- JSON 출력을 좋아하는 문제가 발생함. 간단한 질문에도 서비스 호출을 시도하는 JSON을 출력함.

## 해결책

- 사용자가 작업을 요청한 경우 알려진 텍스트를 삽입하도록 요청함. "$ActionRequired"를 선택함.
- 포크에서 이를 필터링하여 문제를 해결함.

## 최종 프롬프트

- 더 많은 기기와 불필요한 엔티티가 적은 초기 프롬프트를 업데이트함.
- 요청하지 않은 경우 작업을 수행하지 않도록 장려함.
- 여러 시도 끝에 거의 완벽하게 작동하는 것을 얻음(4060Ti의 메모리 버스 제한으로 인해 약간 느림).

## GN⁺의 의견

- 이 프로젝트는 개인 정보 보호와 사용자 맞춤형 경험을 중시하는 사람들에게 매우 흥미로울 수 있음.
- 로컬에서 실행되는 LLM을 사용하여 스마트 홈을 제어하는 것은 데이터 보안과 응답 속도 측면에서 큰 이점을 제공함.
- 사용자가 직접 시스템을 구축하고 커스터마이징하는 과정은 기술 교육과 DIY 문화를 장려하는 좋은 예시임.

### [Hacker News 의견](https://news.ycombinator.com/item?id=38985152)

- **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을 사용하지 않은 이유에 대해 궁금해함.
  - 해당 인프라가 제공하는 유연성에 대한 설명을 요청함.

## 원문

> **[Building a fully local LLM voice assistant to control my smart home](https://johnthenerd.com/blog/local-llm-assistant/)**
>
> I’ve had my days with Siri and Google Assistant. While they have the ability to control your devices, they cannot be customized and inherently rely on cloud services. In hopes of learning something new and having something cool I could use in my...

## 출처 / [GeekNews](https://news.hada.io/topic?id=12853)

> **[스마트 홈 제어를 위한 완전 로컬 LLM 음성 비서 구축하기 | GeekNews](https://news.hada.io/topic?id=12853)**
>
> Siri와 Google 어시스턴트를 사용한 경험이 있음. 이들은 기기를 제어할 수 있지만, 커스터마이징이 불가능하고 클라우드 서비스에 의존함.새로운 것을 배우고자 하며, 삶에서 사용할 수 있는 멋진 것을 원함. 새로운 어시스턴트는 빈정대고 비꼬는 성격을 가지길 원함.모든 것이 로컬에서 실행되기를 원함. 예외 없이. 커피 머신이 국가의 반대편 서버와 대화할
