스크립트
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였습니다. 다음 영상에서 뵙겠습니다.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기