1P by GN⁺ 2시간전 | ★ favorite | 댓글 1개
  • Train Your Own LLM From Scratch는 GPT 학습 파이프라인의 모든 조각을 직접 작성하며 각 구성 요소가 무엇을 하고 왜 필요한지 이해하는 실습형 워크숍
  • 목표는 노트북에서 처음부터 학습한 GPT 모델로 Shakespeare풍 텍스트를 생성하는 것이며, 워크숍 한 세션 안에 끝낼 수 있도록 약 10M 파라미터 모델로 축소됨
  • nanoGPT가 GPT-2 124M 파라미터 재현을 목표로 하는 반면, 이 프로젝트는 핵심만 남겨 노트북에서 1시간 이내 학습 가능한 형태로 설계됨
  • 직접 작성하는 구성 요소는 Tokenizer, Transformer 기반 모델 아키텍처, 학습 루프, 텍스트 생성이며, 최종적으로 model.py, train.py, generate.py를 직접 완성하게 됨
  • 사전 지식은 Python 코드 읽기에 익숙한 정도면 충분하고, 머신러닝 경험은 필요하지 않으며 Python 3.12+ 가 필요함
  • 실행 환경은 Mac, Linux, Windows의 노트북이나 데스크톱을 지원하며, 학습은 Apple Silicon GPU의 MPS, NVIDIA GPU의 CUDA, 또는 CPU를 자동으로 사용함
  • 로컬 설치는 uvuv sync를 실행하는 흐름을 권장하고, 로컬 환경이 없으면 Google Colab에 파일을 올려 !python train.py로 실행 가능함
  • 워크숍은 문자 단위 토크나이저, 임베딩, 셀프어텐션, LayerNorm, MLP 블록, 손실 함수, AdamW, 그래디언트 클리핑, 학습률 스케줄링, temperature와 top-k 샘플링을 순서대로 다룸
  • 기본 아키텍처는 입력 텍스트를 문자 단위 토큰 ID로 바꾸고, 토큰 임베딩과 위치 임베딩을 거쳐 여러 Transformer 블록을 통과한 뒤 다음 토큰 확률을 위한 logits를 출력함
  • 제공 모델 설정은 Tiny 약 0.5M 파라미터와 M3 Pro 기준 약 5분, Small 약 4M과 약 20분, 기본값 Medium 약 10M과 약 45분 학습 시간으로 제시됨
  • 모든 설정은 vocab_size=65문자 단위 토큰화block_size=256을 사용하며, Shakespeare 같은 약 1MB 소규모 데이터셋에 맞춰져 있음
  • BPE 토큰화는 GPT-2의 50,257 vocab처럼 어휘가 커서 작은 데이터셋에서는 대부분의 토큰 bigram이 너무 드물어 패턴 학습이 어렵고, 더 큰 데이터셋에서는 BPE로 전환하는 내용을 다룸
  • 주요 참고 자료로 nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019), TinyStories paper를 제시함
