본문 바로가기

IT & AI

중2 개발자가 1.09B 한국어 LLM 학습 코드를 공개했어요

728x90

중2 개발자가 1.09B 한국어 LLM 학습 코드를 공개했어요

AI 뉴스 썸네일
AI 뉴스 썸네일

중학교 2학년 개발자가 10억 9천만 파라미터 규모의 한국어 언어모델을 설계하고 학습하는 파이썬 코드를 공개했어요. 9GB GPU 메모리를 목표로 BF16, 8비트 AdamW, 그래디언트 체크포인팅을 조합했어요. 다만 지금 저장소에서 바로 받을 수 있는 것은 완성된 모델 가중치가 아니라 학습 파이프라인 코드예요. 1

핵심 요약

구분내용
공개 범위PyTorch로 작성한 모델 구조, 데이터셋 처리, 학습 루프, 체크포인트, 모니터링 화면 코드를 GPL-3.0으로 공개했어요.
모델 사양저장소 기준으로 1.09B 파라미터, 20개 레이어, 10개 어텐션 헤드, 1,920차원 은닉층을 사용해요.
메모리 절약BF16 모델, bitsandbytes의 8비트 AdamW, 그래디언트 누적과 체크포인팅을 적용했어요.
한국어 데이터KULLM v2와 KoAlpaca v1.1a를 내려받아 명령어와 응답 형식으로 학습하도록 구성했어요.
확인할 한계저장소에는 학습된 v3 가중치와 독립 벤치마크가 없어요. 모델 품질과 9GB 동작 여부는 직접 재현해야 해요.

1. 9GB GPU를 목표로 한국어 LLM 학습 과정을 한 파일에 담았어요

공개된 `Korean-llm-v3` 저장소에는 모델 정의부터 데이터 다운로드, 학습, 체크포인트 저장, 텍스트 생성, 그래프와 채팅 화면까지 이어지는 파이썬 코드가 들어 있어요. 개발자는 50M 규모의 초기 실험에서 시작해 541M과 약 1.1B 구조를 거쳤다고 설명해요. 현재 코드는 GPL-3.0 라이선스로 공개돼 있어 수정하고 나눌 수 있지만, 배포할 때는 라이선스 조건을 함께 확인해야 해요. 2

Llama 계열에서 널리 쓰이는 구성 요소를 직접 구현했어요

모델 본체는 PyTorch 레이어로 작성됐어요. 정규화에는 RMSNorm을 쓰고, 피드포워드 블록에는 SwiGLU를 넣었어요. 위치 정보는 RoPE로 처리하고, PyTorch의 scaled dot product attention으로 인과적 어텐션을 계산해요. 입력 임베딩과 출력 가중치를 공유하는 구조도 확인할 수 있어요. 3

기본 모델 설정은 은닉층 1,920차원, 20개 레이어, 10개 헤드예요. README에는 최대 문맥 길이를 2,048 토큰으로 적었지만, 실제 학습 설정의 기본값은 512 토큰이에요. 코드를 실행할 때 설정값을 바꿀 수 있으므로 모델 구조의 최대 길이와 한 번에 학습하는 길이를 구분해서 봐야 해요.

728x90

메모리 절약 장치는 실제 코드에 들어 있어요

학습 모델은 처음부터 BF16으로 GPU에 올려요. 옵티마이저는 bitsandbytes의 `AdamW8bit`를 사용해 상태값이 차지하는 메모리를 줄여요. 각 Transformer 블록에는 그래디언트 체크포인팅을 적용하고, 기본 설정에서는 32회 그래디언트 누적으로 작은 배치를 보완해요. 3

README는 v3의 GPU 메모리 사용량을 약 9GB로 제시해요. 이 수치는 저장소 작성자의 설명이며, GPU 종류와 CUDA·PyTorch 버전, 데이터 길이에 따른 별도 측정 결과는 아직 제공되지 않았어요. 특히 README에서 말하는 동적 INT8 가중치 양자화는 현재 공개 코드에서 뚜렷한 실행 경로를 찾기 어려워요. 확인되는 8비트 적용 지점은 학습 옵티마이저예요. 따라서 `9GB에서 학습 가능한 파이프라인`과 `INT8로 변환된 완성 모델`은 같은 뜻으로 읽으면 안 돼요.

