인플라이트 링

비워지지 않는 파이프라인: 여러 요청이 동시에 서로 다른 스테이지를 점유하므로, 어떤 스테이지도 앞선 요청이 끝나기를 기다리지 않는다.

Kvasir는 모델을 스테이지의 파이프라인으로 서빙합니다. 각 스테이지는 레이어의 연속된 슬라이스를 하나씩 들고 있습니다. 스테이지는 자기 레이어를 실행하고 경계 — 가중치가 아니라 hidden state — 를 다음으로 넘깁니다. 어떤 스테이지도 모델 전체를 갖지 않고, 데이터 경로 한가운데에는 아무것도 앉아 있지 않습니다: 브리지는 head에 제출하고 tail에서 읽으며, 스테이지들은 자기 에이전트를 통해 서로에게 결과를 건넵니다.

인플라이트라는 부분

비워지는 파이프라인은 머신의 대부분을 낭비한다

파이프라인이 다음 요청을 받기 전에 앞 요청을 끝낸다면, 어느 순간에도 스테이지 하나를 뺀 전부가 놀고 있습니다 — 4-스테이지 링이 하드웨어의 4분의 1로 도는 셈입니다. 인플라이트 설계는 여러 요청을 동시에 움직이게 합니다: 스테이지 3이 한 요청을 디코드하는 동안 스테이지 0은 이미 다른 요청을 prefill하고 있습니다. 스테이지들은 배치를 얼마나 오래 쥐고 있었는지와 제출할 것이 없던 시간이 얼마인지를 보고하므로, 굶주린 링과 포화된 링이 다르게 보입니다.

네 스테이지, 세 요청, 한순간.

           stage 0        stage 1        stage 2        stage 3
           layers 0-11    12-22          23-33          34-44

request A                                              decode
request B                 decode
request C  prefill

boundaries pass →  agent to agent, never through the caller
멤버십

배치란 정확히 무엇인가

서로 다른 요청의 행들이 하나의 물리 배치로 묶이고, 그 정확한 구성이 홉마다 다시 결정되는 대신 모든 하위 스테이지로 그대로 전달됩니다. 이것이 prefill 하나와 여러 개의 decode가 한 번의 패스를 공유할 수 있는 이유이고, 배치 크기가 로드의 성질인 이유이기도 합니다: 계획이 행 폭과 마이크로배치 폭을 미리 명시하고, 그 폭이 스테이지가 반환할 수 있는 최대 결과 크기를 정합니다.

파이프라인에는 최소 두 개의 스테이지가 필요합니다. 1-스테이지 파이프라인은 곧바로 거부됩니다 — head와 tail은 서로 다른 역할이고, 노드 하나가 둘을 겸하는 것은 더 작은 링이 아니라 다른 엔진입니다.

링은 지연 경로이고, 그 알갱이는 레이어입니다. 전문가 샤딩이 레이어 안쪽을 잘라 그 바닥을 없애며, 같은 서빙 패브릭에 그대로 꽂힙니다.