확산 트랜스포머 캐시가 남은 신뢰도를 걸음 크기로 쓴다

SoftCache: Adaptive Step Size Caching for Diffusion Transformers

arXiv2610.22369v1

Shimon Malnick2026-10-15

무엇인가

확산(diffusion) 모델과 플로우 매칭 모델은 샘플 하나를 만들기 위해 같은 대형 트랜스포머를 수십 번 통과시킨다. 이 반복 통과가 생성 비용의 대부분을 차지하는데, 연속한 스텝 사이에서 잠재 상태가 조금씩만 변하기 때문에 직전 계산을 재사용하는 캐싱이 유효한 가속 수단이 된다. 문제는 언제 캐시를 갱신할지다. 고정 스케줄 캐시는 프롬프트와 무관하게 미리 정한 노드에서 갱신하고, 동적 캐시는 샘플링 중에 네트워크 입력의 값싼 프로브(probe)를 누적해 만든 staleness 신호가 임계값 τ를 넘으면 갱신한다. 논문이 지적하는 핵심은 이 동적 캐시가 신호를 이진 스위치로만 쓴다는 점이다. 임계값을 막 넘긴 노드와 임계값에 근접한 노드를 똑같이 취급하고, 어느 쪽이든 스케줄이 정한 동일한 스텝 크기만큼 전진한다.

어떻게 동작하나

저자들은 이 버려지는 정보에 주목한다. 임계값까지 남은 거리, 즉 headroom H_i = 1 − A_i/τ가 재사용 오차를 예측한다는 것이다. 갱신 직후 노드와 갱신 직전 노드는 중앙값 기준 오차가 2.2배 차이 나는데도 임계값은 둘을 동일하게 다룬다. SoftCache는 이 headroom을 갱신 결정이 아니라 스텝 크기로 읽는다. 캐시된 노드에서 스텝은 Δ̄_i = min{1 − t_i, Δ_i + (J−1)·H_i·Δ_i}로 늘어나며, headroom이 크면 스케줄 격자에 없는 지점까지 점프하고 갱신이 가까워지면 원래 스텝으로 줄어든다. J는 한 스텝이 건너뛸 수 있는 스케줄 스텝 수의 상한이다. 점프가 격자 밖에 착지하면 남은 노드들을 [t_i+1, 1] 구간에 균등 재배치해, 건너뛴 노드는 궤적에서 아예 사라진다. 또한 캐시된 잔차를 그대로 붙잡지 않고 최근 두 개의 fresh 잔차를 잇는 직선을 따라 r̂_i = r_a + β·λ_i·(r_a − r_{a−1})로 외삽한다. λ_i는 시간 간격 비율이라 격자 위든 아래든 정의되며, 추가 네트워크 평가 없이 텐서 하나만 더 저장하면 된다. 궤적 초반과 프로브 변화 자체가 큰 노드에서는 점프를 끄고, β는 4배 미만 구간에서 1, 그 이상에서 0.5로 감쇠하는 동일 규칙을 세 백본에 적용한다.

무엇과 다른가

실험은 이미지 한 개와 비디오 두 개 백본에서 이뤄졌다. FLUX.1-dev로 DrawBench 200개 프롬프트에 1024×1024 이미지를, HunyuanVideo로 VBench 946개 프롬프트에 65프레임 640×480 비디오를, Wan2.1-T2V-1.3B로 100개 프롬프트에 81프레임 832×480 비디오를 생성하며 모두 50 오일러 스텝을 쓴다. 비교 대상은 동적 캐시 TeaCache·SeaCache, 스케줄을 미리 고정하는 DPCache, 특징을 예측하는 TaylorSeer이며, 동일 프롬프트·시드·하드웨어에서 실측 속도가 일치하도록 각 방법의 속도 파라미터를 스윕한다. 충실도는 캐시 없는 샘플 대비 PSNR·SSIM·LPIPS·DreamSim 네 지표로 측정한다.

