지난 몇 달간 휴식 겸 커리어 전환 준비를 위해, 로컬 LLM에 대해 심도 있게 알아보고자 Mac Studio를 구입하였다. 몇 가지 실험(과 커뮤니티에서의 귓동냥)을 통해 알게 된 정보를 정리해보고자 한다.
(대략적인) 장비 선택
로컬 LLM 을 돌릴 수 있는 장비는 여러 종류가 있으나 다음이 보통 추천된다.
- NVIDIA GPU: 소비자 접근성이 좋은 옵션으로는 RTX 5090을 장착한 컴퓨터나 DGX Spark가 있다. GPU 품귀 현상으로 구세대 GPU 를 병렬로 구동해서 비용 절감을 노리기도 한다.
- Apple Silicon: M5 Max가 장착된 MacBook Pro 혹은 Mac Studio, 가능하면 M5 Ultra를 선택한다.
자신이 원하는 적절한 성능(지능과 추론속도 모두 포함한다) 구동하기 위해서는 다음을 고려해야 한다.
- 연산 성능: 수학 연산을 초당 몇 번 할 수 있는지(OPS, operation per sec) 로 보통 비교한다. Prefill(Prompt preprocessing) 시에 중요한 병목으로 작용한다. 일반적으로 NVIDIA GPU가 Apple Silicon보다 연산력이 좋다고 알려져 있다. 애플은 부족한 연산력을 M5, M6 라인업에서 계속하여 보강하고 있다1.
- 메모리의 대역폭: GB/s 로 보통 비교한다. Decode(token generation) 시에 중요한 병목으로 작용한다. 낮은 메모리 대역폭으로 인해, M5/M6 이나 M5 Pro는 선호되지 못한다. 전 세계적인 HBM(고대역폭 메모리) 품귀현상과도 관련이 있다(이 글에서 언급하는 소비자용 장비들도 가격/공급 문제로 HBM보다 대역폭이 낮은 칩을 사용하는 경우가 대부분이다).
- 메모리의 크기: RAM 혹은 VRAM의 용량. DGX Spark나 Apple Silicon은 CPU/GPU가 공유해서 사용하는 unified memory 이므로 둘의 구분이 없다. Apple Silicon이 인기가 좋은 이유는 보통 대역폭이 양호한 unified memory를 대용량으로(Max: 128GB, Ultra: 256GB, 512GB 출시 예정) 탑재하기 때문이다. 파라미터 수가 큰 모델을 원활하게 돌리기 위해서는 RAM(혹은 unified memory) 에 모델과 KV 캐시를 로드할 수 있어야 하므로, 거칠게 말하면 메모리의 크기는 모델 체급의 상한을 결정한다. 스펙이 제한된 로컬 장비에서 이러한 어려움을 완화하기 위해 여러 가지 “오프로딩” 접근법이 개발되었으며, 이는 뒤에서 설명할 것이다.
Prompt preprocessing, token generation이 무엇인지, 그리고 왜 각각 병목이 다른지는 아래에서 설명한다.
2026년 9월 기준으로 현실적인/대략적인 예산에 따라서 구동 가능한 로컬 LLM은 다음과 같이 정리할 수 있다:
- 500만원대: M5 Max 48GB 모델을 고를 수 있다. 이는 적절한 양자화가 적용 된 Qwen3.8 27B 모델을 원활하게 구동할 수 있는 사양으로, 앤트로픽의 Opus 4.5 정도와 비견되는 작업능력을 갖추고 있다. 소규모 코딩까지는 무난하게 가능하다. 개인적인 경험으로, Qwen3.8-27B 모델은 sparse attention이 적용되지 않아, 컨텍스트가 길어지면 추론 속도가 빠르게 하락하는 문제가 있다.
- 1000만원대: DGX Spark나 M5 Max 128GB 모델을 고를 수 있다. Qwen3.8 Flash Next가 원활하게 구동된다. 같은 Qwen3.8 이름을 달고 있지만, 27B 모델과 다르게 차세대(Qwen4) 모델의 구조를 실증하기 위한 모델이기 때문에 신경망 구조가 개선되었고, 긴 컨텍스트에서도 추론속도를 잘 유지하는 것이 장점이다. 작업능력 또한 Qwen3.8 27B 보다 한 수 위로 평가된다.
- 2000만원대: M5 Ultra 탑재 Mac Studio (256GB memory) 1대나, DGX Spark 2대를 연결하여 사용 가능하다(2x Spark 세팅의 경우 tensor parallelism 등을 설정하는 추가적인 노력이 필요하다. 이는 인터넷 검색으로 잘 찾을 수 있을 것으로 생각된다). 적절한 양자화가 적용된 GLM-5.3 Flash 를 구동할 수 있다. 실질적으로 OpenAI나 Anthropic이 제공하는 비공개 모델들의 중/하급 라인업과 비슷하다는 평가를 받는다.
LLM 해부
LLM(Large Language Model)은, 이름 그대로 대규모의 파라미터(현대에는 보통 수십억에서 수조 단위를 다룬다)로 이루어진 인공신경망을 통해 언어를 학습한 모델을 말한다2. 현재 주류 LLM들은 다음과 같은 특징을 가진다.
자기회귀적(autoregressive): LLM을 아주 거칠게 표현하면 “지금까지의 텍스트 내용” 을 보고 다음 단어를 출력하는 인공신경망이다. 예를 들자면, “The capital city of France is [ … ]” 에서 다음에 나올 단어를 잘 출력하는 일이라고 할 수 있다. 당연히 답은 “Paris"일 것이다. Autoregressive model 은 이를 반복해서, 이전의 모든 텍스트를 기반으로 다음 단어를 추측한다. “The capital city of France is Paris[ … ]” 여기서는 아마도 구두점이 가장 유력할 것이다.
매우 단순한 구조라서 여기서 어떠한 통찰을 얻기에는 부족하다고 생각할 수도 있다. 그러나 GPT-1부터 시작되는 LLM 신화는 이 구조에서 출발하여 파라미터 수, 학습 데이터의 양, 학습 방법의 효율성 등을 높이면 충분히 사람을 능가하는 지능과 문장력을 얻을 수 있음을 보여주고 있다.
Transformer: Attention is All You Need 라는 기념비적인 논문에서 제시된 구조로, 주류 LLM 모델들은 빠짐없이 attention 기반의 transformer 구조(또는 그 변형)를 사용한다. Attention이란 이름은, 입력된 값들을 고르게 받아들이는 것이 아니라, 중요한 입력과 그렇지 않은 입력을 구분하는 설계에서 비롯되었다(이 점수를 매기는 것 또한 학습의 영역이다). Transformer는 입력 성분 각각에 중요도를 판단하는 가중치를 적용하여 받아들인 뒤 정보를 추출하여 출력하고 다음 계층에 전달한다. Transformer 의 동작에 대해서는 Jay Alammar의 The Illustrated Transformer 가 시각적으로 잘 전달하니 꼭 읽어보기를 권한다3.

