Gemma 3 270M을 순수 PyTorch로 로컬 실험을 위해 재구현
(github.com/rasbt)- Gemma 3 270M은 PyTorch만을 사용하여 직접 구현할 수 있도록 예제 코드를 제공함
- 해당 리포지토리는 LLM의 구조와 학습 과정을 이해하고 직접 실습하기 위한 교육 목적임
- 추가적인 외부 LLM 프레임워크 없이 코드 작동이 가능하며, 일반 노트북 환경에서도 실행 가능함
- 다양한 보너스 예제와 실습 자료가 포함되어 개발 및 연구자 학습에 실질적 도움을 제공함
- Python 기초 지식만 있으면 누구나 LLM의 원리와 세부 구현을 단계별로 체험 가능함
오픈 소스 프로젝트의 의의와 차별점
이 리포지토리는 GPT 계열의 대형 언어 모델을 직접 구현, 사전학습, 미세조정하는 데 필요한 전체 코드를 제공함. 대부분의 대형 언어 모델 예제와는 달리, 추가적인 외부 LLM 전용 라이브러리 없이 PyTorch만 사용해 로컬 환경에서 직접 실험 및 학습이 가능함. 특히, Gemma 3 270M 같은 경량 모델까지도 상세한 코드와 함께 제공됨으로써 초보 연구자나 개발자가 실제 구현 구조를 따라가며 깊이 있게 원리를 습득할 수 있는 실용적 강점이 있음.
주요 내용 및 리포지토리 구조
- 책 "Build a Large Language Model (From Scratch)"의 공식 코드 리포지토리 제공
- GPT 스타일의 LLM 직접 구현, 사전학습 및 미세조정 전 단계를 망라하는 단계별 예시 코드 포함
- 대형 언어 모델 구현 로직을 상세하게 다루며, 각 단계별로 명확한 설명, 도식, 샘플 코드를 통해 초보자도 따라하기 쉬운 접근법 제시
- 대규모 모델의 학습 방법론과 실제 구현 과정을 상세히 설명함으로써, ChatGPT 등 실제 서비스에 활용된 방법론을 체감하며 학습할 수 있음
- 사전학습 모델 가중치 불러오기/미세조정 관련 예제 포함
리포지토리 구성 안내
- 공식 소스코드 저장소, 책 정보, ISBN 등 실습 및 참고 링크 제공
- 각 장별로 Jupyter 노트북 및 Python 스크립트를 포함하여, 단계별 실습·연습문제·보충자료까지 참고 가능
- 보충 자료 및 보너스 예제로, Attention 메커니즘, Tokenizer, 성능 최적화, FLOPS 분석, 하이퍼파라미터 튜닝, Llama 모델 변환 등 현업에서 직접 유용하게 활용할 수 있는 다양한 실습 콘텐츠 포함
선행 지식 및 하드웨어 요구사항
- Python 프로그래밍에 대한 기본 이해만 있으면 LLM 원리 및 실습 이해 가능
- PyTorch 친숙도는 꼭 필요하지 않으나, 기본 문법 정도만 알면 충분함
- 별도의 고사양 장비 없이도 일반 노트북에서 예제 실행 가능
- GPU가 있을 경우 자동 인식하여 학습 속도 향상함
부가 자료 및 실습 강화 콘텐츠
- 각 장마다 실습용 코드와 연습문제 notebook 제공
- 무료 170페이지 분량 PDF 퀴즈북(각 장별 30문항 수준)으로 자기주도형 학습 지원
- 동영상 강좌(17시간 15분, Manning 출판 플랫폼)에서 전 장의 주요 내용을 저자가 직접 코드로 구현하며 설명함
연구 및 커뮤니티 참여 안내
- 질문·의견·토론은 Manning 포럼과 GitHub Discussions에서 활발히 공유 중
- 책과 코드의 일관성 유지를 위해 리포 메인 코드는 외부 기여 제한, 보완 및 수정 제안은 별도 논의 권장
참고 및 인용 안내
- 본 프로젝트와 코드는 LLM 개발·실험 연구에 직접 활용 가능함
- 논문, 기술블로그 등에서 인용할 경우 Chicago 스타일, BibTeX 예시 안내
요약
이 리포지토리는 Gemma 3 270M 등 대형 언어 모델을 PyTorch만으로 직접 구현 및 실습할 수 있는 기회를 제공함. 기존 LLM 오픈소스와 달리 가장 단순한 환경에서 핵심 원리와 전체 흐름을 학습 및 실험할 수 있다는 점이 가장 큰 장점임. 초보 개발자 및 연구자가 LLM을 이해하고 실습하는 데 최적화된 구조와 예시, 보충자료, 연습문제 등이 모두 포함되어 있음.
Hacker News 의견
- 안녕하세요, 이 모델을 최고의 팀과 함께 만들었음. 지난주에 이 모델이 메인에 등록되었을 때 많은 질문에 답변했음. 여기서도 추가 질문이 있으면 기꺼이 답변할 생각임. 개인적으로 이제 여러분 모두가 이 모델에 접근할 수 있게 되어 매우 기대됨. 여러분이 잘 활용하길 바람. 지난 Q&A 링크 참고 바람
- 이런 작은 모델에서 임베딩에 전체 파라미터의 2/3을 사용하는 것에 대해 어떻게 생각하는지 궁금함. 바이트 레벨 vocabulary를 쓰고 transformer 파라미터에 할당하면 토큰 처리 속도는 낮아지지만 정확도는 올라가지 않을까 싶음
- 아주 기초적인 질문이지만, AI edge gallery 앱에서 tflite 모델을 GPU로 실행하면 '[multimodal][multimodal]'만 출력되고, CPU에서는 정상 작동하는 이유가 뭔지 궁금함
- MLE(User Machine Learning Engineer)가 아니라서 그러는데, OP의 PyTorch 재구현에 장단점이 무엇인지 궁금함
- 놀라울 정도로 멋진 소형 LM임. 어떤 하드웨어에서 학습했는지, 학습 기간은 얼마나 걸렸는지 공유 가능할지 궁금함
- 이렇게 만들어줘서 고마움. 내가 예전에 Disord 챗봇을 BERT로 구현했던 적이 있는데, 270M 파라미터 업그레이드라니 정말 기대됨
- 누군가(또는 OP)가 이 모델을 fine-tuning해서 고차원 NER과 같은 자연어작업에 적용할 수 있는 레시피를 알려줄 수 있을지 궁금함. 지난주 Gemma3 270M이 공개되고 튜토리얼을 시도해봤지만 잘 안 됐음. 대부분의 튜토리얼들이 챗이나 롤플레잉에 맞춰진 내용이고, 난 PDF에서 엔티티를 추출·정제하는 일이 주된 작업이라 이런 용도에 특화된 힌트를 찾기 어려움. 이 모델이 그런 용도에 잘 맞을 거라 생각함
- 만약 전통적인 NER(겹치지 않는 토큰 구간에서 엔티티 추출) 작업이면, 인코더-온리 모델(예를 들어 bert-large-NER)이나 인코더-디코더 모델(예: t5-base-conll03-english)을 사용하는 것이 더 나을 것 같음. 이런 인코딩 모델들이 최근엔 덜 주목받지만, 생성이 필요 없는 확립된 자연어처리 작업에는 여전히 강점이 있고, 동일 파라미터일 때 NER 정확도는 디코더-온리 모델보다 월등히 높을 것으로 기대함
- gemma-llm 파이썬 라이브러리(JAX 기반)를 사용하는 방법이 있음. 관련 튜토리얼 참고 바람
- 혹시 이 NER 모델도 테스트해봤는지 궁금함. 어떤 용도에 특히 적합할지 의견이 궁금함
- 이게 과거에 '<모델> inference written in vanilla Go, Python, Java, etc' 식으로 사람들이 해오던 것과 같은 맥락인지 궁금함
- 내 경험상 대형 상용 모델(sonnet, ChatGPT 등)만 써본 dev임. 이런 소형 local 모델은 어디에 쓸 수 있는지 궁금함. 곧바로 쓸 수 있는 사례가 있는지, 아니면 결국 꼭 뭔가 후처리/추가 training이 필요할지 궁금함. 상용 툴 사용자와 모델 고수들 사이의 갭이 커 보이는데, 이 중간 단계를 어떻게 메울 수 있을지 잘 모르겠음
- 가장 흔한 용도(교육용 제외)는 다음과 같음:
- 비공개 온디바이스 모델 (웹 API 보다 레이턴시 낮고, edge 처리 가능)
- 알고리즘 연구 (빠르고 저렴하게 프로토타입 가능)
- 값싼 분류/카테고리 작업 (디코더 LLM이 필요 없지만 때로 자유로운 응답이 유리함), 문법 sanity 체크, 라우터(예: GPT-5 방식) 등
- 정말 좋은 질문임. 내가 답변을 길게 정리해뒀으니 참고 바람 상세 답변 링크
- 요약, 아주 단순한 툴 사용에 특히 유용함. 인터넷 왕복 없이 edge에서 실행되어 비용이 0임
- 비밀유지, 프라이버시 용도도 가능성 있음
- 가장 흔한 용도(교육용 제외)는 다음과 같음:
- Mac CPU에서 KV 캐시+컴파일러 적용 후 속도가 A100 GPU에서보다 더 빠르다는 게 놀라움
- 작은 모델 크기 때문에 GPU 성능을 제대로 활용하지 못한 결과일 수도 있음. 예를 들어 Qwen3 0.6B 모델은 A100 GPU가 더 빠르고 참고 링크에서 확인 가능함
- 컴파일된 버전이 A100에서 eager보다 더 느린 걸 보면, 분명 최적화되지 않는 부분이 있는 것 같음
- Mac의 CPU와 GPU는 메모리를 공유하는 반면, A100은 일부 연산이 GPU에서 지원되지 않으면 RAM/CPU로 데이터를 전송해야 해서 그런 게 아닐까 하는 예상임
- GPU가 웨이브폼(waveform)을 채우지 못해 메모리 레이턴시를 숨기지 못해서 그런 건 아닐지 궁금함
- 270M 임베딩은 어떤 용도로 활용할 수 있을지, 토큰 단위 임베딩이 적절한지 아니면 문장/문서 임베딩 값도 잘 나오는지 궁금함. 문장/문서 임베딩을 유의미하게 쓰려면 따로 파인튜닝해야 할까 궁금함
- 만약 모델 전체를 처음부터 학습한다면, 합리적인 GPU 구성에서 얼마 정도 시간이 걸릴지 궁금함
- 참고로 124M 모델은 3090 GPU로 학습했을 때 배치마다 약 50만 토큰, forward+backward에 약 10초 정도 걸림. 6조 토큰(이 모델 학습량) 모두를 학습하려면 약 4년 정도 걸림. 짧게 말해서 "너무 오래 걸림"
- "합리적"이란 표현에 따라 다르긴 한데, 보통 가정용 환경에서 처음부터 pure scratch로 훈련하면 정말 오래 걸릴 것임. 이게 바로 이 모델을 릴리즈한 이유 중 하나임. 이제 scratch 학습 없이도 다양한 하드웨어에서 파인튜닝만으로 실용적 결과를 낼 수 있게 되었음
- 이렇게 아주 작은 모델도 진짜 현실에서 쓸 데가 있을지(학습, 아카데믹 제외하고) 궁금함
- 있음! 오히려 단순 교보재나 장난감이 아니라, 반복적인 작업이나 엔터프라이즈/로컬 빠른 개발자 모델로 실사용 가치가 큼. 과거에 실시간 텍스트 처리 필요했던 경험에서 영감을 얻은 예시임. 예전 Gemma 버전으로 만든 스트리밍 ML 튜토리얼과 데모 영상 참고 바람. 이론상 이제는 이를 Gemma 270M으로 재현 가능함
- LoRa로 파인튜닝하면 아주 특정한 영역에서 아주 뛰어난 성능 내기도 가능함. 예를 들어:
- 특정 JSON 스키마로만 답변하거나, 특정 캐릭터 목소리로 응답
- 텍스트(예: 이메일, 스팸 등) 분류
- 대용량 텍스트 요약 (이메일→제목/slug)
- 사전 정의한 규칙에 따라 태그 분류, 컨텐츠 마케팅 등
- 스팸/중복/플래그 감지
- 이런 작은 "멍청한" 모델일수록 세상 지식이 적어 말도 안 되는 내용을 만들어내는 일도 적어서, 좁은 영역엔 오히려 장점이 많음
- 소스텍스트 기반으로 다국어 번역 과제에서 자주 맞는 결과를 보임(예: 여행자용 회화 활용). 예시:
위키 소스: 우크라이나어 위키피디아, 베트남 뉴스(우크라이나어 원문) Rochechouart는 프랑스의 도시, 누벨아키텐 지방의 오트비엔주에 위치… 인구 3637명(2022), 파리 기준 약 360km 남쪽, 리모주에서 34km 서쪽에 위치. (모델 번역 결과) Rochechouart는 프랑스의 도시로, 누벨아키텐 지역 오트비엔 주에 위치. 인구 3637명(2022). 파리로부터 약 360km, 리옹에서 34km 거리. (베트남어 주거용 태양광 지원 정책도 대체로 정확히 번역)
- 자연어와 상호작용하지만, 모델이 내부적으로 지식을 많이 가지고 있다고 기대하지 않는 작업에 효용이 큼. Tool use, 임베딩 등 정보가 외부에서 검증/조회되는 영역에서 유용함
- 3270 인터페이스 신제품인 줄 알고 클릭했다가, 기대와 달랐음
- 정말 대단한 사람임