CS336: 처음부터 만드는 언어 모델링
(cs336.stanford.edu)- 언어 모델은 현대 NLP 애플리케이션의 기반이며, 하나의 범용 시스템으로 다양한 하위 작업을 다루는 새 패러다임을 연다
- 이 과정은 사전학습용 데이터 수집·정제, Transformer 구축, 학습, 배포 전 평가까지 언어 모델 개발 전 과정을 직접 구현하게 함
- 과제는 토크나이저·모델 구조·옵티마이저 구현에서 시작해 GPU 최적화, FlashAttention2의 Triton 구현, 분산 학습 코드까지 확장함
- 수강에는 Python과 소프트웨어 엔지니어링 숙련도, PyTorch, 메모리 계층 같은 시스템 개념, 미적분·선형대수·확률통계·머신러닝 지식이 필요함
- 5유닛의 구현 중심 수업으로, 기존 코드 참조와 LLM 직접 풀이를 제한하고 CPU 디버깅 후 GPU 학습·벤치마크를 권장함
과정의 목표와 범위
- 언어 모델은 현대 자연어 처리(NLP) 애플리케이션의 초석이며, 하나의 범용 시스템으로 여러 하위 작업을 처리하는 새 패러다임을 연다
- AI, ML, NLP 분야가 계속 성장하면서 과학자와 엔지니어 모두에게 언어 모델에 대한 깊은 이해가 중요해진다
- 운영체제 수업이 운영체제 전체를 처음부터 만드는 방식에서 영감을 받아, 학생이 직접 언어 모델을 개발하는 전 과정을 따른다
- 다루는 범위는 사전학습 데이터 수집과 정제, Transformer 모델 구성, 모델 학습, 배포 전 평가까지 이어진다
요구 역량
- 대부분의 과제는 Python으로 진행하며, 다른 AI 수업보다 최소한의 스캐폴딩만 제공한다
- 작성해야 하는 코드량은 다른 수업보다 최소 한 자릿수 규모 이상 많아, Python과 소프트웨어 엔지니어링 숙련도가 매우 중요하다
- 신경망 언어 모델을 여러 머신의 GPU에서 빠르고 효율적으로 실행하는 작업이 큰 비중을 차지한다
- PyTorch에 대한 강한 친숙도와 메모리 계층 같은 기본 시스템 개념을 기대한다
- 행렬·벡터 표기와 연산, 확률·가우시안 분포·평균·표준편차, 머신러닝과 딥러닝 기초를 편하게 다룰 수 있어야 한다
- 5유닛 수업이며 구현 비중이 매우 높아 충분한 시간을 배정해야 한다
과제 구성
- Assignment 1 Basics는 표준 Transformer 언어 모델 학습에 필요한 토크나이저, 모델 아키텍처, 옵티마이저를 구현하고 최소 언어 모델을 학습한다
- Assignment 2 Systems는 Assignment 1의 모델과 레이어를 고급 도구로 프로파일링·벤치마킹하고, FlashAttention2를 자체 Triton 구현으로 최적화하며, 메모리 효율적인 분산 학습 코드를 만든다
- Assignment 3 Scaling은 Transformer 각 구성 요소의 기능을 이해하고, 학습 API에 질의해 모델 스케일링 예측을 위한 scaling law를 맞춘다
- Assignment 4 Data는 원시 Common Crawl 덤프를 사용 가능한 사전학습 데이터로 변환하고, 필터링과 중복 제거로 모델 성능을 개선한다
- Assignment 5 Alignment and Reasoning RL은 수학 문제 해결에서 추론하도록 LM을 학습시키기 위해 지도 파인튜닝과 강화학습을 적용한다
- Assignment 5의 Optional Part 2는 DPO 같은 안전 정렬 방법을 구현하고 적용한다
GPU 컴퓨트와 비용
- 집에서 따라가는 경우 클라우드 제공자의 GPU 컴퓨트를 사용해 과제를 완료할 수 있다
- 2026년 3월 28일 기준 단일 B200 GPU 공개 가격은 Modal $6.25/시간, Lambda Labs $6.69/시간, RunPod $4.99/시간, Nebius $5.50/시간 또는 선점형 $3.05/시간, Together $7.49/시간이다
- Modal은 월 $30 무료 컴퓨트를 제공하며, 실제 컴퓨트에 대해서만 과금하고 로컬 개발과 대규모 GPU 실험 전환을 단순하게 만든다
- 비용 절감과 편의를 위해 구현의 정확성은 먼저 CPU에서 디버깅하고, 학습 실행이나 GPU 연산 벤치마크에는 과제에서 권장하는 수의 GPU를 사용하라고 권장한다
수업 운영과 제출 규칙
- 강의는 월·수 3:00–4:20pm Skilling Auditorium에서 진행하며, 녹화본은 YouTube playlist에 제공한다
- 모든 수업 관련 질문은 공개 Slack 채널에서 해야 하며, 모든 공지도 Slack에서 이뤄진다
- 모든 과제는 마감일까지 Gradescope로 제출하며, 이메일 제출은 받지 않는다
- 마감 전까지 원하는 만큼 다시 제출할 수 있고, 마지막 제출물만 채점한다
- 부분 제출은 제출하지 않는 것보다 낫다
- 학생당 6일의 late day를 사용할 수 있으며, late day 1일은 마감을 24시간 연장한다
- 과제당 최대 3일의 late day를 사용할 수 있다
- 채점에서 객관적 오류가 있다고 판단하면 성적 공개 후 3일 안에 Gradescope로 재채점 요청을 낼 수 있다
협업과 AI 도구 정책
- 스터디 그룹은 허용하지만, 각 학생은 자신의 과제를 이해하고 직접 완료해야 하며 학생별로 하나의 과제를 제출해야 한다
- 그룹으로 작업했다면 과제 상단에 스터디 그룹 구성원의 이름을 적어야 한다
- ChatGPT 같은 LLM 프롬프트는 저수준 프로그래밍 질문이나 언어 모델에 대한 고수준 개념 질문에는 허용한다
- LLM을 직접 사용해 문제를 푸는 것은 금지한다
- 과제를 수행할 때 Cursor Tab, GitHub CoPilot 같은 AI 자동완성은 비활성화하라고 강하게 권장하며, 함수명 자동완성 같은 비AI 자동완성은 허용한다
- 수업 자료는 자체 구현에 필요한 내용을 담기 때문에, 과제 핸드아웃에서 별도로 허용하지 않는 한 온라인에 있는 기존 구현 코드를 보면 안 된다
댓글과 토론
Hacker News 의견들
-
2025년판 강의를 최근 끝냈고, 영상과 대부분의 과제를 했지만 비용이 큰 일부 작업은 건너뜀. 첫 두 과제만 해도 생각과 디버깅이 엄청나게 필요했고, 딥러닝 기초가 어느 정도 있었는데도 퇴근 후와 주말 시간을 조금씩 써서 몇 달이 걸렸음
Stanford 수강생들이 2주 간격으로 과제를 제출하는 게 어떻게 가능한지 상상하기 어려움. 교수진과 조교들이 강의 설계, 최신 동향이 담긴 슬라이드, 훌륭한 과제 준비에 정말 많은 공을 들였고, 작은 구성요소부터 실제 언어 모델을 만들고 LLM 파이프라인의 주요 부분을 검증하면서 전체가 맞물리는 과정을 직접 볼 수 있어 성취감이 큼
다만 실행 환경 요구사항은 더 명확히 안내해 줬으면 좋겠음. 하네스가 Linux + NVIDIA GPU에서 가장 잘 동작하고 특정 CUDA 버전이나 아키텍처를 기대하는데, 연구자에게는 당연해도 개인용 환경에서는 드묾. 집에서 따라가려면 Windows + WSL2 + NVIDIA GPU나 여러 플랫폼의 임대 GPU가 차선인데, 어느 쪽도 쉽거나 싸지 않음. 호환 GPU가 없는 사람이 과정을 최대한 활용하는 방법도 안내가 있으면 좋겠고, Mac OS에서 메모리 분석을 조심하지 않으면 Python 코드가 멈춰 재부팅을 강제할 수 있다는 것도 배웠음- 조교 입장에서 확인했음. 이제 더 많은 환경을 테스트할 자원이 생겼고 가능한 한 해보겠음. 직접 짠 코드에서 메모리 과사용으로 멈추는 건 어디서든 생길 수 있지만, 토크나이저 과제에서 제한된 메모리 사용을 달성하도록 안내를 더 엄밀히 할 수 있다고 봄
이 댓글들에서 GPU 임대 비용이 다소 과장된 면도 있음. 대부분의 개발은 로컬에서 하고, 필요한 때만 온디맨드 GPU로 짧게 돌리면 됨. 과제 1은 GPU가 없어도 로컬 머신에서 전부 실행 가능하고, 과제 1·2도 몇 시간 임대만으로 대부분 해결 가능함. 크게 조심하지 않고 임대 GPU를 계속 써도 약 200달러 정도이고, 문제 규모를 줄일 의향이 있으면 50달러 아래로도 쉽게 낮출 수 있음. 이런 점과 조정 방법을 더 명확히 도표화할 수 있을 것 같음
추가 피드백이나 문제가 있으면 저장소에 이슈를 열어주면 좋겠음. 모르는 문제는 고치기 어렵기 때문임
- 조교 입장에서 확인했음. 이제 더 많은 환경을 테스트할 자원이 생겼고 가능한 한 해보겠음. 직접 짠 코드에서 메모리 과사용으로 멈추는 건 어디서든 생길 수 있지만, 토크나이저 과제에서 제한된 메모리 사용을 달성하도록 안내를 더 엄밀히 할 수 있다고 봄
-
며칠 전 Claude로 gpt-1 개선판을 구현해 봤음. 머신러닝 엔지니어가 아니라 평범한 백엔드 엔지니어인데, 결과적으로 gpt-1과 KellerJordan의 modded-nanogpt를 섞은 형태가 됨
게이밍 PC로 원래 gpt-1 논문의 결과를 재현할 수 있었고, VRAM도 많지 않음. NVIDIA GeForce RTX 2060 SUPER로 1시간 학습만에 대부분 결과를 재현했으니, LLM 사전학습에 관심 있다면 같은 방식으로 해보길 추천함
코드는 여기 있음: https://github.com/epoyraz/modded-gpt-1
아니면 Claude 4.8이나 Codex 5.5에 그냥 물어봐도 됨 -
richardsocher가 가르쳤던 cs224d에 좋은 기억이 있음. 트랜스포머 이전 시대에 만들어져 지금은 조금 오래됐지만, 당시에는 딥러닝을 자연어 처리에 적용하는 아주 멋진 입문 강의였음
https://cs224d.stanford.edu- 비슷하게 느꼈음. 그때 인터넷의 잠재력을 깨달았고, 최상위 연구대학 대학원생이 아니어도 최전선 내용을 배울 수 있었음
-
“자습용 GPU 연산”이라고 하지만, 추천에 나온 B200은 시간당 4.99달러부터 시작함. 처음 시작하는 데 정말 필요한가 싶음
직접 처음부터 LLM을 만들어보는 중인데, 초기 단계에서는 Vast.ai의 4090 이상은 필요하지 않았음- 조교 입장에서는 전혀 그렇지 않음. 첫 과제에는 로컬 연산, 심지어 M 시리즈 GPU까지도 가능하도록 축소 섹션을 명시적으로 넣었음. 과제 2에는 GPU의 Triton 지원이 필요한 구간이 몇 개 있지만, 전부 훨씬 저렴한 GPU에 맞게 조정 가능함
올해 Stanford 학생들에게 Blackwell GPU를 받을 수 있었던 운이 있어서, 과제 설명이 주로 그 기준으로 작성됐음 - FPGA와 꽤 비슷하다고 봄. 운영 환경에 필요한 하드웨어는 상대적으로 작을 수 있는데, 운영용 모델이나 비트스트림은 대상 사용 사례에 필요한 것만 남기도록 강하게 크기 최적화되어 있기 때문임
반대로 컴퓨트 커널이나 IP 블록을 설계하는 법을 배우고 실험할 때 필요한 하드웨어는 훨씬 강력하거나 용량이 커야 함. 실험물은 의도적으로 최적화의 반대편에 있고, 모든 단계에서 읽기 쉽고 들여다보기 쉽고 디버깅하기 좋게 만들기 때문에 결과 모델이나 비트스트림이 크게 부풀고 비최적화됨
남이 완성해서 4090 같은 장비에서 쓰도록 최적화한 모델을 자기 프롬프트로 실행하는 것도 실험이긴 하지만 싸게 가능함. 20달러짜리 FPGA용으로 설계·합성된 남의 비트스트림을 같은 FPGA에 올리고 자기 입력 신호를 넣는 것과 비슷함. 하지만 이 강의에서 자기 모델 설계를 배우며 하게 될 실험은 그런 종류가 아님 - 필요한 자원이 교육기관에서 제공되지 않는다는 게 이상해 보임
- 자기 LLM을 학습하는 데 GPU가 꼭 필요한 건 아님
- 의심하는 게 맞음. TinyStories 데이터셋으로 꽤 괜찮은 소형 언어 모델을 4060Ti 16GB에서 문제없이 학습했음. “작다고 봐도 될 정도”보다 큰 모델로 아이디어가 확장되는지 시험하려 할 때부터 문제가 생김
- 조교 입장에서는 전혀 그렇지 않음. 첫 과제에는 로컬 연산, 심지어 M 시리즈 GPU까지도 가능하도록 축소 섹션을 명시적으로 넣었음. 과제 2에는 GPU의 Triton 지원이 필요한 구간이 몇 개 있지만, 전부 훨씬 저렴한 GPU에 맞게 조정 가능함
-
이 강의가 흥미로운데, 선수 조건도 궁금함. 머신러닝과 딥러닝 기초에 익숙해야 한다고 되어 있는데, 해당 주제를 구현 중심으로 자습할 만한 자료나 Stanford 강의 녹화 경험이 있으면 알고 싶음
- 2024년 봄 CS224N 강의와 교재 1~13장이 이 선수 조건에는 충분했음. CS336처럼 영상과 과제가 공개되어 있고, 기초는 최근 몇 년과 거의 같아서 2024년 자료여도 문제 없음
다만 CS336은 최첨단 기법을 훨씬 더 많이 다루므로, 그쪽은 2026년판이 중요함
강의: https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1246...
강의 영상: https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPD...
교재: https://web.stanford.edu/~jurafsky/slp3/
- 2024년 봄 CS224N 강의와 교재 1~13장이 이 선수 조건에는 충분했음. CS336처럼 영상과 과제가 공개되어 있고, 기초는 최근 몇 년과 거의 같아서 2024년 자료여도 문제 없음
-
정말 훌륭함. 지난 한 달 동안 비슷한 걸 해왔고, 도전 조건으로 Python 표준 라이브러리 외에는 아무 라이브러리도 쓰지 않았음, numpy도 안 씀
Word2Vec부터 시작해 RNN, LSTM을 만들었고 지금은 트랜스포머 아키텍처를 절반쯤 구현한 상태임 -
온라인에 공개된 YouTube 영상과 강의 자료로 이 수업을 같이 들을 그룹을 만들었음. 어렵지만 보람 있고, 주 1개 강의 영상씩 진행했음
30명 넘게 시작했지만 마지막 세션에는 8명만 남았음 -
해보고 싶지만 아직 필요한 능력이 부족한 것 같아 걱정됨. 언젠가는 가능할지도 모름
- 그럼 선수 과목 중 하나부터 시작하면 됨
-
집에서 이 강의를 따라가기 위한 최소 GPU가 무엇인지 궁금함. 5080 16GB를 가지고 있는데, 정말 이보다 더 필요한가?
- 첫 섹션은 M1 칩에서도 가능할 것 같고, 두 번째는 Triton 지원이 필요해 보이니 5080이면 괜찮을 것 같음
-
첫 두 과제를 1년에 걸쳐 독립적으로 진행했고 정말 많이 배웠음. 이후에 어떤 강의를 들었는지 궁금함
- Frontier Systems 영상을 보고 있음: https://cs153.stanford.edu/
CS336에서 아쉬웠던 건 강화학습 구성요소 전달 방식이었고, 그 부분은 CME 295의 5·6강이 더 좋았음
https://cme295.stanford.edu/syllabus/
확산 모델 수업인 CME 296도 좋다는 얘기를 들었고, 다음 단계로 괜찮아 보임
https://cme296.stanford.edu/syllabus/
- Frontier Systems 영상을 보고 있음: https://cs153.stanford.edu/