HEUNG AI Studio

기록문제 해결

그래픽카드를 1초 만에 놓던 버그

곡을 넣으면 브라우저 안에서 AI가 드럼만 따로 뽑아 주는 웹앱을 만들었습니다. 그래픽카드가 있는 노트북인데도 속도가 CPU와 똑같았습니다. 확인해 보니 프로그램은 그래픽카드를 골라 놓고, 실제 작업이 시작되자마자 CPU로 되돌아가고 있었습니다. 원인은 코드 한 줄의 순서였습니다.

글 HEUNG AI Studio작성 2026-10-19직접 해 본 기록

결론부터

  • 증상 — 속도 비교에서는 그래픽카드(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초 조각으로 잘라 차례로 처리합니다.

컴퓨터마다 그래픽카드 성능이 달라서, 처음 방문했을 때 한 번 직접 비교해 보고 고릅니다.

  1. CPU와 GPU가 각각 조각 하나로 몸을 풀고, 다음 조각 하나를 처리하는 시간을 잽니다.
  2. GPU가 1.3배 이상 빠르고, 두 결과의 소리 차이가 거의 없을 때(평균 제곱 오차 0.00001 이하)만 GPU를 씁니다. 근소하게 빠른 정도로는 바꾸지 않습니다.
  3. 결정은 브라우저에 저장해 두고, 다음 방문부터는 비교 없이 바로 씁니다. 그래픽카드가 바뀌면 다시 잽니다.

같은 비교를 인텔 내장 그래픽(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의 같은 모듈)를 나눠 씁니다. 한쪽을 정리하는 과정이 다른 쪽이 쓰던 데이터까지 건드린 것으로 보입니다. 도구 쪽 동작이라 앱에서 고칠 수는 없어서, 정리하는 순서를 바꾸는 쪽을 택했습니다.

고친 내용

  1. CPU 쪽 준비물을 끝까지 살려 두기. GPU로 정해지면 CPU 쪽은 정리하지 않고 옆에 두었다가, 곡 전체 분리가 끝난 뒤 함께 정리합니다. 덤으로, GPU가 도중에 실패해도 이 CPU 준비물을 바로 이어 쓸 수 있어 다시 준비하는 시간이 줄었습니다.
  2. 잘못 저장된 결정 지우기. 버그가 있던 동안 비교를 한 브라우저에는 "이 컴퓨터는 CPU"가 저장됐습니다. 저장 이름표를 새로 바꿔(bench3) 예전 기록을 무시하고 한 번 다시 재게 했습니다.
  3. 실패를 기록에 남기기. 이제 GPU에서 CPU로 넘어가면 브라우저 개발자 도구(F12) 콘솔에 이유가 경고로 남습니다.
첫 방문이 느린 이유새 컴퓨터에서 처음 쓰면 "가속 준비 중"이 약 70초 걸립니다. CPU와 GPU를 각각 조각 두 개씩 돌려 보는 시간입니다. 한 번 정해지면 다음부터는 바로 시작합니다.

배운 것

  • 조용한 안전장치는 버그도 숨긴다. 실패를 자동으로 수습하는 기능에는 반드시 "수습했다"는 기록을 같이 남겨야 합니다.
  • 저장된 결정은 버그까지 저장한다. 비교 결과를 기억하는 기능이 있으면, 비교 방법을 고칠 때 옛 기록을 지우는 방법도 함께 준비해야 합니다.
  • 앱 전체 대신 순서만 재현한다. 다섯 단계짜리 짧은 시험으로 줄이자 오류 한 줄이 바로 보였습니다.

자주 묻는 질문

내 컴퓨터가 GPU를 쓰는지 어떻게 알 수 있나요?

드럼 추출기에서 분리가 진행되는 동안 진행률 옆에 ‘GPU 가속’ 또는 ‘CPU 분리’가 표시됩니다. 노트북이라면 먼저 크롬이 외장 그래픽카드를 쓰는지 chrome://gpu에서 확인하세요.

그래픽카드가 없으면 못 쓰나요?

쓸 수 있습니다. CPU로 처리해 시간이 더 걸릴 뿐 결과는 같습니다. 앱이 직접 비교해서 더 빠른 쪽을 고릅니다.

곡 파일이 서버로 올라가나요?

아닙니다. 분리는 전부 방문자의 브라우저 안에서 이루어지고, 곡 파일은 기기 밖으로 나가지 않습니다.

처음 한 번은 왜 이렇게 오래 걸리나요?

AI 모델을 내려받고, CPU와 GPU 중 어느 쪽이 빠른지 직접 재 보기 때문입니다. 이 노트북에서는 약 70초였고, 다음 방문부터는 이 과정이 없습니다.