I made a distributed chatbot that runs a 27B model across consumer GPUs, entirely in the browser (open source)
브라우저 탭의 GPU를 모아 27B 모델 실행…네트워크 지연이 속도 좌우
ClusterChat은 브라우저의 WebGPU로 모델을 나눠 실행해 여러 사람의 GPU를 한데 모읍니다. 공개된 Qwen3.8-27B 성능은 RTX 3090 두 장을 한 PC에서 쓸 때 19.7토큰/초, 28ms 지연의 두 PC에서 나눠 쓸 때 8.1토큰/초입니다. 참여 GPU가 대화를 처리하므로 초대받은 사람을 신뢰할 수 있는 클러스터에 적합합니다.
- 주제
본문
브라우저 탭 여러 개의 GPU를 모아 Qwen3.8-27B를 실행하는 오픈소스 프로젝트 ClusterChat이 공개됐습니다. 모델을 각 브라우저가 맡는 구간으로 나누고, 토큰마다 중간 표현을 WebRTC 데이터 채널로 전달합니다. 프로그램을 따로 설치하지 않고 링크를 열어 참여할 수 있으며, 한 클러스터에서 여러 사람이 각자 대화할 수 있습니다.
속도는 네트워크와 동시 요청에 따라 달라집니다
저장소가 공개한 Qwen3.8-27B 8비트 모델 성능은 RTX 3090 두 장을 한 PC에 둔 구성에서 한 명이 대화할 때 19.7토큰/초입니다. 같은 GPU를 28ms 지연이 있는 두 PC에 나누면 8.1토큰/초로 낮아집니다. 12명이 동시에 대화하면 각각 약 7토큰/초와 약 5토큰/초입니다. 두 PC 구성에서도 코드와 목록처럼 반복이 많은 텍스트는 추측 디코딩을 적용해 14.5토큰/초를 기록했습니다.
이는 프로젝트가 공개한 특정 GPU와 설정의 측정치입니다. 12명이 30초에 걸쳐 참여해 각각 세 차례 질문하고, 답변을 최대 128토큰으로 제한한 테스트에서는 36개 답변이 모두 끝났습니다. 프로젝트는 이 수치를 다른 하드웨어의 성능과 직접 견주는 순위표로 제시하지 않습니다.
모델을 나눠 맡고 이탈에 대응합니다
각 브라우저는 임베딩, 트랜스포머 블록, 출력부 가운데 연속된 구간의 가중치를 내려받아 GPU에서 계산합니다. 브라우저 사이에는 각 토큰의 중간 표현이 오가며, 대화별로 별도의 KV 캐시를 둡니다. 구간을 여러 브라우저가 겹쳐 보유하도록 배치할 수 있고, 참여자가 응답 중 나가면 앞선 피어가 다른 보유자에게 작업을 다시 보내도록 설계했습니다.
프로젝트는 클러스터당 모델 하나와 채팅 기능만 제공합니다. API와 도구 사용은 아직 없으며, 응답 동시 실행 수와 문맥 길이는 클러스터 생성자가 정합니다. 같은 피어의 작업은 선착순으로 처리돼 긴 프롬프트가 다른 대화를 잠시 늦출 수 있습니다. 프로젝트 문서에는 이전 부하 테스트에서 응답이 몇 분간 멈춘 사례가 있었고 원인을 아직 해결하지 못했다고 적혀 있습니다.
초대 링크는 접근을 제한하지만 대화 내용을 숨기지는 않습니다
초대 코드는 URL 조각에 담겨 신호 서버로 전달되지 않으며, 서버는 프롬프트와 응답을 받지 않는다고 프로젝트는 설명합니다. 다만 추론에 참여한 각 컴퓨터가 프롬프트를 처리합니다. 프로젝트도 대화가 비밀로 유지되는 구조가 아니라고 명시하며, 참여 피어가 맡은 계산을 정직하게 수행했는지 검증하는 장치도 없다고 밝힙니다. 서버에는 클러스터 참가자 등 메타데이터가 보입니다.
GPU를 빌려주는 기능은 WebGPU를 지원하는 브라우저와 운영체제 조합에 달려 있습니다. 저장소는 Chrome·Edge, Safari, 일부 Firefox 버전의 지원 조건을 안내하며, GPU를 빌리지 않고 대화에만 참여하는 경로도 제공합니다. 프로젝트는 AGPL-3.0 라이선스로 공개됐습니다.
자료: GitHub, Reddit / 정리·해설: Trawling
참고 자료
- ClusterChat/docs/architecture.md at main · l-wn/ClusterChat · GitHub — https://github.com/l-wn/ClusterChat/blob/main/docs/architecture.md