tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I
“ 一文概覽Tensorflow方方面面。”
大家好,我是人工智能工程師Alpha浪。
今天,我們開始「動手學習Tensorflow - Tensorflow 綜述」部分。
快速學習一門新技術的最好方法之一,就是首先對這門技術有著全局的認識,然后在深入了解每一部分的細節。
綜述就是最好的給你全局認識的讀物。
什么是Tensorflow
Tensorflow 是Google在2015年發布的一個端到端開源機器學習平臺。
它的前身是Google內部從2011年開始使用的Disbelief。
那么為什么叫做 Tensorflow 呢?
Tensor 表示多維數組,Flow表示流動,從字面上來看Tensorflow的意思為多維數組在流動。
Tensorflow將數值計算表達為一個計算圖,圖中的節點為算子,圖中的邊為多維數組。
一次數值計算由對應的多維數組 (Tensor) 流過相應的算子 (Operator)而表達,即Tensor 在Flow,所以叫做Tensorflow。
Why Tensorflow
為什么我們要選擇使用Tensorflow呢?
Tensorflow 由Google出品,Google家開源的工具一般都還不錯 (Google 大法好)。
Tensorflow有著強大的社區和生態,在工業界有著廣泛的成功案例。Tensorflow從2015年發布到2020年,已經是一項很成熟的技術方案了,部署在線上的Tensorflow,已經經歷過了數次雙十一流量高峰檢驗。
Tensorflow支持多種語言,C++, Python, java,javascript,swift etc。Java在國內是很多科技公司的線上編程語言,支持Java的tensorflow比那些只支持c++和python的庫要能打的很多。
Tensorflow支持分布式訓練和部署。
更多選擇Tensorflow的理由,我們在上一篇 深度學習框架紛爭 也有提及。
Tensorflow從2015年開源到現在,已經發布了104個版本,從單純的機器學習算法開發包,已經發展到一個巨大的生態系統,成為了一個端到端的機器學習平臺。
如今的Tensorflow包含以下四個部分:
- Tensorflow核心開源庫
- Tensorflow.js
- 針對移動設備和IOT設備的Tensorflow Lite
- 針對成產環境的Tfx和Tensorflow Serving
Tensorflow核心庫
Tensorflow核心庫是我們最常用的部分了,通過它,我們可以輕松構建機器學習模型。
通常來講,我們都是使用Tensorflow 核心庫的python api進行模型的編寫。
在下一篇文章中,我們會介紹Tensorflow入門實戰,本篇先介紹Tensorflow核心庫的一些基礎以及概念。
Tensorflow中的兩種模式Tensorflow中存在兩種模式。
在Tensorflow2.X之后,默認是eager execution模式,即動態圖模式。
動態圖模式,在執行計算的同時構建計算圖,可以像獲取python中的變量值一樣獲取Tensor中的值,編寫模型和調試起來非常方便。
在Tensorflow1.x的版本中,默認是非eager execution模式,即靜態圖模式。
靜態圖模式,首先進行計算圖的構建,然后在該計算圖上才執行多次計算來進行模型的訓練和評估。
Tensor值不能在它定義的時候獲取的到,只有在真正計算的時候才能從session中獲取,調試起來非常麻煩,被很多人吐槽。
動態圖模式非常適合線下編寫調試模型;靜態圖模式則比較適合線上的場景,一次構建好計算圖,然后在這個計算圖上執行計算,比邊構建圖邊計算工程效率要高很多。
Tensorflow三種實現模型的方式在Tensorflow中,我們可以有三種實現模型的方式。
在早期的Tensorflow1.x版本中,大家都是通過low-level api,直接使用graph和session來編寫模型。
在后來的Tensorflow1.x版本中,則是推薦使用Estimator來編寫模型。
在如今的Tensorflow2.x版本中,官方推薦使用Keras api來編寫模型。
Tensorflow編程模型中的一些基本概念Tensorflow中,我們會遇到以下概念:Tensor,Variable,Placeholder和 Operator。
廣義上說,Tensorflow中變量分為兩種類型,Tensor和Operator,其中,Tensor表示多維數組,包括了像Variable和Placeholder這樣的specific tensor。Operator表示算子,例如相加,相乘等。
例如,我們想執行下圖中的一個簡單的relu模型。
參數W和b我們會定義成Variable,一般模型的參數都會定義成Variable類型的Tensor。
輸入變量X會定義成Placeholder,Placeholder是我們要fed進計算圖的那部分tensor,例如輸入和label。
而像Add,MatMul和RELU則是算子,對輸入的Tensor值進行相關計算。
Tensorflow中模型的三種存儲格式Tensorflow中模型可以有三種存儲格式,分別是check point,saved model以及frozen graph格式。
Check point模型可能是我們接觸最多的模型格式了,我們在Tensorflow中直接模型存儲的方式就是以check point的格式來存儲。
Check point將全部學到的Variable tensor值進行保存,但是不保存模型結構,因此只有在模型source code存在的時候才能對check point格式的模型進行加載。
Saved model是Tensorflow Serving加載的模型格式。除了保存變量Variable的值之外,它還保存模型的結構,因此沒有模型的Source code也能對saved model進行加載。
Saved model格式常用在線上部署,例如通過Tensorflow serving來部署,或者通過tensorflow c++或者java api來進行模型的inference。
Frozen Graph格式目前在Tensorflow官方文檔中已經看不到了,但是它在業界還是有一定的應用場景的。
Frozen Graph根據模型的輸入和輸出,只保留在infercne階段和它們相關聯的計算圖中的節點和邊,進而可以去除掉在Inference階段用不到的tensor和operator,使得模型更小。
Tensorflow DatasetTensorflow Dataset是用來構建模型輸入pipeline的。
例如,我們通過Tensorflow Dataset來設定batch size的大小以及迭代的epoch輪數。
Tensorflow Dataset是Estimator和Keras Model的輸入格式。
TensorboardTensorboard 是Tensorflow中提供的可視化工具。
它不僅可以可視化模型試驗過程中模型的metrics,如accuracy,loss等;它還可以可視化計算圖中的節點和邊;同時它還可以可視化圖片,可視化降維后embedding的低維空間等。
值得提的一點是,不僅Tensorflow可以使用Tensorboard進行可視化,像Pytorch等也可以使用它做可視化。
TfDebugTfDebug還是Tensorflow1.x版本中的一個工具,現在在Tensorflow 2.x的文檔中中已經沒有了它的身影。
在Tensorflow1.x靜態圖模式下,只有在計算圖真正執行的時候才能獲取Tensor的值,而不能在Tensor定義的地方獲取它的值。
那是一段痛苦的記憶,那個時候只有通過Tfdebug這個工具,才能進行debug,既麻煩低效又痛苦。
現在Tensorflow2.x版本中,默認是動態圖方式,debug非常方便,TfDebug也就再也用不到了^_^ 。
Tensorflow中GPU的使用在這里要提一個在Tensorflow中使用GPU的好習慣。
Tensorflow默認會對GPU卡全部占用,即使是執行很少的運算。而如果這塊卡被一個人全部占用,那么其他人就得不到使用。
因此在使用gpu的時候,一定要進行以下設置:
可以使用tf.test.is_gpu_avaibalbe() 來查看當前gpu是否可用,如果不可用,要檢查下是否是gpu驅動沒有安裝,以及是否沒有安裝Tensorflow-gpu。
可以使用 os.environ['CUDA_VISIBLE_DEVICES'] = 0,1 來進行gpu卡的選擇。
我們會在下一篇文章中完成剩下的Tensorflow綜述部分。
總結
以上是生活随笔為你收集整理的tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可视化神器_详解Python
- 下一篇: 开发详细设计文档_郑州APP开发:开发前