Hacker News 의견들
  • 이 자료가 흥미롭다면 Stanford의 CS336 수업도 강력 추천함. 같은 커리큘럼을 훨씬 깊게 다루고, 스케일링 법칙 같은 이론적 직관과 커널 최적화/프로파일링 같은 시스템 관점도 소개함
    물론 과제를 직접 해야 함: https://cs336.stanford.edu/

    • 강의는 어디서 볼 수 있는지 모르겠음. 강의 옵션이 안 보임
  • 홍보를 좀 하자면, 머신러닝 작동 원리를 처음부터 설명하는 Jupyter 노트북 시리즈가 있음
    https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
    그리고 당연히 LLM을 처음부터 만드는 방법도 다룸
    https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...

  • 마침 Sebastian Raschka의 저장소/책/강좌인 Build a Large Language Model (From Scratch) 를 막 시작했음. 어떤 학습 자료를 쓸지 골라야 하는 건 좋은 고민일지도 모름
    [0] https://github.com/rasbt/LLMs-from-scratch
    [1] https://www.manning.com/books/build-a-large-language-model-f...
    [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...

    • 그 책을 정말 재미있게 봤음. 실제 내부 구조를 이해하고, 모든 계산의 동작 예제를 보고 싶은 사람에게 좋음
  • 태어난 날부터 계속 해오고 있음. 시작은 힘들었지만 점점 나아지는 중

    • 사실 주로 물리 모델을 학습해 왔고, 거기에 LLM이 붙어 있는 셈임
  • fast.ai가 비교적 새로웠던 시절에 ULMFiT로 해본 적 있음. 아마 BERT가 최신 최고 성능이던 때였고, 기본 모델을 학습한 뒤 헤드로 특화할 수 있는 구조였음
    기본 모델에는 Wikipedia 전체를 쓰고, firehose로 모아둔 몇 GB짜리 트윗을 추가로 사용함. 게임 개발용 컴퓨터 20대가 있는 랩을 쓸 수 있었고, 대략 GTX 2080급이었던 듯함. 토큰화된 Wikipedia 한 번 학습에 반나절 정도 걸려서, 각 컴퓨터에 서로 다른 설정을 돌려 하이퍼파라미터 튜닝을 하고 다음 날에는 가장 좋은 결과를 출발점으로 삼았음. 다음 날 아침 출근해서 결과 확인하는 게 늘 재미있었음
    엔지니어링은 끔찍하고 즉흥적이었지만 많이 배웠음. 결과는 그럭저럭이었고 트윗 분류를 했지만, 이걸 진지하게 하려면 얼마나 많은 GPU 성능과 엔지니어링 난제가 필요한지 감이 생겼음. 생성의 잠재력은 완전히 이해하지 못했지만, 궁금해서 만들어본 트윗들을 보며 한참 웃기도 했음

  • 이건 Andrej Karpathy의 이 영상(https://youtu.be/kCc8FmEb1nY)을 글 형태로 거의 그대로 옮긴 것처럼 보이는데, 내가 잘못 본 건가?

    • 페이지에 nanoGPT와의 관계가 설명되어 있음
      “nanoGPT는 GPT-2(1억 2400만 매개변수) 재현을 목표로 하고 많은 내용을 다룬다. 이 프로젝트는 핵심만 남기고, 노트북에서 1시간 안에 학습되는 약 1,000만 매개변수 모델로 축소한다…”는 식임
    • 맞음, 잘못 본 것임
  • 맥락을 보태면, 그는 MLX 개발자 중 한 명이고 실력 있는 머신러닝 연구자임

    • 출처가 궁금함. 그건 맞지 않는 것 같음
  • “GPT 학습 파이프라인의 모든 조각을 직접 작성하며 각 구성요소가 무엇을 하고 왜 필요한지 이해하는 실습 워크숍”이라고 되어 있는데, 의존성에 torch가 보이니 텐서와 역전파는 직접 구현하지 않고 당연한 것으로 가져오는 듯함. 그래도 “처음부터” 만든다고 할 수 있을까 싶음
    비슷한 걸 Rust로 해봤고 AI 도움도 받았지만, 의존성 없이 표준 라이브러리만 쓰도록 제한했음. 그 결과 텐서 설계, 커널 개념, 단순 경사하강 최적화기, 직접 만든 JSON 파서, rayon 비슷한 CPU 데이터 병렬 추상화 등 훨씬 많은 걸 구현해야 했음. 전부 연결해서 돌아갔을 때 꽤 재미있었음. 매우 느렸지만 작동은 했음

  • PyTorch를 쓰는 걸 더 이상 “처음부터”라고 볼 수 있는지 잘 모르겠음. 표준 라이브러리까지 피하라는 식의 극단적인 얘기는 아니지만, 목적에 딱 맞는 라이브러리를 가져오는 시점에서는 “처음부터”처럼 느껴지지 않음

    • 일리는 있지만, 대부분의 머신러닝 쪽 사람들에게는 PyTorch가 사실상 표준 라이브러리
  • “처음부터 LM 학습하기”가 더 맞을 듯함. “Large”라고 부를 만큼 큰 모델을 만들 기계가 있을지는 의문임

    • 일반적인 한도의 신용카드가 있다면 HuggingFace나 Mistral Forge 같은 네오클라우드 제공업체에서 충분한 자원을 빌릴 수 있을 것임
      그럴 가치가 있다는 말은 아니지만, 학습하려고 직접 GPU를 살 필요는 없음
    • 단일 3090에서도 16억 매개변수 모델을 처음부터 끝까지 학습할 수 있음. 꽤 큰 모델임
    • 내게도 RAM 반 테라바이트가 있음! DDR4이긴 하지만 어쨌든 RAM임
      48개 프로세서 코어도 붙어 있음! AVX512는 지원 안 하지만 계산은 할 수 있음
      LLM을 충분히 학습할 수 있을 것임. 아니면 적어도 우리 가족이 할 수 있을 듯함… 아이가 이어받아 프로젝트를 계속해야 할 수도 있음
      진지하게 말하면, 핵심을 놓쳤거나 불필요하게 꼬투리를 잡는 것이거나, 아니면 틀린 것 같음. 이건 개념을 배우는 데 관한 것이고 나머지는 대체로 부차적임
      꼬투리이거나 틀렸다는 쪽에서 보자면, “large” 언어 모델의 문서화된 기준선이 무엇인가? GPT-2는 당시에도 지금도 “large” 언어 모델로 불렸고, 매개변수는 15억 개였음. 요즘은 그 정도를 학습할 수 있는 소비자용 GPU를 대략 400달러에 구할 수 있음