본문으로 건너뛰기
피드

2.78조 파라미터 Kimi K3를 맥북에서 돌린 C 추론 엔진 WASTE

ai-ml 약 12분
vote
0
댓글
북마크

WASTE는 2.78조 파라미터짜리 Kimi K3를 64GB 맥북 프로에서 돌리기 위해 만든 C 기반 임베디드 추론 엔진임. 모델 전체를 램에 올리지 않고, 반복되는 trunk만 메모리에 두고 전문가(expert) 가중치는 NVMe에서 스트리밍해서 0.45-0.62 토큰/초를 냈다고 함.

  • 1

    Kimi K3 2.78조 파라미터 모델을 982GiB 컨테이너로 변환해 소비자용 노트북에서 실행함

  • 2

    최소 실행 램은 29.05GiB지만 실사용 기준은 64GB 머신의 46GB 예산이라고 설명함

  • 3

    토큰당 expert 가중치 17GB를 읽고, internal NVMe 12.78GB/s 대역폭에 거의 기대서 동작함

  • 4

    router lookahead로 캐시 히트율을 14%에서 38%로 끌어올렸고, 전체 바이트 수는 늘리지 않았음

  • 5

    런타임은 libc와 pthreads 외 의존성이 없고, OpenAI 호환 HTTP 서버도 포함됨

2.78조 파라미터 모델을 노트북에서 돌린다는 말

  • WASTE는 Kimi K3 2.78조 파라미터 모델을 소비자용 노트북에서 돌리기 위해 만든 C 추론 엔진임

    • 런타임 의존성은 libc와 pthreads 정도고, BLAS·CUDA·ONNX·Python 없이 돌아감
    • 현재 데모는 64GB 맥북 프로에서 Kimi K3 전체 open-weights 모델을 실행한 것
    • 속도는 0.45-0.62 토큰/초라 빠르진 않음. 그래도 2.78조 파라미터 모델을 로컬에서 실제로 굴렸다는 게 포인트임
  • 모델 크기부터 정신이 아득함

    • Kimi K3는 원본 공개 가중치가 1.42TB이고, WASTE 컨테이너로 변환하면 982GiB가 됨
    • 디스크 제조사식 표기로는 약 1.05TB라서, 사실상 1TB급 내부 저장소를 모델 하나에 바치는 셈임
    • 최소 램 요구치는 4K 컨텍스트 기준 29.05GiB지만, 글쓴이는 32GB 머신은 페이지 스와핑 때문에 실사용으로 보지 말고 64GB를 현실적인 요구사항으로 봐야 한다고 함

중요

> 핵심 숫자는 2.78조 파라미터, 982GiB 컨테이너, 최소 29.05GiB 램, 64GB 맥북 프로에서 0.45-0.62 토큰/초임. “빠른 로컬 LLM”이 아니라 “이 크기의 모델도 로컬 실행 가능권에 들어왔다”는 증명에 가까움.

왜 전체 모델을 램에 안 올려도 되나

  • Kimi K3는 MoE(Mixture of Experts) 모델이라 매 토큰마다 전체 가중치를 다 쓰지 않음

    • 글에서는 토큰당 약 4%만 활성화된다고 설명함
    • 그래서 WASTE는 반복 사용되는 trunk는 메모리에 상주시키고, expert 가중치는 디스크에서 필요한 것만 읽음
    • “안 쓰는 가중치는 램에 있을 필요가 없고, 제때 도착하기만 하면 된다”는 설계임
  • 토큰 하나를 만들 때 expert 가중치만 17GB를 읽음

    • K3는 92개 layer에서 각각 16개 expert를 건드림
    • 내부 SSD는 12.78GB/s로 측정됐고, 이 환경에서는 모델이 스트리밍됨
    • 외장 USB 인클로저는 0.94GB/s라 같은 토큰이 13초 걸린다고 함. 여기서 저장장치는 세부사항이 아니라 생명줄임
  • 컨테이너 포맷도 I/O 중심으로 설계됨

    • 각 expert record는 4KiB 정렬이고, gate/up/down 행렬이 붙어 있어서 expert 하나가 정확히 pread 한 번으로 읽힘
    • macOS에서는 F_NOCACHE, 리눅스에서는 O_DIRECT, 윈도우에서는 FILE_FLAG_NO_BUFFERING으로 페이지 캐시를 우회함
    • 페이지 캐시에 기대면 작은 모델에서는 좋아 보이지만, 982GB 모델에서는 측정값이 현실을 속인다고 판단한 것

