Transcript
00:00:00이것은 2014년에 출시된 1세대 라즈베리 파이입니다.
00:00:05700MHz 싱글 코어 프로세서와 512MB RAM을 탑재하고 있죠.
00:00:12현대적 기준으로 보면 이건 기본적으로 계산기나 다름없습니다.
00:00:16하지만 오늘 우리는 이 12년 된 하드웨어를
00:00:21로컬에서 대규모 언어 모델을 구동해 한계치까지 밀어붙여 볼 것입니다.
00:00:26이 영상에서는 라즈베리 파이에서 실행할 수 있는 아주 작은 모델을 소개하고,
00:00:30성능은 어떤지, 그리고 직접 따라 해보실 수 있도록 필요한 모든 의존성
00:00:35설치 방법까지 보여드리겠습니다.
00:00:37아주 재미있을 테니 바로 시작해 보죠.
00:00:40솔직히 이 아키텍처에 돌아갈 만큼
00:00:47가벼운 모델을 찾을 수 있을 거라곤 생각지 못했습니다.
00:00:49하지만 조사 끝에 후보를 하나 찾아냈습니다.
00:00:52바로 Falcon H1 Tiny입니다.
00:00:54파라미터가 9천만 개에 불과한 믿기지 않을 정도로 컴팩트한 모델이죠.
00:00:59아부다비의 기술 혁신 연구소(TII)에서
00:01:03언어 모델링의 극한의 하한선을 탐구하기 위해 특별히 개발했습니다.
00:01:08그런데 어떻게 모델을 그렇게 작게 만들 수 있었을까요?
00:01:10배후에 어떤 기술적인 마법 같은 비법이라도 있는 걸까요?
00:01:13뭐, 딱히 그렇지는 않습니다.
00:01:14기본적으로 IBM이 초소형 Granite 4 모델에 사용했던 것과 동일한
00:01:19하이브리드 트랜스포머와 맘바(Mamba) 아키텍처를 사용하고 있습니다.
00:01:24관심 있으시다면 제가 예전에 올린 관련 영상도 확인해 보세요.
00:01:27하지만 중요한 건 이겁니다.
00:01:28이 모델을 메모리에 성공적으로 구동하려면 양자화에 대해 이야기해야 합니다.
00:01:33현재 Falcon 모델은 2비트, 4비트, 8비트 버전으로 제공됩니다.
00:01:38극도로 가벼운 IQ 즉, 중요도 양자화(Importance Quantization)를 써보고 싶겠지만,
00:01:43함정이 있습니다.
00:01:45이런 최신 방식들은 복잡한 비트 조작에 의존하는데
00:01:49효율적으로 작동하려면 최신 CPU 명령어가 필요합니다.
00:01:52우리 라즈베리 파이의 빈티지한 ARMv6 칩에서는 감당할 수 없죠.
00:01:57따라서 대신 우리 상황에 가장 적합한
00:02:01올드스쿨 방식인 Q4 모델을 선택해야 합니다.
00:02:04이것은 파이의 프로세서가 멈추지 않고
00:02:07실제로 처리할 수 있는 중간 크기의 레거시 양자화 방식입니다.
00:02:11논리 구조를 유지하면서 메가바이트당 최고의 지능 효율을 제공하죠.
00:02:17하지만 1세대 라즈베리 파이에서 이 모델을 돌리는 건 결코 쉬운 일이 아닙니다.
00:02:22파이는 ARMv6 아키텍처를 사용하기 때문에
00:02:26거의 모든 AI 라이브러리가 필요로 하는 현대적인 NEON 명령어가 없습니다.
00:02:31하지만 다행히 추론에 사용할 수 있는 llama.cpp가 있습니다.
00:02:36다만 이를 위해 바이너리를 우리 ARMv6 전용으로 직접 컴파일해야 합니다.
00:02:42파이에서 직접 컴파일을 시도한다면
00:02:45컴파일이 완료되는 데 아마 18시간은 걸릴 겁니다.
00:02:49메모리 부족 오류로 먼저 뻗지 않는다는 가정하에 말이죠.
00:02:53그래서 그 과정을 건너뛰려면 좀 더 창의적이어야 합니다.
00:02:56dockcross를 사용해 노트북에서 미리 바이너리를 교차 컴파일(cross-compile)해야 합니다.
00:03:02VFP 수학 유닛이 활성화된 ARMv6 명령어 세트를 명확하게 타겟팅하여 컴파일한 뒤
00:03:08SSH를 통해 복사하면 바로 추론을 시작할 수 있습니다.
00:03:13이제 정확히 그 과정을 진행해 보겠습니다.
00:03:15먼저 라즈베리 파이 이미저를 사용해 파이에 가장 가벼운 OS를 설치해야 합니다.
00:03:22RAM이 512MB밖에 안 되는 보드에서는 단 1MB도 아쉽기 때문이죠.
00:03:28그래서 라즈베리 파이 OS 라이트 32비트 버전을 선택하겠습니다.
00:03:32데스크톱 인터페이스가 없어 표준 OS보다 메모리를 훨씬 적게 사용하므로
00:03:38거의 모든 RAM을 모델 구동에 활용할 수 있게 해줍니다.
00:03:44또 하나 중요한 점은 고급 설정에서
00:03:47Wi-Fi를 미리 구성하고 SSH를 활성화해야 한다는 것입니다.
00:03:51이런 구형 보드들은 원격으로 관리하는 것이 훨씬 편하기 때문이죠.
00:03:55느려터진 로컬 터미널과 씨름할 필요가 없으니까요.
00:03:58이제 파이가 부팅되고 SSH로 접속했다면 ARMv6 문제를 해결해야 합니다.
00:04:05여기서 직접 llama.cpp를 컴파일하려 한다면
00:04:08파이는 헤더 파일을 읽는 데만 꼬박 하루 반을 보낼 겁니다.
00:04:13그래서 대신 연산 속도가 빠른 일반 노트북에서 작업해 시간을 아끼겠습니다.
00:04:18llama.cpp 소스 코드를 클론하고 라즈베리 파이에서 사용할
00:04:23빌드 결과물을 저장할 전용 디렉터리를 만듭니다.
00:04:28자, 여기서 또 다른 문제가 있습니다.
00:04:29제 맥은 32비트 ARMv6가 아닌 64비트 버전인 ARMv8을 사용합니다.
00:04:37두 기기의 명령어 세트가 다르죠.
00:04:40따라서 파이 전용 바이너리를 컴파일하려면 dockcross를 사용해야 합니다.
00:04:45제 맥에서 실행되지만 파이의 구형 아키텍처에 맞는
00:04:48바이너리를 생성해 주는 교차 컴파일 툴체인입니다.
00:04:53다음으로 빌드 설정을 해야 합니다.
00:04:55이 부분이 아주 정밀해야 하는 단계입니다.
00:04:58매우 구체적인 플래그들을 전달해야 하는데요.
00:05:00우선 단일 휴대용 바이너리를 만들기 위해 공유 라이브러리(shared libs) 옵션을 끕니다.
00:05:05그리고 우리 파이에는 최신 수학 명령어가 없으므로 NEON 옵션도 꺼야 합니다.
00:05:10메모리 점유율을 최소화하기 위해 OpenMP도 비활성화합니다.
00:05:15구형 파이 보드와의 호환성을 보장하기 위해
00:05:18모든 현대적 편의 기능을 본질적으로 제거하는 과정입니다.
00:05:22이제 빌드를 누르면 약 2분 만에 파이 보드로 복사할 준비가 된
00:05:26최적화된 llama 컴파일 바이너리가 완성됩니다.
00:05:31이제 SSH를 통해 네트워크로 파이에 직접 연결하고
00:05:35새 디렉터리를 만든 다음 SCP를 이용해 커스텀 빌드된 바이너리를 복사합니다.
00:05:42마지막으로 한 가지만 더 하면 됩니다.
00:05:44순차적으로 테스트하기 위해 Falcon의 2비트, 4비트, 8비트 레거시 양자화 모델을
00:05:50다운로드해 두겠습니다.
00:05:53그리고 네트워크를 통해 파이의 models 폴더에 하나씩 복사해 넣습니다.
00:05:58이제 재미있는 부분입니다.
00:05:59파이로 넘어가서 첫 번째 추론 테스트를 실행해 봅시다.
00:06:03가장 압축률이 높은 2비트 양자화 모델부터 시작하겠습니다.
00:06:07여기서 이 긴 명령어를 실행해야 하는데요.
00:06:10기본적으로 “Hello, how are you?”라는 간단한 프롬프트를 주고
00:06:13출력값을 32토큰으로 제한했습니다.
00:06:18우리가 가진 건 하나뿐이라 스레드도 정확히 1개로 지정합니다.
00:06:22RAM을 단 1바이트라도 아끼기 위해 컨텍스트 크기도 128토큰으로 아주 작게 유지합니다.
00:06:29하지만 가장 중요한 플래그는 no-mmap입니다.
00:06:32보통 llama.cpp는 메모리 맵핑을 써서 모델을 로드하는데, 고성능 GPU엔 좋지만
00:06:38우리 파이 보드엔 악몽과 같습니다.
00:06:41512MB RAM밖에 없는 32비트 시스템에서
00:06:45mmap은 연속된 주소 공간 블록을 찾지 못하면 실패할 수 있습니다.
00:06:50그래서 이 기능을 꺼서 모델이 힙(heap)에 직접 로드되도록 강제함으로써
00:06:55한정된 메모리를 훨씬 더 안정적으로 제어할 수 있습니다.
00:06:58자, 이제 명령어를 실행해 보죠.
00:07:00나왔네요, 우리의 첫 번째 토큰들입니다.
00:07:03보시다시피 2비트 버전은 많이 힘겨워하고 있습니다.
00:07:08우선 토큰 하나를 처리하는 데 대략 3초 정도씩 걸리는데
00:07:14구형 라즈베리 파이 보드에서는 예상했던 일입니다.
00:07:18하지만 더 중요한 건 답변이 완전 헛소리라는 점입니다.
00:07:21파라미터가 9천만 개인 모델에서 가중치를 너무 압축하다 보니
00:07:25언어적 논리가 기본적으로 붕괴된 것이죠.
00:07:28맥락이 거의 없긴 하지만 기술적으로는 작동하고 있습니다.
00:07:32그럼 이제 4비트 모델로 바꾸면 어떻게 되는지 볼까요?
00:07:35보세요, 이제는 제대로 된 인사말이 돌아옵니다.
00:07:40이 정도면 성공이네요.
00:07:42이제 실제 AI 모델을 파이에서 로컬로 구동하고
00:07:47우리 프롬프트에 논리적으로 응답하게 만든 겁니다.
00:07:49만세!
00:07:50이제 조금 더 밀어붙여 봅시다.
00:07:53파이가 8비트 모델도 감당할 수 있는지 확인해 보죠.
00:07:56이번에는 좀 더 지적인 질문을 해보겠습니다.
00:07:59알바니아의 수도가 어디인지 물어보죠.
00:08:02음, 틀렸네요. 알바니아의 수도는 티라나인데
00:08:08명백히 사실과 다른 답을 내놓았습니다.
00:08:10하지만 벨기에의 수도를 물어보면 정확하게 대답합니다.
00:08:15여기서 아주 흥미로운 점을 알 수 있습니다.
00:08:179천만 개의 파라미터로 압축한 것에는 그만한 대가가 따르는 것 같습니다.
00:08:22더 크고 유명한 국가에 대해서는 정확한 지식을 갖고 있겠지만,
00:08:26덜 알려진 국가나 주제에 대한 지식은 부족할 수밖에 없죠.
00:08:31그게 지식의 본질이기도 합니다.
00:08:339천만 개의 파라미터 안에 담을 수 있는 지식의 양은 한정되어 있으니까요.
00:08:38그럼에도 불구하고 결과는 정말 멋집니다.
00:08:41네, 12년 된 라즈베리 파이에서도 돌아갈 만큼 작고
00:08:46가벼운 AI 모델이 실제로 존재한다는 사실이 확인되었습니다.
00:08:50빠른가요?
00:08:51절대 아니죠.
00:08:52정확한가요?
00:08:53그렇지 않을 수도 있습니다.
00:08:54실무에서 써야 할까요?
00:08:55아마 아닐 겁니다.
00:08:57아주 아주 아주 느린 로봇을 만들고 싶은 게 아니라면요.
00:09:02하지만 가장 중요한 것은 이제 이론적으로 가능하다는 것을 안다는 점입니다.
00:09:06기본적으로 이번 영상에서 제가 증명하고 싶었던 건 이게 전부입니다.
00:09:09솔직히 이번 실험은 정말 즐거웠습니다.
00:09:13자, 여러분 보셨죠.
00:09:14이게 바로 Falcon H1 Tiny 모델들입니다.
00:09:17아마 현재 나온 AI 모델 중 가장 작을 거예요.
00:09:20그리고 실제로 1세대 라즈베리 파이에서 돌아갈 만큼 작다는 걸 알게 되었죠.
00:09:25정말 멋진 일입니다.
00:09:27이 사실이 얼마나 멋진지 계속 감탄하게 되네요.
00:09:30실제 활용도는 낮을지 몰라도 여전히 근사합니다.
00:09:35여러분도 재미있는 생각이나 의견,
00:09:37혹은 보신 내용에 대한 소감이 있다면 알려주세요.
00:09:40아래 댓글 섹션에 남겨주시기 바랍니다.
00:09:42이런 종류의 기술적인 분석이 마음에 드셨다면,
00:09:45영상 아래의 '좋아요' 버튼을 꾹 눌러서 표현해 주세요.
00:09:49저희 채널 구독하시는 것도 잊지 마시고요.
00:09:51지금까지 Better Stack의 Andris였고, 다음 영상에서 뵙겠습니다.