언어 모델이 예측하는 것
확률적 연속 엔진
언어 모델은 토큰 시퀀스를 입력받아 다음에 올 토큰에 대한 확률 분포를 할당합니다. the cat sat on the을 입력하면 전체 어휘에 걸쳐 확률을 출력합니다: mat, floor, couch에 높은 확률; xylophone, Tuesday에 낮은 확률.
그 분포에서 샘플링하고 토큰을 추가한 후 다시 입력하는 루프: 이 루프가 토큰 하나씩 텍스트를 생성합니다. 자기회귀 생성, 각 단계가 자신의 이전 출력에 회귀하기 때문에 그렇게 명명되었습니다.
세 가지 숫자가 언어 모델을 정의합니다
어휘 크기 (V). 모델이 생성할 수 있는 고유 토큰의 수. ANDREA-12M은 4,353개의 토큰을 사용했습니다; ANDREA-120M은 8,449개를 사용합니다.
컨텍스트 창 (T). 한 번의 순전파에 들어갈 수 있는 토큰의 수. ANDREA 모델은 T = 1,024를 사용합니다.
매개변수 수 (P). 내부에 존재하는 학습된 가중치의 수. 12M, 120M, & 480M은 P에 따라 가족을 명명합니다.
세 모델의 가족
| 변형 | d_model | 헤드 | 레이어 | 컨텍스트 | 파라미터 |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12.8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
세 가지 노브가 스케일링됩니다: d_model (모든 내부 벡터의 너비), n_layer (쌓인 트랜스포머 블록의 깊이), n_head (병렬 어텐션 프로젝션). 어휘 및 컨텍스트는 패밀리 전체에서 고정됩니다.
패밀리 테이블 읽기
작은 모델이 중요한 이유
제약이 주는 해방
수백억 개의 파라미터를 가진 대형 언어 모델은 수천 개의 GPU, 독점 데이터셋, 그리고 기업 예산이 필요합니다. 소수의 사람만이 이를 훈련시킬 수 있습니다. 소수의 사람만이 이를 수리할 수 있습니다.
하나의 GPU에서 작동하는 소형 언어 모델은 이를 뒤집습니다. 4090(또는 3060)을 가진 누구나 오픈 데이터로 ANDREA를 재현할 수 있습니다. 훈련 레시피가 모델 카드 역할을 겸합니다. 오픈 코드, 오픈 가중치, 오픈 데이터; 72시간의 컴퓨트로 완전한 출처 추적이 가능합니다.
용량 vs 품질
작은 모델은 훈련 코퍼스를 암기할 수 없습니다. 12.8M 파라미터를 가진 ANDREA-12M은 사실적 내용을 저장할 용량이 부족합니다; 턴 구조, 어휘 분포, 응답 형태를 학습합니다. 10배 용량의 ANDREA-120M은 사실적 회상, 다단락 일관성, 도메인 폭을 학습합니다(생물학 및 신호 처리 샘플에서 외부 평가 9.5/10으로 검증됨).
핵심 요점: 용량은 상한선을 설정합니다. 커리큘럼은 그 상한선에 도달할지 결정합니다. 활동 14-23은 커리큘럼을 다룹니다. [TITLE decoder_only/]
트랜스포머의 세 가지 변형
인코더, 디코더, 둘 다
원래 트랜스포머(Vaswani et al., 2017)는 인코더와 디코더를 번역을 위해 붙여서 출시했습니다. 그 논문에서 세 가지 아키텍처 계보가 파생되었습니다:
인코더 전용 (BERT 계보). 양방향 어텐션, 인과적 마스크 없음. 생성이 아닌 분류에 최적화. 훈련 중 토큰은 과거와 미래를 모두 봅니다.
인코더-디코더 (T5, BART). 인코더가 입력을 읽음; 디코더가 출력 생성, 크로스-어텐션으로 인코더에 주의. 번역, 요약에 사용.
디코더 전용 (GPT, ANDREA). 인과 마스크: 모든 토큰이 과거만 봄. 다음 토큰 예측하도록 훈련. 생성이 무료; 훈련 & 추론이 동일한 순전파 공유.
왜 디코더 전용이 하나의 GPU에서 승리하는가
세 가지 이유:
1. 단일 목표. 다음-토큰 예측이 모든 텍스트에 작동. 쌍으로 된 소스/타겟 불필요.
2. 훈련 & 추론 대칭성. 동일한 순전파, 특별한 생성 로직 없음.
3. 메모리 단순성. 교차 어텐션 없음; 한 스택의 레이어; 하나의 활성화 흐름.
ANDREA는 microGPT로부터 decoder-only 선택을 상속받았으며, microGPT는 nanoGPT로부터, nanoGPT는 GPT-2로부터 상속받았습니다. 혈통은 표준으로 유지됩니다; 토큰화, 훈련 인프라, & 커리큘럼에서 변화가 생깁니다.
ANDREA를 위한 Decoder-Only 이유
24 GB에 맞는 것들
매개변수당 바이트
RTX 4090은 24 GB의 VRAM을 탑재하고 있습니다. ANDREA-12M 훈련에는 1.4 GB가 사용되었습니다. ANDREA-120M은 훨씬 더 많이 사용했습니다. 이 차이는 간단한 계산 문제로 거슬러 올라갑니다: 훈련 중每個 매개변수가 메모리에 여러 번 나타납니다.
각 매개변수에 대해 훈련은 다음을 유지합니다:
- 가중치 자체 (1× 가중치)
- Adam 첫 번째 모멘트 (m): 가중치와 동일한 형태 (1× 가중치)
- Adam 두 번째 모멘트 (v): 가중치와 동일한 형태 (1× 가중치)
- 기울기: 가중치와 동일한 형태 (1× 가중치)
- 활성화 & 임시값: ~2-4× 가중치 (배치 & 컨텍스트에 따라 다름)
총합: ~6-8× 가중치 수, 정밀도에 따라 결정되는 바이트 단위.
정밀도가 모든 것을 곱한다
| 정밀도 | 파라미터당 바이트 | 120M 가중치 총합 | 비고 |
|---|---|---|---|
| FP32 | 4 | 480 MB | 기준; 가장 안전하지만 가장 느림 |
| FP16 | 2 | 240 MB | cuBLAS, 메모리 반으로 |
| FP8 E4M3 | 1 | 120 MB | 텐서 코어, NaN 위험 |
전체 훈련 시 메모리 사용량은 6-8배 곱하세요. ANDREA-120M은 FP16에서 편안하게 훈련됩니다 (~2 GB: 가중치 + 옵티마이저 + 그래디언트); FP8 E4M3은 RTX 4090 텐서 코어에서 훈련 시간을 반으로 줄입니다.
Activity 13 (grow_a_language_model_precision)은 FP 정밀도 트레이드오프를 자세히 설명합니다.
ANDREA-120M의 옵티마이저 상태 크기 계산
스물다섯 가지 활동
두 반쪽
이 코스는 깔끔하게 나뉩니다. 첫 번째 반쪽은 microGPT가 분야에 가르친 내용, 즉 하나의 GPU에서 실행되는 트랜스포머를 다룹니다. 두 번째 반쪽은 ANDREA의 실제 기여인 학습하는 커리큘럼을 다룹니다.
반쪽 1: 하나의 GPU에서 실행되는 트랜스포머 (활동 2-13)
| # | Activity | Beat |
|---|---|---|
| 2 | Harris 형태소 토크나이저 | 분포적 분할, 256+N+1 어휘 |
| 3 | 토크나이저-다이어트 정렬 | 포화점, 12M이 63.6% 낭비된 이유 |
| 4 | 임베딩 & 위치 | 학습된 토큰 + 위치 조회 |
| 5 | 스케일된 도트-프로덕트 어텐션 | Q·Kᵀ/√d, 인과 마스크, softmax |
| 6 | 멀티-헤드 어텐션 | 헤드 분할, 병렬 프로젝션 |
| 7 | 트랜스포머 블록 | MLP, 잔차 연결, 레이어 정규화 |
| 8 | 크로스-엔트로피 & 퍼플렉시티 | 로그-우도, SMMA 손실 |
| 9 | 커스텀 CUDA에서의 역전파 | microgpt_cuda.cu를 가로지르는 체인 룰 |
| 10 | AdamW | 분리된 가중치 감소; 왜 원래 Adam이 죽었는지 |
| 11 | LR warmup + cosine decay | 2000단계 램프; 왜 즉시 피크가 120M을 파괴하는지 |
| 12 | Gradient clipping | 전역 L2 노름; 3 CUDA 커널 |
| 13 | FP32 / FP16 / FP8 E4M3 | 정밀도 트레이드오프; 텐서 코어 |
후반부 2: 학습하는 커리큘럼 (활동 14-24)
| # | 활동 | 핵심 |
|---|---|---|
| 14 | 다중 팔 bandit | UCB1, 탐색 vs 활용 |
| 15 | 단계 기반 주사위 제어 | 7/14/21/28/42 단계, 1d3/1d4 주사위 |
| 16 | 보상 귀속 & EMA | 소스별 손실 EMA, 1000× 스케일링 |
| 17 | 소스 플로어 & 에포크 페널티 | 1/(1+epochs)로 암기 방지 |
| 18 | 커버리지 보너스 | 문서 수준 추적, 1.3× 신선도 |
| 19 | 커리큘럼 워밍업 | 처음 20K 스텝에서 7 채팅/산문 소스 |
| 20 | 문자수가 아닌 형태로 필터링 | has_system_prompt_shape() |
| 21 | 일관성 기반 조기 종료 | 빅그램/트그램/단어/문자 자동 중단 |
| 22 | 체크포인트, 재개, 신호 | 형식, SIGTERM/SIGUSR1, loss.json 연속성 |
| 23 | 샘플 감사 & 외부 평가 | 실행 읽기, 9.5/10 영역 |
| 24 | microGPT에서 ANDREA-120M으로 | v1 붕괴, v2 수정, v2.5 패치, v3 세련 |
또한 동반 자료: geometry_of_andrea는 모든 레이어를 기하학으로 본다 (임베딩 공간, 어텐션은 투영으로, 손실 표면, bandit은 이산 단순체 위의 산책).
제안 순서
활동 2-13은 작동하는 트랜스포머를 구축합니다. 트랜스포머를 훈련한 적이 있다면 2부로 건너뛰세요; 호기심이 생기면 돌아오세요.
가능한 한 각 활동은 독립적으로 설계되었습니다. Math beats 참조는 이전 활동을 이름으로 언급합니다(활동 5 참조: scaled dot-product attention). 코드 참조는 ~/git/uncloseai-cli/의 microgpt/microgpt_cuda.cu & microgpt/training_proxy.py를 가리킵니다.