어떻게 쓰나

결과는 FLUX의 세 속도 구간 모두에서 네 지표 전부 1위다. 가장 빠른 구간에서 SeaCache를 PSNR 1.12dB, LPIPS 0.082만큼 앞서며, 품질 우위가 느리게 돌아서 생긴 것이 아니다. SoftCache보다 빠른 실행은 TeaCache의 최저 구간(0.23배)과 TaylorSeer의 중간 구간(0.15배)뿐인데, 이들은 각각 7.2dB, 8.6dB 뒤진다. HunyuanVideo에서는 더 나은 베이스라인 대비 0.54~2.78dB PSNR 우위를 세 구간 모두에서 유지하고, 중간에서 최고 속도 구간으로 갈 때 SoftCache는 PSNR 0.09dB·LPIPS 0.021만 잃는 반면 SeaCache는 1.44dB·0.057을 잃는다. Wan2.1의 두 지점에서도 두 베이스라인을 네 지표 모두에서 앞선다. 정성적으로는 베이스라인들이 얼룩말의 머리를 없애거나 다리를 하나 더 만들고, 개 머리를 반점으로 뭉개는 장면에서 SoftCache가 프롬프트가 지시한 객체 구조를 유지한다.

전제와 한계

어블레이션은 DPG-Bench 50개 프롬프트(테스트셋과 분리)에서 수행됐다. 점프를 끄면(J=1) 7배 구간에서 PSNR 4.18dB·LPIPS 0.219만큼 뒤지고, 꼬리 재배치를 끄면 점프가 headroom에 맞게 착지해도 노드 수가 줄지 않아 1.21dB 손해다. headroom 비례를 없애고 항상 최대 점프를 하거나 잔차 외삽을 끄면 고속 구간에서 PSNR은 앞서지만 LPIPS·DreamSim에서는 SoftCache가 계속 앞선다. 저자들은 PSNR이 세부 디테일을 뭉개는 출력을 선호하는 반면 지각 지표는 디테일을 살린 쪽을 선호한다고 설명하며, 블라인드 비교에서 β=0.5를 J=20이나 외삽 제거보다 선호했다고 밝힌다.

개발자 관점에서 이 방법의 실무적 매력은 학습도, 백본별 캘리브레이션도 필요 없다는 점이다. 이미 TeaCache나 SeaCache류 동적 캐시를 쓰고 있다면, 누적 신호 A_i를 임계값과 비교하는 부분을 그대로 두고 그 여유분을 스텝 크기에 반영하는 것만으로 속도-품질 곡선을 밀어 올릴 수 있다. 다만 프로브는 ρ_i ≥ 0과 갱신 시 A_i 리셋만 만족하면 되므로 TeaCache 프로브로 대체 가능하지만 충실도는 낮아진다고 명시돼 있다. 도입 시에는 자신의 스케줄러에서 격자 밖 착지와 꼬리 재배치가 스텝 수 계산과 충돌하지 않는지, 그리고 β·J 같은 상수 규칙이 자신의 속도 구간에서도 유효한지 확인해야 한다.

한계도 저자들이 직접 밝힌다. headroom 측정은 어떤 노드가 잔차를 더 멀리 실어 나를 수 있는지는 알려주지만 얼마나 더 멀리인지는 알려주지 않으므로, 저자들은 그중 가장 단순한 선형 규칙을 택했다. 잔차 외삽은 마지막 fresh 평가에서 멀어질수록 λ_i를 통해 과도하게 확장돼 고속에서 신뢰도가 떨어지고, 그래서 β를 0.5로 감쇠한다. 점프 상한 J를 20까지 올리는 것은 β=0.5보다 이득이 작고 미세 텍스처를 잃는다. 또한 평가는 FLUX·HunyuanVideo·Wan2.1 세 백본, 3.5~6.9배 구간에 한정되며, 그보다 훨씬 공격적인 속도에서의 거동은 제시되지 않았다.