PyTorch 2.14 @dynamic_spec으로 배치 가변 차원을 compile·export에 한 번에 선언합니다 | DAKER 커뮤니티

한 줄 요약
PyTorch 2.14의 @dynamic_spec과 ShapesSpec은 가변 배치·시퀀스 차원을 함수나 모듈에 붙여 둡니다. torch.compile과 torch.export가 같은 선언을 읽어, 호출부마다 다른 dynamic 설정을 흩뿌리지 않아도 됩니다.
배치 크기가 바뀔 때마다 export용 dict와 compile용 플래그를 따로 맞추다 보면, 같은 모델인데도 선언이 어긋나기 쉽습니다. 오늘은 가변으로 둘 차원을 먼저 고르고, 그 이름을 스펙 한곳에만 적어 보십시오. 호출부에서 다시 설명하지 않아도 compile과 export가 같은 규칙을 따릅니다.
재현해 볼 실험 조건
- 배치 차원에 최소·최대와 짝수 같은 가정을 둔
ShapesSpec을 만듭니다. - 같은 스펙을
@dynamic_spec으로 forward에 붙인 버전과, 호출부dynamic_shapes만 쓰는 버전을 준비합니다. - 둘 다 compile과 export로 넘긴 뒤, 배치를 바꿔 재컴파일·가드 차이를 비교합니다.
스펙으로 선언한 차원은 unbacked 심볼로 잡혀, 우연히 본 배치에 조용히 특화되지 않습니다. 그 대신 형상에 의존하는 분기는 데이터 의존 오류로 드러납니다. 참가자 입장에서는 “어느 축이 변하는지”를 모델 옆에 남겨 두는지가 재현성을 가릅니다.
실무에서 바로 볼 포인트
- 스펙과 호출부
dynamic_shapes를 동시에 넘기면 오류가 납니다. 한쪽만 고르십시오. make_fx는tracing_mode가 fake일 때 지원 범위가 좁습니다. 실험 조건을 먼저 고정하십시오.- 학습 노트에는 PyTorch 버전, 스펙에 넣은 차원 이름, min/max를 같이 적어둡니다.
관련 DAKER 학습
설명용 생성 이미지입니다. 스펙 동작은 로컬 compile·export 결과로 확인하십시오.