본문으로 건너뛰기

C++20로 작성한 머신러닝 프레임워크 tiramisu의 구현과 브라우저 데모 공개

tiramisu는 C++20로 작성된 자체 ML 프레임워크로 Kaggle T4에서 10M 파라미터 Shakespeare GPT를 학습해 int8로 양자화한 11MB 브라우저 데모를 제공한다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

이 글은 C++20로 작성된 자체 머신러닝 프레임워크 tiramisu의 구현 요점과 브라우저 데모 결과를 요약하고 있다. 프레임워크는 zero-copy strided tensor 뷰, 동적 테이프 기반 reverse-mode autograd, 타일링과 AVX2 SIMD를 활용한 CPU용 행렬곱, CUDA 커널을 통한 GPU 가속, pybind11 바인딩과 Emscripten으로의 WASM 컴파일을 결합해 학습과 배포 경로를 직접 구성했다. 작성자는 6층 8헤드 512차원 구조의 10M 파라미터 Shakespeare GPT를 Kaggle의 무료 T4에서 end-to-end로 학습하고 int8로 양자화해 브라우저용 11MB 결과물을 공개했다. 이 사례는 경량화와 플랫폼 간 최적화를 통해 브라우저 배포가 가능함을 보여주지만 성능과 정확도 관련 상세 실험은 리포지토리와 데모로 추가 검증이 필요하다.

실용적 조언

  • CPU 환경에서 행렬 연산 성능을 확보하려면 타일링과 AVX2 같은 SIMD 명령어 집합을 결합해 캐시 지역성과 벡터 단위를 최적화해야 한다. 이때 데이터 정렬과 패딩, 루프 구조를 조정해 메모리 접근 패턴을 일관되게 유지하면 성능을 더 끌어올릴 수 있다. 작은 모델이나 엣지 배포에서는 이러한 CPU 최적화가 GPU 없이도 실용적 성능을 제공할 수 있다.
  • 브라우저 배포를 목표로 할 때에는 학습 후 int8 양자화를 적용해 모델 크기를 크게 줄여야 하며 스케일과 제로포인트 매핑을 검증해 정확도 저하를 최소화해야 한다. 양자화 직후와 실제 WASM 환경에서의 동작을 비교해 레이턴시와 품질을 확인하는 단계가 필요하다. Emscripten으로 컴파일할 때는 메모리 설정과 스택/힙 할당을 조정해 브라우저 제약을 고려해야 한다.
  • C++ 코어와 Python 생태계의 연결은 pybind11 같은 경량 바인딩을 이용하면 빠르게 구성할 수 있으며 이 방식은 실험 스크립트와 디버깅 도구를 유지한 채 고성능 코드를 활용할 수 있게 한다. 바인딩 설계에서는 소유권(ownership)과 메모리 해제 규칙을 명확히 정의해 메모리 누수와 이중 해제를 방지해야 한다. 테스트 케이스와 작은 재현 스크립트를 포함하면 외부 기여자가 구현을 이해하고 성능을 재현하기 쉬워진다.

섹션별 상세

01
프레임워크는 stdlib만 링크해 최소 의존성으로 동작하도록 설계된 점을 강조하고 있으며 이 설계는 외부 런타임 의존성을 줄이고 배포 표준을 단순화하는 목적이다. 구현 측면에서는 스트라이드 기반 텐서와 zero-copy 뷰를 사용해 동일한 버퍼 상에서 다양한 텐서 형태를 생성하고 슬라이스나 브로드캐스트를 복사 없이 처리한다. 이 접근은 메모리 복사 비용을 낮추고 연산 파이프라인에서 캐시 지역성을 높여 성능 향상에 기여한다.
02
역전파 자동미분은 동적 테이프 기반의 reverse-mode autograd로 구현되어 런타임에 생성된 연산을 기록하고 역전파 시점에 순서를 거꾸로 처리해 그래디언트를 계산한다. 이 방식은 동적인 제어흐름과 런타임 조건에 따라 그래프가 달라지는 모델에서도 일관된 학습 루트를 유지할 수 있게 한다. 동적 테이프의 구현에서는 테이프 관리와 메모리 해제 정책이 학습 중 메모리 사용량에 직접적인 영향을 미친다.
03
행렬곱 연산은 타일링 기법과 AVX2 SIMD를 결합해 구현되어서 각 타일을 벡터화 명령어로 병렬 처리하고 캐시 활용도를 극대화한다. GPU 쪽에서는 CUDA 백엔드를 두어 커스텀 커널을 통해 큰 행렬 연산과 Transformer 구성요소를 가속하도록 설계되어 있다. 이러한 CPU·GPU 최적화의 결합은 제한된 리소스 환경에서도 실용적 학습과 추론을 가능하게 한 근거이며 작성자는 실제로 Kaggle의 T4에서 모델을 학습시켰다고 명시했다.
04
브라우저 데모를 위해 모델을 Emscripten으로 WASM으로 컴파일했고 학습 완료 모델을 int8로 양자화해 11MB 크기로 압축했다고 명시했다. 워크플로는 로컬 또는 GPU에서 end-to-end 학습을 수행한 뒤 양자화로 모델 크기를 축소하고 WASM으로 패키징해 클라이언트에서 추론을 실행하는 방식으로 이어진다. 이 접근은 네트워크 전송과 서버 비용을 줄이는 장점이 있으나 브라우저의 메모리 제약과 양자화에 따른 정확도 변화라는 실무적 제약을 동반한다.
05
Python 바인딩은 pybind11을 통해 제공되어 C++ 코어와 Python 생태계 사이의 상호운용을 확보하고 있으며 공개된 리포지토리를 통해 구현 세부를 검증할 수 있다. 작성자는 깃허브 리포지토리와 데모 링크를 함께 제공했고 피드백 수신 의사가 있으므로 구현 세부와 성능 튜닝 관련 논의가 가능한 상태다. 이 부분은 프레임워크를 실무에 적용하거나 확장하려는 개발자가 코드 접근성과 재현성을 확인할 수 있는 근거가 된다.

