TensorFlow.NET 在工业部署中的应用
前言
深度學(xué)習(xí)訓(xùn)練的模型 如何快速地在工業(yè)應(yīng)用中進(jìn)行部署,這一直是工業(yè)領(lǐng)域深度學(xué)習(xí)技術(shù)應(yīng)用的痛點(diǎn)。
我們來(lái)看下TIOBE 2020年7月 的 TOP 10 編程語(yǔ)言排行榜:
從上圖中可以看到,Python 占據(jù)了 第 3 名,C# 在 第 5 名。
在深度學(xué)習(xí)的科研和開發(fā)中,目前是以 Python 語(yǔ)言為主流,但是在傳統(tǒng)的工業(yè)生產(chǎn)環(huán)境中,依然是 微軟.NET 的天下,其中主要的開發(fā)語(yǔ)言為 C#。
那么,如何解決不同語(yǔ)言框架開發(fā)之間的兼容,如何快速有效地進(jìn)行模型部署,接下來(lái),我們介紹 Google 官方推薦 .NET 開發(fā)者使用的,同時(shí)也是 微軟 ML.NET 的底層深度學(xué)習(xí)框架之一的,來(lái)自 SciSharp 的 TensorFlow.NET 。
我們通過圖文的方式,來(lái)逐一看下 TensorFlow.NET 在工業(yè)應(yīng)用中的各種優(yōu)勢(shì)。
1. 模型部署 無(wú)縫對(duì)接
當(dāng)前生成環(huán)境的工業(yè)軟件主要有以下特點(diǎn):
封閉性和保密性,數(shù)據(jù)敏感,無(wú)法接入外部互聯(lián)網(wǎng);
整體軟件基礎(chǔ)架構(gòu)自主開發(fā);
運(yùn)行速度和穩(wěn)定性要求高,離線單機(jī)設(shè)備多;
總結(jié)自己在工業(yè)中的深度學(xué)習(xí)應(yīng)用案例,模型部署主要有以下 3 種方式,我們分別列舉其部署方式和優(yōu)缺點(diǎn)。其中,采用 TensorFlow.NET 的方式可以直接在 .NET [ C# ] 環(huán)境下,集成 GPU 訓(xùn)練和推理,代碼塊可以直接嵌入現(xiàn)有的工業(yè)軟件框架,實(shí)現(xiàn)模型部署無(wú)縫對(duì)接。
1.1 Python GPU 訓(xùn)練 + 推理
原理簡(jiǎn)述
訓(xùn)練:Python GPU版本 TensorFlow
推理:Python CPU or GPU版本 TensorFlow
模型部署:Python 加載模型,通過 Post 通訊,接收?qǐng)D像進(jìn)行推理,返回 Json 格式結(jié)果
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):服務(wù)器/客戶端分離,支持多客戶端并行運(yùn)算
缺點(diǎn):需要安裝和運(yùn)行Python和.NET 2種框架,部署流程和架構(gòu)復(fù)雜
圖示說明
通訊方式:
1.2 Python GPU 訓(xùn)練 + TensorFlowSharp CPU 推理
原理簡(jiǎn)述
訓(xùn)練:Python GPU版本 TensorFlow
推理:CPU版本 TensorFlowSharp
模型部署:TensorFlowSharp 加載Python訓(xùn)練出的模型,并直接進(jìn)行推理
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):客戶端單一的 .NET 環(huán)境,部署簡(jiǎn)單,代碼結(jié)構(gòu)簡(jiǎn)潔
缺點(diǎn):TensorFlowSharp目前社區(qū)已不維護(hù),無(wú)新版本支持,且無(wú)GPU版本支持 無(wú)法進(jìn)行訓(xùn)練
圖示說明
附:TensorFlowSharp 的GPU版本擴(kuò)展
如果需要使用帶 GPU 的 TensorFlowSharp,就需要自己通過 C++ 編譯帶 Cuda 的 DLL,編譯流程如下:
(或參考Google官網(wǎng)的流程:https://www.tensorflow.org/install/source_windows)
安裝 Python 和 TensorFlow 軟件包依賴項(xiàng)
安裝 對(duì)應(yīng)版本的 Bazel
安裝 MSYS2
安裝 Visual C++ 生成工具 2015
安裝 GPU 環(huán)境支持
下載 TensorFlow 源代碼
編譯腳本修改 適合自己的系統(tǒng)環(huán)境
使用編譯腳本進(jìn)行編譯
將編譯后的DLL重命名為TensorFlowSharp默認(rèn)的 libtensorflow.dll,并進(jìn)行替換即可
上述流程整體還是較復(fù)雜的,其中編譯腳本修改的環(huán)節(jié),可能會(huì)出現(xiàn)很多坑,需要自己去摸索。
1.3 TensorFlow.NET GPU 訓(xùn)練 + 推理
終于來(lái)到我們的重點(diǎn)推薦框架,來(lái)自 SciSharp 社區(qū)的 TensorFlow.NET ,該框架同時(shí)支持 CPU 和 GPU 版本的模型訓(xùn)練和推理,同時(shí)作者和社區(qū)成員們也在持續(xù)努力維護(hù)中,目前 TensorFlow 2.x 對(duì)應(yīng)的框架已經(jīng)在開發(fā)中。
原理簡(jiǎn)述
訓(xùn)練:GPU 版本 TensorFlow.NET
推理:CPU or GPU 版本 TensorFlow.NET
模型部署:TensorFlow.NET GPU版本 訓(xùn)練出的模型直接調(diào)用
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
TensorFlow在.NET環(huán)境下的GPU支持
模型訓(xùn)練和部署 可以在同1套程序中集成,無(wú)需外部通訊
Google官方推薦.NET開發(fā)者使用,同時(shí)作為ML.NET的底層深度學(xué)習(xí)框架
圖示說明
通過TensorFlow.NET,你可以輕松打造1套可視化交互式的深度學(xué)習(xí)集成軟件,支持GPU訓(xùn)練和推理,同時(shí)通過DLL引用即可快速完成工業(yè)生產(chǎn)部署,所有的操作都在統(tǒng)一的.NET環(huán)境進(jìn)行,可以將各操作類庫(kù)標(biāo)準(zhǔn)化封裝,部署便利性和穩(wěn)定性極高。
下述是作者基于TensorFlow.NET開發(fā)的一套機(jī)器視覺的深度學(xué)習(xí)通用平臺(tái),集成了OpenCV的大量算子和深度學(xué)習(xí)模塊,同時(shí)實(shí)現(xiàn)大量可視化操作,可以直接交付現(xiàn)場(chǎng)生產(chǎn)環(huán)境使用,達(dá)到深度學(xué)習(xí)無(wú)基礎(chǔ)快速應(yīng)用的目的。
2. 較Python性能大幅提升
我們通過一個(gè)相同數(shù)據(jù)集的1000輪的線性回歸的例子的運(yùn)行,我們對(duì)比 C# 和 Python 的運(yùn)行速度和內(nèi)存占用,發(fā)現(xiàn) C# 的速度大約是 Python 的2倍,而內(nèi)存的使用,C# 只占到 Python 的1/4 ,可以說 TensorFlow 的 C# 版本在速度和性能上同時(shí)超過了 Python 版本,因此,在工業(yè)現(xiàn)場(chǎng)或者實(shí)際應(yīng)用時(shí),TensorFlow.NET 除了部署上的便利,更有性能上的杰出優(yōu)勢(shì)。
下述2個(gè)圖是具體的對(duì)比運(yùn)行示意圖:
3. GPU環(huán)境無(wú)需部署 一鍵使用
詳細(xì)文章請(qǐng)?jiān)L問路徑:https://github.com/SciSharp/TensorFlow.NET-Tutorials/blob/master/%E4%B8%89%E3%80%81%E5%B7%A5%E4%B8%9A%E5%BA%94%E7%94%A8%E4%B8%8E%E6%A1%88%E4%BE%8B-1.%20TensorFlow.NET%20%E5%88%9D%E6%8E%A2.md
(或掃下述二維碼轉(zhuǎn)至)
你是否踩過GPU環(huán)境部署中Cuda和cuDNN的坑,是否為如何進(jìn)行深度學(xué)習(xí)GPU訓(xùn)練軟件的移植和快速應(yīng)用而煩惱,那么本文就是為了解決這些問題而制作的,一鍵部署GPU,最大化體現(xiàn).NET優(yōu)勢(shì),徹底解決GPU環(huán)境配置的繁瑣問題,讓你專注于深度學(xué)習(xí)算法和模型的開發(fā)。
本文主要適用于下述情況:
一鍵部署深度學(xué)習(xí)訓(xùn)練軟件,無(wú)需安裝復(fù)制的Cuda、cuDNN和配置環(huán)境變量等;
希望將GPU加速的訓(xùn)練軟件整體打包、移植使用,軟件安裝綠色簡(jiǎn)便化;
GPU訓(xùn)練版本軟件開發(fā)完交付客戶,避免因客戶PC配置差異導(dǎo)致的軟件無(wú)法正常使用;
簡(jiǎn)單地復(fù)制粘貼,即可一鍵完成GPU訓(xùn)練環(huán)境部署,確保GPU環(huán)境安裝“0”差錯(cuò);
需要在一臺(tái)機(jī)器上 同時(shí) 跑多個(gè)版本TF和多個(gè)版本Cuda的開發(fā)環(huán)境
原理說明:
利用.net的封裝優(yōu)勢(shì),將 tensorflow.dll、TensorFlow.NET.dll 及 NVIDIA GPU 相關(guān)必要的 DLL 全部提取,拷貝至應(yīng)用程序相同目錄下,伴隨可執(zhí)行文件打包、移植使用,實(shí)現(xiàn) GPU 環(huán)境跟隨主程序版本打包應(yīng)用的效果。
4. 完整案例:在C#下使用TensorFlow.NET訓(xùn)練自己的數(shù)據(jù)集
本文主要結(jié)合代碼來(lái)詳細(xì)介紹如何使用 SciSharp STACK 的 TensorFlow.NET 來(lái)訓(xùn)練CNN模型,該模型主要實(shí)現(xiàn) 圖像的分類 ,可以直接移植該代碼在 CPU 或 GPU 下使用,并針對(duì)你們自己本地的圖像數(shù)據(jù)集進(jìn)行訓(xùn)練和推理。
詳細(xì)文章請(qǐng)?jiān)L問路徑:
https://github.com/SciSharp/TensorFlow.NET-Tutorials/blob/master/%E9%99%84%E5%BD%95%EF%BC%9A2.%20%E5%9C%A8C%23%E4%B8%8B%E4%BD%BF%E7%94%A8TensorFlow.NET%E8%AE%AD%E7%BB%83%E8%87%AA%E5%B7%B1%E7%9A%84%E6%95%B0%E6%8D%AE%E9%9B%86.md
(或掃下述二維碼轉(zhuǎn)至)
加入TFUG蘇州
參與TFUG社區(qū)活動(dòng),可以是組織者,志愿者,講師(不一定是大牛,只要能分享相關(guān)經(jīng)驗(yàn)即可)等;也可以是合作伙伴,為社區(qū)提供各種資源。
如果您想作為TFUG蘇州的組織者或志愿者,或者有任何意見或建議,歡迎給我們的公眾號(hào)留言!
微信公眾號(hào):?TFUG蘇州
Join Us
If you love TensorFlow, machine learning and willing to share, if you have?other great ideas about our activities,?if you are interested in our community and activities here, please contact us!?
WeChat:?TFUGSuzhou
關(guān)注我們的公眾號(hào),第一時(shí)間獲取最新活動(dòng)消息
Gmail: tfugsuzhou@gmail.com?
微信號(hào):
總結(jié)
以上是生活随笔為你收集整理的TensorFlow.NET 在工业部署中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修复被破坏的 vs 工程设置
- 下一篇: asp.net ajax控件工具集 Au