Featured image of post NVIDIA AnyFlow — 스텝 수에 묶이지 않는 비디오 디퓨전 증류

NVIDIA AnyFlow — 스텝 수에 묶이지 않는 비디오 디퓨전 증류

NVIDIA가 Wan2.1 위에 올린 AnyFlow가 온폴리시 플로우 맵 증류로 어떻게 임의 스텝 비디오 생성을 가능하게 하는지 정리

개요

NVIDIA가 공개한 AnyFlow는 비디오 디퓨전 모델추론 스텝 수에 묶이지 않게 증류하는 프레임워크다. 기존 few-step 증류 모델은 4스텝이면 4스텝, 8스텝이면 8스텝에 고정돼 있었다 — AnyFlow는 같은 가중치 하나로 1스텝부터 수십 스텝까지 모두 돌아가고, 스텝을 늘릴수록 품질이 안정적으로 올라간다. 이 글은 nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers 모델 카드를 출발점으로, 그 밑에 깔린 온폴리시 플로우 맵 증류(On-Policy Flow Map Distillation) 가 왜 기존 컨시스턴시 증류와 다른지를 본다.

베이스 모델 — Wan2.1

AnyFlow는 처음부터 학습한 모델이 아니라, 알리바바의 오픈소스 비디오 생성 모델 Wan2.1 위에 올라간 증류 레이어다. 베이스가 되는 Wan-AI/Wan2.1-T2V-14B-DiffusersFlow Matching 프레임워크 위에 세운 14B 파라미터 Diffusion Transformer로, 다국어 T5 인코더로 텍스트를 받고 각 트랜스포머 블록에서 cross-attention으로 조건을 주입한다. 시간 축 압축은 비디오 전용으로 설계된 Wan-VAE — 3D causal VAE가 담당한다.

Wan2.1의 약점은 디퓨전 모델 전반의 약점과 같다: 느리다. 480P 5초 클립 한 편을 뽑는 데 50스텝 안팎의 ODE 적분이 필요하고, 14B 모델이라 한 스텝이 무겁다. 그래서 few-step 증류가 필요한데, 여기서 기존 방식의 한계가 드러난다.

문제 — few-step 증류는 왜 스텝 수에 묶이나

few-step 샘플링을 위한 표준 도구는 컨시스턴시 모델 계열의 증류다. 핵심 아이디어는 noise가 섞인 어느 시점 z_t에서든 곧장 깨끗한 출력 z_0로 가는 매핑을 학습시키는 것 — endpoint consistency mapping이다. 문제는 이 과정에서 원래의 probability-flow ODE 궤적을 컨시스턴시 샘플링 궤적으로 통째로 갈아끼운다는 점이다.

그 결과 두 가지가 깨진다. 첫째, 모델이 특정 스텝 수에 최적화돼 그 밖의 예산에서는 성능이 떨어진다. 둘째, 더 치명적으로 — test-time scaling이 사라진다. 일반 디퓨전 샘플링은 스텝을 늘리면 품질이 좋아지는데, 컨시스턴시 증류 모델은 스텝을 늘려도 좋아지지 않거나 오히려 나빠진다. ODE 궤적이 주는 “더 계산하면 더 정확해진다"는 성질을 버린 대가다. AnyFlow 논문은 바로 이 지점을 출발점으로 잡는다.

AnyFlow의 답 — 온폴리시 플로우 맵 증류

AnyFlow의 전환은 한 줄로 요약된다: endpoint mapping(z_t → z_0)을 버리고, 임의 시간 구간 전이 flow map(z_t → z_r)을 학습한다. z_0라는 한 점이 아니라 궤적 위의 임의의 두 시점 사이 전이를 배우기 때문에, 추론 시 스텝을 어떻게 쪼개든 같은 모델이 대응한다. 이게 “any-step"의 기술적 근거다.

핵심 학습 기법은 Flow Map Backward Simulation이다. 전체 Euler rollout을 여러 개의 shortcut flow-map 구간으로 분해해서, 모델이 자기 자신이 만들어내는 중간 상태 위에서 학습하도록 — 즉 **온폴리시(on-policy)**로 — 만든다. 이 분해가 두 가지 오차원을 동시에 잡는다:

  • Discretization error — few-step 샘플링에서 스텝을 크게 건너뛸 때 쌓이는 적분 오차
  • Exposure bias — causal(자기회귀) 생성에서 학습 분포와 추론 분포가 어긋나며 누적되는 오차

컨시스턴시 증류와의 결정적 차이는 여기 있다. 컨시스턴시 증류는 원래 궤적을 대체하지만, AnyFlow는 원래 ODE 궤적을 보존한 채 구간으로 분해한다. 궤적을 그대로 두기 때문에 “스텝을 더 쓰면 더 정확해진다"는 성질이 살아남는다 — few-step 영역에서는 컨시스턴시 기반 방법과 비슷하거나 더 나으면서, 스텝을 늘리면 궤적 전체에 걸쳐 품질이 균일하게 올라간다.

무엇을 지원하나 — 아키텍처와 태스크

