
Long Context, 1M을 넣어도 다 쓰지 못하는 이유
- 11Linear Attention, 곱의 순서를 바꾸면 생기는 일
- 12Long Context, 1M을 넣어도 다 쓰지 못하는 이유읽는 중
- 24Test Time Scaling
긴 문맥을 다루는 어텐션 설계는 대부분 메모리와 연산을 줄이는 쪽으로 발전해 왔습니다. 앞 토큰들의 key와 value를 저장해 두는 KV Cache를 압축하고(GQA, MLA), 저장한 위치 중 일부만 골라 읽고(Sparse Attention), 과거를 고정 크기 요약으로 들고 다니는(Linear Attention) 방법들이죠. 이런 설계가 쌓이면서 2026년 프론티어 모델 카드에는 1M 토큰 컨텍스트가 흔해졌습니다.
그러면 1M을 넣을 수 있는 모델은 1M을 다 쓸 수 있을까요? DeepSeek V4는 1M 컨텍스트를 지원하지만, DeepSeek은 기술 리포트에서 128K까지는 검색 성능이 안정적이고 그 너머부터는 저하가 눈에 보인다고 밝혔습니다. 모델이 지원하는 길이와 그 안의 정보를 제대로 쓰는 길이는 다릅니다.
이 격차는 메모리를 늘려서는 메울 수 없습니다. 1M을 넣을 수 있는지는 메모리가 정하지만, 1M을 다 쓰는지는 먼 곳의 정보가 모델에 얼마나 강하게 닿느냐가 정합니다.
지원하는 길이와 실효 길이
지원하는 길이는 메모리 계산으로 답이 나옵니다. Llama 3.1 70B는 쿼리 head 64개가 KV head 8개를 나눠 쓰는 GQA 구조입니다. 이 모델로 KV Cache 크기를 재 보면 이렇습니다.
토큰당 KV = 2 (K, V) × 80 레이어 × 8 KV head × 128 차원 × 2 바이트
= 327,680 바이트 (320 KiB)
128K 토큰 = 약 43 GB
1M 토큰 = 약 344 GB (가중치 약 141 GB의 2.4배)시퀀스 하나에 가중치보다 2.4배 큰 메모리가 필요하고 80GB GPU로 치면 KV Cache에만 다섯 장이 듭니다. 이것도 GQA로 이미 8분의 1로 줄인 숫자입니다. 캐시를 압축하고, 일부만 읽고, 요약으로 바꾸는 설계들이 이런 숫자를 줄여서 1M을 실제 하드웨어에 올렸습니다.
모델이 실제로 제대로 쓰는 길이는 측정해 봐야 압니다. 2024년에 나온 벤치마크 RULER는 짧은 문맥에서 무난한 모델이 내는 수준의 점수를 넘기는 최대 길이를 실효 길이(effective context length)라 부릅니다. RULER로 17개 모델을 측정하니 32K에서 이 문턱을 넘긴 모델은 절반 정도였고 128K를 지원한다는 모델의 실효 길이는 대개 32K나 64K였습니다.
GPT-4와 Llama 3.1 70B는 128K를 받아 놓고 64K까지만 제대로 씁니다. 128K가 전부 메모리에 올라가 있으니 메모리 탓은 아닙니다. 64K보다 먼 곳의 정보가 출력까지 충분히 닿지 않는 것이죠. 신호가 약해지는 곳은 두 군데입니다. 학습할 때 먼 거리를 볼 기회가 적고, 추론할 때 먼 정답이 받아야 할 가중치가 문맥이 길수록 다른 위치들로 흩어집니다.
먼 거리는 드물게 배운다
학습 쪽부터 보겠습니다. 모델이 학습 중에 어떤 거리를 몇 번이나 보는지 세어 보면 됩니다. 토큰 8개짜리 시퀀스에서 바로 옆 토큰끼리의 쌍, 즉 거리 1인 쌍은 1과 2, 2와 3부터 7과 8까지 7개입니다. 거리 7인 쌍은 첫 토큰과 마지막 토큰 하나뿐입니다. 길이 인 시퀀스로 넓히면 거리 인 쌍의 개수는 이렇습니다.
은 학습 시퀀스의 길이, 는 두 토큰 사이의 거리, 는 그 거리만큼 떨어진 쌍이 시퀀스 하나에 몇 개 들어 있는지입니다. 쿼리는 앞에 있는 key를 전부 보므로 쌍 하나하나가 그 거리에서 무엇을 참조할지 배우는 기회가 됩니다. 거리가 1 늘 때마다 이 기회가 하나씩 줄어듭니다.
128K로 학습한다면 입니다. 거리 1은 시퀀스 하나에 131,071번 나오지만 거리 131,071은 딱 한 번 나옵니다. 구간으로 묶으면 더 분명합니다. 학습 길이의 뒤쪽 절반, 즉 65,536보다 먼 거리에 속하는 쌍은 전체의 25%이고 마지막 4분의 1에 속하는 쌍은 6.25%뿐입니다.
이 비율조차 128K를 꽉 채운 긴 문서로만 학습했을 때의 상한입니다. 실제 코퍼스는 짧은 문서가 대부분이라 128K 시퀀스를 만들 때 짧은 문서 여러 개를 이어 붙입니다. 서로 다른 문서에 속한 두 토큰은 멀리 떨어져 있어도 서로를 참조할 이유가 없으니 의미 있는 먼 거리는 위의 계산보다 훨씬 드물죠. 이 빈도 문제를 분석한 STRING 연구(2024)는 오픈 모델의 실효 길이가 대개 학습 길이의 절반을 넘지 않는다고 보고했는데, 128K로 학습하고 실효 길이가 64K였던 Llama 3.1 70B가 정확히 그 경우입니다.
1M 모델도 사정은 같습니다. 1M에 이르는 경로는 크게 둘입니다. DeepSeek V4처럼 4K, 16K, 64K를 거쳐 1M까지 직접 학습하거나, Qwen3.5 계열처럼 262K까지만 학습한 뒤 YaRN으로 4배 늘립니다. 직접 학습해도 거리별 등장 횟수가 그리는 삼각형은 그대로라, DeepSeek V4가 128K 너머에서 흔들리는 것도 이 그림과 어긋나지 않습니다.
YaRN으로 늘린 경우에는 262K보다 먼 거리가 학습 중 한 번도 나오지 않습니다. YaRN은 RoPE(쿼리와 key 벡터를 위치에 비례한 각도로 회전시키는 Positional Encoding)의 회전 각도를 추론할 때 학습 범위 안으로 압축해서, 모델이 처음 보는 위치 값에 흔들리지 않게 할 뿐입니다. 그 거리에서 무엇을 찾아야 하는지를 가르쳐 주지는 않습니다.
그래서 처방은 먼 거리를 더 많이 보여 주거나, 이미 잘 배운 거리를 대신 쓰게 하는 쪽으로 나뉩니다.
| 방법 | 바꾸는 것 | 대표 사례 |
|---|---|---|
| 길이를 단계적으로 확장 | 학습 시퀀스 길이 | Llama 3 405B, 8K에서 128K까지 6단계 |
| 긴 문서 섞기 | 학습 데이터 | ProLong, 코드 저장소 30% · 책 30% · 짧은 데이터 37% |
| 위치 값 재사용 | 추론 시 위치 번호 | STRING, RULER 128K 66.6 → 81.7 |
길이를 한 번에 늘리지 않는 이유는 어텐션 연산이 길이의 제곱으로 늘고 짧은 문맥 성능도 흔들리기 때문입니다. 긴 문서를 따로 넣는 이유는 짧은 문서를 이어 붙인 시퀀스로는 길이만 길 뿐 의미 있는 먼 거리가 늘지 않아서이고, 코드 저장소와 책이 자연적으로 긴 문서를 가장 많이 공급합니다. STRING은 학습을 더 하지 않고 잘 배운 짧은 거리 값을 먼 위치에 옮겨 쓰는 방법인데, 아직은 이 연구 하나에서 나온 결과입니다.
길어질수록 가중치가 흩어진다
먼 거리를 충분히 배웠다고 해도 추론할 때 신호가 한 번 더 약해집니다. 어텐션은 쿼리와 각 key의 내적으로 점수를 매깁니다. 그다음 softmax가 점수마다 지수를 취하고 전체 합으로 나눠 합이 1인 가중치로 바꿉니다. 전체 합으로 나누기 때문에 후보가 늘어나면 같은 점수 차로 받을 수 있는 가중치가 줄어듭니다.
쿼리 하나가 key 개를 보는데 정답 key 하나만 점수가 만큼 높고 다른 key는 모두 같은 점수라고 해 보겠습니다. 정답이 받는 가중치는 입니다. 분자는 그대로인데 분모가 과 함께 커지니 길이가 늘면 정답의 몫이 줄어듭니다.
모델이 128K 문맥에서 정답에 가중치 절반을 주도록 학습됐다면, 가 나머지 131,071개의 합과 같아야 하므로 점수 차는 입니다. 같은 점수 차로 1M 문맥을 읽으면 분모에 백만 개가 넘는 위치가 들어와 정답의 가중치는 11%로 떨어지고 나머지 89%는 관련 없는 위치들에 조금씩 흩어집니다. 1M에서 다시 절반을 받으려면 점수 차가 13.9로 커져야 합니다.
필요한 점수 차는 길이의 로그에 비례해 늘어납니다. 1K에서 6.9이던 것이 128K에서 11.8, 1M에서 13.9가 되죠. 그렇다고 처음부터 13.9를 내도록 학습하면 짧은 문맥에서 문제가 생깁니다. 1K 문맥에서 점수 차가 13.9이면 정답이 가중치의 99.9%를 가져가서 주변 문맥을 함께 참고해야 할 때도 한 위치에만 쏠립니다. 고정된 점수 차로는 짧은 문맥과 긴 문맥을 동시에 맞출 수 없습니다.
점수 차가 작은 정보일수록 먼저 묻힙니다. 실제 문맥에는 정답과 비슷한 문장이 섞여 있어서 정답이 다른 key보다 크게 앞서지 못하는 경우가 많습니다. Chroma의 Context Rot 보고서(2025)에서 18개 모델을 시험해 보니 정답과 비슷한 방해 문장을 하나만 넣어도 성능이 떨어졌습니다.
그래서 나온 해법이 길이에 맞춰 점수 차를 키우는 방법입니다. 쿼리에 에 비례하는 계수를 곱하면 점수 차가 필요량과 같은 로그 꼴로 커집니다. 이 방식은 Scalable-Softmax(SSMax, 2025)가 제안했습니다. Llama 4도 추론할 때 위치가 뒤로 갈수록 쿼리에 곱하는 계수를 로그로 키웁니다. 다만 이 계수는 정답과 방해 문장의 점수를 함께 키우므로 방해 문장이 정답만큼 높은 점수를 받는 경우까지 고쳐 주지는 못합니다.
마치며
1M을 넣어도 먼 곳의 정보는 두 번 약해집니다. 학습할 때는 그 거리를 볼 기회가 거리가 멀수록 직선으로 줄고, 추론할 때는 정답이 가중치를 지키는 데 필요한 점수 차가 문맥 길이의 로그로 커집니다. 긴 시퀀스와 긴 문서로 학습 기회를 늘리고 스케일링으로 가중치를 지키는 방법이 나와 있지만, 정답과 비슷한 방해물이 많은 긴 문맥에서 어디까지 버티는지는 아직 확인되지 않았습니다. 그래서 모델 카드의 컨텍스트 길이는 상한으로 읽고 실효 길이는 따로 재 봐야 합니다.
다음 글에서는 MoE부터 MLA 같은 어텐션 변형, Sparse Attention, Hybrid Attention, Long Context 설계까지 지금까지 다룬 선택들이 실제 오픈 모델에서 어떤 조합으로 쓰이는지 한 장의 지도로 정리합니다.
함께 보면 좋은 글
- Positional Encoding에서 RoPE까지, 어텐션에 순서를 부여하는 법
- Linear Attention, 곱의 순서를 바꾸면 생기는 일
- Sparse Attention, 블록으로 묶으면 달라지는 것
- KV Cache를 10분의 1로 줄인 MLA의 트릭
- AI Agent의 컨텍스트 엔지니어링: 유한한 토큰 윈도우를 다루는 네 가지 전략
참고자료
- RULER: What’s the Real Context Size of Your Long-Context Language Models? (Hsieh et al., 2024)
- Why Does the Effective Context Length of LLMs Fall Short? (An et al., 2024)
- How to Train Long-Context Language Models (Effectively) (Gao et al., 2024)
- Scalable-Softmax Is Superior for Attention (Nakanishi, 2025)
- The Llama 3 Herd of Models (Meta, 2024)
- Context Rot: How Increasing Input Tokens Impacts LLM Performance (Chroma, 2025)