{"id":498532,"date":"2026-10-14T00:29:50","date_gmt":"2026-10-13T21:29:50","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=498532"},"modified":"2026-10-14T00:29:50","modified_gmt":"2026-10-13T21:29:50","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=498532","title":{"rendered":"\u0412\u043b\u0438\u044f\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 KV-\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c PD-disaggregation \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 MiniMax-M3"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u0430\u0445 \u0438 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0441 Habr.<\/p>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 KV-\u043a\u044d\u0448\u0430 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c disaggregated inference, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0430\u0434\u0438\u0438 prefill \u0438 decode \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 GPU-\u0443\u0437\u043b\u0430\u0445. \u041d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0443\u0437\u043b\u043e\u0432 \u0441 \u0432\u043e\u0441\u0435\u043c\u044c\u044e NVIDIA B200 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f RDMA\/InfiniBand \u0441 GPUDirect \u0438 TCP\/Ethernet \u0432 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0435 MiniMax-M3 \u0447\u0435\u0440\u0435\u0437 sglang. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f: \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438 (<code>L0<\/code>), \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 microbenchmark transfer engine (<code>L0b<\/code>), \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432 (<code>L1<\/code>) \u0438 end-to-end \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (<code>L2\/L3<\/code>). \u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e 268 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432.<\/p>\n<h2>TL;DR <\/h2>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 M1 RDMA\/InfiniBand \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u043d\u044b\u0439 TTFT \u0432 5,4-11,5 \u0440\u0430\u0437\u0430 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b output throughput \u0432 2,8-3,8 \u0440\u0430\u0437\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445. TPOT \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u043c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435\u00a0<code>prefill -&gt; decode<\/code>, \u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u0446\u0438\u043a\u043b\u0435 decode. TCP \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u043c \u0432 31 \u0438\u0437 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (41%); \u0432\u0441\u0435 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 IB \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b. \u041f\u043e \u043b\u043e\u0433\u0430\u043c \u043e\u0442\u043a\u0430\u0437 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 CUDA memory (<code>out of memory<\/code>), \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c KV-transfer, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e prefill \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u0430 router \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 HTTP 503. \u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 microbenchmark \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u043e\u0442\u043a\u0430\u0437 TCP \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e GPUDirect \u043d\u0430\u0434 host staging \u043d\u0430 6,3-6,5%.<\/p>\n<p>End-to-end \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u043d\u0430\u0441\u044b\u0449\u0430\u043b \u043d\u0438 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0430\u0431\u0440\u0438\u043a: TCP \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 8,7 \u0413\u0431\u0438\u0442\/\u0441 \u0438\u0437 200 \u0413\u0431\u0438\u0442\/\u0441, InfiniBand \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c 52,4-61,7 \u0413\u0431\u0438\u0442\/\u0441 \u0438\u0437 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 2933 \u0413\u0431\u0438\u0442\/\u0441 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e L0-\u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 NDR-\u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 &#8212; host staging \u043f\u0440\u043e\u0442\u0438\u0432 zero-copy GPUDirect, &#8212; \u0430 \u043d\u0435 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u044b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f attention backend \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 TTFT \u043d\u0430 33,5-44,4% \u0443\u00a0<code>triton<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0<code>fa4<\/code>, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0438 \u043f\u0443\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 layouts KV \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 production-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u0445.<\/p>\n<p><strong>\u0412\u044b\u0432\u043e\u0434:<\/strong>\u00a0\u0432 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440 KV-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c PD-\u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430. TCP \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 fallback \u0434\u043b\u044f \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 MiniMax-M3.<\/p>\n<h3>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 LLM \u043d\u0430 \u0434\u0432\u0435 \u0441\u0442\u0430\u0434\u0438\u0438. \u041d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438\u00a0<strong>prefill<\/strong>\u00a0\u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 KV-\u043a\u044d\u0448 attention. \u041d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438\u00a0<strong>decode<\/strong>\u00a0\u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041f\u0440\u0438 PD-disaggregation \u0441\u0442\u0430\u0434\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 GPU-\u0443\u0437\u043b\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c inference KV \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u043b\u0438 \u0443\u0437\u043b\u0430; \u0432 PD-\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 KV \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 VRAM \u0432 host memory, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0426\u0435\u043b\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f &#8212; \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043b\u0438 TCP \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c KV-\u043a\u044d\u0448\u0435\u043c.<\/p>\n<h4>1.1. \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/h4>\n<ol>\n<li>\n<p>\u041a\u0430\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 KV \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TTFT, TPOT, E2E latency \u0438 throughput?<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430\/\u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 TCP \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c?<\/p>\n<\/li>\n<li>\n<p>\u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 staging path?<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0451\u0442 \u043b\u0438 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432\u044b\u0431\u043e\u0440 backend&#8217;\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 mooncake \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0430 attention backend?<\/p>\n<\/li>\n<\/ol>\n<h4>1.2. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p>\u0413\u0438\u043f\u043e\u0442\u0435\u0437\u0430<\/p>\n<\/th>\n<th>\n<p>\u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432\u043b\u0438\u044f\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 TTFT, \u0430 \u043d\u0435 \u043d\u0430 TPOT<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 TTFT \u0438 TPOT<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H2<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f TCP \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c KV-\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0444\u0438\u043b\u0438 ISL\/OSL \u0438 concurrency<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H3<\/p>\n<\/td>\n<td>\n<p align=\"left\">GPUDirect \u0431\u044b\u0441\u0442\u0440\u0435\u0435 host staging<\/p>\n<\/td>\n<td>\n<p align=\"left\">VRAM \u043f\u0440\u043e\u0442\u0438\u0432 DRAM \u0432 L0b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H4<\/p>\n<\/td>\n<td>\n<p align=\"left\">TCP \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d LACP-\u0445\u044d\u0448\u0435\u043c \u0438\u043b\u0438 \u043f\u043e\u043b\u043e\u0441\u043e\u0439 Ethernet<\/p>\n<\/td>\n<td>\n<p align=\"left\">End-to-end rate \u043f\u0440\u043e\u0442\u0438\u0432 L0\/L1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H5<\/p>\n<\/td>\n<td>\n<p align=\"left\">RDMA \u0434\u0430\u0451\u0442 \u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 prefill<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 M1-\u043f\u0440\u043e\u0433\u043e\u043d\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H6<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fake<\/code>\u00a0\u0434\u0430\u0451\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 TPOT, \u043d\u043e \u0445\u0443\u0434\u0448\u0438\u0439 TTFT (decode \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043b\u043b)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u043f\u0443\u0441\u043a\u00a0<code>fake<\/code>\u00a0backend \u0432 PD-\u0440\u0435\u0436\u0438\u043c\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H7<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 \u0434\u0430\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 10%<\/p>\n<\/td>\n<td>\n<p align=\"left\">OFAT \u043f\u043e sglang \u0438 mooncake<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">H8<\/p>\n<\/td>\n<td>\n<p align=\"left\">nixl\/UCX \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0441 mooncake \u043d\u0430 RDMA<\/p>\n<\/td>\n<td>\n<p align=\"left\">M2 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>2. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/h3>\n<h4>2.1. \u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430<\/h4>\n<p>\u0414\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:\u00a0<code>node-a<\/code>\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430 prefill \u0438 router,\u00a0<code>node-b<\/code>\u00a0&#8212; decode. \u041a\u0430\u0436\u0434\u0430\u044f \u0440\u043e\u043b\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 tensor parallelism\u00a0<code>TP=8<\/code>\u00a0\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 B200. \u0418\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432, \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0438\u043c\u0435\u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u044b.<\/p>\n<p><strong>PD-disaggregation<\/strong>\u00a0(prefill\/decode disaggregation) \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0435 \u0444\u0430\u0437\u044b \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c GPU-\u0443\u0437\u043b\u0430\u043c: prefill \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043b\u043b \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0438 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u0435\u0433\u043e KV-\u043a\u044d\u0448\u0435\u043c, decode \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u043e\u0442 \u043a\u044d\u0448. \u041c\u0435\u0436\u0434\u0443 \u0444\u0430\u0437\u0430\u043c\u0438 KV-\u043a\u044d\u0448 (\u0435\u0434\u0438\u043d\u0438\u0446\u044b-\u0441\u043e\u0442\u043d\u0438 \u041c\u0438\u0411 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441) \u0434\u043e\u043b\u0436\u0435\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u0441 \u0443\u0437\u043b\u0430 prefill \u043d\u0430 \u0443\u0437\u0435\u043b decode &#8212; \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 decode \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0443\u0442\u0438 TTFT, \u043d\u043e \u043d\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (TPOT), \u0433\u0434\u0435 KV \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0432\u043e\u0435\u0439 \u043d\u043e\u0434\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/a1\/b3\/2b\/a1b32b85467d3339ec7e94c204530a55.svg\" alt=\"\u0421\u0445\u0435\u043c\u0430 PD-disaggregation: \u043a\u043b\u0438\u0435\u043d\u0442, router, prefill \u0438 decode\" title=\"\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f PD-disaggregation: prefill \u0438 decode \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 TP8-\u0443\u0437\u043b\u0430\u0445; \u043f\u043e\u0441\u043b\u0435 prefill KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 decode.\" width=\"300\" height=\"113\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/a1\/b3\/2b\/a1b32b85467d3339ec7e94c204530a55.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/a1\/b3\/2b\/a1b32b85467d3339ec7e94c204530a55.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f PD-disaggregation: prefill \u0438 decode \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 TP8-\u0443\u0437\u043b\u0430\u0445; \u043f\u043e\u0441\u043b\u0435 prefill KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 decode.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f prefill KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043d\u0430 decode. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c RDMA\/InfiniBand \u0447\u0435\u0440\u0435\u0437 \u0432\u043e\u0441\u0435\u043c\u044c NDR-\u043f\u043e\u0440\u0442\u043e\u0432 400G \u0441 GPUDirect \u0438 TCP\/Ethernet \u0447\u0435\u0440\u0435\u0437\u00a0<code>bond0<\/code>, LACP 2x100G, MTU 9000.<\/p>\n<h4>2.2. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">GPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 \u0443\u0437\u043b\u0430 \u00d7 8 NVIDIA B200<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">MiniMax-M3 MXFP8, 31 shard, 443 771 536 556 \u0431\u0430\u0439\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Engine<\/p>\n<\/td>\n<td>\n<p align=\"left\">sglang\u00a0<a href=\"http:\/\/0.0.0.dev\" rel=\"noopener nofollow\"><code>0.0.0.dev<\/code><\/a><code>1+g56e290315<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MoE backend<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>deep_gemm<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Attention backend<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fa4<\/code>, page size 128<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">KV backend M1<\/p>\n<\/td>\n<td>\n<p align=\"left\">mooncake<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">RDMA<\/p>\n<\/td>\n<td>\n<p align=\"left\">NDR 400G, HCA\u00a0<code>mlx5_4,7,8,9,10,13,14,15<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Ethernet<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>bond0<\/code>, LACP 802.3ad, 2 \u00d7 100G<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CUDA \/ OFED<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA 13.0.1 \/ MLNX-OFED 24.10<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0430\u0437\u043e\u0432\u044b\u0439 runtime<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>mem-fraction-static=0.85<\/code>, chunked prefill 8192, max running requests 20,\u00a0<code>lpm<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438\u00a0<code><strong>pycache<\/strong><\/code>\u00a0\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 TorchInductor cache. Content-addressed diffID \u0432\u0441\u0435\u0445 64 \u0441\u043b\u043e\u0451\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u043d\u043e\u0434\u0430\u0445.<\/p>\n<h4>2.3. \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/h4>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 M1 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043f\u044f\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 ISL\/OSL, \u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f concurrency \u0438 \u043f\u044f\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c ISL\/OSL<\/p>\n<\/th>\n<th>\n<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>128\/128<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0445\u043e\u0434 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u044b\u0445\u043e\u0434<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>2048\/256<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>8192\/256<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u0434<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>32768\/256<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u0434<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>2048\/2048<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435\u0433\u043e M1:\u00a0<code>5 \u00d7 3 \u00d7 5 \u00d7 2 = 150<\/code>\u00a0\u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b M2, \u043e\u0441\u044c D (18 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 sglang), \u043e\u0441\u044c C (13 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 mooncake), \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u00a0<code>fa4<\/code>\/<code>triton<\/code>\u00a0\u0438 L0\/L0b. \u0412\u00a0<code>summary.json<\/code>\u00a0&#8212; 268 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<h4>2.4. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0436\u0451\u0441\u0442\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 orphan-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0421\u0442\u0435\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 prefill \u2192 decode \u2192 router. \u041f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0432 MSA JIT, HF processor \u0438 warmup-\u0437\u0430\u043f\u0440\u043e\u0441. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00a0<code>seed=1234<\/code>,\u00a0<code>num-prompts=32<\/code>\u00a0\u0438 \u043f\u044f\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<p>\u0412 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 M1 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0441\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0433\u043e\u043d \u0441 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c TTFT \u0432\u044b\u0448\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c output throughput. \u041e\u0442\u043a\u0430\u0437\u044b \u0441\u00a0<code>ttft=0<\/code>\u00a0\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0432 \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 failure-rate \u0438 heatmap. \u0414\u043b\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u0435\u0434\u0438\u0430\u043d\u044b, \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u0440\u043e\u0441.<\/p>\n<p><strong>\u0422\u0435\u0440\u043c\u0438\u043d\u044b \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432.<\/strong>\u00a0<em>HCA<\/em>\u00a0(Host Channel Adapter) &#8212; \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 InfiniBand, \u044f\u0434\u0440\u043e \u0432\u0438\u0434\u0438\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u00a0<code>mlx5_N<\/code>.\u00a0<em>NDR<\/em>\u00a0= 400 \u0413\u0431\u0438\u0442\/\u0441 \u043d\u0430 \u043f\u043e\u0440\u0442,\u00a0<em>HDR<\/em>\u00a0= 100 \u0413\u0431\u0438\u0442\/\u0441 &#8212; \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 IB.\u00a0<em>PIX-local<\/em>\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438 GPU \u0432\u0438\u0441\u044f\u0442 \u043f\u043e\u0434 \u043e\u0431\u0449\u0438\u043c PCIe-switch: \u043a\u043e\u043f\u0438\u044f VRAM\u2192HCA \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f GPUDirect.\u00a0<code>bond0<\/code>\u00a0&#8212; \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Ethernet-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0437\u043b\u0430 (Linux bonding): \u0434\u0432\u0430 \u043f\u043e\u0440\u0442\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u043f\u043e LACP 802.3ad \u0432 \u043e\u0434\u0438\u043d \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u043d\u0430\u043b 2 \u00d7 100G \u0441 MTU 9000. \u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438\u00a0<code>bond0<\/code>\u00a0\u0438 IB-\u043f\u043e\u0440\u0442\u043e\u0432\u00a0<code>mlx5_*<\/code>\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e \u0438\u0445 \u0434\u0435\u043b\u044c\u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 KV (\u0440\u0430\u0437\u0434\u0435\u043b 3.3).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0423\u0440\u043e\u0432\u0435\u043d\u044c<\/p>\n<\/th>\n<th>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">L0<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>ib_write_bw<\/code>,\u00a0<code>ib_write_lat<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438, latency<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">L0b<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>transfer_engine_bench<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">GDR\/host staging, read\/write, status<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">L1<\/p>\n<\/td>\n<td>\n<p align=\"left\">IB counters,\u00a0<code>bond0<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0435\u043b\u044c\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">L2<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/metrics<\/code>\u00a0sglang<\/p>\n<\/td>\n<td>\n<p align=\"left\">alloc\/bootstrap KV-transfer<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">L3<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>bench_serving<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">TTFT, TPOT, ITL (inter-token latency), E2E, tok\/s<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>L0 \u0438 L0b \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442 \u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0447\u0438\u043a \u0432 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 (L0 &#8212; \u043f\u043e\u043b\u043e\u0441\u0443 IB \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439\u00a0<code>ib_write_bw<\/code>\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 sglang; L0b &#8212;\u00a0<code>transfer_engine_bench<\/code>\u00a0\u0431\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u0438). L1-L3 &#8212; end-to-end: L1 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u043f\u043e\u0448\u0451\u043b \u0431\u0430\u0439\u0442, L2 \u0431\u0435\u0440\u0451\u0442 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e \u0434\u0432\u0438\u0436\u043a\u0430, L3 &#8212; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. IB-\u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438\u00a0<code>PortXmitData\/PortRcvData<\/code>\u00a0\u043e\u0442\u0434\u0430\u044e\u0442\u0441\u044f \u0432 4-\u0431\u0430\u0439\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0445 (\u00d74 \u0434\u043b\u044f \u0431\u0430\u0439\u0442); \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b\u00a0<code>ib_tx<\/code>\/<code>bond_tx<\/code>\u00a0&#8212; \u043f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d (<code>after - before<\/code>), \u0430 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430.<\/p>\n<h3>3. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<h4>3.1. End-to-end \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430<\/h4>\n<p>\u041f\u0440\u0438 concurrency=8 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0434\u0438\u0430\u043d\u044b. \u0417\u0434\u0435\u0441\u044c TTFT &#8212; \u0432\u0440\u0435\u043c\u044f \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430, TPOT &#8212; \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c<\/p>\n<\/th>\n<th>\n<p>IB TTFT, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p>TCP TTFT, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0448 IB<\/p>\n<\/th>\n<th>\n<p>IB tok\/s<\/p>\n<\/th>\n<th>\n<p>TCP tok\/s<\/p>\n<\/th>\n<th>\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0448 IB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">128\/128<\/p>\n<\/td>\n<td>\n<p align=\"left\">451.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">2427.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.4\u00d7<\/p>\n<\/td>\n<td>\n<p align=\"left\">414.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">128.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.2\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">398.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">4575.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">11.5\u00d7<\/p>\n<\/td>\n<td>\n<p align=\"left\">519.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">182.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.8\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">554.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">3215.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.8\u00d7<\/p>\n<\/td>\n<td>\n<p align=\"left\">495.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">130.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.8\u00d7<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 TTFT \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 KV \u0438 bootstrap, \u043d\u043e \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c decode-\u0446\u0438\u043a\u043b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 TPOT \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b 10.8-11.7 \u043c\u0441 \u0434\u043b\u044f IB \u0438 10.0-10.5 \u043c\u0441 \u0434\u043b\u044f TCP; \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e TCP \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0432.<\/p>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"G_{\\mathrm{TTFT}} = \\frac{\\mathrm{TTFT}_{\\mathrm{TCP}}}{\\mathrm{TTFT}_{\\mathrm{IB}}}; \\qquad G_{\\mathrm{thr}} = \\frac{\\mathrm{Throughput}_{\\mathrm{IB}}}{\\mathrm{Throughput}_{\\mathrm{TCP}}}\" alt=\"G_{\\mathrm{TTFT}} = \\frac{\\mathrm{TTFT}_{\\mathrm{TCP}}}{\\mathrm{TTFT}_{\\mathrm{IB}}}; \\qquad G_{\\mathrm{thr}} = \\frac{\\mathrm{Throughput}_{\\mathrm{IB}}}{\\mathrm{Throughput}_{\\mathrm{TCP}}}\" src=\"https:\/\/habrastorage.org\/extt\/4b\/d3\/c6\/4bd3c605ebfe4018171a964abab7f7ac.svg\" width=\"412\" height=\"44\" data-width=\"49.642\" data-height=\"5.289\" data-vertical-align=\"-2.132\" style=\"width: 49.642ex; height: 5.289ex; vertical-align: -2.132ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/4b\/d3\/c6\/4bd3c605ebfe4018171a964abab7f7ac.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/4b\/d3\/c6\/4bd3c605ebfe4018171a964abab7f7ac.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/da\/fa\/64\/dafa64efbd37016b5bd95e7d6f854b57.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. TTFT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8, \u0443\u0441\u044b - IQR. \u0421\u0435\u0440\u0438\u0438: RDMA \/ IB - RDMA\/InfiniBand NDR 400G; TCP \/ Ethernet - Ethernet bond0, LACP 2 \u00d7 100G.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. TTFT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8, \u0443\u0441\u044b - IQR. \u0421\u0435\u0440\u0438\u0438: RDMA \/ IB - RDMA\/InfiniBand NDR 400G; TCP \/ Ethernet - Ethernet bond0, LACP 2 \u00d7 100G.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/da\/fa\/64\/dafa64efbd37016b5bd95e7d6f854b57.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/da\/fa\/64\/dafa64efbd37016b5bd95e7d6f854b57.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. TTFT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8, \u0443\u0441\u044b &#8212; IQR. \u0421\u0435\u0440\u0438\u0438: RDMA \/ IB &#8212; RDMA\/InfiniBand NDR 400G; TCP \/ Ethernet &#8212; Ethernet bond0, LACP 2 \u00d7 100G.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/b3\/44\/c1\/b344c1cb61ae610e3921ac3b926bcbd7.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. TPOT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 H1: \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TPOT; \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043d\u0430 \u0420\u0438\u0441\u0443\u043d\u043a\u0435 1.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. TPOT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 H1: \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TPOT; \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043d\u0430 \u0420\u0438\u0441\u0443\u043d\u043a\u0435 1.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/b3\/44\/c1\/b344c1cb61ae610e3921ac3b926bcbd7.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/b3\/44\/c1\/b344c1cb61ae610e3921ac3b926bcbd7.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. TPOT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 H1: \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TPOT; \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043d\u0430 \u0420\u0438\u0441\u0443\u043d\u043a\u0435 1.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/f9\/fd\/36\/f9fd361c4c73aaae4a4f3b2053a5c890.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438: output \u0438 total tok\/s \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f 2048\/256. TCP-\u043e\u0442\u043a\u0430\u0437\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0443\u043b\u044f\u043c\u0438.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438: output \u0438 total tok\/s \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f 2048\/256. TCP-\u043e\u0442\u043a\u0430\u0437\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0443\u043b\u044f\u043c\u0438.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/f9\/fd\/36\/f9fd361c4c73aaae4a4f3b2053a5c890.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/f9\/fd\/36\/f9fd361c4c73aaae4a4f3b2053a5c890.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438: output \u0438 total tok\/s \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f 2048\/256. TCP-\u043e\u0442\u043a\u0430\u0437\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0443\u043b\u044f\u043c\u0438.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/4d\/62\/02\/4d6202d50277107cdc7f95a82035104f.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041c\u0435\u0442\u0440\u0438\u043a\u0438 KV-transfer engine (M1, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0434\u0435\u043b\u044c\u0442\u0430 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d): prefill - GB\/s \u0438 \u043c\u0441\/\u043e\u043f, decode - bootstrap, \u043c\u0441\/\u043e\u043f. speed\/latency\/total_mb \u043e\u0442\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0430\u044f (prefill) \u0441\u0442\u043e\u0440\u043e\u043d\u0430; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f (decode) - \u0442\u043e\u043b\u044c\u043a\u043e bootstrap\/alloc.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041c\u0435\u0442\u0440\u0438\u043a\u0438 KV-transfer engine (M1, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0434\u0435\u043b\u044c\u0442\u0430 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d): prefill - GB\/s \u0438 \u043c\u0441\/\u043e\u043f, decode - bootstrap, \u043c\u0441\/\u043e\u043f. speed\/latency\/total_mb \u043e\u0442\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0430\u044f (prefill) \u0441\u0442\u043e\u0440\u043e\u043d\u0430; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f (decode) - \u0442\u043e\u043b\u044c\u043a\u043e bootstrap\/alloc.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/4d\/62\/02\/4d6202d50277107cdc7f95a82035104f.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/4d\/62\/02\/4d6202d50277107cdc7f95a82035104f.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041c\u0435\u0442\u0440\u0438\u043a\u0438 KV-transfer engine (M1, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0434\u0435\u043b\u044c\u0442\u0430 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d): prefill &#8212; GB\/s \u0438 \u043c\u0441\/\u043e\u043f, decode &#8212; bootstrap, \u043c\u0441\/\u043e\u043f. speed\/latency\/total_mb \u043e\u0442\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0430\u044f (prefill) \u0441\u0442\u043e\u0440\u043e\u043d\u0430; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f (decode) &#8212; \u0442\u043e\u043b\u044c\u043a\u043e bootstrap\/alloc.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/02\/91\/38\/0291384cf3f30010011d7b56b0c61bd3.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 RDMA\/IB \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP, %. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e IB; conc=8.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 RDMA\/IB \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP, %. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e IB; conc=8.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/02\/91\/38\/0291384cf3f30010011d7b56b0c61bd3.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/02\/91\/38\/0291384cf3f30010011d7b56b0c61bd3.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 RDMA\/IB \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP, %. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e IB; conc=8.<\/figcaption><\/div>\n<\/figure>\n<h4>3.2. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 TCP<\/h4>\n<p>\u0412\u0441\u0435 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 IB \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b. \u0414\u043b\u044f TCP 44 \u0438\u0437 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b, \u0430 31 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u043c.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c<\/p>\n<\/th>\n<th>\n<p>c=1<\/p>\n<\/th>\n<th>\n<p>c=8<\/p>\n<\/th>\n<th>\n<p>c=32<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">128\/128<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">0\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">1\/5 bad<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2048\/2048<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">32768\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/5 bad<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0438:<\/p>\n<pre><code>ClientSession::writeBody failed to copy from CUDA memory: out of memory\u2193KVTransferError: timeout after 300 s in KVPoll.WaitingForInput\u2193prefill: running_phase_sigquit_handler \u2192 kill_process_tree\u2193router: No available prefill workers\u2193HTTP 503<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c\u00a0<code>2048\/2048<\/code>\u00a0\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043f\u0440\u0438\u00a0<code>c=1<\/code>, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u00a0<code>8192\/256<\/code>\u00a0\u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u00a0<code>c=8<\/code>. \u042d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442 \u043e\u0431\u044a\u0451\u043c\u0430 KV \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 concurrency. \u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439\u00a0<code>transfer_engine_bench<\/code>\u00a0\u0441 TCP \u0438 VRAM-\u0431\u0443\u0444\u0435\u0440\u043e\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0442\u043e\u0442 \u0436\u0435 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u043a\u0430\u0437\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/de\/3d\/52\/de3d5204d1a7ffa5f144a8dc7f0bc3ef.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 TCP: \u0434\u043e\u043b\u044f bad-\u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (prefill \u043c\u0451\u0440\u0442\u0432, ttft=0, KVTransferError\/503) \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c \u0438 concurrency. IB - 0% \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 TCP: \u0434\u043e\u043b\u044f bad-\u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (prefill \u043c\u0451\u0440\u0442\u0432, ttft=0, KVTransferError\/503) \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c \u0438 concurrency. IB - 0% \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445.\" width=\"1200\" height=\"460\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/de\/3d\/52\/de3d5204d1a7ffa5f144a8dc7f0bc3ef.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/de\/3d\/52\/de3d5204d1a7ffa5f144a8dc7f0bc3ef.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 TCP: \u0434\u043e\u043b\u044f bad-\u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (prefill \u043c\u0451\u0440\u0442\u0432, ttft=0, KVTransferError\/503) \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c \u0438 concurrency. IB &#8212; 0% \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445.<\/figcaption><\/div>\n<\/figure>\n<h4>3.3. \u041c\u0430\u0440\u0448\u0440\u0443\u0442 KV \u0438 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0438<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442<\/p>\n<\/th>\n<th>\n<p><code>ib_tx<\/code><\/p>\n<\/th>\n<th>\n<p><code>bond_tx<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IB<\/p>\n<\/td>\n<td>\n<p align=\"left\">3 654-206 714 \u041c\u0438\u0411<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 0-12 \u041c\u0438\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TCP<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">3 642-55 158 \u041c\u0438\u0411 (\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u0441\u0430\u043c\u044b\u0445 \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 TCP-\u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u00a0<code>bond0<\/code>\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 7.4-8.7 \u0413\u0431\u0438\u0442\/\u0441, \u0434\u043e 4.4% \u043e\u0442 200 \u0413\u0431\u0438\u0442\/\u0441. \u0414\u043b\u044f IB \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b 61,7 \u0413\u0431\u0438\u0442\/\u0441 (c=32), \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 2,1% \u043e\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e L0-\u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 NDR-\u043f\u043e\u0440\u0442\u043e\u0432 &#8212; \u043e\u043a\u043e\u043b\u043e 2933 \u0413\u0431\u0438\u0442\/\u0441. \u0413\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043e \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u0438\u0438 LACP-\u0445\u044d\u0448\u0430 \u043d\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/3e\/fd\/4b\/3efd4b4b75de3916feddce83f7e03816.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041c\u0430\u0440\u0448\u0440\u0443\u0442 KV-\u0442\u0440\u0430\u0444\u0438\u043a\u0430: \u0434\u0435\u043b\u044c\u0442\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u0440\u0442\u043e\u0432 IB (tx) \u0438 Ethernet bond (tx) \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d, conc=8, \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c isl\/osl.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041c\u0430\u0440\u0448\u0440\u0443\u0442 KV-\u0442\u0440\u0430\u0444\u0438\u043a\u0430: \u0434\u0435\u043b\u044c\u0442\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u0440\u0442\u043e\u0432 IB (tx) \u0438 Ethernet bond (tx) \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d, conc=8, \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c isl\/osl.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/3e\/fd\/4b\/3efd4b4b75de3916feddce83f7e03816.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/3e\/fd\/4b\/3efd4b4b75de3916feddce83f7e03816.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041c\u0430\u0440\u0448\u0440\u0443\u0442 KV-\u0442\u0440\u0430\u0444\u0438\u043a\u0430: \u0434\u0435\u043b\u044c\u0442\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u0440\u0442\u043e\u0432 IB (tx) \u0438 Ethernet bond (tx) \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d, conc=8, \u043f\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c isl\/osl.<\/figcaption><\/div>\n<\/figure>\n<h4>3.4. L0 \u0438 L0b: GPUDirect \u043f\u0440\u043e\u0442\u0438\u0432 host staging<\/h4>\n<p>Cross-node\u00a0<code>ib_write_bw<\/code>\u00a0\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 NDR-\u043f\u043e\u0440\u0442\u0430\u0445 \u0434\u0430\u043b \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 366.7 \u0413\u0431\u0438\u0442\/\u0441 \u043f\u0440\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 364.2-368.5 \u0413\u0431\u0438\u0442\/\u0441; latency \u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 1.78-2.00 \u043c\u043a\u0441.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0420\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p>GB\/s<\/p>\n<\/th>\n<th>\n<p>\u0413\u0431\u0438\u0442\/\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">GDR write \u0438\u0437 VRAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">48.82<\/p>\n<\/td>\n<td>\n<p align=\"left\">390.56<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">host write \u0438\u0437 DRAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">45.93<\/p>\n<\/td>\n<td>\n<p align=\"left\">367.44<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">GDR read \u0438\u0437 VRAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">49.00<\/p>\n<\/td>\n<td>\n<p align=\"left\">392.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">host read \u0438\u0437 DRAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">46.01<\/p>\n<\/td>\n<td>\n<p align=\"left\">368.08<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TCP write \u0438\u0437 VRAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">FAILED<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>GDR \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b 97.6% \u043e\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 400 \u0413\u0431\u0438\u0442\/\u0441 NDR \u0438 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b host staging \u043d\u0430 6.29% \u0434\u043b\u044f write \u0438 6.50% \u0434\u043b\u044f read. L0 \u0438 L0b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0440\u0435\u0436\u0438\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/e8\/e3\/c9\/e8e3c9c1e82334f1faf62d212636c5f7.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. L0: \u043f\u043e\u0442\u043e\u043b\u043e\u043a NDR-\u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043f\u043e \u043f\u043e\u0440\u0442\u0430\u043c (ib_write_bw cross-node, 64K msg) \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440 Ethernet bond0 (8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432).\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. L0: \u043f\u043e\u0442\u043e\u043b\u043e\u043a NDR-\u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043f\u043e \u043f\u043e\u0440\u0442\u0430\u043c (ib_write_bw cross-node, 64K msg) \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440 Ethernet bond0 (8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432).\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/e8\/e3\/c9\/e8e3c9c1e82334f1faf62d212636c5f7.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/e8\/e3\/c9\/e8e3c9c1e82334f1faf62d212636c5f7.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. L0: \u043f\u043e\u0442\u043e\u043b\u043e\u043a NDR-\u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043f\u043e \u043f\u043e\u0440\u0442\u0430\u043c (ib_write_bw cross-node, 64K msg) \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440 Ethernet bond0 (8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432).<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/92\/f7\/ed\/92f7ed1d8f97cee9c68d10aa652a2aca.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. L0b: mooncake transfer_engine_bench - GPUDirect (GDR) \u043f\u0440\u043e\u0442\u0438\u0432 host staging. mlx5_4, RDMA RC, block=64K, 8 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, cross-node node-a\u2192node-b.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. L0b: mooncake transfer_engine_bench - GPUDirect (GDR) \u043f\u0440\u043e\u0442\u0438\u0432 host staging. mlx5_4, RDMA RC, block=64K, 8 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, cross-node node-a\u2192node-b.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/92\/f7\/ed\/92f7ed1d8f97cee9c68d10aa652a2aca.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/92\/f7\/ed\/92f7ed1d8f97cee9c68d10aa652a2aca.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. L0b: mooncake transfer_engine_bench &#8212; GPUDirect (GDR) \u043f\u0440\u043e\u0442\u0438\u0432 host staging. mlx5_4, RDMA RC, block=64K, 8 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, cross-node node-a\u2192node-b.<\/figcaption><\/div>\n<\/figure>\n<h4>3.5. Backend \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430: mooncake \u0438 nixl<\/h4>\n<p>M2 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u043d\u0430 IB \u0438 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f TTFT \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 backend&#8217;\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 M2.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>Backend<\/p>\n<\/th>\n<th>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c<\/p>\n<\/th>\n<th>\n<p>c<\/p>\n<\/th>\n<th>\n<p>TTFT, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p>TPOT, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p>Output tok\/s<\/p>\n<\/th>\n<th>\n<p><code>ib_tx<\/code>, \u041c\u0438\u0411<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">mooncake<\/p>\n<\/td>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">4295.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">11.28<\/p>\n<\/td>\n<td>\n<p align=\"left\">200.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">16 016<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">mooncake<\/p>\n<\/td>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">1344.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">13.45<\/p>\n<\/td>\n<td>\n<p align=\"left\">749.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">16 016<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">mooncake<\/p>\n<\/td>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">3121.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.27<\/p>\n<\/td>\n<td>\n<p align=\"left\">254.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">51 430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">mooncake<\/p>\n<\/td>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">3901.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">13.10<\/p>\n<\/td>\n<td>\n<p align=\"left\">567.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">51 430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">nixl<\/p>\n<\/td>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">3775.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">11.37<\/p>\n<\/td>\n<td>\n<p align=\"left\">194.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">15 862<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">nixl<\/p>\n<\/td>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">4104.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">13.33<\/p>\n<\/td>\n<td>\n<p align=\"left\">595.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">15 862<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">nixl<\/p>\n<\/td>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">2065.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.64<\/p>\n<\/td>\n<td>\n<p align=\"left\">268.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">50 938<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">nixl<\/p>\n<\/td>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">4407.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">12.19<\/p>\n<\/td>\n<td>\n<p align=\"left\">589.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">50 938<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>nixl \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0439 IB-\u043c\u0430\u0440\u0448\u0440\u0443\u0442: \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u00a0<code>ib_tx<\/code>\u00a0\u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1%.\u00a0<code>fake<\/code>\u00a0\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a prefill backend \u0432 PD-\u0440\u0435\u0436\u0438\u043c\u0435: sglang \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f assertion \u0432\u00a0<code>pd_disaggregation_hook.py:70<\/code>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/dd\/32\/7a\/dd327a3a3913763216e3aa9eb5879001.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. M2: backend \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 KV - mooncake \u043f\u0440\u043e\u0442\u0438\u0432 nixl (UCX). IB, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0435\u043a (\u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 backend'\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 M2. fake \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f prefill (assertion pd_disaggregation_hook.py:70).\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. M2: backend \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 KV - mooncake \u043f\u0440\u043e\u0442\u0438\u0432 nixl (UCX). IB, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0435\u043a (\u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 backend'\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 M2. fake \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f prefill (assertion pd_disaggregation_hook.py:70).\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/dd\/32\/7a\/dd327a3a3913763216e3aa9eb5879001.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/dd\/32\/7a\/dd327a3a3913763216e3aa9eb5879001.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. M2: backend \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 KV &#8212; mooncake \u043f\u0440\u043e\u0442\u0438\u0432 nixl (UCX). IB, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0435\u043a (\u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 backend&#8217;\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 M2. fake \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f prefill (assertion pd_disaggregation_hook.py:70).<\/figcaption><\/div>\n<\/figure>\n<h4>3.6. OFAT \u0438 attention backend<\/h4>\n<p>\u041f\u043e \u043e\u0441\u0438 D \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u044b 18 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 sglang (n=2-3, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c) \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 2048\/256, c=8, IB, mooncake. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0434\u0430\u043b\u00a0<code>attention-backend triton<\/code>; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 16 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0430\u0437\u0443 \u043d\u0435 \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0438 &#8212; \u0438\u0445 TTFT \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b 435-562 \u043c\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 418 \u043c\u0441 \u0443 base (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b\u00a0<code>max-running-req<\/code>\u00a08\/16\/32\/64,\u00a0<code>mem-fraction<\/code>\u00a00.70-0.90,\u00a0<code>schedule-policy<\/code>\u00a0fcfs\/random,\u00a0<code>chunked-prefill<\/code>\u00a0off\/4096\/16384,\u00a0<code>cuda-graph-*<\/code>\u00a0\u0438\u00a0<code>max-total-tokens 500k<\/code>). \u0415\u0449\u0451 \u0434\u0432\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 &#8212;\u00a0<code>cuda-graph-prefill full<\/code>\u00a0\u0438\u00a0<code>attention-backend fa3<\/code>\u00a0&#8212; \u0441\u0442\u0435\u043a \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0438 (\u0442\u0430\u0439\u043c\u0430\u0443\u0442 health) \u0438 \u0432 \u0447\u0438\u0441\u043b\u043e 18 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442. \u041f\u043e \u043e\u0441\u0438 C \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b 13 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 mooncake \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 8192\/256, c=8, IB; \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430 M1, \u0430\u00a0<code>MC_NUM_QP_PER_EP=4<\/code>\u00a0\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044e decode.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u044c<\/p>\n<\/th>\n<th>\n<p><code>fa4<\/code>\u00a0TTFT<\/p>\n<\/th>\n<th>\n<p><code>triton<\/code>\u00a0TTFT<\/p>\n<\/th>\n<th>\n<p>\u0394 TTFT<\/p>\n<\/th>\n<th>\n<p>\u0394 throughput<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2048\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">536.4 \u043c\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">298.3 \u043c\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">-44.4%<\/p>\n<\/td>\n<td>\n<p align=\"left\">+19.9%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8192\/256<\/p>\n<\/td>\n<td>\n<p align=\"left\">578.7 \u043c\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">384.7 \u043c\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">-33.5%<\/p>\n<\/td>\n<td>\n<p align=\"left\">+17.7%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043e\u0431\u043e\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c 32\/32 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u0440\u0438\u00a0<code>temperature=0<\/code>\u00a0\u0434\u0432\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e semantic check \u0434\u0430\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b. \u041e\u0434\u043d\u0430\u043a\u043e\u00a0<code>fa4<\/code>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u00a0<code>page_size=128<\/code>, \u0430\u00a0<code>triton<\/code>\u00a0&#8212;\u00a0<code>page_size=None<\/code>; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u0438\u043b\u0438 \u043f\u0440\u0438 speculative decoding.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/78\/70\/64\/7870643ee4ad06f57278d7613d5c5226.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u041e\u0441\u044c D: \u043f\u043e\u043b\u043d\u044b\u0439 OFAT \u043f\u043e 18 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c sglang, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 2048\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0417\u0435\u043b\u0451\u043d\u043e\u0435 - \u043b\u0443\u0447\u0448\u0435 base; cold-\u043f\u0440\u043e\u0433\u043e\u043d\u044b (TTFT &gt; 1000 \u043c\u0441) \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b. cuda-graph-prefill full \u0438 attention-backend fa3 \u0441\u0442\u0435\u043a \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0438.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u041e\u0441\u044c D: \u043f\u043e\u043b\u043d\u044b\u0439 OFAT \u043f\u043e 18 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c sglang, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 2048\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0417\u0435\u043b\u0451\u043d\u043e\u0435 - \u043b\u0443\u0447\u0448\u0435 base; cold-\u043f\u0440\u043e\u0433\u043e\u043d\u044b (TTFT &gt; 1000 \u043c\u0441) \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b. cuda-graph-prefill full \u0438 attention-backend fa3 \u0441\u0442\u0435\u043a \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0438.\" width=\"1200\" height=\"650\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/78\/70\/64\/7870643ee4ad06f57278d7613d5c5226.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/78\/70\/64\/7870643ee4ad06f57278d7613d5c5226.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u041e\u0441\u044c D: \u043f\u043e\u043b\u043d\u044b\u0439 OFAT \u043f\u043e 18 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c sglang, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 2048\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0417\u0435\u043b\u0451\u043d\u043e\u0435 &#8212; \u043b\u0443\u0447\u0448\u0435 base; cold-\u043f\u0440\u043e\u0433\u043e\u043d\u044b (TTFT &gt; 1000 \u043c\u0441) \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b. cuda-graph-prefill full \u0438 attention-backend fa3 \u0441\u0442\u0435\u043a \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0438.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/79\/38\/32\/7938321505657612200cc77a527e1ff3.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u041e\u0441\u044c C: \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 mooncake, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 8192\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0412\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0448\u0443\u043c\u0430 M1 (413-574 \u043c\u0441); MC_NUM_QP_PER_EP=4 - decode \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u041e\u0441\u044c C: \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 mooncake, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 8192\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0412\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0448\u0443\u043c\u0430 M1 (413-574 \u043c\u0441); MC_NUM_QP_PER_EP=4 - decode \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442.\" width=\"1200\" height=\"650\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/79\/38\/32\/7938321505657612200cc77a527e1ff3.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/79\/38\/32\/7938321505657612200cc77a527e1ff3.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u041e\u0441\u044c C: \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 mooncake, \u043f\u0440\u043e\u0444\u0438\u043b\u044c 8192\/256, c=8, IB, \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u043e\u043c. \u0412\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0448\u0443\u043c\u0430 M1 (413-574 \u043c\u0441); MC_NUM_QP_PER_EP=4 &#8212; decode \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/6d\/a6\/17\/6da617ab59cb49c3f9ef3bac6c57d2bc.svg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f attention backend: fa4 \u043f\u0440\u043e\u0442\u0438\u0432 triton (n=3 warm, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0442\u0435\u043a). triton \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 page_size=None (\u0431\u0435\u0437 paged-KV), ib_tx -4.2%, p99 TTFT 420 \u043f\u0440\u043e\u0442\u0438\u0432 1619 \u043c\u0441; 32\/32 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f attention backend: fa4 \u043f\u0440\u043e\u0442\u0438\u0432 triton (n=3 warm, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0442\u0435\u043a). triton \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 page_size=None (\u0431\u0435\u0437 paged-KV), ib_tx -4.2%, p99 TTFT 420 \u043f\u0440\u043e\u0442\u0438\u0432 1619 \u043c\u0441; 32\/32 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.\" width=\"1200\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/6d\/a6\/17\/6da617ab59cb49c3f9ef3bac6c57d2bc.svg 780w,&#10;       https:\/\/habrastorage.org\/extt\/6d\/a6\/17\/6da617ab59cb49c3f9ef3bac6c57d2bc.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f attention backend: fa4 \u043f\u0440\u043e\u0442\u0438\u0432 triton (n=3 warm, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0442\u0435\u043a). triton \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 page_size=None (\u0431\u0435\u0437 paged-KV), ib_tx -4.2%, p99 TTFT 420 \u043f\u0440\u043e\u0442\u0438\u0432 1619 \u043c\u0441; 32\/32 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.<\/figcaption><\/div>\n<\/figure>\n<h3>4. \u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435<\/h3>\n<h4>4.1. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0432\u0438\u0434\u0435\u043d \u0432 TTFT, \u043d\u043e \u043d\u0435 \u0432 TPOT<\/h4>\n<p>\u0412 PD-disaggregation decode \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f KV-\u043a\u044d\u0448\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430. \u041f\u043e\u0441\u043b\u0435 bootstrap decode \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e; \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 &#8212; \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e TTFT \u043f\u0440\u043e\u0442\u0438\u0432 \u043c\u0435\u043d\u0435\u0435 1.7 \u043c\u0441\/\u0442\u043e\u043a\u0435\u043d \u043f\u043e TPOT &#8212; \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0443\u0442\u0438.<\/p>\n<h4>4.2. \u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043b\u0438\u043d\u0438\u0438 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b TCP \u0443\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0438\u043b\u0438 LACP-\u0445\u044d\u0448, end-to-end \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0431\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u0442\u043e\u043b\u043a\u0443\u00a0<code>bond0<\/code>. \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435: \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 8.7 \u0413\u0431\u0438\u0442\/\u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u043b\u0438\u0448\u044c 4.4% \u043e\u0442 200 \u0413\u0431\u0438\u0442\/\u0441. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0438 L0b \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f &#8212; \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 software path: TCP \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f KV \u0438\u0437 VRAM \u0432 host bounce-buffer, \u0430 GPUDirect RDMA \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 KV \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e host staging.<\/p>\n<blockquote>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 Ethernet\u2011\u043f\u043e\u043b\u043e\u0441\u044b \u0431\u0435\u0437\u00a0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f staging path \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0433\u043e TCP failure mode.<\/p>\n<\/blockquote>\n<h4>4.3. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u00a0triton<\/h4>\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0448\u00a0<code>triton<\/code>\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433\u0430 mooncake, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0441\u043c\u0435\u043d\u043e\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 attention, \u0430 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. \u041f\u0435\u0440\u0435\u0434 production-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u0445, p99, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0438 speculative decoding.<\/p>\n<h3>5. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0443\u0433\u0440\u043e\u0437\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438<\/h3>\n<ol>\n<li>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432.<\/strong>\u00a0\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e RDMA\/InfiniBand \u0441 GPUDirect \u0438 TCP\/Ethernet; \u0438\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 KV \u043d\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431 decode.<\/strong>\u00a0\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d decode-\u0443\u0437\u0435\u043b; \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 decode workers \u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 TCP-\u0432\u044b\u0431\u043e\u0440\u043a\u0438.<\/strong>\u00a031 TCP-\u043f\u0440\u043e\u0433\u043e\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u043c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0451\u043d \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. Failure rate \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 M2.<\/strong>\u00a0\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 TTFT M2 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044b\u043c M1; M2 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f backend&#8217;\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u043b\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 tuning.<\/strong>\u00a0\u0412 \u043e\u0441\u044f\u0445 C\/D \u0438 attention verification \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c 2-3 \u0442\u0451\u043f\u043b\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u0430 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><strong>Attention layouts.<\/strong>\u00a0<code>fa4<\/code>\u00a0\u0438\u00a0<code>triton<\/code>\u00a0\u043d\u0435\u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 paged\/non-paged KV layout.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u0434\u0435\u043b\u044c\u0442\u044b.<\/strong>\u00a0<code>sglang:kv_transfer_*<\/code>\u00a0&#8212; \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u044b\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 Prometheus, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0445\u0430\u0440\u043d\u0435\u0441\u0441\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u044c\u0442\u0430\u00a0<code>after - before<\/code>\u00a0\u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d (\u0447\u0442\u0435\u043d\u0438\u0435\u00a0<code><em>after<\/em><\/code><em>\u00a0\u0434\u0430\u0451\u0442 lifetime-\u0441\u0440\u0435\u0434\u043d\u0435\u0435).\u00a0<\/em><code><em>kv<\/em>transfer_speed_gb_s<\/code>\/<code>_latency_ms<\/code>\/<code>_total_mb<\/code>\u00a0\u043e\u0442\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0430\u044f (prefill) \u0441\u0442\u043e\u0440\u043e\u043d\u0430,\u00a0<code><em>bootstrap<\/em>ms<\/code>\/<code>_alloc_ms<\/code>\u00a0&#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f (decode). \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c KV \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 &#8212; \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u0394 \u043f\u043e\u0440\u0442\u043e\u0432\u044b\u0445 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432, &#8212; \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430.<\/strong>\u00a0\u0412\u044b\u0432\u043e\u0434 \u043e TCP \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a MiniMax-M3, \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 sglang\/mooncake \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0444\u0430\u0443\u043d\u0434\u0435\u0440\u044b \u043c\u043e\u0434\u0435\u043b\u0438.<\/strong>\u00a0\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u043b\u0438 layout \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<h3>6. \u0427\u0442\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440<\/h3>\n<h4>\u0418\u0437\u043c\u0435\u0440\u044f\u0442\u044c end-to-end<\/h4>\n<ul>\n<li>\n<p>\u0421\u0447\u0438\u0442\u0430\u0442\u044c TTFT, TPOT \u0438 failure rate \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 KV \u0434\u0435\u043b\u044c\u0442\u043e\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 IB \u0438 Ethernet \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 input, \u0434\u043b\u0438\u043d\u043d\u044b\u0439 output \u0438 \u0438\u0445 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0435 \u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/h4>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c cold-run: 4,1-4,3 \u0441 \u043f\u0440\u043e\u0442\u0438\u0432 0,41-0,43 \u0441 TTFT.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u0432\u0438\u0442\u044c health-gate \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043c\u0451\u0440\u0442\u0432\u044b\u0439 prefill.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c transport tuning \u0438 \u0441\u043c\u0435\u043d\u0443 attention backend.<\/p>\n<\/li>\n<\/ul>\n<p>C\u043f\u0430\u0441\u0438\u0431\u043e. \u0410 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/llmcrew.org\/wiki\/pd-disaggregation-kv-transport\" rel=\"noopener nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1094076\/\">https:\/\/habr.com\/ru\/articles\/1094076\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u0430\u0445 \u0438 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0441 Habr.\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 KV-\u043a\u044d\u0448\u0430 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c disaggregated inference, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0430\u0434\u0438\u0438 prefill \u0438 decode \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 GPU-\u0443\u0437\u043b\u0430\u0445. \u041d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0443\u0437\u043b\u043e\u0432 \u0441 \u0432\u043e\u0441\u0435\u043c\u044c\u044e NVIDIA B200 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f RDMA\/InfiniBand \u0441 GPUDirect \u0438 TCP\/Ethernet \u0432 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0435 MiniMax-M3 \u0447\u0435\u0440\u0435\u0437 sglang. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f: \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438 (L0), \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 microbenchmark transfer engine (L0b), \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432 (L1) \u0438 end-to-end \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (L2\/L3). \u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e 268 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432.TL;DR \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 M1 RDMA\/InfiniBand \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u043d\u044b\u0439 TTFT \u0432 5,4-11,5 \u0440\u0430\u0437\u0430 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b output throughput \u0432 2,8-3,8 \u0440\u0430\u0437\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445. TPOT \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u043c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435\u00a0prefill -&gt; decode, \u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u0446\u0438\u043a\u043b\u0435 decode. TCP \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u043c \u0432 31 \u0438\u0437 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (41%); \u0432\u0441\u0435 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 IB \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b. \u041f\u043e \u043b\u043e\u0433\u0430\u043c \u043e\u0442\u043a\u0430\u0437 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 CUDA memory (out of memory), \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c KV-transfer, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e prefill \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u0430 router \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 HTTP 503. \u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 microbenchmark \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u043e\u0442\u043a\u0430\u0437 TCP \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e GPUDirect \u043d\u0430\u0434 host staging \u043d\u0430 6,3-6,5%.End-to-end \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u043d\u0430\u0441\u044b\u0449\u0430\u043b \u043d\u0438 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0430\u0431\u0440\u0438\u043a: TCP \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 8,7 \u0413\u0431\u0438\u0442\/\u0441 \u0438\u0437 200 \u0413\u0431\u0438\u0442\/\u0441, InfiniBand \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c 52,4-61,7 \u0413\u0431\u0438\u0442\/\u0441 \u0438\u0437 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 2933 \u0413\u0431\u0438\u0442\/\u0441 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e L0-\u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 NDR-\u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 &#8212; host staging \u043f\u0440\u043e\u0442\u0438\u0432 zero-copy GPUDirect, &#8212; \u0430 \u043d\u0435 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u044b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f attention backend \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 TTFT \u043d\u0430 33,5-44,4% \u0443\u00a0triton\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0fa4, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0438 \u043f\u0443\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 layouts KV \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 production-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u0445.\u0412\u044b\u0432\u043e\u0434:\u00a0\u0432 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440 KV-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c PD-\u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430. TCP \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 fallback \u0434\u043b\u044f \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 MiniMax-M3.1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 LLM \u043d\u0430 \u0434\u0432\u0435 \u0441\u0442\u0430\u0434\u0438\u0438. \u041d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438\u00a0prefill\u00a0\u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 KV-\u043a\u044d\u0448 attention. \u041d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438\u00a0decode\u00a0\u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041f\u0440\u0438 PD-disaggregation \u0441\u0442\u0430\u0434\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 GPU-\u0443\u0437\u043b\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0430\u0448\u0438\u043d\u044b.\u0422\u0430\u043a\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c inference KV \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u043b\u0438 \u0443\u0437\u043b\u0430; \u0432 PD-\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 KV \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 VRAM \u0432 host memory, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\u0426\u0435\u043b\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f &#8212; \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043b\u0438 TCP \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c KV-\u043a\u044d\u0448\u0435\u043c.1.1. \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b\u041a\u0430\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 KV \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TTFT, TPOT, E2E latency \u0438 throughput?\u041f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430\/\u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 TCP \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c?\u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 staging path?\u0414\u0430\u0451\u0442 \u043b\u0438 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432\u044b\u0431\u043e\u0440 backend&#8217;\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u043c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 mooncake \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0430 attention backend?1.2. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0413\u0438\u043f\u043e\u0442\u0435\u0437\u0430\u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438H1\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432\u043b\u0438\u044f\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 TTFT, \u0430 \u043d\u0435 \u043d\u0430 TPOT\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 TTFT \u0438 TPOTH2\u0414\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f TCP \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c KV-\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430\u041f\u0440\u043e\u0444\u0438\u043b\u0438 ISL\/OSL \u0438 concurrencyH3GPUDirect \u0431\u044b\u0441\u0442\u0440\u0435\u0435 host stagingVRAM \u043f\u0440\u043e\u0442\u0438\u0432 DRAM \u0432 L0bH4TCP \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d LACP-\u0445\u044d\u0448\u0435\u043c \u0438\u043b\u0438 \u043f\u043e\u043b\u043e\u0441\u043e\u0439 EthernetEnd-to-end rate \u043f\u0440\u043e\u0442\u0438\u0432 L0\/L1H5RDMA \u0434\u0430\u0451\u0442 \u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 prefill\u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 M1-\u043f\u0440\u043e\u0433\u043e\u043d\u044bH6fake\u00a0\u0434\u0430\u0451\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 TPOT, \u043d\u043e \u0445\u0443\u0434\u0448\u0438\u0439 TTFT (decode \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043b\u043b)\u0417\u0430\u043f\u0443\u0441\u043a\u00a0fake\u00a0backend \u0432 PD-\u0440\u0435\u0436\u0438\u043c\u0435H7\u041c\u0438\u043a\u0440\u043e-\u0442\u044e\u043d\u0438\u043d\u0433 \u0434\u0430\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 10%OFAT \u043f\u043e sglang \u0438 mooncakeH8nixl\/UCX \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0441 mooncake \u043d\u0430 RDMAM2 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u04452. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b2.1. \u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0414\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:\u00a0node-a\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430 prefill \u0438 router,\u00a0node-b\u00a0&#8212; decode. \u041a\u0430\u0436\u0434\u0430\u044f \u0440\u043e\u043b\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 tensor parallelism\u00a0TP=8\u00a0\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 B200. \u0418\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432, \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0438\u043c\u0435\u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u044b.PD-disaggregation\u00a0(prefill\/decode disaggregation) \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0435 \u0444\u0430\u0437\u044b \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c GPU-\u0443\u0437\u043b\u0430\u043c: prefill \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043b\u043b \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0438 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u0435\u0433\u043e KV-\u043a\u044d\u0448\u0435\u043c, decode \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u043e\u0442 \u043a\u044d\u0448. \u041c\u0435\u0436\u0434\u0443 \u0444\u0430\u0437\u0430\u043c\u0438 KV-\u043a\u044d\u0448 (\u0435\u0434\u0438\u043d\u0438\u0446\u044b-\u0441\u043e\u0442\u043d\u0438 \u041c\u0438\u0411 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441) \u0434\u043e\u043b\u0436\u0435\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u0441 \u0443\u0437\u043b\u0430 prefill \u043d\u0430 \u0443\u0437\u0435\u043b decode &#8212; \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 decode \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0443\u0442\u0438 TTFT, \u043d\u043e \u043d\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (TPOT), \u0433\u0434\u0435 KV \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0432\u043e\u0435\u0439 \u043d\u043e\u0434\u044b.\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f PD-disaggregation: prefill \u0438 decode \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 TP8-\u0443\u0437\u043b\u0430\u0445; \u043f\u043e\u0441\u043b\u0435 prefill KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 decode.\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f prefill KV-\u043a\u044d\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043d\u0430 decode. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c RDMA\/InfiniBand \u0447\u0435\u0440\u0435\u0437 \u0432\u043e\u0441\u0435\u043c\u044c NDR-\u043f\u043e\u0440\u0442\u043e\u0432 400G \u0441 GPUDirect \u0438 TCP\/Ethernet \u0447\u0435\u0440\u0435\u0437\u00a0bond0, LACP 2x100G, MTU 9000.2.2. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435GPU2 \u0443\u0437\u043b\u0430 \u00d7 8 NVIDIA B200\u041c\u043e\u0434\u0435\u043b\u044cMiniMax-M3 MXFP8, 31 shard, 443 771 536 556 \u0431\u0430\u0439\u0442Enginesglang\u00a00.0.0.dev1+g56e290315MoE backenddeep_gemmAttention backendfa4, page size 128KV backend M1mooncakeRDMANDR 400G, HCA\u00a0mlx5_4,7,8,9,10,13,14,15Ethernetbond0, LACP 802.3ad, 2 \u00d7 100GCUDA \/ OFEDCUDA 13.0.1 \/ MLNX-OFED 24.10\u0411\u0430\u0437\u043e\u0432\u044b\u0439 runtimemem-fraction-static=0.85, chunked prefill 8192, max running requests 20,\u00a0lpm\u0414\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438\u00a0pycache\u00a0\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 TorchInductor cache. Content-addressed diffID \u0432\u0441\u0435\u0445 64 \u0441\u043b\u043e\u0451\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u043d\u043e\u0434\u0430\u0445.2.3. \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 M1 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043f\u044f\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 ISL\/OSL, \u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f concurrency \u0438 \u043f\u044f\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432.\u041f\u0440\u043e\u0444\u0438\u043b\u044c ISL\/OSL\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435128\/128\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0445\u043e\u0434 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u044b\u0445\u043e\u04342048\/256\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c8192\/256\u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u043432768\/256\u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u04342048\/2048\u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u0412\u0441\u0435\u0433\u043e M1:\u00a05 \u00d7 3 \u00d7 5 \u00d7 2 = 150\u00a0\u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b M2, \u043e\u0441\u044c D (18 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 sglang), \u043e\u0441\u044c C (13 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 mooncake), \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u00a0fa4\/triton\u00a0\u0438 L0\/L0b. \u0412\u00a0summary.json\u00a0&#8212; 268 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.2.4. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438\u041f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0436\u0451\u0441\u0442\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 orphan-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0421\u0442\u0435\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 prefill \u2192 decode \u2192 router. \u041f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0432 MSA JIT, HF processor \u0438 warmup-\u0437\u0430\u043f\u0440\u043e\u0441. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00a0seed=1234,\u00a0num-prompts=32\u00a0\u0438 \u043f\u044f\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443.\u0412 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 M1 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0441\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0433\u043e\u043d \u0441 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c TTFT \u0432\u044b\u0448\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c output throughput. \u041e\u0442\u043a\u0430\u0437\u044b \u0441\u00a0ttft=0\u00a0\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0432 \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 failure-rate \u0438 heatmap. \u0414\u043b\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u0435\u0434\u0438\u0430\u043d\u044b, \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u0440\u043e\u0441.\u0422\u0435\u0440\u043c\u0438\u043d\u044b \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432.\u00a0HCA\u00a0(Host Channel Adapter) &#8212; \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 InfiniBand, \u044f\u0434\u0440\u043e \u0432\u0438\u0434\u0438\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u00a0mlx5_N.\u00a0NDR\u00a0= 400 \u0413\u0431\u0438\u0442\/\u0441 \u043d\u0430 \u043f\u043e\u0440\u0442,\u00a0HDR\u00a0= 100 \u0413\u0431\u0438\u0442\/\u0441 &#8212; \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 IB.\u00a0PIX-local\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438 GPU \u0432\u0438\u0441\u044f\u0442 \u043f\u043e\u0434 \u043e\u0431\u0449\u0438\u043c PCIe-switch: \u043a\u043e\u043f\u0438\u044f VRAM\u2192HCA \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f GPUDirect.\u00a0bond0\u00a0&#8212; \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Ethernet-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0437\u043b\u0430 (Linux bonding): \u0434\u0432\u0430 \u043f\u043e\u0440\u0442\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u043f\u043e LACP 802.3ad \u0432 \u043e\u0434\u0438\u043d \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u043d\u0430\u043b 2 \u00d7 100G \u0441 MTU 9000. \u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438\u00a0bond0\u00a0\u0438 IB-\u043f\u043e\u0440\u0442\u043e\u0432\u00a0mlx5_*\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e \u0438\u0445 \u0434\u0435\u043b\u044c\u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 KV (\u0440\u0430\u0437\u0434\u0435\u043b 3.3).\u0423\u0440\u043e\u0432\u0435\u043d\u044c\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044bL0ib_write_bw,\u00a0ib_write_lat\u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438, latencyL0btransfer_engine_benchGDR\/host staging, read\/write, statusL1IB counters,\u00a0bond0\u0434\u0435\u043b\u044c\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432L2\/metrics\u00a0sglangalloc\/bootstrap KV-transferL3bench_servingTTFT, TPOT, ITL (inter-token latency), E2E, tok\/sL0 \u0438 L0b \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442 \u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0447\u0438\u043a \u0432 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 (L0 &#8212; \u043f\u043e\u043b\u043e\u0441\u0443 IB \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439\u00a0ib_write_bw\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 sglang; L0b &#8212;\u00a0transfer_engine_bench\u00a0\u0431\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u0438). L1-L3 &#8212; end-to-end: L1 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u043f\u043e\u0448\u0451\u043b \u0431\u0430\u0439\u0442, L2 \u0431\u0435\u0440\u0451\u0442 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e \u0434\u0432\u0438\u0436\u043a\u0430, L3 &#8212; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. IB-\u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438\u00a0PortXmitData\/PortRcvData\u00a0\u043e\u0442\u0434\u0430\u044e\u0442\u0441\u044f \u0432 4-\u0431\u0430\u0439\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0445 (\u00d74 \u0434\u043b\u044f \u0431\u0430\u0439\u0442); \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b\u00a0ib_tx\/bond_tx\u00a0&#8212; \u043f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d (after &#8212; before), \u0430 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430.3. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b3.1. End-to-end \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430\u041f\u0440\u0438 concurrency=8 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0434\u0438\u0430\u043d\u044b. \u0417\u0434\u0435\u0441\u044c TTFT &#8212; \u0432\u0440\u0435\u043c\u044f \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430, TPOT &#8212; \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b.\u041f\u0440\u043e\u0444\u0438\u043b\u044cIB TTFT, \u043c\u0441TCP TTFT, \u043c\u0441\u0412\u044b\u0438\u0433\u0440\u044b\u0448 IBIB tok\/sTCP tok\/s\u0412\u044b\u0438\u0433\u0440\u044b\u0448 IB128\/128451.82427.85.4\u00d7414.7128.43.2\u00d72048\/256398.24575.511.5\u00d7519.2182.22.8\u00d78192\/256554.03215.55.8\u00d7495.7130.43.8\u00d7\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 TTFT \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 KV \u0438 bootstrap, \u043d\u043e \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c decode-\u0446\u0438\u043a\u043b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 TPOT \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b 10.8-11.7 \u043c\u0441 \u0434\u043b\u044f IB \u0438 10.0-10.5 \u043c\u0441 \u0434\u043b\u044f TCP; \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e TCP \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0432.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. TTFT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8, \u0443\u0441\u044b &#8212; IQR. \u0421\u0435\u0440\u0438\u0438: RDMA \/ IB &#8212; RDMA\/InfiniBand NDR 400G; TCP \/ Ethernet &#8212; Ethernet bond0, LACP 2 \u00d7 100G.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. TPOT \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u0430 (isl\/osl). \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0438 conc=8. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 H1: \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 TPOT; \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043d\u0430 \u0420\u0438\u0441\u0443\u043d\u043a\u0435 1.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438: output \u0438 total tok\/s \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f 2048\/256. TCP-\u043e\u0442\u043a\u0430\u0437\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0443\u043b\u044f\u043c\u0438.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041c\u0435\u0442\u0440\u0438\u043a\u0438 KV-transfer engine (M1, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0434\u0435\u043b\u044c\u0442\u0430 \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d): prefill &#8212; GB\/s \u0438 \u043c\u0441\/\u043e\u043f, decode &#8212; bootstrap, \u043c\u0441\/\u043e\u043f. speed\/latency\/total_mb \u043e\u0442\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0430\u044f (prefill) \u0441\u0442\u043e\u0440\u043e\u043d\u0430; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f (decode) &#8212; \u0442\u043e\u043b\u044c\u043a\u043e bootstrap\/alloc.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 RDMA\/IB \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e TCP, %. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e IB; conc=8.3.2. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 TCP\u0412\u0441\u0435 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 IB \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b. \u0414\u043b\u044f TCP 44 \u0438\u0437 75 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0431\u044b\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b, \u0430 31&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-498532","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=498532"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498532\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=498532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=498532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=498532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}