속도는 어디서 나왔나

  • 제일 큰 최적화는 “덜 읽기”가 아니라 “언제 읽을지”였음

    • expert 읽기와 계산을 겹치게 만든 것만으로 K3에서 약 1.6배 이득을 봤다고 함
    • 각 layer의 router가 expert 16개를 고르면, 별도 스레드가 읽기를 시작하고 계산은 도착한 expert부터 소비함
    • 같은 일을 하되 기다리는 시간을 줄인 구조라 cache 통계와 logits는 그대로 유지됨
  • Router lookahead도 꽤 영리함

    • 다음 layer의 실제 router 입력은 아직 없지만, 현재 layer의 hidden state로 다음 layer router를 한 residual 일찍 돌려봄
    • 이 추측의 rank 1 정확도는 92%, 처음 6개 기준으로는 81%라고 함
    • 이 방식으로 demand hit rate가 14%에서 38%로 올라갔고, 총 읽는 바이트 수는 늘지 않음
sequenceDiagram
    participant 현재계층 as 현재 계층
    participant 라우터 as 다음 계층 라우터
    participant 캐시 as Expert 캐시
    participant 저장소 as 내부 NVMe
    participant 계산 as MoE 계산
    현재계층->>라우터: 이전 hidden state로 expert 미리 추측
    라우터->>저장소: 다음 expert 읽기 시작
    저장소->>캐시: expert record 적재
    현재계층->>계산: 현재 계층 계산 진행
    계산->>라우터: 실제 hidden state 생성
    라우터->>캐시: 실제 expert 요청
    캐시->>계산: 이미 읽힌 expert 즉시 사용
  • 메모리 예산은 더 많이 잡는다고 무조건 좋아지지 않았음
    • 32GB 예산에서는 expert cache가 3.32GB이고 hit rate는 0%, decode는 0.50 tok/s
    • 46GB 예산에서는 expert cache가 17.32GB이고 hit rate는 17%, decode는 0.53-0.55 tok/s
    • 52GB 예산부터는 0.04-0.15 tok/s처럼 재현성이 깨지고, 58GB는 0.02-0.03 tok/s로 더 망가짐
    • 이유는 엔진 예산 안에서는 맞아도 OS가 메모리를 회수하기 시작하면 “캐시 hit”가 page fault가 되어버리기 때문임

⚠️주의

> 64GB 머신에서 예산을 크게 잡는다고 더 빨라지는 구조가 아님. 46GB 근처가 실사용 가능한 창이고, 52GB 이상은 OS 페이징 때문에 hit rate가 올라가도 속도는 박살남.

정확성 검증과 양자화

  • 글쓴이는 “느리지만 맞는다”를 꽤 집요하게 증명하려고 함

    • 모든 layer를 PyTorch reference와 검증했고, 최종 logits 차이는 3.6e-06이라고 밝힘
    • vision tower도 자체 oracle과 2.3e-06 차이로 맞췄다고 함
    • 컨테이너 record header는 읽을 때마다 magic, expert id, offset 범위를 확인해서 잘못된 바이트로 답하지 않게 함
  • expert 가중치는 residual vector quantization으로 3.00비트/weight까지 압축함

    • 8차원 벡터마다 256-entry codebook 3단계를 쓰는 방식임
    • 행렬을 완전히 materialize하지 않고, 토큰마다 codebook entry별 partial dot product table을 만들어 계산함
    • trunk는 4비트와 8비트로 남김. 3비트 trunk도 실험했지만 출력이 무너졌다고 함
  • checksum은 현실적인 타협을 택함

    • expert payload에는 crc32가 있지만 기본값으로는 검사하지 않음
    • --verify를 켜면 Kimi-Linear에서는 약 5%, K3에서는 약 1% throughput 비용이 든다고 함
    • 복사·다운로드한 컨테이너라면 한 번은 켜서 확인하고, 직접 변환해서 계속 읽는 컨테이너라면 매 토큰마다 켜둘 필요는 없다는 입장임