AnyFlow는 단일 모델이 아니라 HuggingFace 컬렉션으로 풀린 라인업이다.

모델태스크아키텍처해상도
AnyFlow-Wan2.1-T2V-14B-DiffusersT2Vbidirectional480P
AnyFlow-Wan2.1-T2V-1.3B-DiffusersT2Vbidirectional480P
AnyFlow-FAR-Wan2.1-14B-DiffusersT2V / I2V / V2Vcausal480P
AnyFlow-FAR-Wan2.1-1.3B-DiffusersT2V / I2V / V2Vcausal480P

FAR 변형은 Show LabFAR(Long-Context Autoregressive Video Modeling, arXiv 2503.19325) — next-frame prediction 기반 causal 비디오 모델 — 위에 AnyFlow를 올린 것으로, Text-to-Video 외에 Image-to-Video, Video-to-Video까지 한 모델에서 처리한다. bidirectional(Wan2.1 본체)과 causal(FAR) 양쪽에서 검증됐고, 스케일도 1.3B부터 14B까지 커버한다. exposure bias를 잡는 backward simulation이 특히 causal 쪽에서 의미가 크다.

써보기 — Diffusers

🤗 Diffusers 통합이 끝나 있어서 진입 장벽은 낮다. 표준 DiffusionPipeline으로도 로드되고, 스텝 수까지 제어하려면 전용 WanAnyFlowPipeline을 쓴다.

import torch
from diffusers.utils import export_to_video
from far.pipelines.pipeline_wan_anyflow import WanAnyFlowPipeline

model_id = "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers"
pipeline = WanAnyFlowPipeline.from_pretrained(model_id).to('cuda', dtype=torch.bfloat16)

video = pipeline(
    prompt="CG game concept digital art, a majestic elephant running towards a herd.",
    height=480, width=832, num_frames=81,
    num_inference_steps=4,           # 4 -> 8 -> 16으로 올리면 품질이 올라간다
    generator=torch.Generator('cuda').manual_seed(0)
).frames[0]

export_to_video(video, "output.mp4", fps=16)

핵심은 num_inference_steps다. 같은 체크포인트에서 이 값만 바꿔 속도-품질 곡선 위 어디든 고를 수 있다 — few-step 증류 모델이라면 불가능한 일이다. 학습·추론 스크립트와 VBench 평가 설정은 NVlabs/AnyFlow 저장소에 있고, accelerate·transformers와 함께 bfloat16으로 돌리는 게 권장된다.

라이선스는 주의가 필요하다. GitHub 코드는 Apache 2.0이지만, HuggingFace에 올라간 모델 가중치는 NVIDIA One-Way Noncommercial License (NSCLv1) — 비상업 용도 한정이다. 베이스인 Wan2.1 자체는 Apache 2.0이라는 점과 대비된다.

인사이트

AnyFlow가 흥미로운 이유는 단순히 “더 빠른 비디오 모델"이라서가 아니다. 이 작업은 증류라는 행위 자체의 디폴트를 다시 짠다. 지난 몇 년간 few-step 증류의 암묵적 전제는 “추론 예산은 학습 시점에 정해진다"였다 — LCM, 컨시스턴시 모델, 각종 step-distilled 체크포인트가 모두 그렇게 배포됐다. AnyFlow는 그 전제를 endpoint mapping 대신 flow map을 배우는 것만으로 풀어버린다. 결과적으로 “속도냐 품질이냐"가 배포 시점의 고정 선택이 아니라 추론 시점의 슬라이더가 된다.

더 깊은 통찰은 무엇을 보존하느냐에 있다. 컨시스턴시 증류는 원래 ODE 궤적을 버리는 대가로 속도를 샀고, 그 과정에서 test-time scaling이라는 디퓨전의 핵심 자산을 함께 잃었다. AnyFlow는 궤적을 보존하고 구간으로 쪼개는 쪽을 택해 그 자산을 지킨다 — “근사하려면 무엇을 버려도 되는가"가 아니라 “무엇을 반드시 지켜야 하는가"를 먼저 묻는 설계다. 온폴리시 backward simulation이 discretization error와 exposure bias를 한 메커니즘으로 동시에 잡는 것도 같은 맥락이다: 별도의 패치 두 개가 아니라, 궤적을 제대로 분해하면 자연히 따라오는 한 가지 성질이다.

남는 한계도 분명하다. 공개된 모델 카드와 프로젝트 페이지에는 정량 VBench 점수가 아직 명시돼 있지 않고 정성 비교와 상대 서술 위주이며, 해상도는 480P로 한정, 가중치 라이선스는 비상업이다. 그럼에도 방향은 분명하다 — 비디오 생성의 다음 라운드 차별화는 모델 크기가 아니라 하나의 가중치가 얼마나 넓은 속도-품질 스펙트럼을 커버하느냐에서 나온다. AnyFlow는 그 스펙트럼을 배포가 아니라 추론으로 옮긴 첫 사례다.

참고

모델 & 코드

논문

배경 & 도구

Hugo로 만듦
JimmyStack 테마 사용 중