용어 해설

스트라이드 텐서(Strided Tensor)
스트라이드 텐서는 메모리에서 각 차원별 요소 간격(stride)을 명시해 동일한 버퍼에 대해 다양한 뷰를 만들게 해 주는 자료구조이다. 이 방식은 데이터 복사를 피하고 서브텐서(slice)나 전치 연산을 빠르게 수행하게 하며 zero-copy 뷰를 통해 메모리 사용량과 복사 비용을 줄인다. 프레임워크 구현에서는 효율적인 메모리 접근 패턴과 연산 병렬화 설계에 직접적인 영향을 미친다.
역전파 자동미분(Reverse-mode Autograd)
Reverse-mode Autograd는 순전파 동안 연산을 기록하는 동적 테이프를 사용해 역전파 시점에 오차를 앞에서 뒤로 전파하며 그래디언트를 계산하는 기법이다. 동적 테이프는 런타임에 그래프 구조가 달라지는 모델에도 적용 가능하며 스칼라 출력 함수의 파라미터 수가 많을 때 효율적이다. 구현상에는 테이프의 메모리 관리와 연산 재연산 전략이 성능과 메모리 요구량을 결정한다.
AVX2 SIMD
AVX2는 x86 계열 CPU에서 동작하는 256비트 SIMD 명령어 집합으로 벡터 연산을 통해 부동소수점 계산을 병렬 처리한다. 타일링 기법과 결합하면 행렬곱 같은 핵심 연산에서 캐시 지역성과 벡터 활용도를 높여 초당 처리량을 크게 향상시킬 수 있다. CPU 기반 추론·학습 최적화에서는 메모리 정렬, 패딩, 루프 언롤링과 함께 사용되어야 효율을 확보한다.
WebAssembly(WASM)
WebAssembly는 브라우저에서 네이티브 수준 성능으로 실행되는 이진 포맷으로 C/C++ 코드를 Emscripten 같은 툴체인을 통해 컴파일해 사용한다. 모델을 WASM으로 배포하면 클라이언트에서 직접 추론을 실행할 수 있어 서버 비용을 줄이지만 브라우저 메모리 제한과 싱글스레드 제약, 기능 제한을 고려해야 한다. 작은 모델과 양자화된 가중치는 WASM 배포에서 실질적 이점을 제공한다.
int8 양자화(int8 Quantization)
int8 양자화는 모델 가중치와 경우에 따라 활성값을 32비트 부동소수점 대신 8비트 정수로 표현해 모델 크기와 메모리 대역폭 요구를 크게 줄이는 기법이다. 양자화는 정규화·스케일·제로포인트 같은 매핑 파라미터와 양자화-역양자화 흐름을 필요로 하며 일부 정확도 손실을 동반할 수 있다. 브라우저 또는 엣지 디바이스에서 모델을 동작시키려는 목적에서 모델 크기 축소와 추론 비용 절감에 유효하다.

언급된 도구

pybind11중립

C++ 코어와 Python을 연결하는 바인딩 라이브러리

Emscripten중립

C++ 코드를 WebAssembly로 컴파일해 브라우저에서 실행하게 하는 툴체인

CUDA중립

GPU에서 커스텀 커널을 실행해 대규모 행렬 연산을 가속하는 플랫폼

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 07. 05.수집 2026. 07. 05.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.