저희팀 개발자의 고민이 녹여있는 문서라 인사이트가 있을거라 생각합니다.
Qwen3-235B-Thinking-2507 모델에는 DCA와 MInference 전략이 도입되었음
1. DCA (Dual Chunk Attention)
긴 입력(100K~1M 토큰 이상)을 처리 가능하게 만드는 방법
LLM은 훈련 당시 최대 컨텍스트 길이 (예: 4K, 8K, 32K 토큰)를 넘어가는 입력이 들어오면 문맥 추적 능력이 급격히 떨어짐.
이를 늘리려면 보통 다시 긴 길이로 재학습(파인튜닝) 해야 함.
왜 “Dualˮ인가?
단순청크 처리만 하면 전역 일관성(Global Coherence) 이 깨짐.
예를 들어, 1M 토큰의 앞부분 내용이 뒷부분 답변에 반영되지 않거나, 연결이 느슨해짐.
DCA는 두 종류의 어텐션(Intra + Inter) 을 병행해서 “청크 내부 세부 정보 + 청크 간 연결ˮ 둘 다 놓치지 않게 함.
동작구조
입력을 청크(Chunk)로 나눕니다.
예: 1M 토큰 입력 → 4K~8K 단위로 쪼갬. 이중 어텐션 구조(Dual Attention)
Intra-Chunk Attention: 청크 내부 토큰끼리의 관계를 계산 → 로컬 문맥을 정확히 이해
Inter-Chunk Attention: 청크끼리의 연결 관계를 계산 → 전역 문맥을 유지
이렇게 하면 청크 내·청크 간 문맥을 모두 보존할 수 있음.
Flash Attention과 호환, 효율적인 GPU 메모리 사용 및 속도 유지.
예시
엄청 긴소설(1M) 를 읽고 요약해야 하는 상황
일반모델: 한 번에 다 읽으려다 머리가 터짐(OOM).
단순청크 처리: 각 장(chapter)별로 따로 읽고 요약 → 장과 장 사이의 연결이 어색해짐.
DCA: 각 장을 읽을 때, 해당 장의 내용(Intra)을 꼼꼼히 이해하면서, 동시에 이전 장들과 연결된 핵심 흐름(Inter)을 계속 추적 → 끝까지 일관된 스토리 유지.
DCA VS prefill
개념: Context를 chunk로 나눠서 던진다.
2. MInference
중요 내용만 attention 계산
중요한 토큰만 선택
- 모든토큰에서 토큰조합을 계산하는 대신, 모델이 판단하기에 의미상 중요한 토큰 쌍에 대해서만 Attention을 수행.
- 예: “본문 내용”과 직접 연결되는 “질문 토큰” 위주로 연산.
- MInference는 각 헤드별로 A-Shape/ Vertical-Slash / Block-Sparse같은 희소패턴을 정하고,
추론 시 그 패턴에 맞는 인덱스만 동적으로 계산하는 방식.
그래서 Prefill 단계 가 크게 빨라짐.
(참고) Prefill 단계
LLM 추론은 보통 두 단계:
- Prefill(프롬프트 처리): 입력토큰 전부를 한 번에 병렬 처리해 각 층의 KV 캐시를 만듦.
- Decode(토큰생성) : KV캐시를 재사용해 한 토큰씩 생성. 메모리 접근이 병목발생
정밀도 보정
처음에 선택한 토큰관계가 너무 단순해서 의미가 깨지지 않도록,
필요 시 일부 토큰 간 관계를 재계산하여 품질 유지.
효과
계산량 : O(n²) --> O(n·k) 수준으로 감소 (k = 중요한 토큰 수)
속도 : 긴 문맥에서 최대, 3~7배 prefill 속도 향상
메모리 사용량 : 대폭 감소 → 1M 토큰도 가능
품질 : 불필요한 계산을 줄였지만, 중요한 관계는 보존해서 성능 하락 최소화
중요 토큰만 고르는 방식
긴 문맥에서 실제로 관측되는 어텐션 희소 패턴을 헤드별로 정하고, 그 패턴에 맞춘 인덱스만 계산함.
사전단계 : 각 어텐션 헤드가 따르는 희소 패턴 (A-shape / Vertical-Slash / Block-Sparse)을 결정.
추론단계 : 해당 패턴에 맞춰 스파스 인덱스를 동적으로 근사해서, 그 위치들만 연산함.
희소패턴 정하는 방식
장문 맥락의 어텐션 행렬이 매우 희소하다는 관찰에서 출발
사전단계에서 각 어텐션 헤드마다 어떤 희소패턴(예: Vertical-Slash / A-shape / Block-sparse)을 쓸지 탐색해 구성을 정함.
추론단계에서 그 패턴에 맞는 인덱스만 동적으로 생성해서 계산(커스텀 커널). 이로써 프리필(prefill) 단계가 최대 10배 가속
3. 사용법
1M 토큰 컨텍스트를 활성화하는 방법
1단계: 구성 파일 업데이트
모델을 다운로드하고 길이 외삽 및 희소 주의에 대한 구성을 포함하는 내용을 변경 --> config.json에서 config_1m.json
2단계: 모델서버 시작
구성을 업데이트한 후 모델 제공을 위해 vLLM 진행
vLLM 주요매개변수
context가 증가해도 768k까지는 90점대를 유지함
Context가 길어도 LLM 성능이 잘 나와야 하는 경우 1M 모드활용 필요
- Qwen3 235B Thinking모델은 기본적으로 256K(기본 262,144 토큰)
- 1M모드는 KV 캐시/활성 메모리 때문에 총 GPU 메모리 1TB급을 요구
- 실 환경에선 현실적인 길이로 운용하는 게 일반적
'관심분야 > 생성형AI' 카테고리의 다른 글
[질문의 기술] 프롬프팅 기초: "좋은 질문 vs 나쁜 질문" (3) | 2025.08.26 |
---|---|
외국수표 서명 인식 OCR Model 비교분석 (0) | 2025.08.11 |
쿼리 트랜스포메이션 (0) | 2025.07.06 |
자연어 To SQL (0) | 2025.07.01 |
gamma 사용후기 (1) | 2025.06.09 |