10달러짜리 칩으로 4,500만 개 매개변수 AI 모델 구동하기 (Needle 2)

BBetter Stack
컴퓨터/소프트웨어가전제품/카메라

스크립트

00:00:00Needl 2입니다. 14메가바이트 크기의 아전틱(Argentic) LLM 모델이죠. 놓치셨을까 봐 다시 말씀드릴게요.
00:00:07용량은 14메가바이트이고 매개변수는 4.500만 개입니다. 기본적으로 이 LLM은 아주 작아서
00:00:14베어메탈 ESP32 S3에 이르기까지 모든 엣지 디바이스에서 실제로 실행될 수 있습니다.
00:00:21Cactus Compute사에서 개발했으며, 현재 Apache 2.0 라이선스로 오픈소스로 공개되었습니다.
00:00:28직접 테스트해 보니 실제로 잘 작동하더군요. 이번 영상에서는 Needle 2를 살펴보고 작동 방식을 알아본 다음,
00:00:34실제 마이크로컨트롤러에서 재미있는 추론 테스트를 실행해 성능을 확인해 보겠습니다.
00:00:40아주 흥미로울 테니 바로 시작해 보죠. 몇 주 전에 다른 영상을 올렸었는데,
00:00:49거기서는 2,900만 개 매개변수 모델을 ESP32 S3에 배포했었습니다.
00:00:56하지만 그건 실제 LLM이라기보다는 일종의 장난감에 가까웠죠. 아동용 동화로 학습되어 그 외의 것은 출력할 수 없었거든요.
00:01:03하지만 이 LLM은 사용자의 문맥을 이해하는 실제 모델입니다. 다만 너무 흥분하기 전에 한 가지 유의할 점이 있습니다.
00:01:10일반적인 챗봇 LLM과는 거리가 멀다는 점이죠. 대신 이 모델은
00:01:16도구 호출 디스패처(tool call dispatcher)로 작동하도록 특별히 제작되었습니다.
00:01:22작동 방식은 이렇습니다. 먼저 일련의 도구 호출을 미리 정의합니다. 서보 모터 회전부터
00:01:29생각할 수 있는 기타 기계적 또는 실행 가능한 작업까지 무엇이든 될 수 있죠. 그런 다음 자연어로 모델에 프롬프트를 입력하면
00:01:35명령에 기반해 어떤 도구 호출을 실행해야 할지 이해할 만큼 똑똑하게 작동합니다. 요약하자면 그렇습니다.
00:01:40이 모델이 정말 멋진 이유는 라즈베리 파이 5 같은 보드에서 초당 최대 500개의 토큰을 처리할 수 있어서,
00:01:47예를 들어 로보틱스 프로젝트의 매우 효율적인 구동 장치가 될 수 있기 때문입니다. 그렇다면 더 크고 성능이 뛰어난 디바이스에서는 Needle 2가 챗봇으로 작동할 수 있을까요?
00:01:55답은 '아니오'입니다. 속도의 문제가 아니거든요. Needle은 일반 상식이나 대화 데이터로 학습된 적이 전혀 없으니까요.
00:02:04학습 데이터 전체가 스마트홈 명령, 모바일 작업, 웨어러블 작업 같은 디바이스 제어 명령들로 이루어져 있습니다. 그래서
00:02:10성능이 빵빵한 디바이스에서 프랑스의 수도가 어디냐고 물어봐도 대답하지 못합니다.
00:02:17대신 올바른 함수를 선택하고 알맞은 인수를 채워 넣는 일은 정말 기가 막히게 잘하죠.
00:02:23바로 이 크기를 달성하기 위해 감수해야 했던 트레이드오프인 셈입니다.
00:02:28그렇다면 5배나 7배 큰 모델들과 대등하게 경쟁할 수 있는 4,500만 개의 매개변수를
00:02:33어떻게 구현해 냈는지 이야기해 보죠. 보통 모델을 이 정도로 줄이면 성능이 멍청해지기 마련입니다.
00:02:40하지만 Cactus는 그런 결과를 원하지 않았기에 아키텍처의 일부 요소를 처음부터 다시 설계했습니다.
00:02:47가장 큰 변화는 '잉그램(engram)'이라고 부르는 개념입니다. 원래 모델의 모든 지식은 가중치에 들어있고,
00:02:53모든 토큰마다 그 수많은 가중치를 행렬 곱셈 연산에 통과시켜야 하므로 비용이 많이 듭니다.
00:02:59하지만 Cactus는 그 지식의 상당 부분을 해시된 조회 테이블(hashed lookup table)로 옮겨 놓았습니다.
00:03:06그래서 모델이 복잡한 연산을 수행하는 대신 메모리 행을 직접 가져다 쓸 수 있죠.
00:03:12또한 일반적인 MLP 레이어를 하다마르 변환(Hadamard transform) 기반의 구조로 교체했습니다.
00:03:19이는 학습 가능한 매개변수가 거의 없는 고정된 수학적 연산 방식입니다. 보통 이
00:03:25혼합(mixing) 단계는 모델이 처음부터 학습해야 하는 거대한 행렬들로 처리되며,
00:03:32이 과정이 소형 모델의 매개변수 예산 대부분을 잡아먹습니다. 하지만 하다마르 변환은
00:03:38고정된 공식을 통해 모든 혼합을 공짜로 처리해주기 때문에 그 학습 과정을 전부 생략합니다.
00:03:44따라서 4,500만 개의 매개변수를 낭비하지 않고도 그 혜택을 누릴 수 있습니다. 그리고 양자화(quantization)가 있는데, 솔직히 이 부분이 이 모든 기술을 실제로 배포 가능하게 만드는 핵심입니다.
00:03:50Needle 2는 가중치당 2비트로 구동되며, 사후에 양자화된 것이 아니라 애초에 2비트로 학습되었습니다.
00:03:57문제는 많은 소형 모델들이 사후 압축을 거치면 성능이 무너진다는 점입니다. 그런 압축을 견디도록 설계되지 않았기 때문이죠.
00:04:03하지만 Needle은 처음부터 자체 압축 환경에 맞춰 학습되었기 때문에
00:04:09기본 버전부터 이미 최적화되어 있습니다. 그렇다면 이 모든 게 실제로 과연 제대로 작동할까요?
00:04:16Cactus의 자체 벤치마크에 따르면, Needle 2는 크기가 5배나 되는 모델과 당당히 정면으로 맞붙고 있습니다.
00:04:23몇 가지 더 까다로운 도구 호출 테스트에서는 아예 압도적인 우위를 점하기도 합니다.
00:04:30LFM의 2.5 풀 16비트 정밀도에 맞서 고작 2비트 정밀도로 실행되면서도 말이죠. 모바일 작업
00:04:38벤치마크에서 Needle은 98.3%의 확률로 올바른 함수 이름을 골라내는데,
00:04:45이는 비교 대상이 된 어떤 모델보다도 높은 수치입니다. 모든 면에서 완벽한 것은 아니지만,
00:04:51자신이 애초에 만들어진 목적만큼은 정말이지 완벽하게 수행해 냅니다. 자, 직접 테스트해서 어떻게 작동하는지 확인해 보죠.
00:04:57이 목적을 위해 저는 바로 이 보드인 ESP32-S3 위에서 실행되는 저만의 커스텀 추론 엔진을 만들었습니다.
00:05:05직접 체험해보고 싶으신 분들을 위해 더보기란에 GitHub 저장소 링크를 남겨두겠습니다. 터미널을 보시면
00:05:10작은 TUI 응용 프로그램이 실행되어 있는 것을 확인할 수 있습니다. 이제 자연어 요청으로
00:05:17프롬프트를 입력하고 어떻게 작동하는지 살펴보겠습니다. 먼저 간단한 명령을 내려보죠. 빨간색 불을
00:05:253초 동안 깜빡이게 해달라고 해보겠습니다. 실행하자마자 모델을 플래시 칩에서 직접 매핑하고
00:05:32작동 메모리를 설정하는 것을 볼 수 있습니다. 작업이 끝나면 추론 단계를 거치게 되는데,
00:05:39색상이 빨간색이고 모드가 깜빡임(flash)이며 3초 동안 수행해야 한다는 점을 정확히 식별해 낸 것을 볼 수 있습니다.
00:05:48추론 단계가 끝나면
00:05:53실제 도구 호출 작성 단계로 넘어갑니다. ESP32에서는 속도가 느리기 때문에 시간이 조금 걸리지만,
00:06:00그럼에도 꽤나 멋집니다. 보시다시피 빨간색 불이 3초 동안 깜빡이기 시작하네요.
00:06:08또한 이번 특정 도구 호출에 대해 얼마나 확신하는지 알려주는 신뢰도 점수(confidence score)도 함께 제공됩니다.
00:06:15이는 Needle 2에 내장된 기능입니다. 이 신뢰도 점수를 바탕으로
00:06:21다양한 시나리오에 맞춰 칩을 프로그래밍할 수 있으므로 꽤 유용합니다. 보시다시피 완료하는 데 약 39초가 걸렸는데,
00:06:27느리게 느껴질 수도 있습니다. 하지만 GPU도 없는 8메가바이트 마이크로컨트롤러에서 실행되는 4,500만 개 매개변수 모델이라는 점을 기억하세요.
00:06:35이번에는 문맥에 완전히 어긋나는 질문을 던지면 어떻게 되는지 보겠습니다. 프랑스의 수도가 어디냐고 물어볼게요.
00:06:48여기서 보실 수 있듯이 요청을 다시 읽어들이고, 추론 단계로 들어가서
00:06:54국가 정보에 사용할 수 있는 도구가 없다고 판단합니다. 따라서 도구 호출은 비어 있게 되죠.
00:07:00보시다시피 이 프롬프트를 바탕으로 자신 있게 실행할 수 있는 도구가 없다는 점을 매우 확신하고 있습니다.
00:07:07여전히 아주 지능적인 응답이라고 볼 수 있겠네요. 이번에는 보라색 불을
00:07:147초 동안 켜달라고 요청해 보겠습니다. 과연 이해할 수 있을까요? 색상이 보라색이라는 점을 잘 파악하고,
00:07:21'켜다(shine)'라는 표현이 깜빡이지 않는 단색(solid) 모드여야 한다는 뜻임을 이해합니다.
00:07:29또한 7초 동안 지속되어야 한다는 것도 파악하죠. 그런 다음 실제 도구 호출 작성을 진행합니다.
00:07:36완료되면 보시다시피 보라색 불이 켜집니다. 7초 동안 지속될 거예요.
00:07:46자, 보셨죠? 얼마나 멋진가요? 흥미롭게도 이번에는 신뢰도가 그리 높지 않았습니다.
00:07:52신뢰도 점수가 0.57이었지만, 그럼에도 작업을 알맞게 추론해 내어 우리가 요청한 대로 정확히 실행해 냈습니다.
00:08:00보여드리고 싶은 게 하나 더 있습니다. 이 프로젝트는 특히 재사용이 가능하도록 제작되었습니다.
00:08:06따라서 불빛 깜빡임 명령을 다른 것으로 교체할 수 있죠. 예를 들어
00:08:12서보 모터를 사용하는 로보틱스 프로젝트를 진행 중이라면 이 명령들을 본인의 것으로 교체할 수 있습니다.
00:08:17프로젝트의 리드미(readme) 파일에 이를 수행하는 3단계 과정이 문서화되어 있으니
00:08:24자신만의 프로젝트에 재사용하고 싶다면 그 세 단계만 따르면 됩니다.
00:08:29다른 변형도 시도해 보죠. 노란색 불을 5초 동안 표시해 주세요. 자, 보시다시피
00:08:36노란색 불을 5초 동안 깜빡이고 있습니다. 이 경우 모든 시도 중에서 가장 낮은 신뢰도 점수인 0.46을 기록했네요.
00:08:42모델이 '표시하다(display)'라는 말을 장기간 켜두는 것이 아니라 불을 깜빡이는 것으로 받아들였다는 점이 흥미로웠습니다.
00:08:50결론적으로 모델이 완벽하지는 않다는 걸 보여줍니다. 여전히 여러분의 의도를 오해할 수도 있지만,
00:08:56그럼에도 노란색 불을 5초 동안 켜는 데 성공했습니다. 대부분의 도구 호출은
00:09:03초당 평균 1.86토큰의 속도로 처리하는 데 약 40초가 소요됩니다. 제 생각에는 꽤 멋진 결과입니다.
00:09:10자, 이렇게 해서 Needle 2에 대해 알아보았습니다.
00:09:164,500만 개의 매개변수와 14메가바이트 용량을 가진 모델이 약 10달러짜리 칩 위에서 완전히 오프라인으로 실행되는 것이죠.
00:09:24이런 기술 분석 콘텐츠가 마음에 드신다면 영상 아래의 좋아요 버튼을 눌러 알려주세요.
00:09:28저희 채널 구독도 잊지 마시고요.
00:09:33BetterStack의 Andrus였습니다. 다음 영상에서 뵙겠습니다.

