OpenArch - 현대 LLM 아키텍처의 PyTorch 구현 모음
요약
본 글은 LLM의 추론 엔진 구현 복잡성과 다양성을 다룹니다. 공개 가중치 모델을 서비스하기 위해서는 단순히 가중치를 사용하는 것을 넘어, 각 모델 구조에 맞는 전용 추론 엔진 구현이 필요하며, 이는 양자화나 병렬화 같은 다양한 기술적 고려 사항을 포함합니다. OpenArch는 Llama, Qwen, Gemma 등 여러 최신 LLM의 아키텍처를 PyTorch로 재현하여 학습 및 모델 구조 이해에 도움을 주는 참조 코드를 제공합니다.
핵심 포인트
- LLM 서비스에는 가중치 외 전용 추론 엔진 구현이 필요하다.
- MoE와 같은 새로운 구조는 완전히 다른 추론 패턴과 복잡성을 가진다.
- OpenArch는 주요 LLM 아키텍처를 PyTorch로 재현한 참조 코드 모음이다.
- 추론 엔진은 비용 절감의 핵심 영역이며, 다양한 최적화 기법이 사용된다.
공개 가중치 모델에도 전용 코드가 필요하다는 사실을 어제야 알게 됨. 추론 엔진은 어떤 가중치든 실행할 수 있는 범용 LLM 런타임인 줄 알았음.
정리하면, 누군가 모델을 학습하고 가중치와 모델 구조의 참조 구현을 공개하면, 서비스 제공자는 참조 구현이나 다른 오픈소스 구현을 실행하거나 직접 구현해서 모델을 호스팅하는 것인가?
그렇다면 제공자마다 양자화와 설정뿐 아니라 추론 엔진 구현도 다른 것인가?
언어 모델 구현은 대개 한 번의 순전파를 실행하기에는 충분하지만, 추론 엔진으로 서비스하려면 보통 몇몇 연산을 변환해야 함. 예를 들어 MLP는 텐서 병렬화로 여러 GPU에 쉽게 나눌 수 있고, MoE에도 병렬화 방법이 있음.
LLM 구조에 쓰이는 계층과 기본 연산의 종류가 많지 않아 대부분은 꽤 표준화되어 있지만, 가끔 새로운 요소가 등장하면 더 많은 작업이 필요함. MoE는 희소성 덕분에 완전히 다른 추론 패턴이 가능해 이를 제대로 활용하는 방법을 알아내는 데 시간이 걸리는 예임.
작년에 이 주제로 블로그 연재를 시작했고, 언젠가 이어 쓰려 함. Karpathy의 최소 GPT 구현에서 출발해 그 주변에 추론 엔진을 만드는 과정이라 도움이 될 수 있음: https://pieter.ai/blog/2025/nanogpt-inference/.
추론 엔진이 어떤 가중치든 실행하는 범용 런타임이라는 이해는 작년까지는 거의 맞았음. DeepSeek을 제외한 거의 모든 공개 모델이 GPT-2와 매우 비슷한 구조에 약간의 변형을 더한 형태였고, 가끔 쓰이던 MoE도 이미 몇 년 된 구조였음.
하지만 약 1년 전부터 주로 중국을 중심으로 어텐션 메커니즘을 비롯한 여러 방향에서 모델 구조가 폭발적으로 다양해지기 시작했고, 지금은 종류가 엄청나게 많아짐.
맞음. 벤치마크 성능에도 영향이 드러남. 가장 저렴한 추론 제공자들은 sigmoid 대신 tanh 같은 근사를 쓰거나 nvfp4 양자화 등을 사용하는 경우가 흔함.
며칠 전에도 제공자별 벤치마크 성능 차이를 보여주는 글이 올라왔음. 직접 서비스를 만들며 쓸 때는 특정 벤치마크에서 모델 성능이 75%인지 83%인지 체감하기 어려워, 제공자 입장에서는 비용을 줄이기 아주 좋은 영역임.
과학 분야에서 약 1,000배 작은 모델들을 작동시키려 애쓰는 입장에서는 위안이 됨. 사람들이 학습시키는 온갖 모델을 지원하는 백엔드를 만드는 일은 상당히 고됨.
“그냥 업계에서 하는 대로 하면 안 되나?”라는 질문을 자주 받는데, 답은 업계에는 수십억 달러가 있다는 것임. “이제 아무도 X 백엔드는 안 쓴다”는 말에도, 그들에게는 수십억 달러와 소프트웨어 엔지니어 팀이 있다고 답하게 됨.
맞음. https://inferencex.semianalysis.com에서 일부 비용 지표를 비교할 수 있음. 널리 쓰이는 엔진으로 vLLM, TensorRT-LLM, SGLang이 있고, 셋 모두 Apache 2.0 라이선스의 오픈소스임.
일부 제공자는 자체 엔진도 구현해야 함. Cerebras는 웨이퍼 규모 칩을 위한 자체 추론 서비스 스택을 쓰고, Google도 TPU용 자체 스택과 XLA 컴파일러를 사용함.
최신 LLM 구조를 공부하면서 각 모델의 설계 선택을 더 잘 이해하려고 PyTorch로 처음부터 구현하기 시작함. OpenArch는 이 구현들을 모은 것으로, Llama, Qwen, DeepSeek, Gemma, Kimi, GPT-OSS 등을 담고 있음. 논문에서 실제 구현으로 넘어갈 때 유용한 참조가 되도록 코드를 읽기 쉽게 유지하는 것이 목표임. 모델 구조와 학습을 다루는 분들의 피드백을 받고 싶음.
모델 구조를 이해한 내용을 다지는 데 아주 좋은 방법으로 보임. 다만 구현의 정확성은 어떻게 검증하고 있는지 궁금함. README.md에는 관련 세부 사항이 보이지 않는데, 어떤 방식인가?
내가 아는 방법은 huggingface/transformers 저장소의 구현과 교차 검증하는 것뿐임.
anuj, 이해에 도움이 될 것 같지만 아직 접근하기가 어려움. 내게 PyTorch는 강화학습(RL) 에서 Gym 같은 환경으로 훈련하는 도구에 가까움. 미리 정의된 환경에서 정해진 행동을 수행하도록 PPO, DNQ 등의 에이전트를 고르는 식으로 이해하고 있음.
이 저장소를 내가 아는 강화학습 개념에 어떻게 연결해야 할지 모르겠음. 여기서 환경과 에이전트는 무엇인가? PyTorch로 이 모델들을 학습시킬 수 있는 것인가? 초보자에게는 논문이 너무 어렵게 느껴짐.
질문이 조금 불명확해 정확한 의도를 파악하기는 어렵지만, PyTorch, 강화학습, Gym을 혼동하는 것 같아 구분해 보겠음.
PyTorch는 신경망 모델을 정의하는 프레임워크임. 강화학습은 성능을 개선하도록 신경망 매개변수를 바꾸는 학습 방법들의 모음임. 강화학습용 Gym은 신경망을 어떤 문제에 적용하고, 이후 강화학습으로 모델을 훈련하는 데 필요한 데이터를 수집하게 해주는 프레임워크임.
kimmi-K2/model.py의 MoE 라우터에 질문이 있음. 다른 MoE는 모두 k=self.top_k를 쓰는데 여기서는 torch.topk(..., k=self.num_experts)를 호출함. 생성자의 top_k=8도 저장하지 않음. 의도적으로 모든 전문가를 선택하는 밀집 라우팅인가, 아니면 self.top_k 여야 하는가?
버그가 맞음.
수정 완료함.
모델 구조의 변화가 실제 구현과 성능으로 어떻게 이어지는지 더 쉽게 이해할 수 있으면 좋겠음.
무엇을 추가할 수 있을지 살펴보겠음. 기여도 환영함.
순수 PyTorch로 처음부터 구현하는 것은 논문의 세부 내용을 깊이 이해하는 데 가장 좋은 방법이라고 봄. 전통적인 Transformer나 GPT-2를 구현하는 데서 한 걸음 더 나아간 작업인데, 개인 유지관리자로서 앞으로 나올 모델 업데이트도 계속 따라갈 수 있을까?
관점에 따라서는 PyTorch도 쓰지 않고 순수 NumPy로 구현하는 편이 더 나을 수 있음. 느리겠지만 학습용 실습으로는 더 가치 있을 수 있음.
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기