HOME » DNA Factory 소개
DNA Factory 소개
This article is written in Korean. For the English version, please refer to the Reddit post:
DNA Factory: yet another LLM training framework.
왜 또 다른 LLM 학습 도구가 필요할까요?
LLM 파인튜닝이 보편화되면서 참 많은 학습 도구가 등장했습니다. 한 시대를 풍미한 Llama-Factory가 대표적이고, 재미있는 이름만큼 유용했던 Axolotl도 있었죠. 엔비디아는 NeMo로, 허깅페이스는 TRL로 직접 여기에 뛰어들기도 했습니다.
저마다 장단점이 분명합니다. 속도가 빠른 것, 편리한 것, 호환성이 좋은 것. 그런데 저희가 집중한 건 그중 어느 것도 아닌 ‘제대로 학습하는 것’이었습니다.
여러 회사에 컨설팅을 나가 LLM을 직접 파인튜닝한다는 곳들을 살펴보면, 제대로 학습하고 있는 곳은 손에 꼽을 정도였습니다. 대부분 잘못 학습하거나 엉뚱하게 학습하고 있었죠. 요즘은 도구가 좋아져서 별다른 지식 없이도 쉽게 학습을 돌릴 수 있습니다. 하지만 LLM 학습은 원래 상당한 고급 기술입니다. 충분한 이해 없이 무작정 도구 사용법만 익혀서 하다보니 제대로 하는 곳이 드물었던 거죠.
그래서 ‘어떻게 하면 제대로 학습할 수 있을까’에 초점을 맞춰 오랜 고민 끝에 저희가 만든 도구가 바로 DNA Factory입니다. 이미 사내에서 1년 이상 운영하며 검증을 마쳤고, 얼마전 오픈소스로 공개했죠.
https://github.com/dnotitia/dna-factory
가장 좋은 한 가지 방식
가장 좋은 한 가지 방식만 제안하는 게 특징입니다. C++처럼 다양하게 기능을 열어두면 자유도는 높아지지만 제대로 쓰기는 어려워집니다. 저희는 파이썬과 비슷한 접근을 택했어요. 여러 방식을 충분히 테스트 해보고 이 중 최선의 방식을 저희가 택해서 그 방식만 제안하는 거죠.
이를 위해 저희는 모든 기본 설정을 configs/_defaults-*.yaml에 미리 정의해 두었습니다. 이 파일은 직접 수정하지 않고 필요한 항목만 override해서 사용합니다. VSCode의 접근 방식과 동일합니다. VSCode도 기본 설정은 엄청 길고 복잡해요. 하지만 왜 그렇게 설정했는지에 자세한 설명이 기입되어 있어서 그걸 보면서 필요한 설정만 별도 개인 설정으로 override해서 편리하게 정의하거든요.
loss 계산 시각화
예전에 Axolotl을 사용할 때는 loss 계산 시각화에 감동을 받은 바 있습니다. 이를 어떻게 하면 비슷하게 구현할 수 있을까 꽤 고민한 끝에, TRL의 loss 함수를 override해서 여기서 loss가 계산되는 토큰에만 파란색으로 ANSI 색상을 입혀줬습니다. 제외되는 토큰은 회색으로 표시했죠. 이렇게하면 어떤 토큰이 학습되는지 시각적으로 바로 알아차릴 수 있기 때문에 더 이상 실수하지 않습니다. 연구자들이 가장 많이 하는 실수가 바로 이 부분입니다. 해당 토큰이 학습되는지 몰랐는데 알고 봤더니 loss 계산에 포함되어 있었다 뭐 이런 거 거든요. DNA Factory는 이게 한눈에 보이기 때문에 더 이상 같은 실수를 반복하지 않습니다. 실제로 이 부분이 명확하게 보여서 좋다는 피드백을 많이 받았고요.
학습 기법은 딱 5개
그리고 저희는 백화점식으로 온갖 기법을 늘어놓지 않습니다. 그건 TRL을 직접 사용하면 돼요. 대신 저희는 현시점에서 가장 좋은 학습 기법만 골라냈습니다. 저희가 지원하는 학습 기법은 딱 5개예요. 가장 기본이 되는 SFT와 DPO, GRPO, OPD, SDFT가 그것들입니다. PPO처럼 예전에는 널리 쓰였으나 지금은 더 이상 쓰지 않는 기법은 과감히 제외했습니다. 심지어 DPO도 요즘은 거의 쓰이지 않기 때문에 곧 삭제할 예정입니다. 이슈에도 제가 등록해놓았구요. https://github.com/dnotitia/dna-factory/issues/46
요즘 저희가 주로 하는 건 GRPO, 그리고 여러 On-Policy 즉 정책 기반 기법들입니다. GRPO, OPD, SDFT가 모두 On-Policy 기법들인데요.
여기서 OPD를 살펴보면, OPD는 On-Policy Distillation 즉 정책 기반 증류의 약자인데 일반적으로 증류란 선생님(Teacher) 모델의 지식을 그대로 가져와 학생(Student) 모델이 그대로 따라 배우도록 하는 방식을 말합니다. 보다 구체적으로는 선생님과 학생의 출력 분포(logits) 사이의 KL divergence를 줄이도록 학습하죠. 이 같은 방식이 학생의 실력을 끌어올리는 데는 도움이 되지만 Catastrophic Forgetting이 늘 문제입니다. 우리말로 하면 ‘재앙적 망각’쯤 되는데, 얼마나 잘 까먹으면 이런 무시무시한 이름을 붙였을까요? 도메인 지식 좀 주입시켜보겠다고 사내 데이터 가져와서 학습해 보면, 원래 똑똑하던 모델의 성능이 눈에 띄게 떨어지고 심지어 Hallucination Rate도 치솟습니다. 이런 주입식 교육으로는 한계가 있다는 거죠.
그럼 어떻게 해야할까요?
OPD(On-Policy Distillation)는 이걸 반대로 접근합니다. 선생님이 먼저 답을 쓰고 학생이 받아 적는 게 아니라, 학생이 먼저 답을 써보고 선생님이 그 답을 토큰 단위로 채점합니다. 기술적으로는 reverse KL을 활용하는 방식입니다. 이렇게 하면 학생은 기존 지식을 까먹지 않으면서 새로운 지식을 받아들일 수 있다는 거죠.
놀랍지 않나요? SDFT(Self-Distillation Fine-Tuning)도 마찬가지입니다. 여기서 Self Distillation이 의미하듯 별도의 선생님 없이 모델 자신이 선생님이 됩니다. 이 말은 추가 정보(Privileged Context)를 받은 학생 모델이 다시 선생님 역할을 하고, 학생은 자기가 생성한 응답을 이 ‘답을 아는 자기 자신’에게 평가받으며 배웁니다. 더 이상 Catastrophic Forgetting을 겪지 않겠다는 거죠.
새 지식은 더하고 성능은 그대로
그렇게 저희가 도메인 지식을 주입시킨 DNA 3.2 모델(아직 비공개)은 위 이미지와 같은 결과를 보여줍니다. 기존 Qwen3.8 Flash Next가 갖고 있던 검열을 사실상 완전히 해제했고(54점 -> 97점) 그러면서도 페르소나를 주입해 새로운 도메인 지식도 익혔습니다(7점 -> 85점). 그러면서도 AIME, IFEval, MMLU-Pro, GPQA 등 기존 벤치마크 성능은 전혀 떨어지지 않습니다. 새 지식을 배우면서도 전혀 까먹지 않도록 학습하는 데 성공한 거죠. 놀랍지 않나요?
이 모든 기능은 오픈소스인 DNA Factory에 이미 반영되어 있으며 누구든 바로 사용해서 ‘제대로’ LLM을 파인튜닝 할 수 있습니다. 그리고 이런 고급 학습 기법과 오픈소스에 직접 PR까지 보내보는 다양한 경험을 오는 2026/11/14(토) 또는 2026/11/21(토)에 모두의연구소에서 진행되는 해커톤에서 직접 경험해볼 수 있습니다.
해커톤에 많은 참여 바랍니다!
- 1회차 (2026/11/14): https://luma.com/7vk1qyyl
- 2회차 (2026/11/21): https://luma.com/z8hzosog

