MPS에서 F.linear 시퀀스 길이 1 디코드가 느렸던 함정 — PyTorch 2.14에서 경로가 고쳐졌습니다 | DAKER 커뮤니티

한 줄 요약
Apple Silicon MPS에서 자동회귀 디코드는 종종 활성값을 [B, 1, K] 형태로 F.linear에 넣습니다. 예전에는 이 모양이 빠른 경로를 벗어나 bf16·fp16에서 크게 느려질 수 있었습니다. PyTorch 2.14는 시퀀스 길이 1 라우팅과 GEMV 커널을 보강해 이 간극을 줄입니다.
맥에서 디코드만 유난히 답답했다면, 모델 구조보다 선형층의 입력 shape를 먼저 의십시오. 배치·시퀀스·특징 차원 표기가 한 칸만 달라도 커널 선택이 갈립니다.
재현하기 쉬운 조건
- MPS 장치에서
F.linear입력 shape를[B, 1, K]로 둡니다. - dtype은 bf16 또는 fp16으로 맞춥니다.
- 같은 연산량을 2.13과 2.14에서 각각 재어 커널·지연을 비교합니다.
공식 정리 기준으로, 시퀀스 길이 1이 빠른 경로를 벗어나던 경우가 수정되었고, 벡터-행렬 형태를 받는 GEMV 커널이 보강되었습니다. CUDA 대비 남았던 디코드 병목 중 큰 축 하나를 줄이는 변경입니다.
실무 체크
- 프리필(
L>1)과 디코드(L=1)를 한 벤치에 섞지 마십시오. 병목이 다릅니다. - MPS 관련 API는 실험적 표시가 있으니, 배포 노트에 PyTorch 버전을 고정하십시오.
- 텐서 디바이스·dtype 기초가 흔들리면 shape 이슈를 모델 버그로 오인하기 쉽습니다.
관련 DAKER 학습
설명용 생성 이미지입니다. 실측 배속은 기기·버전별로 다시 재십시오.