단계 수를 다이얼로 쓸 수 있다는 것
확산 언어 모델에서 가져갈 건 속도가 아니라 런타임 손잡이다. 편집 작업과 구조적으로 맞물리고, 폴백되는 오픈 웨이트가 있어 직접 재볼 수 있다.
확산 언어 모델에서 가져갈 것은 속도가 아니라 다이얼이다.
generation can trade off speed and quality by using fewer or more steps, mistakes can be corrected along the way
자기회귀 모델에서 품질을 올리려면 더 큰 모델을 쓰거나 더 오래 생각하게 한다. 둘 다 런타임에 내가 세밀하게 조절하기 어렵다. 확산 계열은 샘플링 단계 수라는 손잡이를 준다.
출처: How to Build a Diffusion Language Model (Kuleshov Group)
확인된 것
-
자기회귀의 제약을 글이 이렇게 정리한다.
once a token is emitted it cannot be revised, so early mistakes compound
그리고 뒤만 볼 뿐 앞을 보지 않는다. 토큰 수만큼의 단계가 필요하다.
-
확산은 전체 시퀀스를 한 번에 놓고 여러 단계에 걸쳐 다듬는다. 마스킹 확산은 사실상 "언마스킹 트랜스포머"다 — 학습에서 토큰을 무작위로 가리고 양방향 트랜스포머가 빈칸을 채우게 한다. BERT와 닮았지만 마스킹 비율이 무작위이고, 그게 로그우도의 변분 하한에 대응한다.
-
블록 확산이 고정 길이 제약을 푼다. 이전 블록을 조건으로 블록 단위 확산을 수행해서 가변 길이를 지원하고, 자기회귀처럼 KV 캐싱을 쓸 수 있다.
-
리마스킹이 오류 정정 수단이다. 이미 확정한 토큰을 다시 가려서 고친다. 글은 이걸 추론 시점 연산 스케일링으로 부르고, 단계를 늘리면 자기회귀 품질에 근접한다고 쓴다. 균일 상태 확산(Gemma Diffusion)은 마스크 대신 무작위 어휘로 바꿔서 어떤 토큰이든 언제든 수정 가능하게 만든다.
-
수치: Mercury 2가 약 1,200 토큰/초. Gemma와 Nemotron 계열은 비슷한 자기회귀 모델 대비 2~8배 처리량에 품질은 최대 99% 유지. 리마스킹은 단계를 늘려 MAUVE를 0.40에서 0.66으로 올린다.
-
저자가 스스로 단 한계.
Diffusion has not yet been scaled to the same parameters, compute, and data as autoregressive models.
순수 지능 면에서 근본적 개선인지도 불확실하다고 쓴다.
-
상용·공개 모델: Mercury 2(Inception Labs, 최초 상용), Gemma Diffusion(구글, 오픈 웨이트), Nemotron Diffusion(NVIDIA, 오픈 웨이트, 최대 35B, 평범한 자기회귀 디코딩으로 폴백 가능).
판단
1. 한 제품 안에서 작업마다 다른 지점을 고를 수 있다는 뜻이다
속도 자체는 곧 따라잡히는 종류의 이점이다. 더 오래 남는 건 런타임에 조절 가능한 손잡이가 하나 생긴다는 쪽이다.
지금은 빠르고 싼 응답과 느리고 좋은 응답을 섞으려면 모델을 바꿔야 한다. 라우팅을 만들고, 두 벤더의 프롬프트 차이를 맞추고, 각각의 실패 모드를 따로 익힌다. 단계 수가 다이얼이면 그 일이 파라미터 하나가 된다.
→ 그래서 이 계열을 볼 때 확인할 것: 단계 수를 요청 단위로 지정할 수 있는가. 모델이 빠른 것과 내가 속도를 고를 수 있는 것은 다른 기능이고, 후자가 제품 설계를 바꾼다. 자동완성은 적은 단계, 사용자에게 보여줄 최종 출력은 많은 단계 — 같은 모델로.
2. "수정할 수 있다"가 편집 작업과 구조적으로 맞물린다
이틀 전 추론 엔진을 보면서 속도 이득이 "이미 있는 텍스트를 고치는 작업"에 몰린다고 썼다. 거기서는 투기적 디코딩이 그 성질을 우회해서 얻은 이득이었다 — 출력할 토큰이 입력에 있으면 한꺼번에 검증한다는 요령.
확산은 같은 자리를 구조적으로 차지한다. 양방향으로 보고, 뱉은 것을 되돌리고, 빈칸을 채우는 게 학습 방식 그 자체다.
→ 기준 하나: 내 작업이 빈칸 채우기·부분 수정·형식 변환에 몰려 있다면 이 계열을 먼저 본다. 코드 리팩터링, 문서 갱신, 스키마 변환이 그렇다. 반대로 빈 화면에서 긴 산문을 짓는 일이 대부분이면 아직 급하지 않다.
3. 2~8배와 "최대 99%"가 같은 문장에 있다
두 숫자를 분리해서 읽으면 안 된다. 그리고 1%를 어디서 잃는지는 이 글도 밝히지 않는다. 평균 1%는 어떤 작업에서 0%이고 어떤 작업에서 5%일 수 있다.
더 큰 단서는 저자가 직접 단 것이다 — 확산은 아직 자기회귀와 같은 규모의 파라미터·연산·데이터로 학습되지 않았다. 지금의 비교는 동등 조건이 아니고, 그 말은 좋게도 나쁘게도 읽힌다. 덜 투자하고 이 정도라는 뜻일 수도, 규모를 올려봐야 안다는 뜻일 수도 있다.
→ 이번 주에 여러 번 쓴 기준이 여기도 적용된다. 이 글은 안 된 것과 모르는 것을 본문에 적었다. "순수 지능 면에서 근본적 개선인지 불확실하다"를 저자가 직접 쓴다. 그런 글의 숫자는 조금 더 믿어도 된다.
4. 폴백되는 모델이 있다는 게 실행 가능성을 만든다
Nemotron Diffusion이 평범한 자기회귀 디코딩으로 되돌아갈 수 있다는 점이 이 글에서 가장 실용적인 정보다. 같은 모델, 같은 가중치로 두 방식을 재볼 수 있다는 뜻이기 때문이다.
벤치마크 표를 더 읽는 것보다 이게 빠르다. → 폴백되는 오픈 웨이트 모델 하나를 받아서, 내가 실제로 시키는 작업 다섯 개를 양쪽 모드로 돌려본다. 2~8배가 내 작업에서도 나오는지, 잃는 1%가 내 쪽에서 어떤 모양인지는 그때 갈린다. 남의 평균으로는 알 수 없다.
모르는 것
- 직접 돌려보지 않았다. 위 수치는 전부 이 글이 인용한 것이고 내가 재현하지 않았다.
- "최대 99% 품질"의 측정 대상과 벤치마크를 확인하지 못했다. 어느 작업에서 얼마가 빠지는지 모른다.
- Mercury 2의 1,200 토큰/초가 어떤 하드웨어, 어떤 모델 크기 기준인지 확인하지 못했다.
- MAUVE 0.40 → 0.66이 단계를 몇 배로 늘렸을 때인지, 그때 지연이 얼마나 느는지 없다. 속도를 파는 계열에서 품질을 올리려면 속도를 반납하는 구조인데, 그 교환비가 이 글에 없다. 1번의 "다이얼" 논지에서 가장 아쉬운 공백이다.
- 한국어에서의 성능이 이 글에 없다. 토크나이저와 마스킹 단위가 언어에 따라 다르게 작동할 여지가 있는데 확인하지 못했다.
- 도구 호출, 구조화 출력, 파인튜닝 같은 실무 기능이 확산 계열에서 얼마나 성숙한지 모른다. 도입 판단에서 가장 중요한 부분인데 이 글의 범위 밖이다.
댓글
불러오는 중...