핵심 요약

Cactus Compute에서 개발한 14메가바이트 크기의 Needle 2 모델은 잉그램과 하다마르 변환을 적용하여 10달러짜리 ESP32-S3 칩에서 2비트 정밀도로 도구 호출 추론을 완벽히 수행한다.

하이라이트

  • Needl 2는 14메가바이트 용량과 4,500만 개의 매개변수를 가진 아전틱 LLM 모델이다.

  • 라즈베리 파이 5 보드에서 초당 최대 500개의 토큰을 처리할 수 있다.

  • 지식의 상당 부분을 해시된 조회 테이블인 잉그램으로 옮겨 연산 비용을 줄였다.

  • 가중치당 2비트 정밀도로 구동되며 사후 압축이 아닌 2비트 전용으로 학습되었다.

  • ESP32-S3 마이크로컨트롤러에서 약 10달러짜리 칩 비용으로 오프라인 구동된다.

타임라인

Needl 2 모델 개요 및 용도

  • Needl 2는 14메가바이트 용량과 4,500만 개 매개변수를 가진 엣지 디바이스용 LLM이다.
  • 일반적인 챗봇이 아니라 자연어 프롬프트를 기반으로 도구 호출을 수행하는 디스패처로 작동한다.
  • 일반 상식이나 대화 데이터로 학습되지 않아 디바이스 제어 명령 처리에 특화되어 있다.