한국어 명령어 데이터셋을 자동으로 준비해요

데이터 처리 코드는 Hugging Face의 `nlpai-lab/kullm-v2`와 `beomi/KoAlpaca-v1.1a`를 대상으로 해요. 일반 다운로드가 실패하면 스트리밍과 강제 재다운로드를 차례로 시도하고, 성공한 데이터는 Parquet 파일로 캐시해요. 각 샘플은 질문, 입력, 응답 형태의 텍스트로 바꾼 뒤 토크나이저를 거쳐 학습에 사용해요. 3

토크나이저는 `beomi/Llama-3-Open-Ko-8B`에서 가져와요. 모델 가중치는 가져오지 않고 토크나이저와 어휘 체계를 사용해 새 모델을 초기화해요. 그래서 기존 8B 모델을 미세 조정하는 코드라기보다, 한국어 데이터로 새 가중치를 학습하는 구조에 가까워요.

지금 공개된 것은 모델 제품보다 학습 실험에 가까워요

저장소에는 학습 코드와 README, 라이선스 파일이 있어요. 바로 추론에 쓸 수 있는 v3 체크포인트, 모델 카드, 평가 데이터와 벤치마크 결과는 포함돼 있지 않아요. README도 v2 버그를 고친 뒤 v3는 아직 다시 학습하지 못했다고 밝혀요. 따라서 1.09B는 구현된 모델 규모이고, 한국어 답변 품질이 검증된 배포 모델의 성능표는 아니에요. 2

재현하려면 코드 실행 여부만 볼 것이 아니라 학습 손실, 검증 데이터의 perplexity, 지시 따르기 정확도, 반복 생성과 유해 출력 같은 항목도 확인해야 해요. GPU 메모리 사용량은 최대 시퀀스 길이와 배치 크기를 함께 기록해야 비교할 수 있어요. 저장소가 빠르게 바뀌는 초기 프로젝트인 만큼, 실행 전에 의존성 버전과 데이터셋 접근 조건도 확인하는 편이 좋아요.

왜 중요한가요

LLM을 처음부터 구성해 보는 과정은 완성된 모델 API를 호출할 때 보이지 않던 문제를 드러내요. 임베딩 크기와 헤드 수가 맞아야 하고, 패딩 토큰은 손실 계산에서 제외해야 해요. 긴 학습을 다시 시작하려면 모델뿐 아니라 옵티마이저와 스케줄러 상태도 함께 저장해야 해요. 이번 저장소는 이런 요소가 하나의 학습 루프에서 어떻게 연결되는지 읽어 볼 수 있는 사례예요. 3

개발자의 나이보다 더 오래 남을 가치는 검증 과정에 있어요. 생성형 AI가 만든 코드는 실행된다는 이유만으로 정확하다고 볼 수 없어요. README의 주장과 실제 구현을 나눠 보고, 재현 가능한 측정값을 더하면 학습 프로젝트의 신뢰도가 높아져요. 이 저장소도 가중치와 실행 로그, 평가 방법이 추가되면 다른 개발자가 결과를 비교하고 개선하기 쉬워져요.

처음 LLM 구조를 공부하는 개발자라면 전체 파일을 한 번에 실행하기보다 작은 설정으로 단계별 확인을 권해요. 데이터셋 샘플을 먼저 열어 보고, 작은 모델로 손실이 내려가는지 확인한 뒤 메모리 최적화를 하나씩 적용하면 오류 원인을 좁히기 쉬워요. 공개 코드를 출발점으로 삼되, 수치와 품질은 같은 환경에서 직접 측정해야 해요.

참고 자료

  1. Show GN: 중2개발자가 만든 한국어 LLM — GeekNews
  2. Korean LLM Advanced v3 — GitHub
  3. korean_llm_advanced_v3.py — GitHub 소스 코드
728x90