TT Lab
요금제

한국어

시작하기
블로그

블로그

폰과 브라우저 안에서 돌리기: WebGPU, WASM, WebNN, Core ML 과 무엇을 어디서 할까

상태: 초안 (2026-10-16), 대부분 문서 기준. 폰·브라우저 안에서 우리 모델을 돌린 측정은 없습니다(미실측). 표준과 브라우저 지원은 W3C·브라우저 공급사 공식 글을 2026-10-16 에 열어 확인했습니다. JPEG 크기와 모델 파라미터 수는 이 시리즈의 서버 실측에서 가져왔습니다. 시리즈 「비전 모델 읽기 3」 7편. 모델을 들고 다니는 형식(ONNX)은 3편에 있습니다.

목차

1. 직관: 어디서 계산할까

카메라는 폰에 있습니다. 결과(점수판)도 폰 화면에 나옵니다. 그 사이의 모델만 서버에 있다면, 매 프레임 폰 → 서버 → 폰 왕복이 생깁니다. 모델을 폰으로 옮기면 왕복이 사라집니다. 하지만 폰은 GPU 가 작고, 오래 돌리면 뜨거워지고, 기종마다 성능이 열 배씩 다릅니다.

폰에서 할 일, 서버에서 할 일 폰(브라우저) 카메라 잡기 30fps 512×288 로 줄이기 JPEG 인코딩 점수판·공 그리기 서버(GPU) JPEG 풀기·정규화 공 모델(창 3장) 바운드·심판 규칙 탁구대 찾기 올림: 프레임 JPEG × 30장/초 — 대역은 본문 표 내림: 공 위치·판정 JSON — 수백 바이트 기기 안에서 돌리면 망 지연·서버 비용 없음 영상이 폰 밖으로 안 나감 배터리·열·기기마다 다름 서버에서 돌리면 큰 모델, 같은 결과 고치면 모두에게 바로 망 왕복·대역·GPU 비용
그림: 폰(브라우저)은 카메라 잡기·줄이기·JPEG·그리기를, 서버(GPU)는 JPEG 풀기·공 모델·바운드와 심판 규칙·탁구대 찾기를 맡는 지금의 나눔. 아래는 기기 안과 서버에서 돌릴 때의 득실
기기 안에서 서버에서
지연 망 왕복 없음 망 왕복 + 중계
개인정보 영상이 기기 밖으로 안 나감 프레임이 서버로 감(저장은 안 해도)
비용 사용자 기기가 계산 서버 GPU 비용, 동시 사용자 수 한계
모델 작아야 함(내려받기·메모리) 커도 됨
일관성 기종마다 속도·결과가 다를 수 있음 모두 같은 결과
고치기 새 모델을 다시 받아야 함 서버만 바꾸면 모두에게

2. 브라우저에서 계산하는 길

WebGL → WebGPU

TensorFlow.js(Smilkov 외, 2019)는 브라우저의 그래픽 API(WebGL)로 신경망을 돌렸습니다. 텐서를 텍스처에 담고, 출력 원소마다 그래픽 셰이더를 한 번씩 돌리는 우회로였습니다. 그래도 차이가 컸습니다.

MobileNet v1, 224×224 한 번(논문 표 1) 시간
순수 자바스크립트(2014년 노트북) 3,426ms
WebGL, 같은 노트북의 내장 GPU 49ms(71배)
WebGL, 데스크톱급 GPU 5ms(685배)
Node.js, 같은 데스크톱급 GPU 의 CUDA 3ms

WebGPU 는 그래픽 API 를 빌리지 않고 GPU 계산을 직접 부르는 새 표준입니다. 셰이더 언어는 WGSL 입니다. 2026-10-16 기준 W3C 에서 WebGPU 와 WGSL 모두 「후보 권고 초안(Candidate Recommendation Draft)」 단계입니다(각각 2026-09-15, 2026-09-21 판). 브라우저 공급사 공식 글로 확인한 출시는 이렇습니다.

브라우저 WebGPU 기본 활성
Chrome 113 ChromeOS·macOS·Windows
Chrome 121 Android 12 이상(Qualcomm·ARM GPU 기기)
Safari 26.0 macOS·iOS·iPadOS·visionOS
Firefox 141 Windows 만(2025-07 글 기준. 그 뒤 다른 운영체제는 확인하지 못함)

MDN 은 아직 「제한적 사용 가능(Limited availability)」 으로 표시하고, HTTPS 같은 보안 문맥에서만 쓸 수 있습니다. 16비트 부동소수(f16)는 Chrome 120 부터 셰이더 기능이 있는 기기에서 씁니다. 2편의 FP16 이 브라우저에서도 가능해진 셈입니다.

WebAssembly(WASM): CPU 를 제대로

GPU 로 보내는 데는 고정 비용이 있어서, 작은 모델은 CPU 가 이길 수 있습니다. 브라우저에서 CPU 를 빠르게 쓰는 길이 WebAssembly 이고, SIMD(한 명령으로 여러 수)와 스레드를 켜면 크게 달라집니다. TensorFlow.js 공식 저장소의 WASM 백엔드 표(Chrome 79, 2020년 무렵 기기라 오래된 수치)입니다.

MobileNet V2, 2019년 노트북 시간
순수 자바스크립트 893.5ms
WASM 98.4ms
WASM + SIMD 30.2ms
WASM + SIMD + 스레드 10.3ms
WebGL 19.6ms

