PyTorch 2.14의 cudagraph_mark_warmup_incomplete, CUDA Graph Trees 워밍업을 한 번 더 돌릴 때 | DAKER 커뮤니티
PyTorch 2.14에는 torch.compiler.cudagraph_mark_warmup_incomplete가 있습니다. CUDA Graph Trees 경로를 쓰는 동안 입력 모양이나 제어 흐름이 초반 몇 스텝에서만 늦게 안정화되는 경우, 이 API는 워밍업이 아직 끝나지 않았다고 라이브러리에 알리는 역할을 합니다.
torch.compile의 reduce-overhead·그래프 트리 모드에서는 워밍업이 끝난 뒤 캡처가 고정됩니다. 그래서 캡처가 너무 이르게 굳는 상황을 다시 재현하거나 살펴봐야 할 때, 이 API가 바로 확인해 볼 지점이 됩니다.
CUDA Graph Trees 경로에서 아직 모양이 덜 안정적일 때 호출하면, 워밍업 반복을 한 번 더 돌리도록 요청할 수 있습니다.
왜 이 API를 보게 되는가
문제는 워밍업이 끝난 시점과 실제 실행 경로가 안정화되는 시점이 어긋날 때 생깁니다. 입력 경로나 제어 흐름이 조금 늦게 정리되면, 한 세대가 너무 일찍 캡처되어 이후 구간에서 깨질 수 있습니다.
이럴 때는 같은 입력을 기본 워밍업 구간과 마크 호출 뒤 구간으로 나눠 돌려 보면 됩니다. 그러면 추가 워밍업이 실제로 붙는지, 그리고 조기 캡처로 보이던 현상이 어떻게 달라지는지 비교하기 좋습니다.
재현해 볼 실험 조건
실험은 워밍업 연장이 실제로 붙는지 확인하는 데 초점을 맞추는 것이 좋습니다. 세대 복제나 while_loop 캡처와는 다른 축이므로, 이번에는 워밍업을 한 번 더 요청하는 API만 따로 보는 편이 비교가 분명해집니다.
- CUDA Graph Trees가 켜진 컴파일 모드로 짧은 스텝을 돌리고, 워밍업 직후 첫 캡처 세대를 기록합니다.
- 모양이 바뀌는 직전·직후에
cudagraph_mark_warmup_incomplete를 호출한 뒤, 추가 워밍업이 붙는지와 오류·스킵 사유를 비교합니다. - 어제 다룬
cudagraph_trees_generation_cloning=user_visible과 겹치면, 오늘은 워밍업 연장만 켜고 복제 설정은 기본으로 둡니다.
실무에서 바로 볼 포인트
이 API는 특히 동적 배치나 희소 경로처럼 초반 몇 스텝에서만 모양이 흔들리는 모델에서 먼저 살펴볼 만합니다. 호출 위치는 재현 가능한 훅, 예를 들면 스텝 경계에 두는 것이 좋습니다. 그래야 같은 조건에서 워밍업 연장 여부를 반복 확인하기 쉽습니다.
또 하나 중요한 점은 과다 호출입니다. 워밍업이 계속 끝나지 않는 상태가 되지 않는지 로그로 확인해 두면 좋습니다. 재현 노트에는 컴파일 모드, 디바이스, 마크 호출 시점, 캡처 세대 번호를 함께 남겨 두면 비교가 수월합니다.
오늘은 세대 복제나 while_loop 캡처가 아니라, 워밍업을 한 번 더 요청하는 API 자체를 분리해서 보는 것이 핵심입니다.
관련 DAKER 학습
참고 자료
https://daker.ai/community/post-mufwpsgi-02183042
https://daker.ai/community/post-muewk8jy-130d6a3c
https://daker.ai/public/learning/tracks/pytorch-practice-advanced-track
여러분은 CUDA Graph Trees에서 워밍업이 너무 일찍 끝난 사례를 어떤 조건에서 가장 자주 보셨나요?