작고 손대기 쉬운 CUDA 기반 GPT 구현체 (바이트 단위 트랜스포머)
Tiny hackable CUDA language model implementation
TL;DR Highlight
C·CUDA로 바이트 단위 GPT를 직접 학습하고 동화체 글을 생성한다
Who Should Read
LLM API만 써 오다 트랜스포머 학습·추론 구조를 코드로 직접 뜯어보고 싶은 백엔드 개발자
Core Mechanics
- 바이트를 토큰으로 쓰는 GPT
- 입력은 8비트 바이트 시퀀스이고 다음 바이트를 예측하도록 학습한다.
- 어휘 크기는 256이라 별도 토크나이저가 필요 없다.
- 텍스트 외에 DNA, 이미지, 오디오, 실행 파일 같은 바이트 스트림에도 구조상 쓸 수 있다고 한다.
- 표준 트랜스포머 구성 그대로
- 토큰 임베딩 뒤에 다층 트랜스포머를 쌓고, 각 층은 causal self-attention과 피드포워드 망이다.
- 어텐션에는 rotational positional encoding(상대 위치를 회전으로 넣는 방식)을 쓴다.
- 피드포워드 활성화 함수는 swish이고, 마지막에 선형 투영과 softmax로 256개 바이트 확률을 낸다.
- 학습은 AdamW와 cross-entropy
- 다음 바이트의 정답 확률을 높이는 cross-entropy loss로 학습한다.
- 옵티마이저는 weight decay를 분리한 AdamW다.
- 저장소 구성이 단순하다
- 파일은 gpt.c, gpt.h, train.c, infer.c, quantize.c와 transformer 폴더, Makefile이다.
- make data, make run, make infer 세 단계로 데이터 준비·학습·추론을 돌린다.
- 샘플 출력은 짧은 동화체
- 예시 설정은 d_model=512, hidden=1024, layers=16, vocab=256, seq_len=1024다.
- 온도 0.70으로 995토큰을 생성한 결과가 문법은 대체로 맞는 어린이 동화 문장이다.
- 문장 속 논리는 어색한 부분이 있다(예: 새에게 "다친 날개가 있냐"고 묻는다).
Community Reactions
- 수치 기울기 검사가 없다는 지적
- 역전파가 맞는지 확인하는 numerical gradient check를 찾지 못했다는 의견이 있었다.
- 사용법 정보가 부족하다는 의견
- 데이터 위치와 직접 만든 데이터 사용법, 토크나이저 생성, 중단 방법, 필요 메모리, 컨텍스트 크기 설정 정보가 필요하다는 의견이 있었다.
- LoRA 학습과 양자화 방법도 궁금하다는 의견이 있었다.
- 8GB GPU에서 메모리 부족
- RTX 3050(8GB)에서 make run -j 10을 했더니 attention.c:91에서 CUDA out of memory가 났다는 경험이 있었다.
- CUDA 12.4가 부분 지원이라는 clang 경고도 함께 나왔다고 한다.
- 확장·이식성 질문
- LoRA 파인튜닝을 얹을 수 있는지, 설계가 너무 저수준인지 묻는 댓글이 있었다.
- ARM에서 동작하는지 묻는 댓글도 있었다.
How to Apply
- Ubuntu에서 클론해 샘플 생성까지 돌리기
- 원문의 apt 설치 명령 뒤에 git clone, make data, make run, make infer 순서로 실행한다.
- 8GB급 GPU라면 -j 값을 줄여 메모리 부족이 나는지 먼저 확인한다.
- gpt.c를 읽으며 구조 대응표 만들기
- 임베딩, causal attention, RoPE, swish 피드포워드, 출력 투영을 코드 위치와 하나씩 짝지어 적는다.
- 사내 LLM 학습 자료로 공유한다.
- 역전파 검증 테스트 직접 추가하기
- 작은 파라미터 하나를 ±ε로 흔들어 loss 변화와 역전파 기울기를 비교하는 테스트를 만든다.
- 수정하거나 포팅하기 전에 돌려 회귀를 잡는다.
Try It
# Ubuntu 터미널에 붙여넣기 (원문 README의 실행 절차 그대로)
sudo apt update
sudo apt install -y clang make time libopenblas-dev nvidia-cuda-toolkit git curl
git clone https://github.com/markusheimerl/gpt && cd gpt/
make data
make run -j 6
make inferTerminology
관련 논문
AI 글쓰기 버릇을 학습으로 뺀 Qwen3-4B (qwen3-4b-deslop)
Qwen3-4B를 LoRA로 증류했더니 AI 문체 점수가 121에서 12.5로 떨어졌다
Dust: 역전파 없이 Transformer를 사전학습하는 방법
활성값에 토큰별 노이즈를 줬더니 역전파 없이 Transformer 사전학습이 됐다
TurboGPT: 22KiB 트랜스포머를 13초 만에 학습시키는 CUDA 프로젝트
CUDA C++로 바이트 단위 tiny GPT를 1분 안에 학습하는 오픈소스
Gemini가 만든 라벨 $9로 자기 대체 모델 GLiNER 학습시키기
Gemini 라벨 $9로 GLiNER를 튜닝해 로컬에서 F1 0.83 달성
절대 포기하지 않기(Never Give Up): LLM RL에서 어려운 문제를 풀게 만드는 방법
쉬운 문제에 쓰는 연산을 줄이고 어려운 문제를 재시도했더니 어려운 문제 성능이 올랐다
3.8B LLM을 $998로 학습해 CORE 0.384 달성하기
B200 8장으로 43시간, $998를 들여 3.8B 모델이 CORE 0.384를 기록했다
Paul Graham: "17살이면 LLM을 밑바닥부터 만들어 보겠다"
PG는 17살이면 창업 말고 LLM 밑바닥 구현부터 배우겠다고 했다
DeepSeek을 GPT-OSS에 증류해도 검열은 따라오지 않았다
DeepSeek V4 Flash로 금융 추론을 증류했더니 성능은 올랐고 검열은 안 따라왔다