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