OpenJev, 로컬 의사결정 모델 추론을 브라우저로 가져오다

OpenJev는 온디바이스 Jev 스타일의 의사결정 추론을 가능하게 합니다

OpenJev는 브라우저에서 로컬 언어 모델을 실행하여 원시 로짓을 읽거나 모델이 JSON 분포를 출력하도록 프롬프트를 작성하여 옵션 확률을 쿼리할 수 있게 해주는 웹 데모입니다. 이 데모는 백엔드나 대기열이 필요 없으며 모든 가중치와 입력을 클라이언트 측에 유지합니다.


직접 로짓 읽기 vs. JSON 생성

**직접 읽기(Direct readout)**는 제공된 옵션에 대한 모델의 선택 로짓을 읽고, 이를 정규화하여 토큰 디코딩 없이 확률 벡터를 반환합니다. **JSON 생성(JSON generation)**은 모델에게 동일한 분포를 JSON 객체로 작성하도록 요청하며, 토큰을 하나씩 스트리밍합니다. 두 방법은 로드된 동일한 모델에서 순차적으로 실행되므로 GPU 리소스를 두고 경쟁하지 않습니다.


모델 카탈로그 및 성능 수치

모델 크기 Authored % Perturbed % TypeSafe %
Qwen3 0.6B 639 MB 44.0 52.8 40.7
MiniCPM5 2B (기본값) 1.56 GB 68.6 69.3 63.7
Qwen3.5 4B 3.01 GB 81.3 76.6 84.5
Published Jev (호스팅됨) 88.3

가중치는 Hugging Face에서 가져와 브라우저에 캐시됩니다. 첫 로드 시, 특히 4 B 모델의 경우 몇 분이 소요될 수 있습니다.


수치의 의미

  • 조건부 확률만 해당 – 직접 점수는 표시된 옵션에 대한 소프트맥스(softmax) 값입니다. 이는 보정된 신뢰도 점수가 아니며 모델이 선호할 수 있는 대안을 무시합니다.
  • 모델 계층 간의 절충 – 가장 작은 모델은 휴대폰에서 실행되지만 정확도를 희생합니다. MiniCPM5는 데스크톱 기본값이며, 4 B 모델은 훨씬 더 많은 메모리가 필요하여 저사양 기기에서는 실행되지 않을 수 있습니다.
  • 실제 타이밍 – 설정, 웜업, 프롬프트 준비, 직접 실행, 첫 번째 생성 토큰, 전체 생성 시간은 performance.now()로 측정됩니다. 미리 준비된 벤치마크는 사용되지 않습니다.
  • 양자화된 가중치 – 이 데모는 wllama를 통한 고정된 GGUF 빌드를 사용하며, 양자화는 속도와 품질 모두에 영향을 줄 수 있습니다.

커뮤니티 반응 및 일반적인 질문

“Authored와 Perturbed의 차이점은 무엇인가요?” – 이 표는 원본(authored) 데이터셋의 점수와 견고성 테스트에 사용된 변형(perturbed) 버전의 점수를 구분합니다.

“이것은 Jev의 독점 서비스와 동일한가요?” – OpenJev는 Jev의 인터페이스 패턴(런타임 정의 의미론적 의사결정)을 재현하지만 오픈 가중치 모델에서 실행됩니다. Jev의 폐쇄형 모델이나 학습 데이터를 사용하지 않습니다.

“왜 휴대폰에서는 느리게 느껴지나요?” – 0.6 B 모델조차도 모바일 하드웨어에서는 0.5초에서 몇 초가 걸릴 수 있습니다. 이 데모는 원격 API 호출보다는 빠르지만 여전히 로컬 컴퓨팅 성능과 WebGPU 가용성에 제한을 받습니다.

“Hugging Face 계정 없이 실행할 수 있나요?” – 이 데모는 Hugging Face에서 가중치를 직접 다운로드합니다. 방화벽 뒤에 있는 사용자는 미러 서버나 수동 다운로드가 필요할 수 있습니다.

“Jev는 상표인가요?” – 여러 댓글 작성자가 “Jev”는 상표가 등록된 서비스이며, OpenJev라는 명칭이 혼란을 야기할 수 있다고 지적했습니다.


구현에 대한 기술적 통찰

OpenJev는 SGLang(또는 유사한 추론 백엔드)을 활용하여 공유 프롬프트 접두사를 캐시한 다음 각 옵션에 대해 별도의 요청을 보냅니다. 워크플로우는 대략 다음과 같습니다:

  1. 공유 상태를 포함하는 일회성 요청을 보냅니다.
  2. 추론 엔진의 접두사 캐시를 사용하여 공유 부분의 재계산을 방지합니다.
  3. 각 옵션마다 공유 접두사를 반복하여 요청을 보냅니다.
  4. 전체 어휘에서 소수의 특수 답변 토큰에 대한 점수를 추출합니다.
  5. 해당 점수를 정규화된 확률로 변환합니다.

공유 프롬프트를 한 번 실행하고, 옵션별로 내부 상태를 복제한 뒤 관련 토큰만 점수를 매기도록 추론 엔진을 포크하는 더 우아한 접근 방식은 eider와 같은 커스텀 엔진에서 입증되었으며, 향후 llama.cpp, vLLM 및 기타 런타임의 패치에 포함될 것으로 예상됩니다.


제한 사항 및 미해결 문제

  • GPU 어댑터 없음 – 일부 브라우저는 WebGPU가 존재한다고 보고하지만 접근 가능한 GPU 어댑터가 부족하여 데모가 CPU로 대체되는 경우가 있습니다.
  • 부분 다운로드 지원 미흡 – 모델 다운로드를 중단하면 부분적으로 캐시된 파일이 삭제됩니다. 다운로드 재개 기능이 있으면 사용성이 향상될 것입니다.
  • 법적 모호성 – “Jev”라는 이름의 사용은 원본 서비스의 상표권을 침해할 수 있으며, 오픈 구현은 Jev의 독점 모델을 복제하지 않습니다.
  • 벤치마크 투명성 – 이 데모는 원시 타이밍을 보고하지만, 폐쇄형 Jev 서비스에 대한 표준화된 지연 시간이나 정확도 벤치마크는 제공하지 않습니다.

결론

OpenJev는 Jev 스타일의 의사결정 추론이 오픈 가중치 LLM을 사용하여 브라우저 내에서 완전히 재현될 수 있음을 보여주며, 원시 로짓 접근과 구조화된 JSON 출력을 모두 제공합니다. 이 프로젝트는 모델 크기, 속도, 정확도 간의 절충점을 강조하며, 향후 빠르고 토큰 없는 의사결정 API를 위한 오픈 소스 구현의 개념 증명 역할을 합니다.

Sources

관련

  • Dispatch
  • Dispatch
  • 프로젝트
  • 프로젝트
  • Dispatch