카르파시,파이썬 200줄로 gpt 핵심 구현한 ‘마이크로gpt’ 공개 - ai타임스

대형언어모델(LLM)의 복잡한 구조를 요약, 단 200줄의 순수 파이썬 코드로 GPT의 핵심 원리를 구현한 프로젝트가 공개됐다. 안드레이 카르파시가 선보인 ‘마이크로GPT(MicroGPT)’는 외부 라이브러리 없이도 GPT의 학습과 추론 과정을 모두 수행하는 단일 파일 프로그램이다. 거대한 인프라나 복잡한 프레임워크 없이, LLM이 작동하는 알고리즘의 본질만을 가장 단순한 형태로 담아냈다는 평가를 받고 있다.

카르파시 유레카랩스 CEO는 12일(현지시간) 블로그를 통해 ‘마이크로GPT’를 소개하며, 이를 하나의 “예술 작품(art project)”이라고 표현했다.

그는 GPT를 구성하는 모든 핵심 요소를 단 하나의 파일에 담았다고 설명하며, “이보다 더 단순하게 줄일 수는 없다”라고 강조했다.

마이크로GPT는 단 하나의 파이썬 파일로 구성된다. 이 파일 안에는 ▲데이터셋 처리 ▲토크나이저 ▲자동 미분(autograd) 엔진 ▲GPT-2와 유사한 신경망 구조 ▲아담(Adam) 옵티마이저 ▲학습 루프 ▲추론 루프까지, GPT가 작동하는 전 과정이 모두 담겨 있다.

마이크로GPT는 거대한 웹 데이터 대신 약 3만2000개의 영어 이름을 학습 데이터로 사용한다. 각 이름을 하나의 ‘문서(document)’로 간주하고, 이 이름들에 담긴 글자 배열의 통계적 패턴을 학습해 새로운 이름을 만들어낸다.

학습이 끝난 뒤에는 kamon, karia, alerin, anton처럼 실제로 존재할 법한 새로운 이름을 생성할 수 있다. 이는 GPT가 본질적으로 ‘문서를 이어 쓰는(document completion) 모델’이라는 점을 보여준다. 우리가 챗봇과 주고받는 대화도 모델의 관점에서는 하나의 긴 문서를 계속 이어가는 과정에 불과하기 때문이다.

실제 상용 모델들이 BPE(Byte Pair Encoding)와 같은 서브워드 기반 토크나이저를 사용하는 것과 달리, 마이크로GPT는 훨씬 단순한 방식을 택했다. 데이터에 등장하는 알파벳 문자(a~z) 각각에 정수 ID를 부여하고, 여기에 문서의 시작을 나타내는 BOS(Beginning of Sequence) 토큰을 더해 총 27개의 어휘만 사용한다.

이렇게 변환된 텍스트는 숫자의 나열(정수 시퀀스)이 되고, 신경망은 이 숫자들을 입력으로 받아 다음에 올 문자의 확률을 예측하는 방식으로 학습을 진행한다.

마이크로GPT의 가장 인상적인 부분은 자동 미분(autograd)을 직접 구현했다는 점이다. 카르파시는 과거 공개했던 마이크로그래드(micrograd) 프로젝트를 발전시켜, 단 하나의 스칼라 기반 Value 클래스만으로 역전파(backpropagation)를 구현했다.

이 클래스는 덧셈, 곱셈, 로그, 지수 같은 각 연산에서의 미분값을 저장해 두고, 최종 손실(loss) 값에서부터 계산 그래프를 거꾸로 따라가며 체인룰(연쇄법칙)을 적용한다. 원리는 파이토치(PyTorch)의 loss.backward()와 동일하지만, 텐서가 아닌 스칼라 단위로 동작해 구조가 훨씬 단순하고 이해하기 쉽다.

이 모델은 비교적 작은 트랜스포머 구조로 만들어졌다. 임베딩 차원은 16이고, 어텐션 헤드는 4개, 레이어는 1개뿐이다. 전체 매개변수 수도 4192개에 불과하다. 이는 15억개 이상의 매개변수를 가진 'GPT-2’나, 수천억개 규모에 이르는 최신 LLM과 비교하면 매우 작은 수준이다.

구조는 GPT-2와 비슷하지만, 훨씬 단순하게 구성됐다. 예를 들어 LayerNorm 대신 RMSNorm을 사용했고, GeLU 대신 ReLU 활성화 함수를 적용했다. 기본 블록은 멀티헤드 어텐션과 MLP(다층 퍼셉트론)로 이루어져 있으며, 각 블록 사이에는 잔차 연결(residual connection)도 유지했다.

