1P by neo 2023-07-19 | favorite | 댓글 1개
  • 최신 버전의 Chrome에서 "실험적인 WebAssembly" 및 "실험적인 WebAssembly JavaScript Promise 통합 (JSPI)" 플래그가 활성화된 상태로 Stable Diffusion WebGPU 데모를 실행해야 합니다.
  • 데모의 각 추론 단계는 약 1분이 걸리며, 이미지를 생성하기 위해 VAE 디코더를 실행하는 데 추가로 약 10초가 소요됩니다.
  • DevTools를 열어두면 데모 속도가 약 2배로 느려집니다.
  • 데모에서 사용되는 UNET 모델은 CPU에서만 실행되며, 브라우저 탭이 멈출 수 있지만 GPU에서 실행하는 것보다 10% 더 빠릅니다.
  • 데모에서 수용 가능한 결과를 얻기 위한 최소한의 단계 수는 20입니다. 그러나 데모 목적으로는 3단계가 충분합니다.
  • 모델 파일은 캐시되므로 데모를 실행할 때마다 다운로드할 필요가 없습니다.
  • "protobuf parsing failed" 오류가 발생하면 DevTools에서 Application -> Storage로 이동하여 사이트 데이터를 지울 수 있습니다.
  • "sbox_fatal_memory_exceeded" 오류가 발생하면 충분한 RAM이 없어 데모를 실행할 수 없는 것입니다. 탭이나 브라우저를 다시 로드해 볼 수 있습니다.
  • 데모는 StableDiffusionPipeline을 Python에서 JS로 이식하고, onnxruntime과 emscripten+binaryen을 패치하여 4GB 이상의 메모리를 할당하고 사용할 수 있도록 지원함으로써 가능해졌습니다.
  • 현재 데모는 멀티스레딩을 지원하지 않고 하나의 CPU 코어만 사용하기 때문에 느립니다. WebAssembly.Memory 생성자를 통한 64비트 메모리의 지원 부족도 제한 사항입니다.
  • 데모는 GPU에서 실행되지만 webgpu와 onnxruntime은 초기 단계이므로 많은 작업이 아직 구현되지 않았습니다. 데이터는 JS를 통해 GPU와 CPU 사이에서 지속적으로 전송되어 처리 속도가 느려집니다. 더 많은 작업이 JS 커널을 갖게 되면 데모는 더 빨라질 것입니다.
  • GitHub에서 사용 가능한 코드를 사용하여 데모를 로컬에서 실행할 수 있습니다.
  • 패치된 onnxruntime을 사용하여 transformers.js로 큰 LLMs를 실행할 수 있지만, 8GB의 메모리로 제한됩니다. 해당 패키지를 사용하여 최대 약 4GB의 가중치를 로드할 수 있습니다.
  • 저자는 이전에 node.js 바인딩에 GPU 가속을 추가한 경험이 있으므로 onnxruntime 리포지토리에 풀 리퀘스트를 할 계획입니다.
Hacker News 의견
  • MLC 팀은 이미 Stable Diffusion과 대형 언어 모델 지원을 구현했습니다.
  • 브라우저는 Stable Diffusion과 같은 복잡한 작업을 처리할 수 있는 수준으로 진화했습니다.
  • Stable Diffusion을 사용하려면 특정 플래그가 활성화된 최신 버전의 Chrome이 필요합니다.
  • Stable Diffusion은 사용자 정의 배경 생성기와 같은 다른 웹사이트에도 통합되었습니다.
  • CPU 바운드 프로세스 중에 메인 스레드가 멈추는 것을 방지하기 위해 서비스 워커를 사용하는 것을 고려해보세요.
  • Stable Diffusion의 사용 사례에는 페이지 새로고침 없이 실시간 이미지 생성이 포함됩니다.
  • WebGPU 챗봇이나 유휴 GPU 시간 동안 비트코인 채굴과 같은 미래 응용 프로그램의 잠재력이 있습니다.
  • 일부 사용자는 WebGPU가 Firefox에서 사용 가능해질 때까지 기다리고 있습니다.
  • 광고 없는 인터넷이 가능성으로 제기됩니다.