
병렬화했더니 받아쓰기가 3배 느려진 이야기 — Whisper × Apple Silicon (MPS) 실측
요약
Apple Silicon 환경에서 Whisper 모델을 병렬로 실행했을 때, MPS(Metal Performance Shaders)의 경합으로 인해 오히려 처리 속도가 3배 이상 느려지는 현상을 실측했습니다. 이를 방지하기 위해 AI 에이전트의 지시 사항에 실행 순서를 명시하고 CLAUDE.md에 관련 규칙을 기록하는 해결책을 제시합니다.
핵심 포인트
- Apple Silicon MPS 환경에서 무거운 모델의 병렬 실행은 GPU 경합으로 인해 성능이 급감함
- 병렬 실행 시 처리량이 단독 실행 대비 1/3~1/6 수준으로 떨어질 수 있음
- AI 에이전트 사용 시 실행 전략(순차 vs 병렬)을 프롬프트에 명확히 명시해야 함
- 실측 데이터를 CLAUDE.md에 기록하여 AI가 올바른 판단을 하도록 가이드하는 것이 효과적임
서론
대학교 수업 녹음본을 Whisper로 받아쓰기(Transcription)하는 운용을 집에서 사용하는 Mac으로 진행하고 있습니다. 어느 날, 음성 파일 2개를 처리했는데, 순차적으로 진행했다면 60분 정도면 끝났을 작업이 **177분(2시간 57분)**이나 걸렸습니다. 원인은 2개를 **병렬 실행(Parallel Execution)**했기 때문입니다.
"병렬로 하면 빨라질 것이다"라는 직관이 실측 결과 정반대로 배신당한 기록입니다. 동일한 구성(Apple Silicon + MPS + Whisper 계열 모델)으로 받아쓰기를 하는 분들에게는 아마 그대로 도움이 될 것입니다.
하려고 했던 것
- 서로 다른 수업의 녹음본 2개를 받아쓰기하고 싶음
- 나의 의도는 "1개가 끝나면 다음 것"을 수행하는 순차 실행
- 실행은 Claude Code(AI 에이전트)에게 의뢰
여기서 저는 "순차적으로"라고 명시하지 않았습니다. 에이전트는 2개를 동시에 처리하기 시작했습니다. 악의도 오작동도 없었으며, 지시의 공백이 병렬로 채워졌을 뿐입니다.
실측
환경: Apple M4 / 통합 메모리 32GB / 10 코어 / Whisper large-v3 + MPS
| 실행 방식 | 소요 시간 | 처리 속도 |
|---|---|---|
| 순차 실행 (추정) | 약 60분 | 단독 실행 시 150~310 fps |
| 병렬 실행 (실측) | 177분 | 각 25 fps (합계 50 fps) |
단독으로라면 150310 fps가 나오는 처리가, 2개를 동시에 돌리니 각 25 fps까지 떨어졌습니다. 합쳐도 50 fps입니다. 병렬로 만든 순간, 시스템 전체의 처리량(Throughput)이 단독 실행의 1/31/6 수준이 되었습니다. "2개를 동시에 하니까 절반씩 나누어 갖는다" 수준조차 아닙니다.
왜 느려지는가
MPS(Apple Silicon의 GPU 백엔드)는 CUDA와 같은 병렬 스케줄링(Parallel Scheduling)에 강하지 않습니다. Whisper large-v3 급의 무거운 모델을 2개 동시에 돌리면, GPU 컴퓨팅(Compute) 경합으로 인해 사실상 직렬화(Serialization)되며, 여기에 전환 오버헤드(Overhead)까지 추가됩니다. 즉, "병렬"의 겉모습을 하고 있지만 실체는 "느린 순차 실행"이 됩니다.
반대로 말하면, 병렬화가 성립하는 조건도 명확합니다.
- 별도의 머신으로 분리 (호스트가 다르면 경합하지 않음)
- CPU 전용 모드라면 간섭은 없지만, 애초에 실용적인 속도가 나오지 않음
동일 호스트의 MPS 상에서 무거운 모델을 나열하는 구성만이 명확하게 손해입니다.
원인은 2가지였다
기술적인 원인은 위의 MPS 경합이지만, 돌이켜보니 또 다른 원인이 하나 더 있었습니다. 바로 "순차적으로"라고 쓰지 않은 나의 프롬프트(Prompt) 부족입니다.
AI 에이전트는 지시에 적혀 있지 않은 실행 전략을 스스로 채워 넣습니다. 실행 순서가 결과(이번 경우에는 소요 시간)에 영향을 미치는데 이를 지정하지 않는다면, 에이전트가 채우는 방식이 나의 의도와 일치한다는 보장이 없습니다. 이번 교훈은 "병렬은 느리다"뿐만 아니라, "순서가 중요하다면, 순서는 지시에 적는다"였습니다.
재발 방지
대책은 CLAUDE.md(에이전트가 매번 읽는 설정 파일)에 한 줄을 추가하는 것입니다.
여러 음성은 순차 실행(&& 연결). 병렬은 MPS 경합으로 약 3배 느림 (60→177분)
포인트는 재발 방지를 "내가 기억한다"가 아니라 "AI가 반드시 읽는 장소에 실측값과 함께 둔다"로 정한 것입니다. 숫자가 적혀 있으면, 미래의 나(와 AI)가 "이번에는 병렬로 해도 되지 않을까"라고 재검토할 때 판단 근거가 됩니다.
운용 측면에서는 한 가지 더, 자동화 스크립트를 통한 실행과 수동 실행이 겹치면 의도치 않게 병렬 상태가 되기 때문에, "수동으로 실행할 때는 자동화 측이 돌아가고 있지 않은지 확인한다"도 세트로 규칙화했습니다.
요약
- Apple Silicon (MPS) 상에서 Whisper large-v3를 2개 병렬 실행 → 실측 60분 상당이 177분(약 3배)
- MPS는 병렬 스케줄링에 약하며, 무거운 모델의 병렬 실행은 사실상 직렬화 + 경합 오버헤드 발생
- 원인은 기술적 요인(MPS 경합)과 프롬프트(순서를 명시하지 않음) 두 가지
- 재발 방지는 "AI가 반드시 읽는 장소에 실측값과 함께 한 줄 적기"
병렬화가 항상 빠른 것은 아닙니다. 직관적으로 나열하기 전에 실측해 보고, 결과가 나쁘다면 재발 방지 규칙을 (AI가 읽는 장소에) 남겨두어야 한다고 생각합니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기