RustGPT: 순수 Rust로 처음부터 구현한 Transformer 기반 언어 모델

RustGPT 소개

RustGPT는 순수 Rust로 구현된 Transformer 기반 언어 모델로, 외부 머신러닝 프레임워크(PyTorch, TensorFlow, Candle 등)에 의존하지 않고 ndarray 라이브러리만을 활용해 기본적인 선형대수 연산을 직접 처리합니다. 이 프로젝트는 단순히 모델을 학습시키는 데 그치지 않고, 언어 모델의 내부 동작 원리를 단계별로 구현해 학습하는 데 초점을 두고 있습니다. (:warning: 같은 이름의 ChatGPT UI 프로젝트와는 다른 프로젝트입니다!)

RustGPT는 두 가지 주요 학습 단계로 구성됩니다. 첫 번째는 “사실 기반 문장 완성”을 통한 사전 학습(pre-training), 두 번째는 “대화 데이터 기반의 instruction tuning”을 통한 파인튜닝입니다. 이를 통해 단순 지식 학습부터 사용자 질의응답까지 자연스럽게 처리할 수 있습니다. 또한 인터랙티브 모드가 제공되어 학습된 모델을 직접 테스트할 수 있습니다.

Rust로 언어 모델을 구현하는 가장 큰 의의는 저수준 언어로 고성능 AI 시스템을 구현할 수 있는 가능성을 보여주는 것입니다. Rust는 메모리 안전성과 성능 최적화에 강점이 있어, 대규모 AI 모델을 안정적이고 효율적으로 다루는 데 적합합니다. 따라서 RustGPT는 Rust와 인공지능에 모두 관심이 있는 개발자들에게 매력적인 학습 자료가 될 수 있습니다.

Rust 기반 LLM 프로젝트로는 Hugging Face의 Candle 같은 경량 ML 프레임워크가 있습니다. Candle은 모델 학습 및 추론을 위한 효율적인 러스트 구현을 제공하지만, 내부 구조는 상당히 복잡합니다. 반면 RustGPT는 “from scratch” 철학을 지향하여, 모든 레이어(embedding, transformer, attention, optimizer 등)를 직접 구현하고 있습니다. 즉, RustGPT는 성능 최적화보다는 교육적 가치에 더 초점을 둡니다. 머신러닝 원리를 이해하고 Rust 문법을 활용해 직접 구현해보고 싶은 학습자에게는 RustGPT가 더 적합합니다.

RustGPT 아키텍처

RustGPT는 Transformer 기반 언어 모델의 전형적인 구조를 따릅니다:

입력 텍스트 → 토큰화 → 임베딩 → Transformer 블록(어텐션 + 피드포워드) → 출력 투영 → 예측 결과

RustGPT의 주요 구성 요소는 다음과 같습니다:

  • 임베딩 레이어: 입력 토큰을 벡터로 변환
  • 멀티헤드 자기어텐션(self-attention) : 문맥 정보를 학습
  • 피드포워드 네트워크: 비선형 변환을 통한 특징 강화
  • Layer Normalization : 학습 안정화
  • Adam Optimizer: 파라미터 최적화 및 gradient clipping 적용

또한 전체 구조는 src/ 디렉토리에 모듈별로 잘 나누어져 있으며, 각 모듈에 대응되는 테스트 코드(tests/)도 함께 제공되어 있어 실험과 학습에 용이합니다.

모델 학습 과정

RustGPT는 두 단계의 학습 전략을 사용합니다:

  1. 사전 학습 (Pre-training)
  • 입력: 사실 기반 문장 (“태양은 동쪽에서 뜨고 서쪽에서 진다”)
  • 목표: 기본적인 세계 지식 습득
  • 학습률: 0.0005, Epoch 100
  1. Instruction Tuning
  • 입력: 질의응답 형태 데이터 (“User: 산은 어떻게 생기나요? Assistant: …”)
  • 목표: 대화형 질의응답 능력 습득
  • 학습률: 0.0001, Epoch 100

학습이 끝나면 사용자는 인터랙티브 모드를 통해 직접 질문을 입력하고 모델의 답변을 확인할 수 있습니다.

예시:

Enter prompt: 비가 오는 이유는?
Model output: 비는 구름 속 수증기가 응결해 물방울이 되고 무게를 견디지 못해 떨어져 발생합니다

기술적 구현

RustGPT의 기본 설정은 다음과 같습니다:

  • 어휘 크기: 학습 데이터 기반 동적 생성
  • 임베딩 차원: 128
  • 은닉 차원: 256
  • 최대 시퀀스 길이: 80 토큰
  • Transformer 블록: 3개
  • 손실 함수: Cross-Entropy Loss
  • 최적화 기법: Adam + Gradient Clipping (L2 norm ≤ 5.0)

추론 시에는 단순한 **탐욕적 디코딩(greedy decoding)**을 사용하며, 향후 개선 과제로 Beam Search, Top-k/Top-p 샘플링 등이 제안되어 있습니다.

RustGPT 개발 및 기여

RustGPT는 학습 목적에 최적화된 프로젝트로, 현재 다음과 같은 개선 사항이 논의되고 있습니다:

  • 모델 저장/불러오기 기능 (현재는 메모리에만 유지)
  • 성능 최적화 (SIMD, 병렬 학습, 메모리 효율 개선)
  • 고급 디코딩 전략 (beam search, temperature scaling 등)
  • 평가 지표 추가 (Perplexity, 시각화, 벤치마크)

또한, 멀티헤드 어텐션, RoPE(Positional Encoding), 다양한 옵티마이저, 더 큰 데이터셋 적용 등도 기여 포인트로 제안되어 있습니다.

라이선스

RustGPT 프로젝트는 MIT License로 공개 및 배포되고 있습니다. 상업적 사용에 제한이 없으며, 수정 및 재배포가 자유롭게 허용됩니다.

:github: RustGPT 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요