Kimi-Linear 48B와 서버 모드

  • 같은 엔진은 더 작은 Kimi-Linear 48B도 돌림

    • 컨테이너는 19GB, 최소 램은 1.87GB
    • 8GB 예산에서 10.7 tok/s, cache hit rate는 78%라고 함
    • 글쓴이는 WASTE를 처음 시험하려면 K3 말고 이쪽이 좋은 경로라고 설명함
  • 라이브러리로도 넣을 수 있게 설계됨

    • public API는 src/waste.h의 26개 함수로, 모델 열기·생성·세션 저장·닫기 같은 기능을 제공함
    • CLI도 이 public API의 클라이언트라서, CLI가 하는 일은 임베딩 호스트도 할 수 있다는 구조임
    • OpenAI 호환 HTTP 서버도 있고 /v1/chat/completions, /v1/completions, /v1/models, /health를 지원함
  • K3의 멀티모달도 지원함

    • vision tower는 401M ViT, 27 layers, patch 14 구조라고 함
    • 1024-patch 이미지를 인코딩하는 데 15.7초가 걸리고, 이후 생성에서는 이미지 embedding이 일반 토큰처럼 92개 MoE layer를 통과함
    • 896x896 이미지는 기본 설정에서 256 positions를 차지하므로, 이미지는 “한 토큰짜리 첨부”가 아니라 같은 길이의 텍스트처럼 비용이 듦

이 프로젝트가 재미있는 이유

  • WASTE는 “클라우드 모델을 로컬에서 더 빠르게”가 아니라 “클라우드로 못 보내는 데이터를 로컬에서 처리할 수 있나”를 겨냥함

    • 네트워크 없음, per-token 과금 없음, 데이터가 머신 밖으로 나가지 않음
    • 민감한 데이터라 API로 못 보내는 상황에서는 느려도 로컬 실행 가능성이 중요해짐
    • 반 토큰/초는 답답하지만, feasibility가 아니라 engineering problem으로 바뀐 게 핵심임
  • 문서가 실패한 최적화까지 남겨둔 점도 좋음

    • 3비트 trunk, GPU offload, per-expert bit allocation, index-layout blocking 같은 시도가 숫자로 반박됐다고 함
    • Metal backend도 정확하긴 하지만 22% 느려서 기본 비활성화 상태임
    • CPU path가 이미 메모리 대역폭 근처에서 돌고 있고, 수백 개의 작은 의존 matvec은 accelerator에 최악의 모양이라는 결론임

기술 맥락

  • WASTE의 핵심 선택은 모델 전체를 램에 올리지 않고 expert를 디스크에서 스트리밍하는 거예요. Kimi K3가 2.78조 파라미터라서 일반적인 로컬 추론처럼 “가중치를 메모리에 올리고 시작”이 애초에 불가능하거든요.

  • 이 방식이 가능한 이유는 Kimi K3가 MoE 구조이기 때문이에요. 매 토큰마다 전체 모델을 쓰는 게 아니라 일부 expert만 활성화되니까, 안 쓰는 expert는 램에 없어도 되고 필요한 순간 NVMe에서 읽어오면 돼요.

  • 성능 병목은 연산보다 I/O에 가까워요. 토큰 하나에 expert 데이터 17GB를 읽어야 하니, 외장 SSD 0.94GB/s와 내부 NVMe 12.78GB/s의 차이가 그대로 체감 속도로 이어져요. 그래서 이 프로젝트에서는 저장장치가 사실상 가속기 역할을 해요.

  • Router lookahead는 꽤 실용적인 트릭이에요. 다음 layer의 expert를 미리 정확히 확정하는 건 불가능하지만, 한 단계 이른 hidden state로 추측해서 읽기를 시작하면 디스크 대기 시간을 숨길 수 있어요. 실제 router 결정은 그대로 쓰기 때문에 결과값은 안 바뀌고, 바뀌는 건 바이트가 움직이는 타이밍이에요.

  • 메모리 예산을 무작정 키우지 않는 것도 중요한 설계예요. OS가 페이지를 회수하기 시작하면 엔진 입장에서는 cache hit인데 실제로는 page fault가 나서 더 느려져요. 그래서 WASTE는 64GB 머신에서 46GB 근처처럼 “OS가 감당 가능한 선”을 찾는 쪽을 택해요.

