C++17 에서부터 Transformer 구현: PyTorch, BLAS, 의존성 없이 CPU 로 훈련
요약
이 기술 기사는 C++17 표준 라이브러리와 POSIX 소켓만을 의존성으로 사용하여 GPT 스타일의 트랜스포머 언어 모델(Quadtrix.cpp)을 처음부터 구현하고 훈련한 과정을 설명합니다. 이 프로젝트는 PyTorch, LibTorch, BLAS와 같은 외부 자동 미분 프레임워크 없이 모든 핵심 구성 요소—텐서 라이브러리, 전진/후진 연산자, AdamW 최적화기 등—를 수동으로 작성했습니다. CPU 환경에서 76분 만에 훈련된 이 모델은 약 0.83M 파라미터를 가지며, 모든 복잡한 계산(예: 레이어 노름 후진 패스)을 직접 구현했음을 보여줍니다. 또한 OpenMP를 사용하여 CPU 병렬화 최적화를 달성했으며, GPU 버전에서는 PyTorch와 비교하여 상당한 속도 향상을 이루었습니다.
핵심 포인트
- 외부 라이브러리 의존성 없이 C++17만으로 트랜스포머 모델 구현 및 훈련 가능 입증
- 텐서 연산자부터 AdamW 최적화기, 복잡한 후진 패스까지 모든 것을 수동으로 분석적으로 구현함
- OpenMP를 활용하여 CPU 환경에서 병렬 처리 성능을 극대화하고 훈련 속도를 개선함
- 이러한 접근 방식은 모델의 내부 작동 원리에 대한 깊은 이해와 최적화 능력을 요구하는 고난도의 엔지니어링 역량을 보여줌
지난 몇 달 동안 Quadtrix.cpp — C++17 으로 구현된 완전한 GPT 스타일 언어 모델 — 을 작업해 왔습니다. PyTorch 없음. LibTorch 없음. BLAS 없음. 자동 미분 라이브러리 중 하나도 없습니다. 유일한 의존성은 C++17 표준 라이브러리와 POSIX 소켓입니다.
저장소: https://github.com/Eamon2009/Quadtrix.cpp
모든 것이 수동으로 작성되었습니다: 텐서 라이브러리, 모든 전진 패스 연산자, 그리고 모든 연산자에 대한 명시적인 기울기 유도식을 포함한 완전한 분석적 후진 패스입니다.
훈련 실행 v1.0
- 아키텍처: 4 레이어 x 4 헤드 x 200d 디코더 전용 트랜스포머
- 파라미터: 826,985 (0.83 M)
- 컨텍스트 윈도우: 128 문자
- 코퍼스: 어린이 이야기 31.4 M 문자
- 최선 밸류 손실: 1.6371 nats
- 훈련 시간: 단일 CPU 코어에서 76.2 분
- 외부 의존성: 없음
실제로 구현된 것
- 경량 CPU 플로트 텐서 라이브러리 (2D/3D, 행 우선 저장)
- 토큰 및 위치 임베딩, 레이어 노름, 선형, 드롭아웃
- 인과 마스크를 포함한 멀티헤드 인과 자기 주의
- 피드 포워드 블록: 선형 -> ReLU -> 선형
- 완전한 후진 패스: 크로스 엔트로피, 소프트맥스, 레이어 노름화 (Ba et al. 3 항 공식), 스케일드 도트 프로덕트 주의, Q/K/V 기울기, ReLU, 드롭아웃, 임베딩 스패시어-더
- 편향 보정을 포함한 AdamW 최적화기
- 문자 수준 토큰라이저 및 배치 샘플러
- 모든 CPU 코어를 통한 OpenMP 병렬화 — matmul, bmm, 소프트맥스, 레이어 노름 모두 병렬화됨. 8 코어 머신에서 약 5-7 배 속도 향상
기울기 유도식만 약 한 주 걸렸습니다.
레이어 노름 후진 패스는 모든 사람을 혼란스럽게 하는 부분입니다. 전진 패스 동안 행당 mu, 역 스탠드, x-hat 를 저장해야 하고 후진 패스에서 완전한 3 항 공식을 적용해야 합니다. 주의 후진 패스는 주의 가중치와 투영 출력에 드롭아웃 마스크가 어떻게 적용되었는지 신중하게 추적해야 합니다.
훈련 후 샘플 출력
You > Once upon a time
Quadtrix > , and said askiced and so owas said sri. The his brickerys and stew hhat and saw and stark a din't. She stingry and asked day. Timmy watch and played to cones.
You > Timmy is a
Quadtrix > bog the scated justo prove the bret you. Timmy nevery some the gecid. Her neplay to bet starked a way, that litked cliend.
You > what is life
Quadtrix > st happe. It happ a liked back abp happy thing flongs way. Lily lood take maked a fiside apie? Tom and abed Timm.
네, 그것은 가짜입니다. CPU 에서 76 분 동안 훈련된 0.83 M 파라미터 모델입니다. 하지만 그것은 내 가짜입니다. 제가 유도하고 구현한 기울기로 생성되었습니다. 표준 라이브러리 외부에 절대적으로 아무것도 링크하지 않는 바이너리에서 실행됩니다.
LibTorch GPU 포트는 별도의 브랜치로 수행되었습니다. 동일한 아키텍처, 동일한 하이퍼파라미터, 동일한 훈련 루프. 유일한 차이는 model->to(torch::CUDA) 와 600 줄의 backward.h 전체가 자동그래프를 처리하기 위해 삭제됩니다. RTX 3080 에서 약 75 배 더 빠릅니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기