12년 된 라즈베리 파이에서 로컬 LLM을 돌려봤습니다 (이게 되네요!)

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

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였고, 다음 영상에서 뵙겠습니다.

Key Takeaway

700MHz 프로세서와 512MB RAM을 가진 1세대 라즈베리 파이에서도 dockcross 교차 컴파일과 no-mmap 플래그를 적용하면 9천만 개 파라미터의 Falcon H1 Tiny 4비트 로컬 LLM을 성공적으로 구동할 수 있다.

Highlights

  • 2014년에 출시된 1세대 라즈베리 파이는 700MHz 싱글 코어 프로세서와 512MB RAM을 탑재하고 있다.

  • Falcon H1 Tiny는 파라미터가 9천만 개에 불과하며 IBM Granite 4와 동일한 하이브리드 트랜스포머 및 맘바(Mamba) 아키텍처를 사용한다.

  • 구형 ARMv6 칩은 복잡한 비트 조작이 필요한 최신 IQ(중요도 양자화) 방식을 지원하지 못하므로 레거시 Q4 양자화 모델을 사용해야 한다.

  • 라즈베리 파이에서 직접 llama.cpp를 컴파일하면 메모리 부족으로 다운되거나 완료까지 약 18시간이 소요되므로 노트북에서 dockcross를 이용해 교차 컴파일해야 한다.

  • RAM 공간을 1MB라도 확보하기 위해 데스크톱 인터페이스가 없는 32비트 라즈베리 파이 OS 라이트를 사용하고 추론 시 no-mmap 플래그를 설정하여 모델을 힙에 직접 로드한다.

  • 2비트 양자화 모델은 토큰당 약 3초가 걸리며 논리가 완전히 붕괴되지만, 4비트 및 8비트 모델은 정상적인 문장으로 답변을 출력한다.

  • 9천만 개의 파라미터 제한으로 인해 벨기에의 수도는 정확히 맞추지만 알바니아의 수도는 틀리는 등 제한된 지식만을 보유하고 있다.

Timeline

초소형 언어 모델 Falcon H1 Tiny의 특징과 구조

  • 1세대 라즈베리 파이는 700MHz 싱글 코어 프로세서와 512MB RAM이라는 극도로 제한된 하드웨어 스펙을 갖추고 있다.
  • Falcon H1 Tiny는 언어 모델링의 하한선을 탐구하기 위해 개발된 9천만 개 파라미터 규모의 초소형 모델이다.
  • 이 모델은 IBM Granite 4 모델과 동일한 하이브리드 트랜스포머와 맘바(Mamba) 아키텍처를 기반으로 작동한다.

현대적 기준에서 계산기 성능에 불과한 12년 된 1세대 라즈베리 파이 하드웨어에서 로컬 LLM 구동을 시도한다. 아부다비 기술혁신연구소(TII)가 개발한 Falcon H1 Tiny는 극한의 경량화를 달성한 모델이다. 이 모델은 특별한 기술적 마법 대신 이미 검증된 효율적인 하이브리드 구조를 채택하여 크기를 줄였다.

구형 하드웨어를 위한 레거시 양자화 방식 선택

  • 초소형 모델을 하드웨어 메모리에 올리기 위해서는 가중치를 압축하는 양자화 과정이 필수적이다.
  • 최신 IQ(중요도 양자화) 방식은 복잡한 비트 조작을 요구하므로 라즈베리 파이의 구형 ARMv6 칩에서 구동할 수 없다.
  • 구형 프로세서가 멈추지 않고 처리할 수 있는 올드스쿨 방식인 레거시 Q4 양자화 모델이 가장 적합하다.

Falcon 모델은 2비트, 4비트, 8비트 버전으로 제공된다. 최신 양자화 기술은 효율적인 작동을 위해 최신 CPU 명령어를 필요로 하므로 빈티지 하드웨어에는 적용이 불가능하다. 반면 레거시 Q4 방식은 논리 구조를 유지하면서 메가바이트당 최고의 지능 효율을 제공하여 구형 프로세서의 연산 한계를 충족한다.

교차 컴파일을 이용한 ARMv6 전용 바이너리 빌드

  • 1세대 라즈베리 파이는 현대 AI 라이브러리가 요구하는 NEON 명령어가 없는 ARMv6 아키텍처를 사용한다.
  • 파이 보드에서 직접 llama.cpp를 빌드하면 메모리 부족으로 실패하거나 최소 18시간 이상 소요된다.
  • 성능이 우수한 노트북에서 dockcross 툴체인을 사용해 ARMv6 전용 바이너리를 교차 컴파일해야 한다.

구형 아키텍처 환경에서 추론을 실행하려면 llama.cpp를 직접 컴파일해야 하는 기술적 제약이 존재한다. 파이 보드의 리소스 부족 문제를 해결하기 위해 연산 속도가 빠른 외부 PC를 활용한다. VFP 수학 유닛이 활성화된 ARMv6 명령어 세트를 명확하게 타겟팅하여 빌드한 결과물을 SSH를 통해 파이로 복사하는 방식을 취한다.

메모리 최적화를 위한 OS 설치 및 빌드 설정

  • 데스크톱 인터페이스가 없는 라즈베리 파이 OS 라이트 32비트 버전을 설치하여 시스템 RAM 점유율을 최소화한다.
  • 바이너리 빌드 시 공유 라이브러리, NEON 수학 명령어, OpenMP 옵션을 모두 비활성화한다.
  • 작성된 커스텀 바이너리와 Falcon의 2비트, 4비트, 8비트 모델 파일들을 SCP를 통해 파이로 전송한다.

512MB RAM 환경에서는 단 1MB의 메모리도 아쉽기 때문에 가장 가벼운 운영체제 선택이 강제된다. 느린 로컬 터미널 대신 원격 관리가 가능하도록 Wi-Fi와 SSH를 미리 구성한다. 교차 컴파일 과정에서는 단일 휴대용 바이너리를 만들기 위해 현대적인 편의 기능을 본질적으로 모두 제거하며, 이 정밀한 설정을 통해 2분 만에 빌드를 완료한다.

비트별 추론 테스트 결과와 하드웨어 한계 검증

  • 메모리 맵핑을 끄는 no-mmap 플래그를 설정하여 모델을 힙(heap) 공간에 직접 로드해야 안정적인 구동이 가능하다.
  • 2비트 양자화 모델은 토큰당 3초가 걸리며 언어 논리가 완전히 붕괴되어 가치 없는 답변을 출력한다.
  • 4비트 및 8비트 모델은 정상적인 문장을 출력하지만 9천만 개라는 파라미터 제약으로 인해 정보의 정확성에 한계를 보인다.

1개의 스레드와 128토큰의 작은 컨텍스트 크기를 지정하여 첫 번째 추론을 시작한다. 32비트 시스템에서 mmap은 연속된 주소 공간을 찾지 못해 실패할 수 있으므로 이를 차단하는 것이 핵심이다. 테스트 결과 4비트부터 논리적인 답변이 가능해지며, 유명한 국가의 수도는 맞추지만 덜 알려진 정보는 틀리는 등 모델 크기에 비례하는 지식 한계가 명확히 드러난다.

Community Posts

View all posts