Cactus Compute사에서 개발하고 Apache 2.0 라이선스로 공개된 Needle 2 모델은 베어메탈 ESP32 S3를 포함한 모든 엣지 디바이스에서 실행될 수 있다. 라즈베리 파이 5 같은 보드에서는 초당 최대 500개의 토큰을 처리하여 로보틱스 프로젝트의 구동 장치로 활용할 수 있다. 다만 챗봇으로 작동하도록 설계되지 않았기 때문에 프랑스의 수도가 어디냐 같은 일반 상식 질문에는 대답하지 못한다.

아키텍처 설계와 양자화 기술

  • 모델의 지식을 해시된 조회 테이블인 잉그램으로 옮겨 직접 메모리 행을 가져다 쓴다.
  • MLP 레이어를 하다마르 변환 구조로 교체해 학습 가능한 매개변수 없이 혼합 단계를 처리한다.
  • 사후 압축 방식이 아니라 애초에 가중치당 2비트로 학습되어 성능 저하를 방지한다.

소형화 과정에서 성능 저하를 막기 위해 아키텍처 요소를 처음부터 다시 설계했다. 토큰마다 수많은 가중치를 행렬 곱셈에 통과시키는 대신 해시된 조회 테이블을 활용한다. 또한 학습에 많은 매개변수를 소모하는 혼합 단계는 고정된 수학적 연산인 하다마르 변환으로 대체했다. 여기에 2비트 자체 학습 양자화를 결합하여 소형 모델이면서도 크기가 5배 큰 모델들과 대등하게 경쟁할 수 있는 기반을 마련했다.

ESP32-S3 기반 실제 추론 테스트

  • ESP32-S3 보드 위에서 실행되는 커스텀 추론 엔진을 통해 도구 호출을 테스트한다.
  • 빨간색 불을 3초 동안 깜빡이라는 명령을 정확히 식별하고 도구 호출을 실행한다.
  • 문맥에 맞지 않는 질문이나 다양한 색상 및 시간 요청에 대해 적절한 신뢰도 점수와 함께 결과를 도출한다.

ESP32-S3 보드에서 실행되는 커스텀 추론 엔진을 통해 터미널의 TUI 응용 프로그램으로 자연어 명령을 테스트한다. 빨간색 불을 3초 동안 깜빡이라는 요청은 정확한 매개변수를 추출해 실행을 완료하며, 프랑스의 수도를 묻는 어긋난 질문에는 도구 호출을 비워두어 지능적인 판단을 보여준다. 대다수의 도구 호출은 초당 평균 1.86토큰의 속도로 약 40초가 소요되며, 10달러짜리 칩 위에서 오프라인으로 완전히 구동된다.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기