본문으로 건너뛰기

© 2026 Molayo

r/LocalLLaMA분석2026. 05. 05. 14:24

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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0