노트

WebGPU

WebGPU

프런트엔드#browser#ai · 연결된 개념 4개

쉽게 말하면

WebGPU는 웹페이지가 그래픽 카드의 수많은 일꾼에게 그림 그리기뿐 아니라 계산 일까지 맡길 수 있게 하는 브라우저 API예요. 덕분에 브라우저 안에서도 ML 모델을 빠르게 돌릴 수 있어요.

비유가 깨지는 곳 일꾼을 부르는 문이 늘 열려 있진 않아요. HTTPS나 localhost에서만 열리고, navigator.gpu가 있어도 어댑터 요청이 null이면 못 써요. 모델 파일도 커서 지연 로딩이 기본이에요.

WebGPU는 웹페이지가 GPU(Graphics Processing Unit)를 써서 그림을 그리고 범용 계산을 하게 해 주는 브라우저 API다. WebGL의 후속이다. 그래픽 전용이던 WebGL과 달리 컴퓨트 셰이더(compute shader)로 행렬 곱 같은 계산을 직접 맡길 수 있다. 그래서 브라우저 안에서 ML 모델을 돌리는 라이브러리(ONNX Runtime Web, transformers.js)가 WebGPU로 GPU 가속을 한다.

쓰기 전에 확인할 것

  • 보안 컨텍스트에서만 열린다. HTTPS나 localhost가 아니면 navigator.gpu 자체가 없다. 휴대폰에서 개발 서버를 http://192.168…:3000처럼 IP로 열면 최신 브라우저에서도 쓸 수 없다. 이때는 HTTPS 프리뷰 주소로 확인한다 → HTTP와 HTTPS
  • 속성이 있다고 쓸 수 있는 것은 아니다. navigator.gpu.requestAdapter()는 알맞은 어댑터가 없으면 null을 돌려준다. 'gpu' in navigator만 보고 판단하지 말고 어댑터를 실제로 요청해 본다
async function requireWebGPU() {
  if (!isSecureContext) throw new Error('WebGPU는 HTTPS 주소(또는 localhost)에서만 쓸 수 있습니다.')
  const adapter = await navigator.gpu?.requestAdapter().catch(() => null)
  if (!adapter) throw new Error('이 브라우저는 WebGPU를 쓸 수 없습니다.')
}

ML 모델을 돌릴 때

  • CPU에서 도는 WebAssembly(wasm) 백엔드도 있다. 다만 양자화 모델이 쓰는 전용 연산을 백엔드가 지원하지 않으면 모델을 올리지 못한다. 이 사이트에서는 4비트·8비트 임베딩 모델이 wasm에서 세션을 만들지 못하고 WebGPU에서만 돌았다
  • 모델 파일은 수백 MB에서 수 GB에 이르므로 지연 로딩이 기본이다. 사용자가 기능을 켤 때 받고, 파일별 진행률을 합쳐 보여 준다
  • 받은 모델은 Cache Storage에 남아 다음 방문에 다시 받지 않는다. 다만 출처(origin)마다 따로 저장되므로 서브도메인이 다른 두 사이트는 같은 모델을 따로 받는다
  • 메모리가 작은 휴대폰에서는 큰 모델을 받다가 탭이 닫힐 수 있다. 기기에 따라 기능을 나누는 편이 안전하다

사례: 브라우저 안에서 도는 RAG 구현기

명세: WebGPU (W3C) 출처: WebGPU API MDN · GPU: requestAdapter() MDN · Secure contexts MDN · Transformers.js Hugging Face

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 웹뷰 브리지(웹↔네이티브 통신)

    앱 안의 웹뷰에서 웹과 네이티브가 서로 말을 거는 길. User-Agent 표식, 메시지 핸들러, 스크립트 실행, URL(딥링크)이 있다.

  • GraphQL

    GraphQL은 클라이언트가 필요한 데이터의 모양을 쿼리로 적어 보내면 서버가 정확히 그 모양으로 응답하는 API 쿼리 언어(query language)다. Facebook이 2012년 내부에서 만들어 2015년 공개했고, 지금은 GraphQL Foundation이 관리한다.

  • 브라우저 캐시

    한 번 받은 리소스(HTML·CSS·JS·이미지)를 브라우저가 저장해 두었다가 다시 쓰는 기능. 서버가 응답 헤더로 얼마나, 어떻게 캐시할지 알려 주고 브라우저가 그대로 따른다.

  • 크로스 브라우징

    크로스 브라우징은 브라우저 종류·버전·기기가 달라도 웹 페이지가 같은 기능을 제공하도록 만드는 일이다. 모든 브라우저에서 픽셀까지 똑같이 보이게 하는 것이 목표가 아니라, 지원하기로 한 환경에서 핵심 기능이 동작하고 오래된 환경에서도 쓸 수는 있게(점진적 향상, Progressive Enhancement) 하는 것이 목표다.

  • 브라우저 요청과 서버 간 요청

    같은 HTTP 요청이라도 브라우저에서 보내면 여러 보안 규칙이 강제되고, 서버에서 보내면 아무 제한이 없다. 브라우저 보안 정책은 신뢰할 수 없는 코드로부터 사용자를 지키려고 있기 때문이다.

보기 옵션