本技術(shù)涉及計算機,尤其涉及一種模型調(diào)用方法及相關(guān)設(shè)備。
背景技術(shù):
1、為了使訓(xùn)練好的算法模型能夠與應(yīng)用端的系統(tǒng)或客戶端進(jìn)行交互,并提供推理服務(wù),通常需要通過應(yīng)用程序接口(application?programming?interface,api)對訓(xùn)練好的算法模型進(jìn)行包裝或集成。目前,通過api接口進(jìn)行包裝或集成時,一個api接口至少需要啟動一個api請求處理模塊和一個算法模型推理模塊,其中,api請求處理模塊負(fù)責(zé)接收和解析來自客戶端的請求;算法模型推理模塊則負(fù)責(zé)加載訓(xùn)練好的算法模型,使其處于待命狀態(tài),以便進(jìn)行推理。
2、在實際應(yīng)用中,?api請求處理模塊雖然能夠并行處理多個請求,但由于算法模型推理模塊通常只能以串行方式逐次處理請求,從而導(dǎo)致封裝算法模型推理的api接口難以實現(xiàn)真正的并發(fā),進(jìn)而延長了響應(yīng)時間,降低了用戶體驗。
3、現(xiàn)有技術(shù)中,為解決上述技術(shù)問題,通常采用集群部署的方法,即同時部署多組“1個api請求處理模塊+1個算法模型推理模塊”的節(jié)點,并借助應(yīng)用中間件將請求任務(wù)均勻分發(fā)至各個節(jié)點,從而實現(xiàn)并發(fā)推理。
4、然而,集群部署的方法雖然達(dá)到了并發(fā)效果,但由于每個節(jié)點需要獨立加載模型推理模塊所需的算子及運行環(huán)境,而這些算子及運行環(huán)境通常會占用大量資源,從而容易導(dǎo)致資源浪費問題。其中,算子是指算法模型在進(jìn)行推理過程中需要執(zhí)行的各種基礎(chǔ)計算操作,比如矩陣乘法、卷積、池化、激活函數(shù)、批量歸一化以及全連接等。運行環(huán)境,包括一切支撐算子執(zhí)行的底層支持庫和框架環(huán)境,比如對于gpu推理而言,運行環(huán)境主要涉及gpu驅(qū)動程序、cuda庫、cudnn庫等,這些庫可以提供對各種算子的優(yōu)化加速支持。
5、基于此,如何在實現(xiàn)模型推理并發(fā)的前提下,并避免如gpu、cpu和tpu等處理器的資源浪費,是本領(lǐng)域技術(shù)人員亟需解決的技術(shù)問題。
技術(shù)實現(xiàn)思路
1、本技術(shù)實施例提供一種模型調(diào)用方法,用以解決現(xiàn)有技術(shù)中采用集群部署實現(xiàn)并發(fā)推理時,由于每個節(jié)點需要獨立加載模型推理模塊所需的算子及運行環(huán)境,而這些算子及運行環(huán)境通常會占用大量資源,從而容易導(dǎo)致資源浪費問題。
2、本技術(shù)實施例還提供一種模型調(diào)用裝置,一種電子設(shè)備,一種計算機可讀存儲介質(zhì),以及一種計算機程序產(chǎn)品。
3、本技術(shù)實施例采用下述技術(shù)方案:
4、第一方面,本技術(shù)提供一種模型調(diào)用方法,包括:
5、創(chuàng)建算法模型資源池,算法模型資源池包括不同算法模型執(zhí)行推理任務(wù)時所需的算子和運行環(huán)境;
6、將待用于執(zhí)行推理任務(wù)的多個算法模型加載至算法模型資源池;
7、創(chuàng)建至少兩個api服務(wù)線程,并激活api服務(wù)線程與算法模型資源池之間的通信鏈路;
8、當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例;
9、將模型實例返回至api服務(wù)線程,以使api服務(wù)線程能夠基于模型實例執(zhí)行推理任務(wù)。
10、可選的,算法模型資源池包括空閑鏈和調(diào)度器;
11、其中,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;
12、調(diào)度器,用于在算法模型資源池中對算法模型的模型實例進(jìn)行調(diào)度和分配,以響應(yīng)來自api服務(wù)線程的模型調(diào)用請求。
13、可選的,當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例,包括:
14、當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,判斷算法模型資源池中是否存在空閑算法模型;
15、若存在空閑算法模型,則從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例。
16、可選的,該方法還包括:
17、若不存在空閑算法模型,則從算法模型資源池中隨機選取一個處于執(zhí)行狀態(tài)的算法模型作為目標(biāo)算法模型;
18、當(dāng)目標(biāo)算法模型結(jié)束執(zhí)行狀態(tài)時,將目標(biāo)算法模型的模型實例返回至api服務(wù)線程。
19、可選的,算法模型資源池包括空閑鏈,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;則,
20、當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,判斷算法模型資源池中是否存在空閑算法模型,包括:
21、當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,判斷空閑鏈?zhǔn)欠駷榭眨?/p>
22、若空閑鏈不為空,則確認(rèn)算法模型資源池中存在空閑算法模型。
23、可選的,算法模型資源池包括空閑鏈,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;則,
24、若存在空閑算法模型,則從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例,包括:
25、若存在空閑算法模型,則獲取空閑鏈的隊尾的模型編號;
26、基于算子和運行環(huán)境將模型編號對應(yīng)的目標(biāo)算法模型加載為模型實例。
27、可選的,該方法還包括:
28、從空閑鏈移除隊尾的模型編號;
29、當(dāng)api服務(wù)線程的推理任務(wù)結(jié)束時,再將空閑鏈的隊尾的模型編號重新添加至空閑鏈。
30、第二方面,本技術(shù)提供一種模型調(diào)用裝置,包括創(chuàng)建模塊、加載模塊、激活模塊、處理模塊和發(fā)送模塊,其中:
31、創(chuàng)建模塊,用于創(chuàng)建算法模型資源池,算法模型資源池包括不同算法模型執(zhí)行推理任務(wù)時所需的算子和運行環(huán)境;
32、加載模塊,用于將待用于執(zhí)行推理任務(wù)的多個算法模型加載至算法模型資源池;
33、激活模塊,用于創(chuàng)建至少兩個api服務(wù)線程,并激活api服務(wù)線程與算法模型資源池之間的通信鏈路;
34、處理模塊,用于當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例;
35、發(fā)送模塊,用于將模型實例返回至api服務(wù)線程,以使api服務(wù)線程能夠基于模型實例執(zhí)行推理任務(wù)。
36、可選的,算法模型資源池包括空閑鏈和調(diào)度器;
37、其中,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;
38、調(diào)度器,用于在算法模型資源池中對算法模型的模型實例進(jìn)行調(diào)度和分配,以響應(yīng)來自api服務(wù)線程的模型調(diào)用請求。
39、可選的,處理模塊,包括:
40、判斷單元,用于當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,判斷算法模型資源池中是否存在空閑算法模型;
41、處理單元,用于若存在空閑算法模型,則從算法模型資源池中選取目標(biāo)算法模型,并基于算子和運行環(huán)境將目標(biāo)算法模型加載為模型實例。
42、可選的,該裝置還用于:
43、若不存在空閑算法模型,則從算法模型資源池中隨機選取一個處于執(zhí)行狀態(tài)的算法模型作為目標(biāo)算法模型;
44、當(dāng)目標(biāo)算法模型結(jié)束執(zhí)行狀態(tài)時,將目標(biāo)算法模型的模型實例返回至api服務(wù)線程。
45、可選的,算法模型資源池包括空閑鏈,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;則,判斷單元,用于:
46、當(dāng)接收到基于api服務(wù)線程發(fā)送的模型調(diào)用請求時,判斷空閑鏈?zhǔn)欠駷榭眨?/p>
47、若空閑鏈不為空,則確認(rèn)算法模型資源池中存在空閑算法模型。
48、可選的,算法模型資源池包括空閑鏈,空閑鏈用于記錄算法模型資源池中當(dāng)前未被占用的算法模型的模型編號;則,處理單元,用于:
49、若存在空閑算法模型,則獲取空閑鏈的隊尾的模型編號;
50、基于算子和運行環(huán)境將模型編號對應(yīng)的目標(biāo)算法模型加載為模型實例。
51、可選的,該裝置還用于:
52、從空閑鏈移除隊尾的模型編號;
53、當(dāng)api服務(wù)線程的推理任務(wù)結(jié)束時,再將空閑鏈的隊尾的模型編號重新添加至空閑鏈。
54、第三方面,本技術(shù)提供一種電子設(shè)備,包括:存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,所述計算機程序被所述處理器執(zhí)行時實現(xiàn)如上所述的模型調(diào)用方法的步驟。
55、第四方面,本技術(shù)提供一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上所述的模型調(diào)用方法的步驟。
56、第五方面,本技術(shù)提供一種計算機程序產(chǎn)品,包括計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上所述的模型調(diào)用方法。
57、本技術(shù)實施例采用的上述至少一個技術(shù)方案能夠達(dá)到以下有益效果:
58、采用本技術(shù)實施例提供的方法,通過創(chuàng)建一個包含不同算法模型執(zhí)行推理任務(wù)時所需的算子和運行環(huán)境的算法模型資源池,可以實現(xiàn)各api服務(wù)線程對算子和運行環(huán)境的共享使用,從而減少了處理器資源的重復(fù)加載。其次,通過創(chuàng)建至少兩個api服務(wù)線程,并激活api服務(wù)線程與算法模型資源池之間的通信鏈路,這樣,可以使得多個api服務(wù)線程能夠同時向算法模型資源池發(fā)起模型調(diào)用請求,并且當(dāng)接收到基于api服務(wù)線程發(fā)送的多個模型調(diào)用請求時,可以從算法模型資源池中選取目標(biāo)算法模型,并將目標(biāo)算法模型的模型實例返回至每個api服務(wù)線程,從而可以實現(xiàn)并行請求處理。相對于現(xiàn)有技術(shù)而言,可以在實現(xiàn)模型推理并發(fā)的前提下,并避免處理器資源浪費的問題。