OpenArch – 최신 LLM 아키텍처를 PyTorch로 처음부터 구현한 학습용 저장소
OpenArch – PyTorch implementations of modern LLM architectures
TL;DR Highlight
Llama·Qwen·DeepSeek 등 오픈 LLM 구조를 모델당 파일 하나로 읽기 쉽게 구현
Who Should Read
LLM API는 쓰지만 모델 내부 구조(attention, MoE 등)가 어떻게 다른지 코드로 비교해 보고 싶은 백엔드 개발자
Core Mechanics
- 모델당 읽기 쉬운 파일 하나
- Llama, Qwen, DeepSeek, Gemma, GPT-OSS, Kimi 등을 PyTorch로 처음부터 직접 썼다.
- 각 모델 폴더에 model.py와 짧은 README.md가 있다.
- 프로덕션 속도보다 읽기 쉬운 코드를 목표로 한다.
- 구조 차이를 한눈에 비교
- README 표에 모델별 정규화, 위치 인코딩, attention 종류, MoE(전문가 혼합) 여부가 정리돼 있다.
- 예를 들어 Llama 3는 GQA에 MoE 없음, DeepSeek R1은 Multihead Latent Attention에 MoE 있음이다.
- Gemma 3와 GPT-OSS 20B는 sliding window를 쓰는 GQA로 표기돼 있다.
- 구현 현황은 일부만 완료
- GPT-2 XL, Llama 2/3/4 Maverick, Qwen 3, Kimi K2, GLM 4.5 등은 순전파(forward pass) 용으로 ✅ 표시다.
- Qwen3 Next, Qwen3-VL, Dall-e는 🚧 작업 중이다.
- 목표 목록은 Sebastian Raschka의 Architecture Gallery 103개 아키텍처를 따른다.
- 프로덕션용이 아니라고 명시
- 저자는 transformers 같은 프로덕션 라이브러리와 경쟁하려는 게 아니라고 밝혔다.
- 실서비스에는 공식 구현이나 transformers를 쓰라고 안내한다.
Community Reactions
- 구현이 맞는지 검증 방법을 묻는 의견
- README에 정확성 확인 방법이 없다는 지적이 나왔다.
- README 자체도 공식 가중치 출력 일치 테스트를 기여 과제로 남겨 둔 상태다.
- Kimi K2 라우터 코드가 이상하다는 지적
- kimi-K2 model.py에서 router가 torch.topk를 k=self.num_experts로 호출한다는 댓글이 있었다.
- 다른 MoE는 k=self.top_k를 쓰고, 생성자의 top_k=8도 저장되지 않는다고 했다.
- 의도된 dense 라우팅인지 버그인지 질문했다.
- 오픈 웨이트 모델에 전용 코드가 필요한 줄 몰랐다는 경험
- 가중치만 있으면 범용 런타임이 돌릴 줄 알았는데 구조별 구현이 필요하다는 걸 처음 알았다는 댓글이 있었다.
- 그렇다면 호스팅 업체는 양자화·설정뿐 아니라 추론 엔진 구현에서도 다를 수 있느냐고 물었다.
- 혼자 유지보수가 가능한지 우려하는 의견
- 개인 메인테이너가 앞으로 나올 모델 업데이트를 따라갈 수 있겠느냐는 질문이 있었다.
- 구현이 생각보다 짧고 단순해서 놀랍다는 반응도 있었다.
How to Apply
- 관심 모델 두 개의 model.py를 나란히 열어 보기
- 오늘 Llama 3와 DeepSeek 폴더를 클론해 attention 부분을 비교해라.
- GQA와 Multihead Latent Attention이 코드에서 어떻게 다른지 AI에게 설명시켜라.
- 쓰는 모델의 구조 특성을 표로 정리하기
- 팀이 쓰는 오픈 모델을 README 표에서 찾아 attention·MoE 여부를 적어라.
- 모델 선택 문서에 구조 차이를 한 줄씩 추가해라.
- 읽은 구현은 공식 코드와 대조해 검증하기
- 학습 목적으로 참고할 때는 transformers의 공식 구현과 같은 부분을 비교해라.
- 서비스에는 저자 안내대로 공식 구현이나 transformers를 써라.
Try It
# Claude 또는 ChatGPT에 붙여넣기 (OpenArch 활용 간이 학습 프롬프트)
아래는 {{모델A 이름}}과 {{모델B 이름}}의 model.py 코드다.
[모델A 코드]
{{모델A model.py 붙여넣기}}
[모델B 코드]
{{모델B model.py 붙여넣기}}
두 구현을 비교해서 다음 항목별로 표로 정리해줘: 정규화 방식, 위치 인코딩, attention 종류, MoE 여부와 라우팅 방식. 백엔드 개발자가 이해할 수 있게 비유로 설명해줘.
이어서 해 볼 것: 라우터나 attention 부분에서 의심 가는 코드가 있으면 공식 구현과 어떻게 다른지 물어봐라.Terminology
관련 논문
The Judge Can Debias Itself: LLM-as-a-Judge가 스스로 편향을 고치게 하는 법
심사 프롬프트에 편향 경고를 넣거나 스스로 비판시켰더니 21개 중 20개 조합에서 정확도가 올랐다
미국 노동시간의 90%는 AI 벤치마크가 제대로 다루지 못하는 일이다
벤치마크 29개를 직업 과제에 매핑했더니 노동시간 90%가 커버 밖
Postgres 19, AI 코드 리뷰가 버그를 너무 많이 찾아 출시 연기
LLM 코드 리뷰가 버그를 쏟아내 Postgres 19가 11월로 밀리고 기능 8~10개가 빠졌다
StarSkirmish Bench v0.2: LLM이 1시간 만에 짜는 StarCraft 봇 대결
LLM에게 1시간 동안 StarCraft 봇을 짜게 했더니 GPT-6 Astra가 1위
그럴듯한 설명 하나면 멀티모달 LLM 심사위원도 속는다 (JUPE 벤치마크)
정답은 그대로 두고 설명만 붙였더니 MLLM 심사위원의 오답 거절률이 12.7~13.8%p 떨어졌다
신경망은 이미 깔끔하다: polysemanticity의 원인 재해석
뉴런을 직접 들여다봤더니 대부분 한 가지 역할이 있었다는 주장
Linus Torvalds의 첫 LLM 보조 패치 시리즈
Linus가 LLM으로 folio 조회 패치 10개를 만들어 read() 벤치가 10배 빨라졌다