메모리와 모델

최종 업데이트

MoE vs Dense 차이: 활성 파라미터가 작아도 메모리가 필요한 이유

MoE는 필요한 전문가만 계산하고, 전체 가중치를 보관해요.

MoE1는 여러 전문가 블록 중 일부를 골라 다음 토큰2을 계산하는 모델 구조예요. Dense는 대부분의 가중치를 매 토큰 사용해요. MoE의 ‘전체 35B·활성 3B’는 보관하는 규모와 한 토큰의 계산에 참여하는 규모를 나눠 표시한 거예요.

모델을 내려받을 때는 전체 가중치의 파일 크기가 필요하고, 속도를 비교할 때는 실제로 계산하는 경로가 중요해요. 이 두 숫자가 서로 다른 이유를 알아두면, 큰 모델 이름만 보고 제외하거나 활성 숫자만 보고 메모리를 작게 잡는 일을 줄일 수 있어요.

실행 조건과 핵심 내용
  • Dense는 대부분의 가중치를 매 토큰 사용해요.
  • MoE는 라우터가 토큰별로 전문가 경로를 골라요.
  • 전체 규모는 적재 용량, 활성 규모는 계산량을 이해하는 단서예요.

라우터가 토큰에 맞는 전문가를 선택해요.

MoE의 전문가는 모델 안에 있는 계산 블록이에요. 학습된 라우터가 입력을 보고 사용할 블록을 고른 뒤, 선택된 블록의 결과로 계산을 이어가요. 사람이 ‘한국어 담당’이나 ‘코딩 담당’을 미리 지정한 작은 모델들의 모임으로 생각하기보다, 토큰마다 계산 경로를 고르는 구조로 이해하면 돼요.

Dense에서는 각 층의 가중치 대부분이 계산에 참여해요. MoE에서는 공유 부분과 선택된 전문가가 참여하고, 다음 토큰에는 다른 전문가가 선택될 수 있어요. 그래서 한 토큰에서 쓰지 않은 전문가도 이후 계산을 위해 실행 프로그램3이 접근할 수 있어야 해요.

여러 전문가 모듈 중 일부만 토큰의 경로에 선택되는 그림
라우터가 토큰에 맞는 전문가 경로를 선택해요.

전체 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을 사용하면 이동 시간까지 더해져요. 활성 규모가 작아서 얻은 이점을 살리려면 현재 장비의 메모리 배치와 해당 모델의 지원 경로를 함께 확인해야 해요.

색이 다른 토큰이 라우터를 거쳐 선택된 전문가로 나뉘어 들어가는 그림
다음 토큰에는 다른 전문가가 선택될 수 있어요.

코드 수정은 테스트가 끝날 때까지 비교해요.

예를 들어 빈 문자열에서 오류가 나는 함수를 수정해볼게요. 두 모델에 같은 코드와 오류 설명을 보내고 ‘반환 형식은 유지하고 빈 입력을 처리해줘’라고 요청해요. 일반 입력, 빈 입력, 기존 호출부를 확인하는 테스트를 실행하면 요청한 동작이 유지됐는지 알 수 있어요.

첫 답이 나올 때까지의 시간, 코드를 생성하는 속도, 테스트를 통과하기까지 추가로 수정한 횟수를 나눠 기록하세요. 답변이 빠른 모델이 여러 차례 수정해야 한다면 전체 작업은 길어질 수 있어요. 내 코드에서 필요한 결과를 얻는지와 기다리는 시간을 함께 비교하면 실제로 사용할 모델을 고르기 쉬워요.

저장된 전체 전문가 묶음과 한 토큰에서 활성화된 일부 전문가를 비교한 그림
모델 적재에는 전체 가중치와 실행 여유가 필요해요.

장비를 고를 때는 파일, 문맥, 결과 순서로 확인해요.

원하는 Q4 파일을 배포 페이지에서 확인하고, 실행 프로그램과 다른 앱, KV 캐시8를 위한 메모리도 남겨요. 작은 질문으로 적재를 확인한 뒤 평소 사용하는 프로젝트 입력 길이로 시험하면, 실제 작업에서도 메모리가 남는지 알 수 있어요.

그 조건에서 코드 결과와 프리필9·디코드를 비교해요. 전체 파일이 안정적으로 들어가고 원하는 수정이 나오는 MoE라면 현재 장비에서도 좋은 후보가 돼요. 적재는 되지만 대기가 길다면 대역폭과 실행 옵션을, 적재부터 실패한다면 전체 용량과 오프로딩 지원을 다음으로 살펴보세요.

용어 각주

  1. MoE — 여러 전문가 하위망 중 일부를 입력에 따라 선택해 사용하는 모델 구조입니다. 총 파라미터 수와 한 토큰 처리에 활성화되는 파라미터 수는 다를 수 있습니다.

    본문으로 돌아가기
  2. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  3. 런타임 — 프로그램이 실행될 때 필요한 기능을 제공하는 소프트웨어 환경입니다. 로컬 AI에서는 모델을 실행하는 엔진을 가리키기도 합니다.

    본문으로 돌아가기
  4. 양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.

    본문으로 돌아가기
  5. 토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.

    본문으로 돌아가기
  6. 시스템 RAM — 프로그램이 실행되는 동안 데이터를 임시로 보관하는 시스템 메모리입니다.

    본문으로 돌아가기
  7. 오프로딩 — 메모리가 부족할 때 모델 데이터 일부를 GPU 메모리에서 시스템 RAM이나 저장장치로 옮겨 처리하는 방식입니다. 데이터 이동이 추가됩니다.

    본문으로 돌아가기
  8. KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.

    본문으로 돌아가기
  9. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
MoE는 여러 전문가 블록 중 일부를 골라 다음 토큰을 계산하는 모델 구조예요. Dense는 대부분의 가중치를 매 토큰 사용해요. MoE의 ‘전체 35B·활성 3B’는 보관하는 규모와 한 토큰의 계산에 참여하는 규모를 나눠 표시한 거예요.
필요한 메모리는 어느 정도인가요?
실제로는 라우팅, 불규칙한 메모리 접근, 전문가별 부하와 실행 커널도 시간이 걸려요. 가중치 일부를 시스템 RAM에 두는 오프로딩을 사용하면 이동 시간까지 더해져요. 활성 규모가 작아서 얻은 이점을 살리려면 현재 장비의 메모리 배치와 해당 모델의 지원 경로를 함께 확인해야 해요.