日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Deep Learning部署TVM Golang运行时Runtime

發(fā)布時(shí)間:2023/11/28 生活经验 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Deep Learning部署TVM Golang运行时Runtime 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Deep Learning部署TVM Golang運(yùn)行時(shí)Runtime
介紹
TVM是一個(gè)開(kāi)放式深度學(xué)習(xí)編譯器堆棧,用于編譯從不同框架到CPU,GPU或?qū)S眉铀倨鞯母鞣N深度學(xué)習(xí)模型。TVM支持來(lái)自Tensorflow,Onnx,Keras,Mxnet,Darknet,CoreML和Caffe2等各種前端的模型編譯。TVM編譯模塊可以部署在LLVM(Javascript或WASM,AMD GPU,ARM或X86),NVidia GPU(CUDA),OpenCL和Metal等后端上。
TVM支持編程語(yǔ)言(如Javascript,Java,Python,C ++…)以及現(xiàn)在的Golang的運(yùn)行時(shí)綁定。通過(guò)廣泛的前端,后端和運(yùn)行時(shí)綁定,TVM使開(kāi)發(fā)人員可以通過(guò)多種編程語(yǔ)言,將深度學(xué)習(xí)模型從各種框架集成和部署到各種硬件,并進(jìn)行部署。
TVM導(dǎo)入和編譯過(guò)程會(huì)生成一個(gè)圖JSON,一個(gè)模塊module和一個(gè)參數(shù)。集成TVM運(yùn)行時(shí)的任何應(yīng)用程序,都可以加載這些編譯的模塊并執(zhí)行推理。可以找到有關(guān)使用TVM進(jìn)行模塊導(dǎo)入和編譯的詳細(xì)教程。
TVM現(xiàn)在支持通過(guò)Golang部署已編譯的模塊。Golang應(yīng)用程序可以利用它通過(guò)TVM部署深度學(xué)習(xí)模型。本文的內(nèi)容包括gotvm軟件包的介紹,軟件包的構(gòu)建過(guò)程以及gotvm用于加載已編譯模塊并進(jìn)行推理的示例應(yīng)用程序。
Package
golang軟件包gotvm建立在TVM的C運(yùn)行時(shí)接口之上。該軟件包中的API提取了本機(jī)C類型并提供了與Golang兼容的類型。軟件包源可以在gotvm上找到。
該軟件包利用golang的接口,切片,函數(shù)閉包,并隱式處理API調(diào)用之間的必要轉(zhuǎn)換。

TVM運(yùn)行時(shí)上的Golang接口
如何開(kāi)發(fā)
如下圖所示,gotvmgolang應(yīng)用程序可以集成來(lái)自各種框架的深度學(xué)習(xí)模型,而無(wú)需了解每個(gè)框架相關(guān)的接口API。開(kāi)發(fā)人員可以利用TVM導(dǎo)入和編譯深度學(xué)習(xí)模型并生成TVM工件。 gotvm軟件包提供了golang友好的API來(lái)加載,配置,提供輸入和獲取輸出。

Import, Compile, Integrate and Deploy
TVM編譯深度學(xué)習(xí)模型教程可用于從TVM前端支持的所有框架中編譯模型。該編譯過(guò)程生成了將模型集成并部署到目標(biāo)上所需的組件工具。
API
gotvm軟件包提供了一些數(shù)據(jù)類型和API函數(shù),用于從golang應(yīng)用程序初始化,加載和推斷。像任何其他golang包一樣,我們只需要在gotvm此處導(dǎo)入包即可。
? 模塊:模塊API可用于將TVM編譯的模塊加載到TVM運(yùn)行時(shí)并訪問(wèn)任何功能。
? 值:Value API提供了一些輔助函數(shù),用于設(shè)置golang類型(例如基本類型或切片)中的參數(shù)或獲取返回值。
? Function:Function API對(duì)于獲取函數(shù)的句柄并調(diào)用它們很有用。
? Array:Array API可用于通過(guò)golang slice設(shè)置和獲取Tensor數(shù)據(jù)。
? 上下文:上下文API包含用于構(gòu)建后端上下文句柄的幫助程序函數(shù)。
Example
下面顯示了一個(gè)簡(jiǎn)單的示例,其中包含內(nèi)聯(lián)文檔,其中包含加載已編譯模塊并執(zhí)行推理的過(guò)程。為簡(jiǎn)單起見(jiàn),這里忽略了錯(cuò)誤處理,但在實(shí)際應(yīng)用中很重要。

package main

// Import compiled gotvm package.
import (
“./gotvm”
)

// Some constants for TVM compiled model paths.
// modLib : Is the compiled library exported out of compilation.
// modJson : TVM graph JSON.
// modParams : Exported params out of TVM compilation process.
const (
modLib = “./libdeploy.so”
modJSON = “./deploy.json”
modParams = “./deploy.params”
)

// main
func main() {
// Some util API to query underlying TVM and DLPack version information.
fmt.Printf(“TVM Version : v%v\n”, gotvm.TVMVersion)
fmt.Printf(“DLPACK Version: v%v\n\n”, gotvm.DLPackVersion)

// Import tvm module (so).
modp, _ := gotvm.LoadModuleFromFile(modLib)// Load module on tvm runtime - call tvm.graph_runtime.create
// with module and graph JSON.
bytes, _ := ioutil.ReadFile(modJSON)
jsonStr := string(bytes)
funp, _ := gotvm.GetGlobalFunction("tvm.graph_runtime.create")
graphrt, _ := funp.Invoke(jsonStr, modp, (int64)(gotvm.KDLCPU), (int64)(0))
graphmod := graphrt.AsModule()// Allocate input & output arrays and fill some data for input.
tshapeIn  := []int64{1, 224, 224, 3}
tshapeOut := []int64{1, 1001}
inX, _ := gotvm.Empty(tshapeIn, "float32", gotvm.CPU(0))
out, _ := gotvm.Empty(tshapeOut)
inSlice := make([]float32, (244 * 244 * 3))
rand.Seed(10)
rand.Shuffle(len(inSlice), func(i, j int) {inSlice[i],inSlice[j] = rand.Float32(),rand.Float32() })
inX.CopyFrom(inSlice)// Load params
bytes, _ = ioutil.ReadFile(modParams)
funp, _ = graphmod.GetFunction("load_params")
funp.Invoke(bytes)// Set module input
funp, _ = graphmod.GetFunction("set_input")
funp.Invoke("input", inX)// Run or Execute the graph
funp, _ = graphmod.GetFunction("run")
funp.Invoke()// Get output from runtime.
funp, _ = graphmod.GetFunction("get_output")
funp.Invoke(int64(0), out)// Access output tensor data.
outIntf, _ := out.AsSlice()
outSlice := outIntf.([]float32)// outSlice here holds flattened output data as a golang slice.

}
gotvm擴(kuò)展了TVM打包函數(shù)系統(tǒng),以支持golang函數(shù)閉包作為打包函數(shù)。 可以使用示例將golang閉包注冊(cè)為T(mén)VM打包函數(shù),并跨編程語(yǔ)言障礙調(diào)用相同的示例。

總結(jié)

以上是生活随笔為你收集整理的Deep Learning部署TVM Golang运行时Runtime的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。