Source: Jay Alammar, CC BY-NC-SA 4.0 License
- Transformer 가 전통적으로 쓰이던 RNN과 크게 다른 점은, 컨텍스트 길이와 독립적인 크기(“고정 크기”)를 가지는 recurrent state를 두지 않는다는 점이다. RNN은 hidden state에 정보를 넣고 가져오는 과정에서 정보의 손실이 발생하나, Transformer는 (자신의 이전 출력을 포함한) 텍스트 전체를 입력으로 삼으면서 앞선 임의의 위치에 저장된 정보에 접근할 수 있는 능력을 획득하였다. 별도의 encoder stack 없이, 앞서 제공된 토큰만을 기반으로 예측을 수행하는(인과적, causal) self-attention 기반으로 구성된 언어 모델을 보통 “decoder-only Transformer” 라고 부른다.
토큰
위에서는 조금 거칠게 “LLM은 다음 단어를 예측한다"라는 식으로 설명하였지만, LLM은 단어 기반으로 동작하지 않음을 확실하게 하고 넘어가고자 한다. LLM이 입력 데이터를 분해하고 출력을 만드는 단위를 “토큰"이라고 부른다. 문장을 토큰들로 분리하는 작업을 토큰화(tokenization)라고 한다. 이는 LLM 구현마다 다르고 모델에 종속적이나, 보통 BPE(byte-pair encoding) 기반의 알고리즘을 사용한다.
토큰화가 필요한 이유는 전체적인 학습 데이터셋으로부터 적절한 “분해 단위” 를 찾는 것이 중요하기 때문이다.
- 바이트 단위로 분리하여 입력하면, 모델이 인식해야 하는 토큰의 집합을 의미하는 vocabulary의 크기는 줄어들지만, 같은 텍스트를 토큰으로 표현할 때의 길이가 늘어난다. 이는 모델이 더 많은 토큰을 처리해야 하며, 바이트의 나열 중에서 의미를 가지는 조합 단위를 학습하는 노력을 더 해야만 함을 의미한다.
- 단어 단위로 분리하여 입력하면, vocabulary의 크기가 매우 커져 각각에 대응되는 임베딩을 학습하는 데에 어려움이 발생할 수 있다. 또한, 유사한 단어, 단어 앞뒤의 접두사/접미사, 한국어의 형태소 등을 분리하여 의미를 전달하는 데에도 추가적인 엔지니어링이 필요하다. “사전에 없는 단어(out-of-vocabulary)“를 처리하는 문제는 덤이다. 예전의 자연어 처리는 단어 단위로 처리하며 형태소 분석을 곁들이는 것이 주류였으나, 이들 모두를 (단어 여러개로 분리될 수도 있는) 토큰 단위로 변환하고, LLM이 스스로 구조를 학습하도록 하는 것이 더 효율적임을 알게 된 뒤로 더 이상 주류가 아니게 되었다.
Tokenizer는 LLM이 이해하도록 할 “토큰의 가짓수"를 학습 전에 미리 파라미터로서 정하고, 학습하고자 하는 말뭉치의 정보를 최대한 활용할 수 있는적절한 분해 방식(단어보다 작은, subword 라고 일컫는 수준으로도 분해될 수 있다)을 계산한다. 이는 자연스럽게 압축 알고리즘과 큰 연관성을 가지게 된다(자세한 것은 BPE 키워드로 검색해보라).
Prefill and Decode
LLM의 추론을 진행하는 경우 크게 두 단계로 구분할 수 있다.
- Prefill(prompt preprocessing, pp): 입력 프롬프트로부터 첫 토큰의 예측이 가능해지도록 필요한 연산을 수행하는 과정이다. 이 과정에서 입력 프롬프트를 구성하는 토큰들에 대응하는 Key/Value 값들이 계산되고 KV cache에 저장된다. 긴 프롬프트를 집어넣고 “첫 토큰"을 받기까지에 걸리는 시간(time-to-first-token, TTFT) 지표는 보통 prefill 성능과 큰 연관이 있다.
- Decode(token generation, tg): Prefill이 끝난 후, 앞서 계산된 K/V 값을 활용하여 attention/projection을 수행하고, 결과적으로 다음 토큰을 예측하는 과정이다(보통 여러 개의 토큰을 연속해서 예측하는 경우가 일반적이므로, 반복해서 다음 토큰과 이에 수반되는 각 계층의 K/V 값을 계산한다). 첫 토큰이 나온 뒤로 계속해서 토큰이 나오는 속도(decode TPS)는 사용자의 체감 속도와 연관되는 지표이다.
두 단계를 명시적으로 구분하는 가장 큰 이유는, 로컬 LLM을 서빙할 때(즉 단일 사용자 혹은 배치의 크기가 작은 경우) 각각의 작업 특성이 크게 다르기 때문이다. Prefill 단계의 경우 입력되는 토큰의 나열을 모두 알고 있으므로, 가장 맨 위 계층부터 순차적으로 K/V를 계산하면 같은 파라미터를 여러 번 GPU의 연산기 위로 불러올 필요가 없다. Decode 단계의 경우 토큰을 1개씩 생성하며 방금 생성된 토큰이 다시 입력 토큰으로 들어가는 특성상, 연산기가 로드해야 하는 레이어가 반복해서 바뀐다. 요약하면, 작은 배치 환경에서 prefill 단계는 연산 성능이 주된 병목이 되는 반면, decode 단계는 메모리의 대역폭이 주된 병목이 된다.
최근 동향: 병목 타파하기
위에서 설명한 구조는 아주 기본적인(naive) 트랜스포머 구조로, 현재 사용되는 LLM들의 수준으로 규모를 키우기에는 여러 가지 어려움이 존재한다. 이를 하나하나씩 짚어가며 어떻게 개선하고 있는지 알아보자.
KV Caching
입력으로 들어온 $N$개의 토큰에 대해 1개의 예측 토큰을 만들기 위해서4, Transformer 구조에서는 전체 토큰의 Key/Value 벡터를 계산하고, 이를 기반으로 가장 마지막 Query 벡터와 함께 attention score를 계산하게 된다. 즉 하나의 토큰 예측을 위한 정보를 가져오는 데에 최소한 $O(N)$의 계산 복잡도를 가질 것이다. 이는 본질적으로 decoder-only Transformer가 고정된 크기의 recurrent state 없이 컨텍스트만을 기반으로 추론하는 모델이기 때문이다. 그러므로, $N$개의 토큰을 생성하는 데에는 $O(N^2)$의 계산 복잡도를 가지게 되고, 이는 긴 컨텍스트의 작업을 하는 데에 큰 장애를 초래한다.
이를 완화하는 대표적인 방법이 KV caching이다. 앞에서 설명한 대로, causal self-attention Transformer의 매 decode step 에서는 이전에 생성된 토큰들을 포함한 입력 토큰들의 Key/Value 값을 토대로 $\text{softmax}\left( {Q K^T} \over \sqrt{d_k} \right)V$ 를 계산하여야 했다. 이 때 직전에 생성된 토큰을 제외한 입력에 대한 Key/Value는 모두 이미 계산된 적이 있었으므로, 이를 캐싱해 두었다가 재사용하면 Transformer의 계산 복잡도에서 K/V 계산 횟수에 의한 제곱항을 없앨 수 있다5.
Mixture-of-Experts (MoE)
심층 신경망에서, 같은 계층 안에서 여러 개의 비교적 작고 독립된 단위(“expert”)로 분할한 후 일부만 활성화하여 사용하는 구조이다. LLM에서는 attention module 자체는 공유하고 그 다음 적용되는 FFN module에 MoE를 적용한다. MoE의 개념 자체는 기존의 고전적 기계학습 영역에서도 주효한 방법론으로 다루어졌는데, Mistral AI의 Mixtral of Experts (Mixtral 8x7B) 모델 공개 이후 LLM에서도 주류 방법론으로 확산되었다.
MoE 구조를 사용하지 않는 LLM은 보통 “dense"한 구조라고 하고, MoE로 매번 네트워크의 일부만 활성화되는 구조를 “sparse"한 구조라고 부른다. 특히 한 번에 활성화되는 영역의 크기가 전체에 작을 수록 더 sparse하다, sparsity가 높다고 표현한다. 모델의 크기를 설명할 때에는 보통 파라미터 수를 일컫는 27B 와 같은 표기와 함께, 한 번에 활성화되는 파라미터의 수를 표시한다. 35B-A3B 는 토큰 하나의 처리 과정에서 전체 파라미터 35B 중 3B(30억)개의 파라미터만 사용한다는 의미이다.
MoE 구조는 총 파라미터의 크기를 늘리면서도 토큰당 필요로 하는 연산량을 줄일 수 있다. MoE 구조를 도입함으로서 추가적으로 기대할 수 있는 활용 방법은 크게 두 가지가 있다.
- 전문가 병렬화(Expert parallelism): 여러 기기에 expert 단위로 분산하여 로드해두면, 하나의 기기에서 로드할 수 있는 최대 크기보다 더 큰 모델도 효율적으로 추론할 수 있다.
- 전문가 오프로딩(Expert offloading): 전문가들을 SSD 또는 RAM과 같이 덜 비싼 공간에만 적재해 두고, 추론 시점에 활성화되는 전문가만 VRAM에 적재하는 식으로 메모리 사용량을 절감할 수 있다. 이는 부족한 VRAM으로 큰 모델을 돌릴 때에 주효하다.
유의할 점은, 두 가지 방식에서 최대화되어야 하는 특성의 방향이 다르다는 것이다. 전문가 병렬화의 경우, 수많은 사용자를 대상으로 추론을 제공할 경우 각 전문가의 활성화 경향이 평균적으로 고른 경향을 보이는 것이 중요하다(그렇지 않으면 특정 전문가를 로드한 기기로 요청이 쏠리면서 효율이 크게 감소한다). 전문가 오프로딩의 경우 전문가 캐시의 hit rate 를 극대화해야 하므로, 좁은 시간 내에 특정 전문가가 자주 활성화되는 경향성(시간적 지역성, temporal locality; 시간적 근접성, temporal proximity) 및 prefetch를 돕는 예측 가능성을 높여야 한다. 각각의 방법론은 배타적이지 않으며 동시에 최대화될 수 있다.
효율적인 Attention 변형들
기존의 naive한 Transformer에서 구조를 변형하여, 더 적은 비용으로 동일한 성능을 달성하려는 시도들이 여럿 있다. 이러한 변형들은 각 모델 개발사들이 독자적으로 개발하여 적용하는 경우가 많다(다른 개발사가 제안한 구조를 차용하기도 한다). 그러므로, 아래 서술된 아이디어들은 많은 변형들을 추상적인 아이디어로 범주화한 것이다. 또한 모든 변형이 동시에 적용되어야 할 필요성은 없다.
KV overhead 줄이기
Multi-head Attention Transformer의 경우 attention head별로 K/V를 계산해야 하므로, (head의 dimension을 고정했을 때) 이를 저장하기 위한 공간 요구량과 대역폭이 head의 수에 비례하여 늘어나게 된다. 이를 해결하기 위해 MQA(Multi-Query Attention) 이 제안되었는데, 이는 attention head가 각각 독립된 query vector를 가지되 key/value vector의 경우 같은 레이어의 모든 head들이 공유하도록 하는 구조이다.
MQA 구조는 메모리 대역폭 및 저장공간 절감에 효과적이었지만, 학습 안정성과 품질이 저하된다는 보고가 있었다. 이에 대응하기 위해, MHA와의 절충 격으로 query head를 그룹으로 나누어, 각 그룹끼리만 key/value vector를 공유하도록 하는 GQA(Grouped-Query Attention) 구조 또한 제시되었다.
또 다른 절충안인 Multi-Head Latent Attention(MLA)은 DeepSeek V2에서 제시된 구조로, attention head 간 공유되는 compressed latent vector $c^{KV}_t$를 도입한 뒤 여기서 각 head가 사용할 Key/Value 값을 얻도록 함으로서 KV cache의 크기를 절감하였다.
Attention 자체를 희소화(Sparsify)하기
기존의 Transformer는 attention score를 전체 컨텍스트에 대해서 계산하였는데, 이는 결과적으로 N개의 토큰 생성에 대해 $O(N^2)$ 계산 복잡도를 요구하므로 긴 컨텍스트에 대해 특히 비효율적이다. 이 비용을 줄이고자, 일부 토큰에 대해서만 attention score를 계산하고자 하는 변형들이 다수 제안되었다.
가장 간단한 방식으로, 가장 최근의 $N$개 토큰만 attention 대상으로 삼는 SWA(Sliding Window Attention)구조가 있다. 모든 계층에 걸쳐 SWA만을 사용하는 것은 긴 컨텍스트에서 멀리 떨어진 토큰 간의 의미를 연결하는 기능이 제한된다. 그러므로 SWA를 (일반적인) dense attention 계층 사이에 배치하여 긴 컨텍스트에서의 성능 부담을 줄이는 효과를 기대하기도 한다. 이러한 구조를 초기에 차용한 모델로 GPT-3이 있으며, Gemma 3, GPT-OSS에 이어 비교적 최근에 발표된 모델인 DeepSeek-V4 등에서도 부분적으로 활용된다.
DeepSeek-V3.2에서 도입된 DSA(DeepSeek Sparse Attention)의 경우, attention score 를 계산하기 전에 “lightning indexer” 가 먼저 index score 를 계산하도록 한 뒤, index score의 top-k 만 선택해 이들에 대해서만 attention score를 계산하는 방식이다. 이 때 index score의 계산 자체는 기존의 attention과 유사하게 $\sum{w \cdot \text{ReLU}\left(q \cdot k\right)}$6 를 사용하므로, 직관적으로는 비교적 가벼운 attention 작업으로 “초벌” 한다고 생각할 수도 있겠다. DSA 구조는 GLM-5 에서도 채택되어 긴 컨텍스트에서 attention 연산 비용을 줄이는 데 기여하였다.
MSA(MiniMax Sparse Attention)의 경우, DSA와 비슷하게 index score를 위한 별도의 $Q^{\text{idx}} \cdot K^{\text{idx}}$기반으로 top-k를 수행하는 것은 동일하나, token sequence 축에서 블록 단위를 정의한 뒤 블록 내에서 max-pool을 수행한 값을 index score로 정의한다. 블록의 크기는 원문에서 128로 설정하였다. 이후 top-k 연산을 통해 선택된 block에서만 main attention 을 수행하는 것은 DSA와 유사하다. 요약하면, DSA의 lightning indexer 를 blockwise 로 더 “거친”(coarse-grained) 방식이 되도록 확장하였다고 볼 수 있다. 이는 MiniMax의 최신 플래그십 모델 MiniMax-M3에 적용되었다.
QSA(Qwen Sparse Attention)도 주목할 만 하다. 이는 Qwen3.8-Next(Qwen 4를 위한 technical preview라고 봐도 무방하다) 구조에서 도입되었으며, MSA와 비슷하게 블록 단위 index scoring을 진행하나, 한 블록 내에서 index key 벡터들에 대한 평균을 대상으로 index score를 계산하며, 블록 크기가 4로 훨씬 세밀하다는 차이점이 있다. 활용 방식에도 차이가 있는데, Qwen3.8-Next는 후술할 GDN과 교차하여 QSA 블록을 두는 반면 MiniMax-M3는 첫 3개의 계층 제외한 모든 계층에 MSA를 적용한다.
유의할 점은, DSA, MSA, QSA와 같은 sparse attention 계열 변형들이 계산 복잡도 수식에서의 제곱항을 완전히 제거하는 것은 아니라는 것이다. Index score를 통해 top-k만 추려 main attention을 계산하더라도, index score를 계산하는 과정은 여전히 제곱항을 가지기 때문이다(quadratic). QSA의 블록 단위 key 압축도 제곱항의 계수를 줄이는 효과는 기대할 수 있으나 완벽하게 연산 수의 복잡도를 선형화하는 것은 아니다.
Recurrence의 재발견: Linear Transformer
지나간 context 전체를 (간접적으로라도) 조회해야 하는 Transformer 구조에서 탈피하여, state가 존재하는 RNN과 유사한 구조를 다시 도입하여 복잡도 자체를 선형화하려는 시도도 계속해서 존재한다.
Mamba, Mamba2, GDN(Gated DeltaNet)으로 이어지는 계보는 기존의 RNN과 Sequence Modeling 이론에서 비롯하였는데, 해당 영역이 요구하는 깊은 배경지식에 미치지 못하여 추상적으로만 기록한다. 거칠게 요약하면, GDN은 『Linear Transformers Are Secretly Fast Weight Programmers』 논문에서 제안된 delta update rule을 Mamba2에 결합하여, decay term 또한 동시에 적용한다.
잘 알려진 open weight LLM 중에서 GDN을 도입한 것은 Qwen3-Next가 대표적이다. 이는 3번의 GDN 블록과 1번의 global attention 블록을 교대로 적용하는 하이브리드 구조로서, Qwen3.8-Next에서도 QSA와 함께 계속해서 사용되고 있다. 또한, Kimi Linear에서 제시하는 KDA(Kimi Delta Attention) 또한 GDN의 변형이며, KDA는 Kimi의 초거대 모델 Kimi K3에서 적극적으로 활용되고 있다. Qwen3-Next와 유사하게, Kimi Linear 역시 3개의 KDA 계층 다음에 MLA 계층을 배치함으로서 긴 컨텍스트에 대한 정보 처리 능력을 유지하고 있다. 이들 hybrid 구조는 global attention과 linear attention을 혼합하여 배치하므로, 전체 복잡도가 선형화되지는 않으나 긴 컨텍스트에서의 비용을 줄이는 것에 의미가 있다.
Offloaded Embedding
고전적인 Transformer에서는, 각 토큰의 의미를 담는 실질적인 hidden state 는 첫 레이어에서 token-to-embeddings projection을 적용함으로서 출발한다.
Gemma 3n과 Gemma 4에서는, 소형 모델들(E2B, E4B7)에 한해 token embedding 을 각 레이어별로 주입하도록 설계하였다(PLE, Per-Layer Embeddings). 실질적인 연산 및 메모리 비용을 요구하는 Transformer에 해당하는 부분과, PLE를 분리함으로서, PLE에 해당하는 파라미터들은 CPU 메모리에 저장해 둔 뒤 컨텍스트로 제공되는 토큰에 맞춰 필요한 임베딩 벡터만 GPU 메모리로 가져오는 식으로 추론에 필요한 최소 요구성능을 낮춘 것이다.
Qwen3.8-Next에서는 이를 참고하여, 특정 토큰들의 연속(n-gram)에 대해서만 한정적으로 대응되는 embedding vector 를 학습한 뒤(n-gram embeddings), linear attention layer의 residual stream activation에 합하는 방식으로 복잡도를 분리하였다. Qwen3.8-Flash-Next 모델에서는 2-, 3-gram에 대해 임베딩을 학습하여, 51B 파라미터를 n-gram embedding으로 할당하여 별도 장치에 오프로드할 수 있도록 하였다. 비교를 위해 같이 첨부하면, Qwen3.8-Flash-Next의 MoE 파라미터 스펙은 125B-A6B이다.
DeepSeek-V4.1에서도 유사하게, 2-, 3-, 4-gram에 대한 임베딩을 별도로 구성하여, 552B 크기의 backbone parameter(실질적 연산 대상)과 196B크기의 Engram 파라미터를 분리하였다. 이는 『Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models』 에서 먼저 제시된 방법론에서 short causal convolution 부분을 제거한 것이다.
더 많은 기법들
양자화(quantization)과 MTP(Multi-Token Prediction) 또한 매우 중요하게 다뤄지는 주제이나, 이미 너무 잘 알려진 기법인데다 각 기법 내에서의 변형들도 많이 제시되었기 때문에, 글이 너무 길어지는 것을 막고자 생략한다.
초당 연산 횟수의 경우, 장비별로 정의하는 방식이 다를 수 있기 때문에 다른 장비 간(같은 제조사끼리일 때 포함) 비교 시에는 주의하여야 한다. 예를 들어, NVIDIA의 RTX PRO 6000 Blackwell MAX-Q Workstation Edition은 AI 워크로드에서 3511 TOPS 의 성능을 가진다고 표시하는데, 이는 FP4 with sparsity 기준으로, dense한 FP4 연산이거나 FP8 연산은 이보다 이론치/실측치 또한 감소할 것이다. ↩︎
“언어"란, 좁게는 사람의 언어(영어, 한국어, …)만을 의미하겠으나, LLM의 사용이 확장되면서 프로그래밍 언어 등으로도 확장되었다. Multi-modal 기능이 추가되면서 LLM은 텍스트 기반의 언어와 동시에 “시각적 언어” 까지 구사하기도 한다. 이에 대해서는 Vision Transformer 키워드로 검색하면 많이 나온다. ↩︎
주의할 점은, 링크된 문서는 『Attention is All You Need』 논문에 제시된 구조를 설명하는 것으로, 현재 주류 구조인 decoder-only Transformer와는 약간의 차이가 있음을 고려해야 한다. 특히, 대부분을 차지하는 self-attention 계산에 대한 시각화는 encoder를 기준으로 시각화하기 때문에 decoder와 다르게 미래의 입력을 볼 수 있으며(달리 말해 양방향 문맥에 접근 가능하다), 이를 기반으로 attention score를 계산하고 있음을 주의해야 한다. Causal decoder-only Transformer에서의 자기회귀적 decode 과정은 앞선 컨텍스트만을 보고 순차적으로 토큰을 생성하므로 이와 대조적이다. ↩︎
이 조건은 엄밀히 따져서는 오해를 일으킬 수 있는 설명이다. Transformer block의 입력은 token ID를 직접적으로 사용하는 것이 아니라 각 ID에 대응되는 token embedding 을 조회하여 이를 최초 block의 입력으로 사용한다. Transformer block은 “토큰” 을 직접적으로 출력하지는 않고, hidden representation 를 출력하여 다음 block에 전달하며 마지막 block이 출력한 hidden representation을 기반으로 추가적인 연산을 통해 logits를 도출하고 샘플링이 수행된다. 이후 설명에서도 편의성을 위해 문맥상 혼동이 없는 범위에서 이를 토큰으로 지칭하여 설명한다. ↩︎
이 역시 엄밀히 따지면 완벽한 선형화는 아닌데, Key/Value 벡터를 계산하는 복잡도는 $O(N^2)$ 에서 $O(N)$이 되었지만, 미래에 생성될 토큰에 대한 query vector와의 내적을 통해 attention score를 계산하는 횟수는 여전히 $O(N^2)$이기 때문이다. Attention 계산 비용에 대한 최적화는 sparse attention 종류의 구조에서 다뤄진다. ↩︎
저자는 성능을 위해 indexer score 계산에서 softmax 대신 ReLU를 activation function으로 선택하였다고 밝혔다. ↩︎
E는 effective의 약자로, per-layer embeddings 등의 분리 가능한 파라미터를 제외한, 실질적으로 GPU 메모리에 상주할 것으로 기대되는 실질적 규모를 나타낸다. ↩︎