중학교 2학년 학생이 1.09B 파라미터 규모의 한국어 LLM

중학교 2학년 학생이 1.09B 파라미터 규모의 한국어 LLM(대규모 언어 모델) 학습 파이프라인 코드를 구현했다. 이는 파이썬 기초 지식만 갖춘 10대가 생성형 AI를 도구로 활용했을 때 고난도 엔지니어링 코드를 어디까지 유도해낼 수 있는지를 확인하기 위한 실험작이다. 개인 컴퓨터 환경에서 이론상 구동이 가능한 수준의 코드를 작성했으나, 인프라 부족이라는 제약으로 인해 실제 프리트레이닝(사전 학습)을 완주하여 최종 가중치를 추출하는 단계까지는 도달하지 못했다.

실시간 인터랙티브 채팅 테스트를 가능하게 하려고 matplotlib(데이터 시각화 라이브러리)와 tkinter(파이썬 표준 GUI 라이브러리)를 연동한 멀티스레딩 GUI를 구축했다. 학습 루프와 UI 스레드를 비동기로 분리해 설계함으로써 화면 저하 없이 CPU 기반으로 채팅 테스트를 수행할 수 있도록 유도했다. 데이터 분석 공부 과정에서 접한 시각화 기법을 실제 구현에 적용해, 학습 프로세스와 사용자 인터페이스가 독립적으로 작동하는 환경을 만든 결과다.

기반 구조를 PyTorch 레이어로 구현했다

RMSNorm, SwiGLU 피드포워드, RoPE(Rotary Embedding)를 PyTorch 레이어로 직접 구성했다. RMSNorm은 신경망의 입력을 정규화해 학습 안정성을 높이는 기법이다. SwiGLU는 활성화 함수를 개선해 모델의 표현력을 높인 구조이며, RoPE는 토큰의 상대적 위치 정보를 회전 행렬로 인코딩하는 방식이다. Llama 3의 핵심 설계 방식을 PyTorch 프레임워크 내에서 그대로 재현해 모델의 뼈대를 세웠다. 각 레이어의 연산 흐름을 PyTorch 텐서 연산으로 구현함으로써 Llama 3의 구조적 특성을 유지했다.

9GB 단일 GPU라는 제약 조건에 맞추기 위해 VRAM 최적화 기법을 다각도로 시도했다. BF16(Bfloat16) 혼합 정밀도를 적용해 연산 정밀도는 유지하면서 메모리 사용량을 절감했다. bitsandbytes(8비트 양자화 라이브러리) 기반의 8비트 AdamW 옵티마이저를 사용하여 가중치 업데이트 단계의 메모리 점유를 낮췄다. 연산 중간값을 저장하지 않고 재계산하는 그래디언트 체크포인팅과 누적 적용 방식을 함께 사용해 메모리 효율을 극대화했다. 단일 GPU의 물리적 한계를 소프트웨어 설정으로 보완해 학습 가능 환경을 구축했다.

클로드(Claude), GPT, 제미나이(Gemini) 무료

웹 브라우저 창 3개를 띄워 컨텍스트 제한이 올 때마다 번갈아 사용하는 방식으로 코드를 완성했다. 유료 툴이나 복잡한 AI 에이전트 기능을 전혀 쓰지 않고 클로드(Claude), GPT, 제미나이(Gemini)의 무료 버전만 교차 활용했다. AI가 출력한 에러 메시지를 분석해 요구사항을 다시 조율하며 결과물을 다듬었다. 고가의 인프라 없이 무료 도구의 조합만으로 구현 가능성을 확인한 과정이다.

nlpai-lab/kullm-v2 및 KoAlpaca-v1.1a 데이터셋 로드 시에는 네트워크 오류를 방어하는 자동 재시도 루틴을 구축했다. standard에서 streaming을 거쳐 force_redownload로 이어지는 단계적 로직을 적용해 데이터 수집의 안정성을 높였다. 이론적인 코드 작성을 넘어 실제 데이터 로드 과정에서 발생하는 예외 상황을 처리하는 실무적 장치를 마련했다.

AI를 활용한 코드 생성은 Llama 3 구조나 VRAM 최적화 같은 이론적 설계는 가능케 하지만, 실제 하드웨어의 발열과 메모리 제약은 강제 휴식 코드를 넣는 식의 실무적 꼼수로 해결해야 하는 구현과 실행의 간극을 파악하는 것이 핵심이다.