
언어 모델 만들기
요약
로컬 환경에서 동작하는 코드 보완 전용 언어 모델을 풀 스크래치로 제작하는 과정을 다룹니다. Gemma-3 270m 설정을 기반으로 FIM(Fill In the Middle) 대응 및 VRAM 효율을 고려한 학습 최적화 과정을 설명합니다.
핵심 포인트
- 코드 보완을 위한 FIM 대응 모델 설계
- 750M 규모의 아키텍처 및 데이터셋 구성
- VRAM 16GiB 제한을 극복하기 위한 8bit 학습 및 Flash Attention 적용
- 영어와 C/C++ 코드 50:50 비율의 데이터셋 구축
흥미 위주로 언어 모델 (Language Model)을 풀 스크래치 (Full Scratch)로 만들어 본다.
Visual Studio의 C# AI 보완(AI Completion) 기능처럼, 컨텍스트 (Context)를 고려한 코드 보완은 매우 편리하다.
AI 에이전트 (AI Agent)나 바이브 코딩 (Vibe Coding)보다 더 편리하고 실용적이라고 생각한다.
Visual Studio의 C/C++에는 AI 보완 기능이 없다. 외부 서버로 데이터를 전송하는 확장 기능은 있지만 (그리고 실제로 편리해서 사용 중이지만), 사내에서는 사용할 수 없다.
흥미를 겸해 언어 모델부터 직접 제작하기로 했다.
- Fill In the Middle (FIM)에 대응하는 코드 보완 전용 언어 모델
- 로컬 (Local)에서 동작하며, 확장 프로그램에 동봉할 수 있을 정도의 크기
- 마음에 들지 않으면 사용자가 무시해도 될 정도의 정밀도
- 지식도 사고도 필요 없이, 그럴듯한 다음 토큰을 예측할 수 있으면 충분
Gemma-3 270m
의 config (설정)를 베이스로, 보카블러리 사이즈 (Vocabulary Size)를 6400으로 설정하고, 파라미터 수 (Parameter Count) 250M 정도의 언어 모델을 대상으로 시행착오를 겪고 있었다.
보카블러리 사이즈를 줄인 만큼, Gemma-3 270m 보다 여유가 있었을 것이다.
loss (손실)가 3.2 전후에서 떨어지지 않았고, 별다른 성과가 없는 것처럼 느껴졌다. 반년 정도를 낭비했다.
나는 머신러닝 (Machine Learning) 전문가가 아니기에, 시키는 대로 따르는 상태다. Google 검색보다 빠르기에 사실 확인은 적당히 하며, 750M 정도의 아키텍처 (Architecture)로 안착했다.
300M 전후로는 애초에 영문법을 담기에도 부족하다고 한다.
보카블러리 사이즈는 6400이지만, 데이터셋 (Dataset) 클리닝 (Cleaning)은 수정했다. 이전에는 ASCII 이외의 것은 제거하기만 했다.
주석의 인코딩 효율 (Encoding Efficiency)도 고려하여 ASCII 이외의 것도 남기고, 대신 연속된 개행·기호 등을 압축해 보았다.
영어 텍스트 50%, C/C++ 코드 50%의 비율로 구축했다. 코드 보완이 목적이므로 영어 이외의 것은 필요 없다.
Flash Attention 대응을 넣으면서 모델이 비대해졌다.
full attention (전체 어텐션)이 원래의 Gemma-3 270m 보다 대폭 늘어났기 때문에 추론 속도 (Inference Speed)가 느려질 것 같다.
config.json
{
"_sliding_window_pattern": 4,
"architectures": [
...
RTX 4070 Ti Super가 한 장뿐이라, VRAM 16GiB 내에서 싸워야 한다.
초기에는 Huggingface의 Transformers 레시피로 학습했지만, Nvidia Nemo AutoModel을 사용하여 8bit 학습을 도입했다.
Flash Attention과 함께 사용하여 VRAM 16GiB에서도 간신히 동작할 수 있게 되었다.
8bit Adam은 에러가 발생하여 해결하지 못했다.
학습 도중에도 '언제쯤 학습이 끝날까' 싶은 상태다. 일단 이전보다는 loss가 내려가고 있다.
Visual Studio 확장 기능 쪽은 거의 완성되어 가고 있다. 이쪽도 독자적인 특징 아이디어를 시도해 보고 싶다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기