같은 문서는 곱셈-덧셈 2천만–6천만 번짜리 가벼운 모델은 WASM 이 WebGL 과 비슷하고, 1억–5억 번이면 WASM 이 몇 배 느리다고 적었습니다. 3편에서 본 「부르기 비용 대 계산」 의 저울질이 브라우저에서도 그대로입니다.

WebNN: 기기의 신경망 가속기

요즘 폰과 노트북에는 신경망 전용 가속기(NPU)가 있습니다. WebGPU 로는 이것을 쓸 수 없습니다. WebNN 은 「합성곱」·「행렬곱」 같은 신경망 연산 단위로 그래프를 넘기면 브라우저가 CPU·GPU·NPU 중 알맞은 곳에서 돌리게 하는 W3C 표준입니다. 2026-10-10 판이 후보 권고 초안이고, 현재 판에서는 개발자가 장치를 직접 고르지 않고 「저전력」·「고성능」 같은 선호만 줍니다. 브라우저별 기본 출시 여부는 1차 자료로 확인하지 못했습니다.

ONNX Runtime Web: 하나의 파일, 여러 백엔드

3편의 ONNX 파일을 브라우저에서 돌리는 런타임입니다. 실행 공급자로 wasm(CPU)·webgpu·webgl·webnn 이 있고, 모든 연산자를 지원하는 것은 WASM 뿐이라 다른 공급자가 못 하는 연산은 WASM 으로 넘어갑니다. WebGL 공급자는 유지보수만 하고 성능은 WebGPU 를 권합니다(공식 문서). 이 문서의 브라우저 지원 표는 위 공급사 글보다 낡아 보였습니다 — 「런타임이 그 브라우저에서 시험했다」 와 「브라우저가 WebGPU 를 출시했다」 는 다른 이야기입니다.

3. 앱에서: Core ML

애플 기기의 Core ML 은 CPU·GPU·Neural Engine 을 함께 씁니다. computeUnits 를 「전부」 로 두면 운영체제가 장치를 고르고, 개발자가 CPU 만·CPU+GPU·CPU+Neural Engine 으로 좁힐 수 있습니다. 모델 압축 도구(coremltools)는 가중치 팔레트화(1·2·3·4·6·8비트 룩업 표), 가중치 INT4·INT8 과 활성값 INT8 선형 양자화, 가지치기를 줍니다. 문서는 압축이 크기는 확실히 줄이지만 지연 이득은 보장하지 않는다(어떤 백엔드는 가중치를 다시 풀어 계산한다)고 적고, 자기 모델·자기 기기에서 재 보라고 권합니다. 2편·4편과 같은 결론입니다.

4. 폰에서 이미 도는 모델들

공통점은 작은 모델 + 덜 자주 돌리기 입니다. 폰에서의 실시간은 모델 하나를 빠르게 하는 것보다 파이프라인을 설계하는 문제에 가깝습니다.

5. 우리 모델을 폰으로 옮긴다면: 크기와 대역

모델 파라미터 FP32 FP16 INT8
공 모델(BlurBall) 149만 6.0MB 3.0MB 1.5MB
탁구대 찾기(EfficientTAM-S) 3,406만 136MB 68MB 34MB

(파라미터 수 × 4·2·1바이트. 실제 파일에는 구조 정보가 더 붙습니다.)

공 모델은 웹 페이지와 함께 받아도 부담이 없는 크기입니다. 문제는 계산입니다. 이 모델은 512×288 해상도를 끝까지 유지하므로, 서버 쪽 노트북급 GPU 에서도 FP16 창 하나에 약 10ms 였습니다(1편). 폰 GPU 에서 30fps 를 낼 수 있을지는 재지 않았습니다(미실측). 탁구대 찾기는 경기 시작 때 한 번이면 되므로 폰에서 수백 ms 여도 괜찮지만, 34–136MB 를 받아야 합니다.

반대로 지금처럼 서버에서 돌리면 프레임을 올려 보내야 합니다. 이 시리즈의 서버 실측에서 같은 경기 화면의 JPEG 크기는 이랬습니다.

보내는 화면 품질 50 품질 70 품질 90 30fps 로 보내면(품질 70)
512×288 9.1KB 12.3KB 24.7KB 약 2.9Mbit/s
1280×720 37.7KB 52.4KB 111.5KB 약 12.6Mbit/s

(서버 CPU 의 OpenCV 인코더 기준. 브라우저의 JPEG 인코더는 같은 품질 숫자에서 크기가 다를 수 있습니다 — 운영 설계 문서는 경기 영상에서 12–18KB 로 쟀습니다.) 512×288 로 줄여 보내는 것만으로 대역이 4분의 1 이 됩니다. 업로드가 느린 탁구장 와이파이에서 이 차이가 「되느냐 마느냐」 를 가릅니다.

6. 한계

7. 우리 프로젝트와의 연결

다음 글은 이 시리즈의 모든 조각을 TT Score 실시간 경로 하나에 올려 놓은 실제 예산표입니다.

티티 한마디. 제 공 모델은 6MB 라 폰에 쏙 들어가요. 그런데 폰 안에서 1초에 30번 생각할 수 있을지는 아직 아무도 안 재 봤어요. 재기 전엔 「된다」 고 말하지 않을래요!

참고 문헌

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다