메모리와 모델
최종 업데이트
MoE vs Dense 차이: 활성 파라미터가 작아도 메모리가 필요한 이유
MoE는 필요한 전문가만 계산하고, 전체 가중치를 보관해요.
MoE1는 여러 전문가 블록 중 일부를 골라 다음 토큰2을 계산하는 모델 구조예요. Dense는 대부분의 가중치를 매 토큰 사용해요. MoE의 ‘전체 35B·활성 3B’는 보관하는 규모와 한 토큰의 계산에 참여하는 규모를 나눠 표시한 거예요.
모델을 내려받을 때는 전체 가중치의 파일 크기가 필요하고, 속도를 비교할 때는 실제로 계산하는 경로가 중요해요. 이 두 숫자가 서로 다른 이유를 알아두면, 큰 모델 이름만 보고 제외하거나 활성 숫자만 보고 메모리를 작게 잡는 일을 줄일 수 있어요.
라우터가 토큰에 맞는 전문가를 선택해요.
MoE의 전문가는 모델 안에 있는 계산 블록이에요. 학습된 라우터가 입력을 보고 사용할 블록을 고른 뒤, 선택된 블록의 결과로 계산을 이어가요. 사람이 ‘한국어 담당’이나 ‘코딩 담당’을 미리 지정한 작은 모델들의 모임으로 생각하기보다, 토큰마다 계산 경로를 고르는 구조로 이해하면 돼요.
Dense에서는 각 층의 가중치 대부분이 계산에 참여해요. MoE에서는 공유 부분과 선택된 전문가가 참여하고, 다음 토큰에는 다른 전문가가 선택될 수 있어요. 그래서 한 토큰에서 쓰지 않은 전문가도 이후 계산을 위해 실행 프로그램3이 접근할 수 있어야 해요.
- LLM 컨텍스트 길이·RoPE·슬라이딩 윈도
- 프리필·디코드 차이: TTFT와 tok/s 중 무엇을 봐야 하나
- GGUF와 MLX 모델 형식, 무엇이 다른가
- LLM 메모리 대역폭 vs 연산 성능: 속도 병목 찾는 법
- 네모트론 3.5 Bolt, 74B 모델을 24GB로 돌릴 수 있다고?
- 네모트론 3.5 Super VL, DGX Spark·RTX PRO 6000에서 쓰려면?
- Ling 3.1 Flash를 직접 띄우려면 어떤 서버가 필요할까요?
- LFM2.5-24B-A2B 로컬 LLM: 한국어 지원 24B MoE를 내 PC에서
- 35B MoE가 더 작은 밀집 모델보다 빠를 수 있는 이유

전체 35B와 활성 3B는 역할이 달라요.
B는 십억 개의 파라미터를 뜻해요. 전체 35B는 모델에 들어 있는 공유 부분과 전문가 가중치를 합친 규모예요. 활성 3B는 토큰 하나의 계산 경로에 참여하는 규모를 가리켜요. 다운로드와 메모리는 전체 숫자부터, 토큰당 계산은 활성 숫자부터 살펴보는 이유예요.
전부 4비트로 저장하는 단순한 예를 계산해볼게요. 350억×4비트÷8은 175억 바이트, 십진 단위로 17.5GB예요. 활성 3B만 계산하면 1.5GB지만, 전체 모델에는 나머지 전문가도 필요해요. 실제 Q4 파일에는 양자화4 보조 값과 메타데이터, 다른 정밀도로 남긴 부분이 더해지므로 배포 파일의 실제 크기를 확인해야 해요.
| 표시 | 뜻 | 활용할 때 |
|---|---|---|
| 전체 35B | 모델 전체에 저장된 가중치 규모 | 파일과 적재 메모리를 확인할 때 |
| 활성 3B | 토큰별 계산에 참여하는 규모 | 계산량과 실행 경로를 이해할 때 |
계산을 줄이면 속도에 유리한 조건이 생겨요.
전체 규모가 비슷한 Dense보다 MoE의 활성 규모가 작다면, 토큰마다 계산할 양을 줄일 수 있어요. 실행 프로그램이 선택된 전문가의 가중치를 효율적으로 가져와 계산하면 디코드5에서 이점이 생겨요. 모델 이름의 전체 B 숫자만으로 속도를 줄 세우기 어려운 이유예요.
실제로는 라우팅, 불규칙한 메모리 접근, 전문가별 부하와 실행 커널도 시간이 걸려요. 가중치 일부를 시스템 RAM6에 두는 오프로딩7을 사용하면 이동 시간까지 더해져요. 활성 규모가 작아서 얻은 이점을 살리려면 현재 장비의 메모리 배치와 해당 모델의 지원 경로를 함께 확인해야 해요.

코드 수정은 테스트가 끝날 때까지 비교해요.
예를 들어 빈 문자열에서 오류가 나는 함수를 수정해볼게요. 두 모델에 같은 코드와 오류 설명을 보내고 ‘반환 형식은 유지하고 빈 입력을 처리해줘’라고 요청해요. 일반 입력, 빈 입력, 기존 호출부를 확인하는 테스트를 실행하면 요청한 동작이 유지됐는지 알 수 있어요.
첫 답이 나올 때까지의 시간, 코드를 생성하는 속도, 테스트를 통과하기까지 추가로 수정한 횟수를 나눠 기록하세요. 답변이 빠른 모델이 여러 차례 수정해야 한다면 전체 작업은 길어질 수 있어요. 내 코드에서 필요한 결과를 얻는지와 기다리는 시간을 함께 비교하면 실제로 사용할 모델을 고르기 쉬워요.

장비를 고를 때는 파일, 문맥, 결과 순서로 확인해요.
용어 각주
MoE — 여러 전문가 하위망 중 일부를 입력에 따라 선택해 사용하는 모델 구조입니다. 총 파라미터 수와 한 토큰 처리에 활성화되는 파라미터 수는 다를 수 있습니다.
본문으로 돌아가기토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.
본문으로 돌아가기런타임 — 프로그램이 실행될 때 필요한 기능을 제공하는 소프트웨어 환경입니다. 로컬 AI에서는 모델을 실행하는 엔진을 가리키기도 합니다.
본문으로 돌아가기양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.
본문으로 돌아가기토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.
본문으로 돌아가기시스템 RAM — 프로그램이 실행되는 동안 데이터를 임시로 보관하는 시스템 메모리입니다.
본문으로 돌아가기오프로딩 — 메모리가 부족할 때 모델 데이터 일부를 GPU 메모리에서 시스템 RAM이나 저장장치로 옮겨 처리하는 방식입니다. 데이터 이동이 추가됩니다.
본문으로 돌아가기KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.
본문으로 돌아가기프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- MoE는 여러 전문가 블록 중 일부를 골라 다음 토큰을 계산하는 모델 구조예요. Dense는 대부분의 가중치를 매 토큰 사용해요. MoE의 ‘전체 35B·활성 3B’는 보관하는 규모와 한 토큰의 계산에 참여하는 규모를 나눠 표시한 거예요.
- 필요한 메모리는 어느 정도인가요?
- 실제로는 라우팅, 불규칙한 메모리 접근, 전문가별 부하와 실행 커널도 시간이 걸려요. 가중치 일부를 시스템 RAM에 두는 오프로딩을 사용하면 이동 시간까지 더해져요. 활성 규모가 작아서 얻은 이점을 살리려면 현재 장비의 메모리 배치와 해당 모델의 지원 경로를 함께 확인해야 해요.