이 프로젝트의 재미는 ‘빠르다’가 아니라 ‘불가능해 보이던 실행 경로를 엔지니어링 문제로 바꿨다’는 데 있음. 반 토큰/초는 느리지만, 2.78조 파라미터 모델을 네트워크 없이 책상 위 하드웨어에서 돌린다는 건 온디바이스 AI의 경계선을 꽤 세게 밀어낸 사례임.

댓글

댓글

댓글을 불러오는 중...

ai-ml

오픈AI, 미해결 수학·이론컴퓨터과학 문제 10개를 AI로 풀었다고 공개

오픈AI가 내부 차세대 모델 아스트라로 수학과 이론컴퓨터과학의 장기 미해결 문제 10개에 대한 새 결과를 만들었다고 공개했음. 고차원 구 채우기, 코드 이론, 비소픽 군, 산술 회로 복잡도, 양자 복잡도, 격자 암호, 램지 수 등 꽤 빡센 분야가 포함됐고, 각 증명은 사람이 논문 형태로 정리한 뒤 Lean 인증서로 형식화됐다고 함.

ai-ml

엘지, 7500억 파라미터급 케이 엑사원 2.0 오픈소스로 공개

엘지 AI연구원이 7500억 파라미터 규모의 케이 엑사원 2.0을 허깅페이스에 공개했다. 이전 2360억 파라미터 모델보다 3배 이상 커졌고, 장문 이해 평가에서 중국 모델을 크게 앞섰다는 수치가 제시됐다.

ai-ml

구글 어스 AI 편집 기능, 가짜 위성사진 논란으로 하루 만에 철회

구글이 구글 어스에 AI 이미지 생성 도구 나노 바나나 2를 붙였다가 허위정보 악용 우려로 24시간도 안 돼 기능을 롤백했어. 실제 지형과 건물 위에 전쟁, 폭발, 군사시설 같은 가짜 장면을 그럴듯하게 만들 수 있다는 점이 OSINT 전문가들의 강한 반발을 불렀어.

ai-ml

국가가 AI 경쟁을 이유로 개인정보 원칙을 흔들 때 생기는 문제

이 글은 소셜미디어의 개인정보 제공, 기업의 데이터 수집, 국가 주도의 AI 정책을 하나의 흐름으로 묶어 비판한다. 특히 피지컬 인공지능 특별법안처럼 영상·음성 정보를 정보주체 동의 없이 수집할 수 있게 하는 특례가 개인의 존엄과 자기결정권을 AI 경쟁력보다 뒤로 미루는 신호라고 본다.

ai-ml

오픈AI, 멀티 에이전트 모델 ‘아스트라’ 비공개 시연했다는 보도 나옴

오픈AI가 차세대 모델 라인업으로 알려진 ‘아스트라’를 미국 정책 입안자와 규제 당국자에게 비공개 시연했다는 보도임. 핵심은 여러 AI 에이전트가 오래 상호작용하며 복잡한 프로젝트나 고급 수학 문제를 단계적으로 푸는 멀티 에이전트 협업 능력임.