즉, 규모는 작지만 '토큰끼리 서로 정보를 주고받는 어텐션 구조’와 '각 위치에서 계산을 수행하는 MLP’가 번갈아 쌓이는 트랜스포머의 핵심 뼈대는 그대로 유지하고 있다.

학습 과정은 비교적 단순하다. 먼저 데이터셋에서 문서 하나를 고른 뒤, 그 안에 있는 토큰 시퀀스를 모델에 입력한다. 모델은 각 위치에서 다음에 올 토큰의 확률을 계산한다.

그다음, 실제 정답 토큰과 모델의 예측을 비교해 음의 로그 확률, 즉 크로스엔트로피 값을 손실(loss)로 구한다. 이 손실을 기준으로 역전파를 수행해 각 매개변수의 기울기를 계산하고, 아담(Adam) 옵티마이저를 이용해 가중치를 업데이트한다. 이런 과정을 반복하면서 모델은 점점 더 정확한 예측을 하도록 학습된다.

실제로 초기 손실값은 약 3.3 수준으로, 거의 무작위로 추측하는 것과 비슷한 상태에서 시작한다. 하지만 1000스텝 정도 학습을 진행하면 손실이 약 2.37까지 낮아진다. 이는 모델이 이름들에 담긴 글자 배열의 통계적 패턴을 점차 익혀가고 있다는 의미다.

학습이 끝난 뒤에는 문서의 시작을 의미하는 BOS 토큰에서 출발해, 모델이 예측한 다음 토큰을 확률적으로 하나씩 선택하며 문장을 만들어간다. 이 과정에서 ‘temperature(온도)’ 값을 조절해 결과의 성향을 바꿀 수 있다.

온도를 낮게 설정하면 확률이 가장 높은 선택지를 더 자주 고르게 되어, 결과가 비교적 안정적이고 일관되게 나온다. 반대로 온도를 높이면 다양한 선택지가 더 자주 뽑혀, 결과가 더 창의적이고 다채로워지지만 때로는 어색하거나 불안정해질 수 있다.

이 같은 방식은 실제 LLM API에서도 사용하는 기본적인 샘플링 전략과 같은 원리다.

마이크로GPT와 상용 LLM 비교
카르파시 CEO는 “마이크로GPT가 GPT의 알고리즘적 본질을 모두 담고 있지만, 실제 상용 모델과는 규모와 엔지니어링 측면에서 큰 차이가 있다”라고 설명했다.

하지만, 다음 토큰을 예측하는 구조나 어텐션 메커니즘, 역전파를 통한 학습, 아담 옵티마이저를 이용한 매개변수 업데이트 등 핵심 알고리즘은 동일하다고 전했다. 규모와 속도는 다르지만, 작동 원리 자체는 같다는 점이 마이크로GPT의 핵심 메시지다.

그는 마이크로GPT를 여러 단계로 확장한 버전(train0~train5)도 공개했다. 가장 단순한 모델에서 출발해 점차 요소를 추가하면서, 최종적으로 완전한 GPT 구조에 이르는 과정을 단계별로 따라가 볼 수 있도록 구성했다. 학습자가 모델이 어떻게 점점 복잡해지는지 직접 확인할 수 있게 한 것이다.

그는 “대규모 모델을 가능하게 하는 것은 방대한 엔지니어링이지만, 알고리즘의 본질은 이 200줄 안에 모두 담겨 있다”라고 강조했다.

마이크로GPT는 거대한 모델 규모나 최고 성능을 목표로 한 프로젝트가 아니다. 대신 GPT 구조의 ‘기술적 실체’를 최대한 투명하게 보여주는 데 초점을 맞췄다.

불필요하게 복잡한 추상화 계층을 걷어내고, 기초적인 수학 연산과 신경망 계산을 직접 구현함으로써 모델이 어떻게 학습하고 예측하는지 과정을 그대로 드러낸다. 그 덕분에 학습자나 개발자는 내부 작동 원리를 블랙박스가 아닌, 이해 가능한 구조로 한눈에 살펴볼 수 있다.

마이크로GPT의 전체 소스코드는 깃허브 지스트(GitHub Gist) 형태의 microgpt.py 파일로 공개됐다. 또 전용 웹페이지와 구글 코랩(Colab) 노트북 형태로도 제공돼, 누구나 직접 실행해 보고 구조를 살펴볼 수 있다.