化:用NVIDIA Dynamo解決GPU利用率與請(qǐng)求調(diào)度難題)
這兩年做大模型推理優(yōu)化的朋友應(yīng)該都遇到過同一個(gè)讓人撓頭的問題GPU買了一堆賬面顯示利用率不低但線上請(qǐng)求的時(shí)延卻時(shí)好時(shí)壞甚至高峰期整體吞吐直接腰斬。我把這個(gè)問題看成“車多路少?zèng)]有交警”。直到我把NVIDIA Dynamo這套推理協(xié)調(diào)框架引入實(shí)際部署后才發(fā)現(xiàn)原來AI推理的瓶頸不只在GPU算力上更在請(qǐng)求調(diào)度、資源編排和中間狀態(tài)復(fù)用的配合上。這篇我就用“智能交通指揮官”的視角把Dynamo是什么、能解決什么問題、怎么落地、遇到過哪些坑一次講清楚。Dynamo不是某個(gè)具體的推理引擎而是一層介于請(qǐng)求入口和GPU推理引擎之間的分布式協(xié)調(diào)層。它做的事情很像路口交警知道哪個(gè)方向車多、哪條車道空著然后動(dòng)態(tài)決定每輛車該走哪條路、什么時(shí)候放行、哪些車可以共享同一條車道。放在AI推理場(chǎng)景里“車輛”是一個(gè)個(gè)推理請(qǐng)求“車道”是GPU上不同計(jì)算單元“共享車道”則是KV Cache的復(fù)用。適合讀這篇的人主要是已經(jīng)在做推理服務(wù)部署、被GPU利用率不穩(wěn)定困擾的開發(fā)者以及準(zhǔn)備從單機(jī)推理走向多卡集群的團(tuán)隊(duì)。1. Dynamo到底在調(diào)什么度先看清推理瓶頸在哪1.1 一個(gè)長(zhǎng)期被忽視的“等待問題”大模型推理和傳統(tǒng)深度學(xué)習(xí)推理有個(gè)非常不一樣的地方它不是一次前向計(jì)算就結(jié)束而是先把用戶的輸入處理一遍這個(gè)階段叫預(yù)填充計(jì)算密集接著進(jìn)入逐token生成階段這個(gè)階段叫解碼每一步都強(qiáng)依賴前一步的結(jié)果串行感很強(qiáng)。很多團(tuán)隊(duì)最初部署時(shí)習(xí)慣把整個(gè)請(qǐng)求丟給一張卡讓它從頭跑到尾。這樣做的好處是邏輯簡(jiǎn)單壞處也很明顯如果這個(gè)請(qǐng)求的輸入特別長(zhǎng)預(yù)填充階段就會(huì)占用大量算力其他排隊(duì)的請(qǐng)求只能干等著。如果所有請(qǐng)求都這么混在一起跑GPU的計(jì)算單元看起來沒閑著但實(shí)際有效token產(chǎn)出并不高用戶端的首token延遲還忽高忽低。我見過不少線上服務(wù)的GPU平均利用率看著有七八成可每秒產(chǎn)出的token數(shù)遠(yuǎn)低于預(yù)期問題就出在這種“傻等”上。Dynamo最核心的出發(fā)點(diǎn)就是把這個(gè)“等待問題”顯式拿到調(diào)度層面來解決。它不自己算模型而是通過一套控制面機(jī)制把請(qǐng)求拆到不同的執(zhí)行階段、分給不同的GPU資源讓預(yù)填充階段的計(jì)算密集型任務(wù)和解碼階段的訪存密集型任務(wù)不再互相擠占。用交通的比喻來說以前的方案是所有車共用一條路紅燈一亮全都停Dynamo的做法是分出直行車道和轉(zhuǎn)彎車道分別放行互不拖累。1.2 傳統(tǒng)方案為什么不夠用可能有人會(huì)說我們之前用負(fù)載均衡器加推理框架的批處理不也能跑嗎確實(shí)能跑但有幾個(gè)深層問題解決不了。第一個(gè)問題是負(fù)載均衡器只能看到連接層面的信息它不知道每個(gè)GPU當(dāng)前到底有多少活躍請(qǐng)求、每個(gè)請(qǐng)求還剩多少token要生成。于是很容易出現(xiàn)“流量剛好打到一臺(tái)滿負(fù)荷的機(jī)器旁邊一臺(tái)空置機(jī)器卻拿不到新請(qǐng)求”的情況。第二個(gè)問題更隱蔽傳統(tǒng)方案把KV Cache留在某個(gè)GPU的顯存里后續(xù)這個(gè)請(qǐng)求如果被路由到另一張卡就得從頭重新預(yù)填充。這在跨卡調(diào)度時(shí)幾乎是致命的白白浪費(fèi)算力和時(shí)間。第三個(gè)問題是批處理策略太靜態(tài)。推理框架雖然能把多個(gè)請(qǐng)求合并成一個(gè)batch但batch里的請(qǐng)求長(zhǎng)度和進(jìn)度差距一大整批吞吐就被最慢的那個(gè)拖死。Dynamo的做法不是替代這些框架而是把它們納入自己的調(diào)度體系。請(qǐng)求進(jìn)來后先由Dynamo的調(diào)度層決定“誰(shuí)來干預(yù)填充”“誰(shuí)來干解碼”同時(shí)把KV Cache當(dāng)作可流轉(zhuǎn)的資源高速傳輸?shù)较乱粋€(gè)執(zhí)行節(jié)點(diǎn)。這樣一來負(fù)載不再是一次性分配到某個(gè)GPU而是在推理過程中動(dòng)態(tài)調(diào)整誰(shuí)空誰(shuí)干、誰(shuí)適合干什么就干什么。2. “指揮官”的核心設(shè)計(jì)拆解2.1 三層結(jié)構(gòu)指揮面、交通面、執(zhí)行面要理解Dynamo我建議先把它在概念上拆成三個(gè)層面。指揮面是運(yùn)行在CPU上的控制邏輯負(fù)責(zé)接收推理請(qǐng)求、維護(hù)全局隊(duì)列、記錄每個(gè)GPU節(jié)點(diǎn)的實(shí)時(shí)負(fù)載和健康狀態(tài)然后根據(jù)策略決定請(qǐng)求該去哪個(gè)節(jié)點(diǎn)、執(zhí)行哪個(gè)階段。這一層本身不碰模型權(quán)重但對(duì)系統(tǒng)穩(wěn)定性的影響最大因?yàn)樗坏┛ㄗ≌麄€(gè)集群都會(huì)停擺。交通面是請(qǐng)求和中間狀態(tài)的數(shù)據(jù)通路重點(diǎn)在KV Cache的流轉(zhuǎn)。某個(gè)請(qǐng)求在預(yù)填充節(jié)點(diǎn)生成完整的KV Cache后這個(gè)緩存會(huì)被打包傳到解碼節(jié)點(diǎn)解碼節(jié)點(diǎn)直接基于收到的Cache繼續(xù)生成后續(xù)token不需要重新計(jì)算前面的內(nèi)容。這個(gè)過程中傳輸效率、壓縮策略、目標(biāo)節(jié)點(diǎn)選擇全由交通面負(fù)責(zé)。執(zhí)行面才是真正跑模型的GPU節(jié)點(diǎn)。Dynamo會(huì)為每個(gè)節(jié)點(diǎn)標(biāo)注它當(dāng)前更擅長(zhǎng)處理哪種負(fù)載并按需調(diào)整節(jié)點(diǎn)的職責(zé)。實(shí)際部署中同一個(gè)節(jié)點(diǎn)可以動(dòng)態(tài)承擔(dān)預(yù)填充和解碼任務(wù)也可以固定為某一種角色。這個(gè)靈活性正是動(dòng)態(tài)調(diào)度的價(jià)值所在。提示我在剛開始接觸Dynamo時(shí)總想把它當(dāng)成一個(gè)推理框架去配置后來才意識(shí)到它更像一個(gè)“資源編排框架”。它的配置重點(diǎn)不在于模型參數(shù)而在于節(jié)點(diǎn)角色、隊(duì)列策略、傳輸通道和監(jiān)控上報(bào)。2.2 KV Cache的“共享出行”邏輯KV Cache是大模型自回歸解碼過程中保存的歷史注意力狀態(tài)。如果請(qǐng)求被調(diào)度到另一張卡而這份狀態(tài)沒有一起走那一切從零開始這顯然不可接受。Dynamo把KV Cache當(dāng)成一種可以跨節(jié)點(diǎn)共享的資源這就是我前面說的“共享車道”。你可以想象一個(gè)多輛拼車的場(chǎng)景一個(gè)請(qǐng)求生成完前面一部分內(nèi)容后在A卡上已經(jīng)付出了大量預(yù)填充算力這個(gè)“已經(jīng)處理到哪一步”的結(jié)果不應(yīng)該丟掉。Dynamo會(huì)先把這輛車開到下一個(gè)路口前把臨時(shí)放下的貨物通過高速通路搬到另一輛車上讓車?yán)^續(xù)往前走。這套機(jī)制對(duì)長(zhǎng)上下文場(chǎng)景尤其重要。輸入一長(zhǎng)預(yù)填充代價(jià)就高如果不能復(fù)用KV Cache每一次跨卡遷移都意味著把用戶輸入從頭再算一遍延遲和成本都會(huì)直線上升。當(dāng)然KV Cache傳輸不是沒有成本的。數(shù)據(jù)量越大網(wǎng)絡(luò)傳輸時(shí)間越長(zhǎng)。所以Dynamo的調(diào)度策略里會(huì)考慮當(dāng)前節(jié)點(diǎn)間的高速互聯(lián)條件盡量讓請(qǐng)求在拓?fù)渖舷噜彽墓?jié)點(diǎn)之間遷移。如果兩個(gè)節(jié)點(diǎn)之間只有普通網(wǎng)絡(luò)強(qiáng)行傳Cache反而得不償失。這個(gè)“該不該傳、傳到哪”的判斷就是調(diào)度策略的價(jià)值所在。2.3 預(yù)填充與解碼分離讓“指揮”起作用的關(guān)鍵Dynamo最值得講的設(shè)計(jì)是預(yù)填充與解碼的分離這也是很多人嘴里常說的PD分離。這個(gè)分離不是簡(jiǎn)單的“不同節(jié)點(diǎn)跑不同階段”而是把它做成了一種動(dòng)態(tài)的、可編排的狀態(tài)。預(yù)填充階段的特點(diǎn)是計(jì)算密集適合用高算力的節(jié)點(diǎn)集中處理解碼階段的特點(diǎn)是訪存密集顯存帶寬決定它能并行處理多少路請(qǐng)求。如果兩者混在一起GPU會(huì)不斷在兩種模式間切換調(diào)度器也很難為每一類工作單獨(dú)優(yōu)化batch策略。拆開之后預(yù)填充節(jié)點(diǎn)可以讓batch盡量吃滿算力解碼節(jié)點(diǎn)則根據(jù)剩余顯存調(diào)度更多并發(fā)請(qǐng)求雙方都能得到更純粹的優(yōu)化。我聽一個(gè)做部署的朋友說過一個(gè)觀察同樣的GPU集群?jiǎn)⒂肞D分離后首token延遲和單token生成間隔都穩(wěn)定了不少。原因也很簡(jiǎn)單每個(gè)節(jié)點(diǎn)只做一種主要工作狀態(tài)更可控競(jìng)態(tài)和互相阻塞明顯變少。Dynamo的調(diào)度器會(huì)根據(jù)實(shí)時(shí)隊(duì)列情況動(dòng)態(tài)決定是否把一個(gè)請(qǐng)求的預(yù)填充和解碼放到同一條路徑上完成而不像手動(dòng)部署那樣必須預(yù)先分死。這也是它比傳統(tǒng)靜態(tài)分工更聰明的地方。3. 從集群到服務(wù)一套可參考的部署配置3.1 節(jié)點(diǎn)規(guī)劃與角色分配紙上談兵夠了說點(diǎn)落地的。我本人在給一個(gè)模擬項(xiàng)目X做推理性能優(yōu)化時(shí)一開始只在小規(guī)模集群上試Dynamo。節(jié)點(diǎn)規(guī)劃是最先要做的決定。我采用的方案是單獨(dú)拿一臺(tái)不帶GPU的CPU節(jié)點(diǎn)跑Dynamo的控制面它只負(fù)責(zé)調(diào)度決策和狀態(tài)維護(hù)實(shí)際推理集群由若干GPU節(jié)點(diǎn)組成每個(gè)節(jié)點(diǎn)上的推理引擎各負(fù)擔(dān)一部分流量。為了避免控制面成為單點(diǎn)故障我給它預(yù)設(shè)了備用切換機(jī)制但前期并沒有做太復(fù)雜的多活先把功能驗(yàn)證通過再說。GPU節(jié)點(diǎn)的角色分配我建議根據(jù)流量畫像來定。如果線上輸入普遍很長(zhǎng)預(yù)填充壓力大就應(yīng)該多配預(yù)填充節(jié)點(diǎn)如果用戶多、輸出長(zhǎng)解碼節(jié)點(diǎn)要留足顯存。Dynamo允許動(dòng)態(tài)調(diào)整但初始比例最好踩準(zhǔn)否則調(diào)度器再智能資源基底不匹配也白搭。注意Dynamo的控制面與執(zhí)行面之間的健康檢查非常重要。我一開始沒有把心跳間隔調(diào)整好導(dǎo)致某個(gè)GPU節(jié)點(diǎn)已經(jīng)半死不活調(diào)度器還在往里派請(qǐng)求造成一連串超時(shí)。用默認(rèn)值前先確認(rèn)節(jié)點(diǎn)數(shù)量和數(shù)據(jù)規(guī)模是否匹配。3.2 關(guān)鍵參數(shù)怎么定Dynamo這類系統(tǒng)公開配置不一定有固定的標(biāo)準(zhǔn)答案但有幾個(gè)參數(shù)是普遍要關(guān)注的。第一是批大小上限。每個(gè)節(jié)點(diǎn)允許的batch越大GPU算力越容易用滿但過大會(huì)導(dǎo)致單請(qǐng)求長(zhǎng)尾阻塞加重因?yàn)閎atch里所有請(qǐng)求要等最慢的那個(gè)完成調(diào)度。我傾向于給預(yù)填充節(jié)點(diǎn)和解碼節(jié)點(diǎn)分別設(shè)置不同的批大小上限不要全用同一個(gè)值。第二是隊(duì)列深度。調(diào)度器維護(hù)的等待隊(duì)列如果太長(zhǎng)說明下游處理能力已到瓶頸這時(shí)候哪怕調(diào)度策略再優(yōu)秀請(qǐng)求也是在排隊(duì)。觀察隊(duì)列平均深度可以作為擴(kuò)容的第一信號(hào)。第三是KV Cache傳輸開關(guān)。默認(rèn)打開不一定好。節(jié)點(diǎn)間互聯(lián)條件差的時(shí)候傳Cache可能比重新預(yù)填充還慢。我通常會(huì)在兩種模式下分別壓測(cè)再?zèng)Q定哪些請(qǐng)求走Cache遷移哪些請(qǐng)求直接重算。第四是并發(fā)上限的伸縮策略。Dynamo支持動(dòng)態(tài)擴(kuò)縮但擴(kuò)得太快會(huì)讓新節(jié)點(diǎn)剛上來就收到一堆冷請(qǐng)求Cache命中率很低反而拖慢整體。我一般把擴(kuò)容步長(zhǎng)控制在小步快跑每輪新增一個(gè)節(jié)點(diǎn)觀察一兩分鐘再?zèng)Q定是否繼續(xù)擴(kuò)。3.3 接入推理框架后的第一份配置示例下面這個(gè)配置不是某個(gè)產(chǎn)品的官方模板而是我基于常見做法整理的一份抽象示例給你感受一下配置長(zhǎng)什么樣control-plane: listen_port: 調(diào)度端口 heartbeat_interval: 5s health_check_enabled: true execution-group: nodes: - node_role: prefill gpu_count: 2 max_batch_size: 32 queue_depth_threshold: 24 - node_role: decode gpu_count: 4 max_batch_size: 64 kv_cache_transfer: true cache_transport: 高速互聯(lián)通道 routing: policy: least_loaded route_key: 按業(yè)務(wù)線區(qū)分 fallback_to_local: true preempt_enabled: false metrics: export_interval: 10s collect_queue_depth: true collect_gpu_utilization: true collect_kv_cache_miss: true接入時(shí)最需要注意的是統(tǒng)一出口入口。推理請(qǐng)求先打到控制面再由控制面分發(fā)而不是讓客戶端直接訪問某個(gè)GPU節(jié)點(diǎn)。我開始時(shí)圖省事讓一個(gè)測(cè)試客戶端直連了解碼節(jié)點(diǎn)結(jié)果流量分布完全亂了調(diào)度器根本無(wú)從下手。所有請(qǐng)求都必須走Dynamo的入口調(diào)度器才能看見全局調(diào)度策略才有意義。接入后先跑一輪小流量壓測(cè)重點(diǎn)看隊(duì)列深度和各類節(jié)點(diǎn)利用率。如果某個(gè)節(jié)點(diǎn)一直空閑但在控制面負(fù)載指標(biāo)里顯示繁忙先檢查指標(biāo)上報(bào)是否有問題不要急著調(diào)調(diào)度策略。4. 實(shí)際運(yùn)行中的問題與排查實(shí)錄4.1 流量不均某卡閑出病某卡排隊(duì)等死最典型的問題是流量?jī)A斜。現(xiàn)象是某個(gè)解碼節(jié)點(diǎn)隊(duì)列深度長(zhǎng)期偏高、另一個(gè)節(jié)點(diǎn)顯存占用偏低但控制面派過來的請(qǐng)求仍然大量落在高負(fù)載節(jié)點(diǎn)上。一開始我懷疑是健康指標(biāo)上報(bào)延遲后來仔細(xì)看才發(fā)現(xiàn)是調(diào)度策略把請(qǐng)求都按同一個(gè)哈希規(guī)則分配到少數(shù)節(jié)點(diǎn)上去了很多請(qǐng)求因?yàn)闃I(yè)務(wù)標(biāo)簽分類過粗?jǐn)D在了同一批次里。排查思路分兩步第一步先關(guān)閉自定義路由鍵改用最簡(jiǎn)單的輪詢策略看看流量能否分散。如果分散了說明路由鍵粒度有問題需要調(diào)整分類維度。第二步如果輪詢下流量一樣不均檢查節(jié)點(diǎn)上報(bào)的負(fù)載指標(biāo)是否準(zhǔn)確特別是在高并發(fā)時(shí)指標(biāo)是否被人為壓低。我最后就是通過增加更細(xì)粒度的業(yè)務(wù)分類讓請(qǐng)求能更均勻地散到各個(gè)節(jié)點(diǎn)問題才緩解。這個(gè)問題的教訓(xùn)是調(diào)調(diào)度策略之前先確認(rèn)數(shù)據(jù)源的準(zhǔn)確性。錯(cuò)的山路地圖是導(dǎo)不出正確路線的。4.2 KV Cache遷移失敗KV Cache遷移失敗是我踩過最深的坑之一。現(xiàn)象是啟用跨節(jié)點(diǎn)遷移后部分長(zhǎng)輸入請(qǐng)求的延遲反而飆升監(jiān)控里能看到大量“傳輸中斷”的記錄。查到最后發(fā)現(xiàn)原因有兩層。一層是目標(biāo)節(jié)點(diǎn)的顯存不足。預(yù)填充節(jié)點(diǎn)上生成的Cache體積跟輸入長(zhǎng)度強(qiáng)相關(guān)有些長(zhǎng)文檔的Cache非常大目標(biāo)節(jié)點(diǎn)剩余顯存不夠放傳輸就卡在半路。后來的處理方式是在調(diào)度器里顯式設(shè)置Cache體積閾值超過閾值的請(qǐng)求不參與跨節(jié)點(diǎn)遷移就地解碼。另一層是網(wǎng)絡(luò)配置問題。節(jié)點(diǎn)間高速互聯(lián)鏈路沒有實(shí)際打通比如某些交換機(jī)端口協(xié)商成了低速模式表面配置對(duì)實(shí)際帶寬卻不夠用。我用一個(gè)簡(jiǎn)單的傳輸測(cè)試腳本直接發(fā)送一個(gè)固定大小的數(shù)據(jù)塊觀察往返時(shí)間才定位到鏈路問題。修網(wǎng)絡(luò)之后Cache遷移的耗時(shí)直接降了一個(gè)數(shù)量級(jí)。提示KV Cache遷移不是越快越好。遷移前先確認(rèn)目標(biāo)節(jié)點(diǎn)有足夠顯存、鏈路可用、Cache體積閾值合理三者缺一個(gè)就不要開跨節(jié)點(diǎn)遷移。4.3 顯存碎片化與OOM動(dòng)態(tài)批處理開起來后顯存碎片化的問題會(huì)悄悄出現(xiàn)。現(xiàn)象是一段時(shí)間后節(jié)點(diǎn)顯存總量還有富余但新請(qǐng)求總是申請(qǐng)不到連續(xù)顯存直接OOM。Dynamo本身不會(huì)替你去整理顯存但你可以通過調(diào)度策略來減輕壓力。我的處理辦法是給每個(gè)解碼節(jié)點(diǎn)設(shè)置更保守的最大并發(fā)數(shù)寧可讓一部分請(qǐng)求進(jìn)入等待隊(duì)列也不要讓批處理無(wú)限膨脹。同時(shí)把KV Cache的預(yù)分配和淘汰策略統(tǒng)一管理起來。對(duì)超過閾值的老請(qǐng)求在空閑時(shí)主動(dòng)釋放Cache而不是等到顯存耗盡才清理。另外我把每個(gè)節(jié)點(diǎn)的顯存水位作為一個(gè)獨(dú)立指標(biāo)接入了監(jiān)控。水位超過70%就觸發(fā)調(diào)度器降低該節(jié)點(diǎn)的新請(qǐng)求分配權(quán)重留出余量應(yīng)對(duì)突發(fā)流量。這套機(jī)制跑了一周后OOM次數(shù)明顯下降節(jié)點(diǎn)穩(wěn)定性好了很多。4.4 小清單部署Dynamo前必須確認(rèn)的幾件事把這個(gè)清單送給準(zhǔn)備上手的你明確業(yè)務(wù)到底需不需要跨節(jié)點(diǎn)調(diào)度。單機(jī)就能扛住所有流量時(shí)上Dynamo反而增加復(fù)雜度收益很小。確認(rèn)控制面、執(zhí)行面的健康檢查鏈路心跳間隔和超時(shí)時(shí)間要先在測(cè)試環(huán)境摸一遍。節(jié)點(diǎn)間互聯(lián)情況必須實(shí)測(cè)不要只看配置用傳輸測(cè)試腳本跑一遍才算數(shù)。指標(biāo)監(jiān)控先從隊(duì)列深度、GPU利用率、首token延遲、單token生成間隔四個(gè)維度開始?jí)蛴镁秃貌灰簧蟻矶褞资畟€(gè)指標(biāo)。KV Cache遷移先在小流量下開啟觀察一整天再逐步放大。一定要留出資源給控制面別把CPU調(diào)度進(jìn)程跟推理引擎塞在同一臺(tái)高負(fù)載機(jī)器上否則互相干擾會(huì)很難排查。5. 我的幾點(diǎn)體會(huì)與后續(xù)思路5.1 什么時(shí)候別急著上Dynamo這話可能有點(diǎn)得罪人但我還是想直說如果你的推理請(qǐng)求量不大、只有一兩張卡、流量波動(dòng)也不明顯Dynamo這套東西暫時(shí)沒必要上。它解決的是規(guī)模化場(chǎng)景下資源浪費(fèi)和不均的問題規(guī)模沒到那個(gè)量級(jí)調(diào)度帶來的好處會(huì)被額外復(fù)雜度抵消。我在給一個(gè)內(nèi)部小項(xiàng)目做優(yōu)化時(shí)最開始也是抱著“全都要”的心態(tài)去試結(jié)果發(fā)現(xiàn)光是理解控制面和執(zhí)行面的交互就花了不少時(shí)間。后來果斷先退回單節(jié)點(diǎn)方案把推理框架自身的批處理參數(shù)調(diào)到最優(yōu)性能反而上來了。等流量漲到單節(jié)點(diǎn)明顯吃緊再引入Dynamo收益才真正體現(xiàn)出來。5.2 落地順序的最后一句話從我的實(shí)踐看Dynamo的落地順序應(yīng)該是“先有穩(wěn)定單點(diǎn)再談分布式調(diào)度先有準(zhǔn)確指標(biāo)再談策略調(diào)優(yōu)先有小流量驗(yàn)證再談全量灰度”。這條順序我踩過不少坑才總結(jié)出來特別是“指標(biāo)先行”這一步。沒有可靠的延遲和負(fù)載數(shù)據(jù)調(diào)度策略調(diào)一百次也只是在盲調(diào)。后面我還想嘗試的一個(gè)方向是把調(diào)度策略從簡(jiǎn)單的負(fù)載均衡向更細(xì)的時(shí)延感知方向擴(kuò)展結(jié)合業(yè)務(wù)優(yōu)先級(jí)動(dòng)態(tài)調(diào)整請(qǐng)求排隊(duì)順序。Dynamo這種“智能交通指揮官”的架構(gòu)潛力比表面看到的更大它把AI推理從單卡思維拉到了集群調(diào)度思維這才是它真正值得投入時(shí)間去理解的原因。