부하를 받으면 자라나는 스웜

필요할 때만 도움을 빌리는 거대 모델 — MoE 스웜이 이제 트래픽에 맞춰 스스로 규모를 조절한다: 한산할 땐 조밀하고 빠르게, 바쁠 땐 넓고 병렬로.

A coordinator GPU breathing wider as idle phones and GPUs are drawn in under load

Kvasir는 어떤 단일 머신이 담는 것보다 훨씬 큰 모델을 서빙한다 — 122B 파라미터 Mixture-of-Experts 모델이 코디네이터 하나와 워커 스웜에 걸쳐 실행된다: LAN 위의 GPU, 200 Gb/s 링크 너머의 GPU, 심지어 인터넷 너머로 dial해 들어오는 폰까지. MoE 모델은 각 토큰을 소수의 전문가에게만 라우팅하므로, 언제든 대부분의 가중치는 놀고 있고, 그 유휴 전문가들은 메인 노드 밖에서 — 그것들을 쥐겠다고 자원한 어떤 하드웨어에서든 — 살 수 있다.

이번에 새로워진 것은 스웜이 이제 부하에 맞춰 스스로 규모를 조절한다는 점이다.

어떻게 동작하나

한산할 땐 조밀하게, 바쁠 땐 넓게

트래픽이 가벼울 때 코디네이터는 모든 것을 자기 GPU에서 서빙한다 — 토큰당 가장 빠른 경로, 네트워크 홉 없음. 요청이 쌓이기 시작해 추론 슬롯이 포화되면, 두 가지가 자동으로 일어난다:

  • 이미 가진 워커를 다시 투입한다. 코디네이터는 자기 큐를 지켜본다. 포화 상태에서는 라우팅된 전문가 작업을 proven 워커 — 실제로 서빙해 본 적 있는 워커 — 로 계속 흘려보내, 토큰당 지연을 조금 내주는 대신 총처리량을 훨씬 크게 얻는다. 접속만 했을 뿐 한 번도 계산하지 않은 워커에는 부하를 절대 맡기지 않는다; 갓 들어온 워커도 공정한 첫 시도는 받는다.
  • 허브가 새 워커를 모집한다. 컨트롤 허브는 같은 포화를 감지해 그 모델 전문가에 대한 "수요"를 높인다. 유휴 노드 — 누군가의 주머니 속 폰, 도시 건너편의 여분 GPU — 는 이미 그 수요 마켓을 폴링하고 있다. 수요가 오르는 순간, 이들은 서빙할 전문가 슬라이스를 배정받아 내려받고, dial해 합류한다. 급증이 지나가면 수요가 다시 내려가고 여분 워커는 조용히 빠져나간다.

아무도 이것을 스케줄링하지 않는다. 어떤 노드도 밀어붙여지지 않는다. 스웜은 부하와 함께 숨 쉰다: 한산할 땐 조밀하고 빠르게, 바쁠 땐 넓고 병렬로 — 그리고 모든 것이 pull 방식이라, 홈 라우터 뒤의 노드에서도 동작한다.

이것이 그 누구도 혼자 소유하지 않는 하드웨어로 조 단위 파라미터 모델을 서빙할 수 있는 네트워크의 형상이다: 유휴 용량은 초대할 가치가 있는 바로 그 순간에, 오직 그때만 초대된다.