多GPU平臺的多路視頻數據的實時處理方法與流程
2023-05-27 05:07:46
本發明涉及數據處理技術領域,尤其涉及一種多GPU平臺的多路視頻數據的實時處理方法。
背景技術:
隨著多媒體技術的蓬勃發展,在「平安城市,智慧城市」的發展趨勢下,國家智能交通的推廣力度日益加強,城市交通監控涉嫌頭的覆蓋程度越來越廣,而龐大的數據量為提取和分析監控視頻帶來了極大的挑戰。當前階段,針對監控視頻的智能分析系統主要針對的是卡口圖像,至今仍未出現廣泛而又成熟的針對監控視頻數據的智能分析系統,限制該系統發展的主要原因是計算能力的不足。
近年來,隨著高性能GPU(Graphics Processing Unit,圖形處理器)的發展,其強大的計算能力漸漸引起人們的重視,也為監控視頻數據的分析與處理提供了新的突破口。若能在監控視頻實時分析建立在多GPU平臺上,能夠大大緩解計算能力不足的尷尬。但要在多GPU平臺上高效並行處理多路視頻流的多個分析任務,仍要面臨異構平臺上的並行結構複雜且難以充分利用計算資源、多任務間計算資源難以平衡和實時處理問題限制性強等挑戰。
現有技術中的用於解決多GPU平臺的調度問題的方法,如:授權公告日為2014年9月10日,授權公告號為CN104035751A的發明專利:基於多圖形處理器的數據並行處理方法及裝置;授權公告日為2014年11月19日,授權公告號為CN104156264A的發明專利:一種基於多GPU的基帶信號處理任務並行實時調度方法,都存在無法直接應用於多數據流情況下的多任務處理的問題,應用存在一定的局限性。
技術實現要素:
本發明實施例提供了一種多GPU平臺的多路視頻數據的實時處理方法,以實現多視頻多任務在多GPU平臺上的並行處理。
為了實現上述目的,本發明採取了如下技術方案。
一種多GPU平臺的多路視頻數據的實時處理方法,包括:
步驟1、建立基於任務處理器的層式並行結構;
步驟2、對所述層式並行結構中的各個任務處理器進行初始化,各個任務處理器接收監控視頻數據,對監控視頻數據進行實時處理;
步驟3、進行環境監測,根據環境監測結果計算任務隊列健康度、任務緩存區健康度和各GPU健康度;
步驟4、根據所述任務隊列健康度、緩存區健康度及各GPU健康度值進行任務處理器調度和作業分發;
步驟5、定時重複步驟3、4,使各GPU間保持負載均衡狀態。
進一步地,所述的建立基於任務處理器的層式並行結構,包括:
將任務處理器作為並行與調度的基本單位,一個任務處理器包括一個GPU計算任務的封裝、一個輸入緩存、一個輸出緩存和一個作業隊列。一個任務處理器對應創建、就緒、暫停、運行、結束五個狀態,通過任務處理器控制器進行任務處理器的狀態控制;
根據監控視頻路數、當前計算任務、計算節點GPU數進行基於層結構並行的任務處理器分配,分配各層間數據緩存區,將基於多GPU上的多任務處理器進行空間並行,得到多個層式並行結構,基於流水線技術對各個層式並行結構進行時間並行,建立用於流式監控數據處理的並行結構,基於內存交互對流式監控數據進行統一式管理。
進一步地,所述的建立基於任務處理器的層式並行結構還包括:
基於任務數劃分任務處理器的層數,依據計算任務複雜度計算各層任務處理器的數量,使用輪轉法將任務處理器儘量分配到不同GPU上,通過各層間緩存區,對同層任務處理器的輸入輸出的流式數據進行統一管理,並基於內存交互完成CPU到多GPU上的數據交換。
進一步地,所述的根據環境監測結果計算任務隊列健康度、任務緩存區健康度和各GPU健康度,包括:
按照時間間隔統計被監測對象佔用率,所述被監測對象佔用率包括任務隊列佔用率、任務緩存區佔用率、GPU利用率和GPU顯存佔用率;
採用滑動窗口計算若干時間片內被監測對象佔用率的平均值;
根據記錄的多個時間片內被監測對象佔用率的平均值計算被監測對象健康度,所述被監測對象健康度包括任務隊列健康度、任務緩存區健康度、GPU健康度和GPU顯存健康度;
依據被監測對象健康度判斷被監測對象的狀態。
進一步地,根據所述任務隊列健康度、緩存區健康度及各GPU健康度值進行任務處理器調度,包括:
根據各任務運行狀態、任務處理器數量控制各任務佔用的計算資源比例;對於某任務,通過其輸入和輸出緩存區的健康度判斷該任務的各狀態處理器的數量變化量。
進一步地,所述的對於某任務,通過其輸入和輸出緩存區的健康度判斷該任務的各狀態處理器的數量變化量,包括:
若某任務的輸入緩存處於飢餓狀態,輸出緩存處於過飽狀態,則減少任務處理器數量;
若某任務的輸入緩存處於過飽狀態,輸出緩存處於飢餓狀態,則增加任務處理器數量;
若某任務的輸入緩存或輸出緩存處於健康狀態,則暫時不變動任務處理器數量。
進一步地,所述的方法還包括:
若GPU處理器處於過飽狀態,則減少該GPU處理器上的任務處理器數量,減少時將運行狀態的處理器轉為暫停狀態,減少時優先減少輸出緩存區健康度高的任務處理器。
進一步地,根據所述任務隊列健康度、緩存區健康度及各GPU健康度值進行作業分發,包括:
採用動態輪詢策略依據健康度低的任務處理器優先的原則,進行作業的分發,若任務隊列達到最大長度,則停止作業分發。
由上述本發明的實施例提供的技術方案可以看出,本發明實施例為在多GPU平臺上的多路視頻多任務實時處理設計了完整的並行、調度、數據管理方案;能夠充分利用多GPU處理器強大的計算能力;使用動態負載均衡算法保證系統能夠根據輸入數據和硬體條件充分利用計算資源;從空間並行和時間並行多個方面進行並行設計,大大加快計算速度;且具有一定的廣泛性、安全性和自適應性。
本發明附加的方面和優點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發明的實踐了解到。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例提供的一種多GPU平臺的多路視頻數據的實時處理方法的實現原理示意圖;
圖2為本發明實施例提供的一種任務處理器的工作流程示意圖;
圖3為本發明實施例提供的一種任務處理器的狀態控制流程示意圖;
圖4為本發明實施例提供的一種任務處理器的調度過程示意圖;
圖5為實現本發明實施例方法的系統架構示意圖。
具體實施方式
下面詳細描述本發明的實施方式,所述實施方式的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施方式是示例性的,僅用於解釋本發明,而不能解釋為對本發明的限制。
本技術領域技術人員可以理解,除非特意聲明,這裡使用的單數形式「一」、「一個」、「所述」和「該」也可包括複數形式。應該進一步理解的是,本發明的說明書中使用的措辭「包括」是指存在所述特徵、整數、步驟、操作、元件和/或組件,但是並不排除存在或添加一個或多個其他特徵、整數、步驟、操作、元件、組件和/或它們的組。應該理解,當我們稱元件被「連接」或「耦接」到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這裡使用的「連接」或「耦接」可以包括無線連接或耦接。這裡使用的措辭「和/或」包括一個或更多個相關聯的列出項的任一單元和全部組合。
本技術領域技術人員可以理解,除非另外定義,這裡使用的所有術語(包括技術術語和科學術語)具有與本發明所屬領域中的普通技術人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術語應該被理解為具有與現有技術的上下文中的意義一致的意義,並且除非像這裡一樣定義,不會用理想化或過於正式的含義來解釋。
為便於對本發明實施例的理解,下面將結合附圖以幾個具體實施例為例做進一步的解釋說明,且各個實施例並不構成對本發明實施例的限定。
監控視頻數據作為一種體量大,安全性要求高的特殊數據,在處理方法中應該在高效性和安全性上進行有針對性的優化和調整。
本發明實施例提供了一種多GPU平臺的多路視頻數據的實時處理方法的實現原理示意圖如圖1所示,主要包括如下步驟:
步驟(1):建立基於任務處理器的層式並行結構;
在本發明實施例中,任務處理器是計算任務的抽象,是並行與調度的基本單位。圖2為本發明實施例提供的一種任務處理器的工作流程示意圖,一個任務處理器包括一個GPU計算任務的封裝、一個輸入緩存、一個輸出緩存和一個作業隊列。
圖3為本發明實施例提供的一種任務處理器的狀態控制流程示意圖,一個任務處理器對應創建、就緒、暫停、運行、結束五個狀態,通過任務處理器的控制器進行任務處理器的狀態控制。
根據監控視頻路數、當前計算任務、計算節點GPU數進行基於層結構並行的任務處理器分配,分配各層間數據緩存區,以建立用於流式監控數據處理的並行結構。
將基於多GPU上的多任務處理器進行空間並行,且基於流水線技術建立層式結構進行時間並行,基於內存交互對流式數據進行統一式管理。
層式並行結構的建立方法包括:
基於任務數劃分任務處理器的層數,依據任務複雜度進行各層任務處理器的數量計算,使用輪轉法將任務處理器儘量分配到不同GPU上。
基於內存交互對流式數據進行統一式管理方法還包括:
通過各層間緩存區,對同層任務處理器的輸入輸出的流式數據進行統一管理,並基於內存交互完成CPU到多GPU上的數據交換。
所述的監控視頻路數、當前計算任務、計算節點GPU數的一個實例為在一臺具有2塊GPU的計算節點上對3路高清監控視頻進行實時分析,首先進行監控視頻解碼獲取視頻幀,對視頻幀進行車輛檢測,再對檢測出的車輛屬性(車型、顏色、特徵等)提取,三個任務的計算複雜度比值為1:3.4:0.6。
使用任務處理器完成視頻解碼、車輛檢測、車輛屬性提取三個任務的封裝,對應任務處理器#0、任務處理器#1、任務處理器#2。
所述的任務處理器的分配方式為設在一臺具有n塊GPU的伺服器上處理m個任務,m個任務的複雜度權重比為d1,d2,……,dm,則將任務處理器劃分為m層,對應m個任務,若輸入視頻路數為x,則每層初始化任務處理器數量為d為該層複雜度權重值;計算得到各層任務處理器的數量後,使用輪轉法將同任務的任務處理器儘可能地分配到不同GPU上,並對各任務處理器進行初始化。針對本實例,共初始化3個任務處理器#0,11個任務處理器#1,2個任務處理器#2;GPU#0上分配任務處理器數依次為2、5、1,GPU#1上分配任務處理器數依次為1、6、1。
所述的用於流式監控數據處理的並行結構如圖1所示。以層級結構將任務處理器劃分成3層,形成流水線,進行時間並行;通過任務處理器在多GPU上的分配,進行多任務在多GPU上的空間並行;通過在各層間建立4個統一的緩存區,對同層任務處理器的輸入輸出的流式數據進行統一管理,並基於內存交互完成CPU到多GPU上的數據交換,具體數據管理方式如圖3所示,其中視頻緩存區使用環形緩存區作為每個視頻流的存儲區域。
步驟(2):對層式並行結構中的各個任務處理器進行初始化,各個任務處理器接收監控視頻數據,對監控視頻數據進行實時處理;
步驟(3):進行計算環境監測,預測任務隊列、任務緩存區及各GPU健康度;
按照時間間隔統計被監測對象佔用率,所述被監測對象佔用率包括任務隊列佔用率、任務緩存區佔用率、GPU利用率和GPU顯存佔用率;
採用滑動窗口計算若干時間片內被監測對象佔用率的平均值;
根據記錄的多個時間片內被監測對象佔用率的平均值計算被監測對象健康度,所述被監測對象健康度包括任務隊列健康度、任務緩存區健康度、GPU健康度和GPU顯存健康度;
依據被監測對象健康度判斷被監測對象的狀態。
所述的任務隊列及緩存區健康度計算方式使用如下方法(以緩存區為例,方法相同):以時間間隔為50ms為單位進行被監測緩存區已被佔用的緩存大小。通過大小為n的滑動窗口(n為1-5之間)來統計50*n毫秒內的平均佔用率,來達到平滑數據的效果,再通過平滑後的佔用率作為依據進行趨勢計算。通過健康緩存區間的上界和下界及趨勢計算緩存區健康度。
數據統計:以50ms的時間間隔統計被監測緩存區的已被佔用的大小。
數據分析:
緩存區使用百分比PBuf_occ的計算公式如下:
通過滑動窗口統計n個時間片內的平均緩存區使用百分比,其中n為滑動窗口大小,計算公式如下。
變化趨勢CURbuf計算公式如下,其中α∈[0.1,2]:
通過劃分緩存區的90%和10%作為健康區間的上界和下屆,健康度計算公式如下:
若根據公式3.4計算得健康度Hbuf>100,則Hbuf=100;
若計算得Hbuf<0,則Hbuf=0。
對於某數據緩存區:
若Hbuf≤10,則處於飢餓狀態;
若10<Hbuf100,則Hgpu=100;
若計算得Hgpu<0,則Hgpu=0。
對於某GPU處理器:
若Hgpu≤45,則處於飢餓狀態;
若45<Hgpu<80,則處於健康狀態;
若Hgpu≥80,則處於過飽狀態。
步驟(4):根據任務隊列健康度、緩存區健康度及各GPU健康度值進行任務處理器調度和作業分發;
圖4為本發明實施例提供的一種任務處理器調度過程示意圖,任務處理器調度方法包括:
通過各任務運行狀態、任務處理器數量控制各任務佔用的計算資源比例;通過各監測對象健康度值更改各任務對應任務處理器的狀態。
對於某任務,通過其輸入和輸出緩存區的健康度判斷該任務的各狀態處理器的數量變化量:
若其輸入緩存處於飢餓狀態,輸出緩存處於過飽狀態,則減少任務處理器數量;
若其輸入緩存處於過飽狀態,輸出緩存處於飢餓狀態,則增加任務處理器數量;
若其輸入緩存或輸出緩存處於健康狀態,則暫時不變動任務處理器數量。
需要增加處理器數量時,優先等待正在創建的任務處理器創建完成,次優先恢復暫停狀態或準備狀態的處理器為運行狀態,如無以上兩種情況,則創建新的任務處理器。
需要創建新的任務處理器時,優先選擇健康度低的GPU進行。
若緩存區達到容量上限,開始丟棄數據。
若GPU處理器處於過飽狀態,則減少該處理器上的任務處理器數量,減少時將運行狀態的處理器轉為暫停狀態,減少時優先減少輸出緩存區健康度高的任務處理器。
作業分發方式還包括:
作業分發採用動態輪詢策略,依據健康度低的處理器優先的原則,進行作業的分發。若任務隊列達到最大長度,則停止分發。
步驟(5):定時重複步驟3、4,使各GPU間保持負載均衡狀態。
圖5為實現本發明實施例方法的系統架構示意圖,主要包括:計算引擎模塊、集成總線模塊、數據管理模塊。系統以視頻解碼、車輛檢測及屬性提取為處理任務,通過集成總線模塊實現本發明所述方法,使得多路高清視頻處理任務實時運行在多GPU平臺上。
綜上所述,本發明實施例為在多GPU平臺上的多路視頻多任務實時處理設計了完整的並行、調度、數據管理方案;能夠充分利用多GPU處理器強大的計算能力;使用動態負載均衡算法保證系統能夠根據輸入數據和硬體條件充分利用計算資源;從空間並行和時間並行多個方面進行並行設計,大大加快計算速度;且具有一定的廣泛性、安全性和自適應性。
本發明實施例實現了多視頻多任務在多GPU平臺上的並行處理,並且基於健康度預測進行系統的任務和作業調度,提高了平均GPU利用率,減少了任務計算時間,且在穩定性、擴展性和自適應性上具有良好的表現。
本說明書中的各個實施例均採用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於裝置或系統實施例而言,由於其基本相似於方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置及系統實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
以上所述,僅為本發明較佳的具體實施方式,但本發明的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本發明揭露的技術範圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護範圍之內。因此,本發明的保護範圍應該以權利要求的保護範圍為準。