결론부터
- 증상 — 속도 비교에서는 그래픽카드(GPU)가 이겼는데, 실제 분리가 시작되면 1초 안에 실패하고 CPU로 넘어갔습니다. 실패는 조용히 처리돼 화면에는 아무 오류도 없었습니다.
- 원인 — 속도 비교가 끝난 뒤 쓸모없어진 CPU용 계산 준비물을 정리(해제)했는데, 같은 AI 실행 도구(onnxruntime-web 1.26) 안에서 그 정리가 GPU 쪽 계산까지 망가뜨렸습니다.
- 해결 — CPU 쪽 준비물을 작업이 끝날 때까지 정리하지 않고 살려 둡니다. 버그 때문에 "이 컴퓨터는 CPU"로 잘못 저장된 기록도 지우고 다시 재게 했습니다.
| 측정 | 고치기 전 (CPU) | 고친 뒤 (GPU) |
|---|---|---|
| 10초 조각 하나 | 약 16~20초 | 약 3.7~4.4초 |
| 60초 곡 전체 | — | 45초 |
| 첫 방문 비교 | — | 약 70초(1회) |
숫자는 HP OMEN 16 노트북(NVIDIA GeForce RTX 3050 Ti Laptop GPU)에서 직접 잰 값입니다. 크롬이 그래픽카드를 쓰도록 바꾸는 설정은 앞의 기록에 있습니다.
이 앱이 그래픽카드를 고르는 방식
드럼 추출기는 곡 파일을 서버로 보내지 않고, 방문자의 브라우저 안에서 드럼 분리 AI 모델(Demucs 계열 htdemucs)을 돌립니다. 곡은 10초 조각으로 잘라 차례로 처리합니다.
컴퓨터마다 그래픽카드 성능이 달라서, 처음 방문했을 때 한 번 직접 비교해 보고 고릅니다.
- CPU와 GPU가 각각 조각 하나로 몸을 풀고, 다음 조각 하나를 처리하는 시간을 잽니다.
- GPU가 1.3배 이상 빠르고, 두 결과의 소리 차이가 거의 없을 때(평균 제곱 오차 0.00001 이하)만 GPU를 씁니다. 근소하게 빠른 정도로는 바꾸지 않습니다.
- 결정은 브라우저에 저장해 두고, 다음 방문부터는 비교 없이 바로 씁니다. 그래픽카드가 바뀌면 다시 잽니다.
같은 비교를 인텔 내장 그래픽(Iris Xe)으로 했을 때는 CPU가 선택됐습니다. GPU가 무조건 빠른 게 아니어서 이렇게 재서 고릅니다.
원인을 찾은 과정
GPU 계산이 도중에 실패하면 CPU로 처음부터 다시 하도록 만들어 둔 안전장치가 있었습니다. 그 안전장치가 너무 조용히 일해서, 사용하는 쪽에서는 "그냥 느린 앱"으로만 보였습니다.
1. 작게 재현하기
앱 전체를 돌리는 대신, 브라우저 페이지 안에서 같은 순서만 따라 하는 짧은 시험 코드를 만들었습니다. CPU 준비 → GPU 준비 → 둘 다 한 번씩 계산 → CPU 쪽 정리 → GPU로 다음 계산.
2. 숨어 있던 오류 보기
마지막 GPU 계산에서 오류가 그대로 드러났습니다.
[WebGPU] Kernel "[Mul] node_Mul_41" failed. Error: no GPU data for input: 160
"GPU에 있어야 할 데이터가 없다"는 뜻입니다. CPU 쪽 정리를 작업이 다 끝난 뒤로 미루자 GPU가 곡 끝까지 계산을 마쳤습니다. 범인은 정리하는 한 줄의 위치였습니다.
3. 왜 그런가
이 앱에서 CPU용과 GPU용 계산은 같은 실행 도구(onnxruntime-web 1.26의 같은 모듈)를 나눠 씁니다. 한쪽을 정리하는 과정이 다른 쪽이 쓰던 데이터까지 건드린 것으로 보입니다. 도구 쪽 동작이라 앱에서 고칠 수는 없어서, 정리하는 순서를 바꾸는 쪽을 택했습니다.
고친 내용
- CPU 쪽 준비물을 끝까지 살려 두기. GPU로 정해지면 CPU 쪽은 정리하지 않고 옆에 두었다가, 곡 전체 분리가 끝난 뒤 함께 정리합니다. 덤으로, GPU가 도중에 실패해도 이 CPU 준비물을 바로 이어 쓸 수 있어 다시 준비하는 시간이 줄었습니다.
- 잘못 저장된 결정 지우기. 버그가 있던 동안 비교를 한 브라우저에는 "이 컴퓨터는 CPU"가 저장됐습니다. 저장 이름표를 새로 바꿔(bench3) 예전 기록을 무시하고 한 번 다시 재게 했습니다.
- 실패를 기록에 남기기. 이제 GPU에서 CPU로 넘어가면 브라우저 개발자 도구(F12) 콘솔에 이유가 경고로 남습니다.
배운 것
- 조용한 안전장치는 버그도 숨긴다. 실패를 자동으로 수습하는 기능에는 반드시 "수습했다"는 기록을 같이 남겨야 합니다.
- 저장된 결정은 버그까지 저장한다. 비교 결과를 기억하는 기능이 있으면, 비교 방법을 고칠 때 옛 기록을 지우는 방법도 함께 준비해야 합니다.
- 앱 전체 대신 순서만 재현한다. 다섯 단계짜리 짧은 시험으로 줄이자 오류 한 줄이 바로 보였습니다.
자주 묻는 질문
내 컴퓨터가 GPU를 쓰는지 어떻게 알 수 있나요?
드럼 추출기에서 분리가 진행되는 동안 진행률 옆에 ‘GPU 가속’ 또는 ‘CPU 분리’가 표시됩니다. 노트북이라면 먼저 크롬이 외장 그래픽카드를 쓰는지 chrome://gpu에서 확인하세요.
그래픽카드가 없으면 못 쓰나요?
쓸 수 있습니다. CPU로 처리해 시간이 더 걸릴 뿐 결과는 같습니다. 앱이 직접 비교해서 더 빠른 쪽을 고릅니다.
곡 파일이 서버로 올라가나요?
아닙니다. 분리는 전부 방문자의 브라우저 안에서 이루어지고, 곡 파일은 기기 밖으로 나가지 않습니다.
처음 한 번은 왜 이렇게 오래 걸리나요?
AI 모델을 내려받고, CPU와 GPU 중 어느 쪽이 빠른지 직접 재 보기 때문입니다. 이 노트북에서는 약 70초였고, 다음 방문부터는 이 과정이 없습니다.