PyTorch 2.14에서 MPS ctc_loss 전·역전파가 열리며 Apple Silicon 정렬 학습이 달라진 점 | DAKER 커뮤니티

Apple Silicon에서 음성 인식이나 OCR 같은 정렬 없는 시퀀스 학습을 돌릴 때, 중간에 CTC 손실만 CPU로 내려가는 문제는 생각보다 크게 체감됐습니다. 모델은 MPS에서 돌아가는데 손실 계산 단계에서 흐름이 끊기면, 속도뿐 아니라 실험 재현성도 함께 흔들리기 쉽기 때문입니다.
PyTorch 2.14에서는 MPS에 ctc_loss 전·역전파가 추가되었습니다. 이제 짧은 로그 확률과 가변 길이 타깃을 쓰는 학습에서, Apple Silicon 환경에서도 CPU 폴백 없이 흐름을 이어갈 수 있는지 직접 확인해 볼 수 있습니다.
PyTorch 2.14에서 MPS에 ctc_loss 전·역전파가 추가되면서 음성·OCR처럼 정렬 없는 시퀀스 학습을 Apple Silicon에서 CPU 폴백 없이 이어갈 수 있습니다.
무엇이 달라졌는가
이전에는 CTC 손실만 CPU로 떨어져 Mac GPU 학습이 끊기는 경우가 있었습니다. 이번 변화의 핵심은 F.ctc_loss 또는 nn.CTCLoss를 MPS에서 호출하고, 그 결과에 대해 backward까지 이어지는지 확인할 수 있다는 점입니다.
이때 중요한 것은 단순히 손실 수치가 나온다는 사실보다, 손실이 실제로 MPS에서 전·역전파되는지 기록하는 일입니다. 참가자 노트에는 dtype, 입력 길이, 패딩 배치 여부, 디바이스를 남겨 두는 것이 재현에 더 도움이 됩니다.
점수 변화보다 손실이 MPS에서 전·역전파되는지 확인하는 기록이 재현에 더 도움이 됩니다.
재현해 볼 실험 조건
실험은 작게 시작하면 됩니다. 작은 로그 확률 텐서와 타깃, 입력 길이를 준비하고 디바이스를 MPS로 둔 뒤, F.ctc_loss 또는 nn.CTCLoss로 forward를 계산합니다. 이어서 스칼라 손실에 backward를 호출해 전·역전파가 이어지는지 확인하면 됩니다.
같은 입력을 CPU와 비교해 값과 기울기 방향이 크게 어긋나지 않는지도 함께 적어 두는 것이 좋습니다. 여기에 CPU 폴백이 없는지 한 줄로 남기면, 이후 같은 조건을 다시 맞춰 볼 때 기준점이 됩니다.
이번 확인의 범위
이번 실습은 CTC 손실 전·역전파만 확인하는 데 초점을 둡니다. MPS의 F.linear 시퀀스길이 1 경로나 네이티브 선형대수와는 다른 축의 이야기이므로, 한 번에 섞지 않는 편이 좋습니다.
실험이 끝나면 macOS, PyTorch 버전, 헤드 크기, 타임스텝 크기를 고정해 두면 이후 비교가 쉬워집니다.
실무에서 바로 볼 포인트
CTC 기반 Mac 학습에서 손실만 CPU로 빼던 기존 패턴은 PyTorch 2.14의 MPS 경로를 기준으로 다시 검토해 볼 만합니다. 특히 가변 길이 입력을 다루는 배치에서 패딩이 포함된 상태로도 학습이 이어지는지 남겨 두면, 실제 프로젝트에 적용할 때 도움이 됩니다.
또 하나는 실험 범위를 분리하는 일입니다. 디코드용 선형 경로 실습과 이번 CTC 손실 확인을 섞기보다, 이번에는 손실 경로만 따로 확인하는 편이 결과를 해석하기 쉽습니다.
관련 DAKER 학습
참고 자료
https://pytorch.org/blog/pytorch-2-14-release-blog/
여러분은 Apple Silicon에서 CTC 학습을 돌릴 때 어떤 조건을 함께 기록해 두는 편이 재현에 가장 도움이 된다고 보시나요?