)
先聊一個(gè)這兩年對(duì)流媒體團(tuán)隊(duì)最現(xiàn)實(shí)的問(wèn)題業(yè)務(wù)側(cè)給過(guò)來(lái)的需求越來(lái)越多除了轉(zhuǎn)碼、切片、分發(fā)還要在鏈路里塞進(jìn)AI畫質(zhì)增強(qiáng)、智能審核、內(nèi)容理解和實(shí)時(shí)剪輯。你第一反應(yīng)可能是“上GPU就完了”但真的把工作負(fù)載拉起來(lái)之后你會(huì)發(fā)現(xiàn)單純堆GPU并不是最優(yōu)解——尤其是當(dāng)業(yè)務(wù)要求的是“高容量”而非“單路極高性能”時(shí)選型邏輯會(huì)完全不一樣。我寫這篇文章核心是圍繞“支持AI視頻處理的高容量流媒體加速卡方案”這條主線從AI視頻處理的典型負(fù)載講起分析加速卡選型的關(guān)鍵邊界給出一套可落地的硬件與軟件架構(gòu)然后把我實(shí)測(cè)下來(lái)真正影響吞吐的瓶頸和運(yùn)維中踩過(guò)的坑一并交代清楚。適合正在做直播、點(diǎn)播、監(jiān)控視頻平臺(tái)的架構(gòu)師或者準(zhǔn)備把AI能力并入視頻生產(chǎn)鏈路的團(tuán)隊(duì)參考。1. 為什么流媒體突然需要“AI視頻處理”級(jí)別的算力視頻直播和點(diǎn)播業(yè)務(wù)前幾年拼的是帶寬和節(jié)點(diǎn)誰(shuí)家CDN節(jié)點(diǎn)覆蓋多、調(diào)度準(zhǔn)、首幀夠快誰(shuí)就占優(yōu)勢(shì)。但最近這兩年的風(fēng)向明顯變了稍有點(diǎn)規(guī)模的內(nèi)容平臺(tái)都開始在算力預(yù)算里單獨(dú)立一項(xiàng)AI視頻處理相關(guān)的工作負(fù)載而且預(yù)算逐年遞增。為什么突然卷到這里因?yàn)楫嬞|(zhì)、內(nèi)容安全和交互體驗(yàn)這三件事已經(jīng)不能靠傳統(tǒng)規(guī)則引擎和人工盯片解決。AI推理在這幾個(gè)環(huán)節(jié)上的效果提升是肉眼可見的不用反而顯得落后。1.1 AI視頻處理到底在處理什么——三個(gè)必須用AI的場(chǎng)景第一個(gè)場(chǎng)景是智能內(nèi)容審核。傳統(tǒng)審核是抽幀加圖片分類模型跑在人臉、敏感物上配一堆規(guī)則。直播場(chǎng)景要求實(shí)時(shí)審核彈幕、畫面、語(yǔ)音多路并發(fā)純靠GPU跑目標(biāo)檢測(cè)還行但要在同一張卡上同時(shí)跑檢測(cè)、分類、OCR、語(yǔ)音轉(zhuǎn)寫就需要專門為多路并發(fā)設(shè)計(jì)的加速方案。這里說(shuō)的“多路并發(fā)”不是幾張卡各跑各的而是同一套硬件上支持多路視頻流同時(shí)進(jìn)、同時(shí)出每路延遲都得在預(yù)算內(nèi)。第二個(gè)場(chǎng)景是畫質(zhì)增強(qiáng)。低碼率內(nèi)容超分、去噪、去塊效應(yīng)把720p拉到1080p甚至4K這類模型多為CNN或Transformer結(jié)構(gòu)對(duì)算力要求高但數(shù)據(jù)復(fù)用性強(qiáng)。說(shuō)得直白點(diǎn)相鄰幀之間大量像素是重復(fù)的模型里很多計(jì)算本質(zhì)上是冗余的但實(shí)時(shí)流水線又不太敢做跳幀因?yàn)楫嬞|(zhì)增強(qiáng)最怕運(yùn)動(dòng)場(chǎng)景閃斷。所以實(shí)際跑起來(lái)算力消耗是持續(xù)性的要求硬件必須有穩(wěn)定的持續(xù)推理能力而不是峰值算力高、跑兩分鐘就降頻。第三個(gè)場(chǎng)景是內(nèi)容理解和生成式處理比如自動(dòng)剪輯、精彩集錦、字幕翻譯、AIGC風(fēng)格化轉(zhuǎn)繪。這類工作負(fù)載的輸入是“先抽幀、后做回歸或生成”往往需要把一批幀批量送進(jìn)模型。它和畫質(zhì)增強(qiáng)最大的區(qū)別在于推理的batch可以湊得更大對(duì)單幀延遲沒(méi)那么敏感但整體吞吐要求高。換句話說(shuō)這類任務(wù)更適合大batch并行能力強(qiáng)的硬件。也就是說(shuō)做流媒體的團(tuán)隊(duì)一旦想把AI能力真正并入生產(chǎn)鏈路里你面對(duì)的不是“跑一個(gè)模型”而是“同時(shí)跑很多路的模型”且每一路有固定的延遲預(yù)算。這個(gè)形態(tài)對(duì)硬件的要求其實(shí)和做離線訓(xùn)練、做單路超分演示完全不一樣。這也是“加速卡”而不是普通顯卡在流媒體場(chǎng)景里越來(lái)越被重視的原因。1.2 “高容量”的定義并發(fā)路數(shù)、全天時(shí)長(zhǎng)與峰值毛利之間的權(quán)衡“高容量”這個(gè)詞在不同人嘴里意思完全不同。算法工程師說(shuō)的高容量是batch夠大、訓(xùn)練吞吐高做硬件采購(gòu)的人說(shuō)的高容量是單機(jī)可插板卡數(shù)量和總算力而在流媒體架構(gòu)師這里高容量必須是在保證單路延遲達(dá)標(biāo)的前提下單機(jī)能承載的最大并發(fā)處理路數(shù)。這個(gè)指標(biāo)直接決定了單位成本。我遇到過(guò)一個(gè)實(shí)際案例。一家做賽事直播的公司一場(chǎng)足球賽級(jí)別的內(nèi)容需要同時(shí)做多路視角的實(shí)時(shí)超分和精彩回放生成。需求很明確每個(gè)機(jī)位一路1080p30輸入最多12個(gè)機(jī)位需要把全部機(jī)位實(shí)時(shí)提升到4K輸出同時(shí)實(shí)時(shí)跑場(chǎng)上的目標(biāo)跟蹤。他們最初方案是兩臺(tái)服務(wù)器各插兩張游戲顯卡單路效果測(cè)試能過(guò)但一上并發(fā)就崩顯存不夠、延遲波動(dòng)大風(fēng)扇噪聲還特別夸張。后來(lái)?yè)Q成能切分視頻編解碼能力和AI推理能力的高容量加速卡方案把12路調(diào)度到一臺(tái)機(jī)器上單路延遲才穩(wěn)定在可接受的范圍。這個(gè)案例說(shuō)明“高容量”和“高性能”是兩碼事。單卡再?gòu)?qiáng)弄不穩(wěn)多路并發(fā)對(duì)生產(chǎn)鏈路就是沒(méi)用。流媒體業(yè)務(wù)的最大特點(diǎn)是并發(fā)度高、流量峰谷波動(dòng)大硬件必須能在峰值時(shí)扛住在低谷時(shí)不浪費(fèi)太多功耗。所以后面我會(huì)反復(fù)強(qiáng)調(diào)一個(gè)觀點(diǎn)選型時(shí)不要只看TOPS要看你真實(shí)的并發(fā)模型。TOPS高但顯存不夠、編解碼通道少或者驅(qū)動(dòng)不支持多路綁核都會(huì)讓你在擴(kuò)容時(shí)加倍花錢。2. 加速卡選型通用GPU、視頻編解碼卡、專用NPU/FPGA的邊界在哪里市面上能跑AI視頻處理的硬件大致分三條路通用GPU比如NVIDIA的T4、L4、A10甚至消費(fèi)卡專用視頻編解碼卡或融合卡比如Netint、AMD Alveo系列以及部分SoC平臺(tái)上集成的硬件編解碼核還有各類AI推理NPU與基于FPGA的定制方案。選擇哪條路取決于你的負(fù)載里視頻編解碼和AI推理的比例。2.1 三把尺子每路成本、單位功率性能、生態(tài)成熟度第一把尺子是每路成本。按并發(fā)路數(shù)除以整機(jī)成本計(jì)算。假設(shè)單路1080p實(shí)時(shí)超分的延遲預(yù)算是30到50毫秒那么T4這類卡雖然性能足夠但單卡價(jià)格高組12路要買三四張卡每路成本就不劃算。反過(guò)來(lái)如果用了支持32路并發(fā)編解碼的融合卡單卡能扛大部分路數(shù)每路攤銷成本就低很多。第二把尺子是單位功率性能。流媒體機(jī)房對(duì)功率有硬指標(biāo)1U或2U機(jī)箱能提供的功耗就那么多。一張300W的卡和一張75W的卡在同樣的路數(shù)需求下帶來(lái)的散熱和電費(fèi)壓力完全不同。很多自建機(jī)房的團(tuán)隊(duì)沒(méi)算過(guò)這筆賬一張高功耗卡一年跑下來(lái)的電費(fèi)可能比卡本身折舊還高。所以對(duì)7x24小時(shí)運(yùn)行的流媒體業(yè)務(wù)來(lái)說(shuō)單位功率性能甚至比單卡絕對(duì)性能更重要。第三把尺子是生態(tài)成熟度。有沒(méi)有成熟的SDK、有沒(méi)有FFmpeg插件、能不能接入K8s調(diào)度決定了團(tuán)隊(duì)接入成本。硬件再好如果SDK文檔稀爛、示例代碼全是坑開發(fā)和運(yùn)維成本會(huì)吃掉選型帶來(lái)的收益。2.2 當(dāng)前幾個(gè)常見方案的實(shí)際對(duì)比我用一個(gè)表格來(lái)對(duì)比實(shí)際了解過(guò)的方案場(chǎng)景統(tǒng)一設(shè)為單服務(wù)器、12路1080p輸入、要求實(shí)時(shí)AI處理做的是粗略估算目的是看清數(shù)量級(jí)差異方案單卡功耗單卡AI算力視頻編解碼通道12路實(shí)時(shí)處理所需卡數(shù)生態(tài)成熟度適合負(fù)載通用GPUNVIDIA L472W約30TOPSFP16較強(qiáng)支持NVENC/NVDEC2-3張很高AI框架直接支持重AI推理少量編解碼通用GPUNVIDIA T470W約65TOPSFP16中等2張很高重AI推理少量編解碼融合加速卡編解碼NPU75W左右中等高可并行多路編解碼1-2張中需要適配廠商SDKAI推理大量編解碼混合FPGA方案AMD Alveo等75W-120W可按需定制靈活可配1張方案可定制較低開發(fā)成本高特殊格式、確定性要求極高純CPU方案整機(jī)功耗高無(wú)依賴x86指令集多臺(tái)整機(jī)生態(tài)好但性能差低并發(fā)、畫質(zhì)優(yōu)先看這張表你會(huì)發(fā)現(xiàn)一個(gè)規(guī)律單看AI算力通用GPU無(wú)疑是王者但一旦把單位功耗、并發(fā)路數(shù)、整體成本拉進(jìn)來(lái)專用加速卡的優(yōu)勢(shì)就出來(lái)了。對(duì)實(shí)時(shí)流媒體來(lái)說(shuō)最理想的硬件最好能把三件事合到一塊硬件級(jí)視頻編解碼、支持多路并行推理的AI計(jì)算單元、有足夠的內(nèi)存帶寬去同時(shí)灌入多路視頻幀。有些加速卡會(huì)做成異構(gòu)融合結(jié)構(gòu)這類卡在高容量場(chǎng)景下尤其占優(yōu)因?yàn)樗褦?shù)據(jù)搬運(yùn)的路徑縮短了。2.3 為什么不能只靠服務(wù)器CPU或軟件x264有些團(tuán)隊(duì)說(shuō)“我不買卡用CPU軟解軟編行不行”??梢缘阋J(rèn)清代價(jià)。x264/x265軟編追求畫質(zhì)確實(shí)不錯(cuò)但吞吐量低一個(gè)物理機(jī)核心跑1080p實(shí)時(shí)編碼已經(jīng)很吃力再疊加AI推理CPU會(huì)直接成為瓶頸。我在做性能測(cè)試時(shí)用一臺(tái)64核的服務(wù)器跑一路4K超分加編碼AI部分占掉80%以上CPU編碼能勉強(qiáng)跟上但再開第二路就完全不行了。這個(gè)實(shí)驗(yàn)說(shuō)明純CPU方案并不是不能跑AI視頻處理而是“容量”上不去。流媒體業(yè)務(wù)最怕的就是容量瓶頸流量峰值一來(lái)所有任務(wù)全部排隊(duì)延遲飆升峰值過(guò)去之后大把算力又閑置。相比之下加速卡方案能在同樣的機(jī)架空間里提供高得多的并發(fā)路數(shù)而且單位功耗下計(jì)算密度更大。云計(jì)算時(shí)代大家拼的是單位機(jī)架算力密度這個(gè)維度上CPU方案天然吃虧。3. 一個(gè)可復(fù)現(xiàn)的高容量加速卡方案架構(gòu)接下來(lái)給一套可以落地的參考架構(gòu)。這套方案不是憑空想的是幾個(gè)項(xiàng)目里反復(fù)調(diào)整之后形成的。目標(biāo)定位是一臺(tái)2U服務(wù)器內(nèi)實(shí)現(xiàn)12到16路1080p30內(nèi)容實(shí)時(shí)AI增強(qiáng)加轉(zhuǎn)碼輸出同時(shí)留出部分算力跑內(nèi)容審核和片段理解任務(wù)。3.1 硬件拓?fù)銫PU、內(nèi)存、PCIe條帶和加速卡的配合硬件選型上主機(jī)推薦雙路CPU的2U服務(wù)器重點(diǎn)不是CPU性能而是PCIe通道數(shù)量和條帶分配。如果主板本身不支持PCIe Gen4或者通道數(shù)不夠多張加速卡插上去只能跑在x8甚至x4速率上幀數(shù)據(jù)搬運(yùn)會(huì)成為瓶頸。參考配置如下主板雙路至強(qiáng)或EPYC平臺(tái)至少48條以上可用PCIe Gen4通道CPU每路不低于16核控制面、預(yù)處理、CPU側(cè)濾鏡都要占核內(nèi)存64GB起步推薦128GB。AI推理之外FFmpeg緩沖隊(duì)列、預(yù)分析幀緩存都很吃內(nèi)存存儲(chǔ)至少一塊NVMe SSD放臨時(shí)緩存和模型文件別用機(jī)械盤做模型加載路徑加速卡1-2張支持多路視頻編解碼加AI推理的融合卡或按負(fù)載組合通用GPU和編解碼卡這里有個(gè)容易忽略的點(diǎn)組裝這類服務(wù)器時(shí)很多人只關(guān)心CPU和加速卡型號(hào)不看PCIe拓?fù)?。我踩過(guò)一次坑一臺(tái)機(jī)器上插了4張卡總線是共享的4張卡同時(shí)從內(nèi)存讀幀時(shí)PCIe帶寬被打滿實(shí)際吞吐不到單卡測(cè)試時(shí)的六成。后來(lái)把卡分散到不同CPU的PCIe控制器下問(wèn)題立刻緩解。所以高容量方案里硬件拓?fù)湟?guī)劃和加速卡型號(hào)同等重要。3.2 軟件棧驅(qū)動(dòng)、運(yùn)行時(shí)、常見SDK和集成方式軟件棧一般分四層。最底層是驅(qū)動(dòng)和固件決定加速卡的穩(wěn)定性要選廠商經(jīng)過(guò)驗(yàn)證的長(zhǎng)期支持版本不要追最新固件。第二層是運(yùn)行時(shí)或推理引擎比如ONNX Runtime、TensorRT或者加速卡廠商自己封裝的API。第三層是媒體框架FFmpeg、GStreamer是主戰(zhàn)場(chǎng)所有AI處理都必須能掛到媒體管線上。第四層是業(yè)務(wù)調(diào)度層負(fù)責(zé)把各路輸入分配到不同的處理節(jié)點(diǎn)。特別提醒一點(diǎn)加速卡SDK對(duì)不同視頻格式的支持程度差別很大。比如某些編解碼卡對(duì)H.264支持很好但對(duì)H.265的支持可能是后期版本才加的。寫接入代碼之前先把目標(biāo)視頻格式、像素格式、碼率控制模式列個(gè)清單和廠商SDK逐項(xiàng)確認(rèn)。我見過(guò)一個(gè)團(tuán)隊(duì)開發(fā)到一半才發(fā)現(xiàn)卡不支持10bit HEVC編解碼只能返工換方案非常被動(dòng)。在媒體框架上常見做法是把AI推理封裝成FFmpeg filter。這一步說(shuō)起來(lái)簡(jiǎn)單做起來(lái)都是細(xì)節(jié)。filter輸入是解碼后的視頻幀輸出也是視頻幀中間要經(jīng)過(guò)幀格式轉(zhuǎn)換比如NV12轉(zhuǎn)RGB、縮放resize到模型輸入尺寸、送入推理引擎、拿到結(jié)果、再轉(zhuǎn)回YUV格式交給編碼器。每一步都涉及內(nèi)存拷貝優(yōu)化不好就是白折騰。我習(xí)慣用零拷貝策略讓加速卡直接在顯存或板載內(nèi)存里完成格式轉(zhuǎn)換和縮放避免CPU和GPU之間反復(fù)搬運(yùn)數(shù)據(jù)。3.3 對(duì)接FFmpeg/GStreamer把AI模型封裝成filter的工程細(xì)節(jié)如果業(yè)務(wù)方已經(jīng)寫好AI超分模型要快速接入通常用FFmpeg filter框架。典型流程是用FFmpeg拉流或讀本地文件解碼后得到AVFrame在自定義filter里把AVFrame的data拷貝到加速卡可訪問(wèn)的內(nèi)存如果硬件支持CUDA或廠商API可直接注冊(cè)設(shè)備內(nèi)存調(diào)用推理接口傳入多路batch數(shù)據(jù)推理完成后把結(jié)果寫回AVFrame的data繼續(xù)走編碼filter這里要重點(diǎn)講batch的工程處理。并發(fā)12路不意味著推理要一路一路做而是要把12路同一時(shí)間點(diǎn)的幀合成一個(gè)batch丟進(jìn)模型。很多加速卡在設(shè)計(jì)時(shí)考慮了大batch并行batch越大單位功耗吞吐越高。但實(shí)際做的時(shí)候有個(gè)約束12路時(shí)間點(diǎn)不一定完全對(duì)齊稍有抖動(dòng)就會(huì)導(dǎo)致整批等待。工程上我一般用動(dòng)態(tài)湊批策略(dynamic batching)攢夠2到4幀或等待5到10毫秒就強(qiáng)制推理一次避免延遲累積。這個(gè)策略對(duì)實(shí)時(shí)性的幫助很大代價(jià)是batch可能不整齊推理單元偶爾會(huì)空轉(zhuǎn)但對(duì)整體吞吐的影響可以接受。4. 性能實(shí)測(cè)與參數(shù)調(diào)優(yōu)什么在真正拖后腿方案搭好之后真正的挑戰(zhàn)來(lái)了。你會(huì)發(fā)現(xiàn)單路測(cè)試指標(biāo)很漂亮一到多路上就各種掉鏈子。這一節(jié)把實(shí)測(cè)中常見的瓶頸逐個(gè)拉出來(lái)講。4.1 單卡能力評(píng)估與加倍擴(kuò)展的預(yù)期單卡能力評(píng)估要分三個(gè)維度分別測(cè)試純AI推理吞吐、純視頻編解碼吞吐、混合負(fù)載吞吐。我見過(guò)最典型的問(wèn)題是混合負(fù)載比單獨(dú)測(cè)任何一個(gè)都差很遠(yuǎn)。原因不難理解雖然AI推理和編解碼在硬件上可能是不同單元但共享內(nèi)存帶寬、PCIe帶寬和驅(qū)動(dòng)調(diào)度線程。測(cè)試方法建議用三段法連跑30分鐘純解碼加編碼記錄溫度、內(nèi)存帶寬占用、幀率穩(wěn)定性純AI推理用和業(yè)務(wù)一致的輸入尺寸和batch記錄延遲和吞吐兩者同時(shí)跑記錄混合負(fù)載下的延遲及格線只有這三步都做完才能說(shuō)你這條方案能承載多少路。尤其是超分和生成式任務(wù)AI推理延遲會(huì)隨負(fù)載增加而非線性變差因?yàn)榕抨?duì)時(shí)間上來(lái)了。12路并發(fā)時(shí)單路延遲如果是單路測(cè)試的2倍以上說(shuō)明硬件規(guī)劃不足應(yīng)該回頭加卡或減路數(shù)。4.2 PCIe帶寬、DDR容量、推理延遲三者之間的平衡高容量場(chǎng)景下大家經(jīng)常只盯推理延遲卻忘記PCIe帶寬和內(nèi)存帶寬是隱性瓶頸。舉個(gè)例子一路1080p30視頻解碼后每幀數(shù)據(jù)量按NV12算大約是1920乘以1080乘以1.5字節(jié)即約3MB。按30fps算一路每秒產(chǎn)生約90MB幀數(shù)據(jù)。12路就是1.08GB/s。這還只是輸入推理結(jié)果寫回、編碼器再讀取又是2倍的量。單看數(shù)字PCIe Gen4 x16雙向帶寬約32GB/s似乎夠用。但如果卡插在x8槽位或多張卡共用一個(gè)PCIe Switch就會(huì)瞬間吃緊。所以調(diào)優(yōu)順序建議是先確認(rèn)每張卡在獨(dú)立x16或至少x8通道再確認(rèn)DDR內(nèi)存容量足以支撐緩沖隊(duì)列最后才去調(diào)模型推理batch。很多人一上來(lái)就改模型參數(shù)效果不明顯因?yàn)槠款i根本不在模型那邊。4.3 任務(wù)調(diào)度策略如何讓加速卡滿載而不是排隊(duì)調(diào)度上推薦用獨(dú)立的任務(wù)隊(duì)列管理各路輸入。流程是各路解碼線程把幀送入隊(duì)列推理worker從隊(duì)列取幀湊batch推理完成后再交給對(duì)應(yīng)編碼線程。這樣做的好處是解碼和編碼的速率波動(dòng)不會(huì)直接傳導(dǎo)到推理單元推理單元能一直保持高負(fù)載。但隊(duì)列長(zhǎng)度要控制好太長(zhǎng)會(huì)帶來(lái)額外幀延遲和內(nèi)存占用太短又會(huì)讓推理單元空轉(zhuǎn)。我一般把隊(duì)列長(zhǎng)度設(shè)為最大batch的2到3倍并用水位線觸發(fā)退避。比如max_batch4時(shí)隊(duì)列長(zhǎng)度設(shè)12水位高于8時(shí)解碼端稍微丟幀或跳過(guò)非關(guān)鍵幀保證實(shí)時(shí)性優(yōu)先于完整性。5. 運(yùn)維和部署中踩過(guò)的坑這部分算經(jīng)驗(yàn)干貨5.1 散熱降頻與濕度環(huán)境加速卡對(duì)散熱比CPU更敏感。一次我們把加速卡放在風(fēng)道設(shè)計(jì)較差的2U機(jī)箱里滿載跑了大概20分鐘卡的溫度到90度以上驅(qū)動(dòng)自動(dòng)降頻推理延遲直接翻3倍。后來(lái)?yè)Q成帶轉(zhuǎn)接卡托盤的服務(wù)器機(jī)箱并在機(jī)箱后部加了兩把高風(fēng)壓風(fēng)扇溫度壓在75度左右性能才穩(wěn)定。還有一個(gè)問(wèn)題機(jī)房濕度太高的環(huán)境會(huì)加速金手指氧化插拔幾次之后出現(xiàn)接觸不良、識(shí)別不到卡是最討厭的偶發(fā)問(wèn)題。建議定期清理PCIe插槽高濕度機(jī)房里用鍍金轉(zhuǎn)接卡。5.2 驅(qū)動(dòng)與固件版本兼容性另一個(gè)很耗時(shí)的坑某廠商固件更新后編解碼通道數(shù)從說(shuō)明書的32路變成了實(shí)際可用的24路沒(méi)有任何告警。原因很隱蔽新固件改變了底層調(diào)度邏輯和舊驅(qū)動(dòng)配合出現(xiàn)資源泄漏。從那以后我的經(jīng)驗(yàn)是每次更新驅(qū)動(dòng)或固件前先在測(cè)試機(jī)器上跑一遍混合負(fù)載回歸確認(rèn)編解碼路數(shù)、推理延遲、長(zhǎng)時(shí)間穩(wěn)定性三個(gè)指標(biāo)沒(méi)有退化再上生產(chǎn)。升級(jí)版本不要追新要追廠商的LTS或長(zhǎng)期支持分支。5.3 顯存與內(nèi)存溢出問(wèn)題排查多路并發(fā)下內(nèi)存溢出很難排查因?yàn)橹辉诜逯盗髁繒r(shí)才出現(xiàn)。我遇到過(guò)一次線上事故某路視頻輸入分辨率從1080p突然變成4K解碼后寫入緩沖但緩沖按1080p大小預(yù)先分配結(jié)果越界寫進(jìn)程直接崩潰。這個(gè)教訓(xùn)讓我定下一條規(guī)則所有緩沖區(qū)大小不能按固定分辨率分配要根據(jù)實(shí)際解碼幀分辨率動(dòng)態(tài)分配并在進(jìn)入推理前做分辨率校驗(yàn)。另外長(zhǎng)時(shí)間不推幀的空閑推理worker要超時(shí)回收防止僵尸任務(wù)占著資源不釋放。5.4 監(jiān)控指標(biāo)不要只看利用率最后講監(jiān)控。很多人看加速卡只盯利用率但對(duì)多路實(shí)時(shí)處理來(lái)說(shuō)利用率高不一定代表健康可能是排隊(duì)堆積導(dǎo)致的假象。我自己的監(jiān)控體系里優(yōu)先級(jí)最高的是推理隊(duì)列長(zhǎng)度和幀延遲P99。隊(duì)列長(zhǎng)度持續(xù)超閾值說(shuō)明算力不夠或調(diào)度不均幀延遲P99超過(guò)預(yù)算說(shuō)明有單路卡頓風(fēng)險(xiǎn)。利用率反而放到次要位置只用來(lái)評(píng)估整體資源冗余度。這套監(jiān)控思路救過(guò)我們一次某天深夜流量突增隊(duì)列長(zhǎng)度報(bào)警我們提前擴(kuò)容用戶側(cè)幾乎無(wú)感知如果只盯利用率等它漲上來(lái)再處理延遲早就爆了。6. 未來(lái)擴(kuò)展方向把AI視頻處理變成流水線中的可復(fù)用算子6.1 緩存策略特征幀與逐幀編碼的取舍AI視頻處理有一個(gè)特點(diǎn)輸入是連續(xù)視頻相鄰幀之間大量信息重復(fù)。畫質(zhì)增強(qiáng)模型如果一幀一幀全部處理算力浪費(fèi)很明顯。工程上可以在模型層做特征緩存相鄰幀場(chǎng)景變化很小就直接復(fù)用上一幀的特征輸出只在關(guān)鍵幀或場(chǎng)景切換幀上跑完整推理。這個(gè)策略對(duì)長(zhǎng)時(shí)錄播、監(jiān)控視頻、回看類內(nèi)容尤其有效算力消耗可以降到原來(lái)的三分之一甚至更低。代價(jià)是運(yùn)動(dòng)劇烈的場(chǎng)景下畫面可能有一點(diǎn)點(diǎn)細(xì)節(jié)滯后??山邮芘c否取決于具體業(yè)務(wù)對(duì)畫質(zhì)的要求。6.2 結(jié)合調(diào)度器實(shí)現(xiàn)彈性擴(kuò)縮容更遠(yuǎn)一步可以把加速卡方案放進(jìn)K8s資源體系把每路視頻處理任務(wù)當(dāng)成一個(gè)Pod借助加速卡設(shè)備的擴(kuò)展調(diào)度實(shí)現(xiàn)按流量峰谷自動(dòng)擴(kuò)縮容。我在一個(gè)直播項(xiàng)目里做過(guò)試驗(yàn)把12路任務(wù)全部容器化加了一個(gè)基于幀延遲的自動(dòng)伸縮策略。流量上來(lái)時(shí)自動(dòng)拉起新的處理Pod流量下去后自動(dòng)回收整機(jī)利用率穩(wěn)定在健康區(qū)間。這個(gè)方向的可復(fù)制性比較強(qiáng)關(guān)鍵是先把加速卡的設(shè)備插件和資源上報(bào)接口調(diào)通讓調(diào)度器能感知卡的實(shí)時(shí)容量。做高容量流媒體加速卡方案歸根結(jié)底是回答一個(gè)問(wèn)題在多路并發(fā)、實(shí)時(shí)優(yōu)先的生產(chǎn)鏈路里怎么用盡量少的硬件和功耗扛住盡量多的高質(zhì)量AI視頻處理任務(wù)。我個(gè)人在實(shí)際操作中的體會(huì)是沒(méi)有一套配置能通吃所有場(chǎng)景但抓住“并發(fā)模型”“延遲預(yù)算”“每路成本”這三個(gè)錨點(diǎn)來(lái)做選型和調(diào)優(yōu)方向基本不會(huì)跑偏。如果后續(xù)有條件建議團(tuán)隊(duì)把單卡混合負(fù)載測(cè)試做成例行基準(zhǔn)每次軟硬件升級(jí)都跑一遍很多線上問(wèn)題其實(shí)是可以在測(cè)試階段提前暴露的。