GPU 위에서 신경망으로 구현한 CPU: nCPU가 보여준 기발한 발상과 그 이면
15년 넘게 소프트웨어 엔지니어로 일하면서 정말 별의별 아키텍처와 해킹을 다 봤지만, 가끔은 신선한 충격을 주는 프로젝트를 마주할 때가 있습니다. 보통 우리는 CPU나 GPU 위에서 신경망(Neural Network)을 돌리기 위해 고군분투합니다. 어떻게 하면 연산을 최적화하고 메모리 대역폭을 덜 쓸지 고민하죠. 그런데 만약 그 반대라면 어떨까요? 신경망을 이용해서 CPU를 시뮬레이션 한다면요?
최근 Hacker News를 뜨겁게 달군 nCPU 프로젝트가 바로 그 미친 발상을 구현해 냈습니다. GPU 위에서 순수하게 ML/AI 프리미티브(신경망)만을 사용하여 AArch64 ISA를 시뮬레이션하는 데 성공한 것입니다.
처음 이 프로젝트를 봤을 때 제 솔직한 심정은 “대체 왜 이런 짓을?” 이었습니다. 하지만 코드를 뜯어보고 기술적인 접근 방식을 살펴보니, 단순한 장난감을 넘어 꽤 의미 있는 통찰을 던져주고 있었습니다.
기존 에뮬레이터와 무엇이 다른가?
일반적으로 GPU를 사용해 CPU를 에뮬레이션하려고 한다면 QEMU와 유사한 방식을 떠올릴 것입니다. 각 CPU 명령어를 그래픽 셰이더(Shader) 프로그램으로 변환해서 병렬로 때려 박는 방식이죠. 이렇게 하면 훨씬 더 높은 성능을 얻을 수 있습니다.
하지만 nCPU는 이 경로를 택하지 않았습니다. 대신 이 프로젝트는 CPU의 논리 회로를 머신러닝에서 사용하는 신경망 구조로 매핑했습니다. 이는 속도를 위한 설계가 아니라, 완전히 독립적이고 이질적인 하드웨어 실행 유닛(NPU 등에서도 동작 가능한) 위에서 범용 연산을 어떻게 수행할 수 있는지 보여주는 Proof of Concept에 가깝습니다.
곱셈이 덧셈보다 12배 빠른 기이한 아키텍처
이 프로젝트에서 가장 흥미로운 기술적 디테일은 바로 연산 속도의 역전 현상입니다. 일반적인 실리콘 CPU에서는 덧셈(ADD)이 곱셈(MUL)보다 훨씬 빠르거나 최소한 비슷한 사이클을 소모합니다. 그러나 nCPU에서는 곱셈이 덧셈보다 12배나 빠릅니다.
이유가 무엇일까요? Hacker News의 한 유저가 정확히 짚어냈듯, 이는 신경망 기반 룩업 테이블(Neural LUT)의 특성 때문입니다.
- 순차적 의존성 제거: 곱셈은 Neural LUT를 통해 병렬화되어 Sequential dependency가 사라집니다. 한 번의 거대한 행렬 연산으로 결괏값을 도출해 냅니다.
- 덧셈의 한계: 반면 덧셈기는 여전히 Carry propagation(올림수 전달)을 위한 Prefix stage를 거쳐야 합니다. 신경망 레이어 특성상 이런 순차적인 로직을 처리하는 것이 오히려 병목이 되는 것입니다.
하드웨어 아키텍처를 조금이라도 다뤄본 엔지니어라면 이 대목에서 무릎을 칠 수밖에 없을 겁니다. 우리가 당연하게 여기던 하드웨어의 물리적 제약이, 실행 환경(신경망)이 바뀌면서 완전히 뒤집혀버린 셈이니까요.
성능은 어떨까? (스포일러: 끔찍합니다)
당연하게도 이 방식은 극도로 비효율적입니다. 2.5GHz CPU와 비교했을 때 대략 625,000배 정도 느립니다. Hacker News 댓글 중 하나가 이 상황을 아주 유쾌하게 꼬집었습니다.
“이대로 몇 년만 더 지나면, 1메가와트의 전력을 소비하면서 100MHz로 동작하는 486 컴퓨터를 돌릴 수 있겠네요!”
솔직히 말해 당장 이걸로 Linux를 띄우거나 Doom을 돌리는 것은 무리입니다. 비효율의 극치죠. 하지만 제가 이 프로젝트를 주의 깊게 보는 이유는 따로 있습니다.
LLM과 정확한 연산(Exact Arithmetic)의 딜레마
현재 AI 업계의 큰 고민 중 하나는 LLM이 수학을 더럽게 못한다는 것입니다. 언어 모델은 패턴 매칭의 대가지만, 15자리 숫자의 곱셈 같은 Deterministic한 연산 앞에서는 무너집니다. 이를 해결하기 위해 우리는 모델에게 계산기 API를 쥐여주는 Tool-integrated reasoning(또는 Agents) 방식을 사용하고 있습니다.
하지만 모델 내부의 가중치(Weights)만으로 정확하고 신뢰할 수 있는 연산을 수행할 수 있다면 어떨까요? nCPU는 신경망의 프리미티브만으로도 완벽하게 결정론적인(Deterministic) CPU 명령어를 튜링 완전하게 모사할 수 있음 을 증명했습니다.
물론 지금의 nCPU는 CPU 아키텍처 전체를 시뮬레이션하느라 엄청난 오버헤드를 발생시킵니다. 하지만 이 아이디어를 발전시켜, Transformer 블록 내부에 특정 ALU 로직을 Neural LUT 형태로 컴파일해 넣는다면? Tool call 없이도 모델 자체가 완벽한 수학적 추론을 해내는 날이 올지도 모릅니다.
결론
결론적으로 nCPU는 프로덕션 레벨의 도구가 아닙니다. 실용성만 따지자면 0점에 가깝습니다. 하지만 엔지니어링 관점에서는 만점을 주고 싶은 훌륭한 ‘삽질’입니다.
우리는 종종 주어진 도구(GPU, NPU)를 원래 설계된 목적(행렬 곱셈, AI 추론)으로만 사용하려는 좁은 시야에 갇히곤 합니다. nCPU는 그 틀을 깨고, 이질적인 컴퓨팅 환경에서 기존의 로직을 어떻게 재구성할 수 있는지 보여준 훌륭한 사례입니다. NPU가 스마트폰부터 서버까지 모든 곳에 탑재되는 지금, 이런 기발한 발상들이 모여 다음 세대의 Neuro-symbolic AI 아키텍처를 만들어낼 것이라 믿습니다.
References
- Original Article (GitHub): https://github.com/robertcprice/nCPU
- Hacker News Thread: https://news.ycombinator.com/item?id=47243069