소프트웨어 엔지니어에게 CMake는 컴파일 순서를 정하고 의존성을 묶는 빌드 구성 도구다. 그런데 최근 공개된 오픈소스 프로젝트 gpt2.cmake는 그 통념을 정면으로 뒤집는다. 개발자 AlpinDale가 GitHub에 올린 이 저장소는 별도의 C나 파이썬 코드 없이 오로지 CMake 스크립트만으로 OpenAI의 GPT-2 언어 모델을 구현했다. 모델의 추론 연산을 Q16.16 고정소수점 정수 산술로 처리한다는 점이 이 구현의 핵심이자 가장 독특한 부분이다.
왜 이것이 특이한가
CMake는 흔히 '설정 파일 문법' 정도로 여겨지지만 실제로는 변수, 조건문, 반복문, 함수, 문자열 처리를 갖춘 완전한 스크립트 언어다. 이론적으로 튜링 완전하다고 평가되며, 따라서 원리상으로는 어떤 계산이든 표현할 수 있다. GPT-2 같은 신경망의 순전파 과정은 결국 대규모 행렬 곱셈과 활성화 함수의 반복이므로, 이를 CMake의 제어 구조와 산술 명령으로 풀어쓰는 것이 불가능하지는 않다. gpt2.cmake는 바로 그 '이론적으로 가능함'을 실제 동작하는 코드로 옮겨 놓은 사례다. 빌드 도구가 단순한 접착제가 아니라 그 자체로 연산 엔진이 될 수 있음을 보여준다.
Q16.16 고정소수점이라는 선택
주목할 대목은 부동소수점이 아니라 Q16.16 정수 연산을 쓴다는 점이다. Q16.16은 32비트를 정수부 16비트와 소수부 16비트로 나누어 실수를 표현하는 고정소수점 형식으로, 값을 2의 16제곱으로 스케일링한 정수로 다룬다. 이런 선택을 한 이유는 명확하다. CMake의 수식 계산 명령은 기본적으로 정수 연산만 지원하기 때문에, 신경망 가중치처럼 소수 값을 다루려면 실수를 정수 격자에 사상하는 별도의 표현이 필요하다. 고정소수점은 그 제약을 우회하는 고전적이면서도 실용적인 기법으로, 임베디드나 DSP 영역에서 오래 쓰여 온 방식이 이 실험에도 그대로 응용된 셈이다.
실무자 관점에서 이 프로젝트의 가치는 GPT-2를 CMake로 돌려 쓰겠다는 실용성에 있지 않다. 오히려 우리가 매일 신뢰하고 실행하는 빌드 스크립트가 실제로 얼마나 강력한 연산 능력을 품고 있는지 환기시키는 데 있다. 이는 곧 보안 관점의 함의로 이어진다. 프로젝트를 구성(configure)하는 단계에서 CMakeLists.txt는 개발자의 머신에서 임의의 로직을 실행할 수 있다. 낯선 저장소를 내려받아 무심코 빌드를 돌리는 습관이, 겉으로는 무해해 보이는 설정 파일 속에 상당한 계산과 부수효과를 숨길 수 있다는 사실을 이 실험은 극단적인 형태로 상기시킨다.
동시에 명확한 한계도 존재한다. CMake의 산술은 인터프리터 수준에서 한 줄씩 처리되고 벡터화나 GPU 가속과는 거리가 멀기 때문에, 이런 방식의 추론은 전용 라이브러리와 비교할 수 없을 만큼 느릴 수밖에 없다. Q16.16 표현 역시 소수부 16비트라는 제한된 정밀도를 가지므로, 누적되는 곱셈 과정에서 반올림 오차가 쌓이면 원래 모델의 출력과 미묘한 차이가 생길 여지가 있다. 다시 말해 이 구현은 성능이나 정확도를 겨냥한 프로덕션 도구가 아니라, 도구의 표현력 경계를 시험하는 개념 증명에 가깝다.
그럼에도 이런 '난해한(esoteric) 구현'은 단순한 재미 이상의 교육적 의미를 지닌다. 신경망 추론의 본질이 특별한 마법이 아니라 정수와 실수 위에서 돌아가는 산술의 조합임을 투명하게 드러내고, 동시에 우리가 도구라고 부르는 것과 언어라고 부르는 것 사이의 경계가 생각보다 흐릿하다는 점을 일깨운다. 한국의 개발 실무자라면 이 프로젝트를 하나의 흥미로운 벤치마크로 삼아, 자신이 다루는 빌드 파이프라인이 어디까지 실행 권한을 갖는지, 그리고 외부 코드를 빌드할 때 무엇을 신뢰하고 있는지를 한 번쯤 되짚어 볼 만하다.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공