TL;DR
WebLLM은 WebGPU와 WebAssembly를 이용해 서버 없이 브라우저에서 LLM 추론을 실행하는 고성능 inference engine이다. OpenAI API 형식의 chat completions를 기반으로 스트리밍, JSON mode, seed 기반 재현성을 제공하고, Llama 3·Phi 3·Gemma·Mistral·Qwen 계열 모델과 MLC 형식의 custom model을 지원한다. 모델은 첫 실행 때 브라우저에 다운로드하고 Cache API, IndexedDB, OPFS 등의 backend에 저장하며, Web Worker나 Service Worker로 추론 작업과 모델 수명주기를 분리할 수 있다. 모델 파일에는 SRI 해시를 지정해 config, WASM, tokenizer의 무결성을 검증할 수 있지만, 첫 다운로드 시간과 브라우저별 WebGPU·저장소 지원 여부는 구현 과정에서 고려해야 한다.
섹션별 상세
import { CreateMLCEngine } from "@mlc-ai/web-llm";
// Callback function to update model loading progress
const initProgressCallback = (initProgress) => {
console.log(initProgress);
};
const selectedModel = "Llama-3.1-8B-Instruct-q4f32_1-MLC";
const engine = await CreateMLCEngine(
selectedModel,
{ initProgressCallback: initProgressCallback },
// engineConfig
);선택한 모델을 비동기적으로 내려받고 MLCEngine을 생성하면서 로딩 진행률을 콜백으로 전달합니다.
const messages = [
{ role: "system", content: "You are a helpful AI assistant." },
{ role: "user", content: "Hello!" },
];
const reply = await engine.chat.completions.create({
messages,
});
console.log(reply.choices[0].message);
console.log(reply.usage);초기화한 엔진에 OpenAI API 형식의 메시지를 보내고 응답과 사용량 정보를 받습니다.
const messages = [
{ role: "system", content: "You are a helpful AI assistant." },
{ role: "user", content: "Hello!" },
];
// Chunks is an AsyncGenerator object
const chunks = await engine.chat.completions.create({
messages,
temperature: 1,
stream: true,stream 옵션을 true로 설정해 생성 결과를 청크 단위로 실시간 수신합니다.
import { CreateWebWorkerMLCEngine } from "@mlc-ai/web-llm";
async function main() {
// Use a WebWorkerMLCEngine instead of MLCEngine here
const engine = await CreateWebWorkerMLCEngine(
new Worker(new URL("./worker.ts", import.meta.url), { type: "module" }),
selectedModel,
{ initProgressCallback },
// engineConfig
);
// everything else remains the same
}Web Worker에서 엔진을 실행해 메인 스레드의 UI 작업과 모델 추론을 분리합니다.
용어 해설
- WebGPU
- — 브라우저에서 GPU 기능을 직접 활용하도록 제공하는 웹 표준 API입니다. WebLLM은 WebGPU를 통해 모델 연산을 하드웨어 가속하고, 서버로 입력과 출력을 보내지 않은 채 브라우저 내부에서 LLM 추론을 수행합니다. 브라우저 기반 AI 애플리케이션의 처리 속도와 개인정보 보호에 영향을 주는 핵심 실행 계층입니다.
- WebAssembly
- — C와 C++ 같은 언어로 작성한 코드를 웹 브라우저에서 빠르게 실행할 수 있는 바이너리 형식입니다. WebLLM은 모델 계산을 가속하는 WASM 라이브러리를 모델 아티팩트와 함께 로드하며, JSON 구조화 생성 같은 기능도 WebAssembly 영역에서 처리합니다. 브라우저 내 추론의 실행 기반으로 사용됩니다.
- OpenAI API 호환성(OpenAI API Compatibility)
- — OpenAI API와 같은 요청 구조와 호출 방식을 다른 모델 실행 환경에서도 사용할 수 있게 만드는 호환 계층입니다. WebLLM은 동일한 chat completions 인터페이스로 스트리밍, JSON mode, seed 기반 재현성을 제공하며, 모델 이름은 엔진 생성 또는 reload 단계에서 지정합니다. 기존 애플리케이션의 로컬 모델 전환을 단순화합니다.
- Subresource Integrity
- — 브라우저가 내려받은 파일의 해시를 비교해 지정된 원본과 일치하는지 검증하는 보안 방식입니다. WebLLM은 모델 설정, WASM 라이브러리, tokenizer 파일에 SHA-256·SHA-384·SHA-512 해시를 지정할 수 있으며, 불일치 시 오류를 발생시키거나 경고만 남깁니다. 모델 아티팩트 변조를 감지하는 데 사용됩니다.
- Web Worker
- — 브라우저의 주 실행 스레드와 분리된 작업 스레드에서 JavaScript를 실행하는 기능입니다. WebLLM은 동일한 MLCEngine 인터페이스를 구현하는 WebWorkerMLCEngine을 제공해 모델 계산을 별도 스레드로 옮깁니다. 그 결과 추론 중 사용자 인터페이스의 응답성을 유지할 수 있습니다.
기술
- WebLLM
- WebGPU
- WebAssembly
- OpenAI API
- NPM
- Yarn
- pnpm
- Web Worker
- Service Worker
- Chrome extension
- MLC LLM
- TVMjs
- Emscripten
- Parcelv2
활용 사례
- 브라우저 기반 chatbot
- 서버 없이 동작하는 AI assistant
- JSON 구조화 출력 애플리케이션
- Chrome extension
- 오프라인 웹 애플리케이션
- 브라우저 내 custom model 실행
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.