[20200318更新]注意:之前關於下載CUDA與cuDNN的版本我寫錯了,首先道個歉。如果要想用Tensorflow利用GPU進行訓練,就需要Tensorflow、CUDA、cuDNN的版本對應一致。之前我弄錯了!我們后面用的Tensorflow的版本是2.0.1,所以對應CUDA的版本應該是CUDA v10.0,而相應的cuDNN v7.6.5即可,下面的截圖都是我之前錯誤的10.2.89版本,是不能用GPU進行訓練的(雖然還可以用CPU進行訓練)!!!但是安裝過程都是一樣的。因此后文修改一下文字內容,圖片就不改了。!一定要先看到這一行~別搞錯了!
一、ML-Agents簡介
近期在學習Unity中的機器學習插件ML-Agents,做一些記錄,用以簡單記錄或交流學習。
先簡單說一下機器學習使用的環境場景:高視覺復雜度(Visual Complexity,例如星際爭霸、Dota2職業玩家與AI競技)、高物理復雜度(Physical Complexity,例如模擬兩足、四足生物行走,這里Unity ML-Agents官方也有相關例子)、高認知復雜度(Congnitive Complexity,例如AlphaGo)。以上幾種場景利用傳統算法較難搞,而利用機器學習,會更加容易解決這些問題。
而ML-Agents(Machine Learning Agents),則是Unity中使用的一款開源機器學習插件,利用該插件,可以實現一些游戲對象的智能操作。例如控制 NPC 行為(采用各種設置, 例如多個 agent 和對抗)、對游戲內部版本進行自動化測試、以及評估不同游戲設計決策的預發布版本等等。
ML-Agents中主要有兩種學習方法:強化學習(Reinforcement Learning)和模仿學習(Imitation Learning),它們各自特點如下:
-
強化學習:通過獎勵(Reward)學習;試錯;超高速模擬;代理(Agent)在任務中趨向“最優”。官方最開始幾個例子都是強化學習。

如上圖,其中Agent就是在游戲對象上的代理,通過外部環境(這里在訓練的時是利用外部PythonAPI,或是使用訓練好的TensorFlow模型)根據Agent的行為(Action)來返回激勵(狀態或是獎勵),Agent接收到激勵后,再改變自己的行為反饋給外部環境,從而形成閉環學習過程。
-
模仿學習:通過示例(demonstration)學習;沒有獎勵的必要;實時交互;代理(Agent)在任務中趨向“人一樣的行為”。

AI會借助特定模仿對象的行為學習,實際操作中AI會實時收集老師的示范操作,幫助學習,在實時交互的過程中,讓AI更趨向人的行為。
更多ML-Agents的介紹會在之后記錄,例如ML-Agents的架構等等。
二、環境部署及各軟件版本
主要下載這么幾個東西(附帶版本號,近期入手的,所以版本都整最新的搞起【2020.03.08】):
-
Unity 2019.2.0f1 (64-bit)。這里用的是Unity2019.2版本,其他版本應該也行,最好2018保底。
-
ml-agents v0.15.0。官方ml-agents更新有點快,因為我最近學,所以也上最新master的了,但並不是穩定版本,與之前ml-agents有所區別,而且發現不需要在場景中建立附加Academy腳本的物體了,這玩意在最新版里搞成單例了。
-
CUDA v10.0。這個主要和Tensorflow-GPU版本有關系,我們后面用到的是TensorFlow2.0.1,所以下載CUDA對應為v10.0。
-
cuDNN v7.6.5。這個又是和CUDA進行匹配的,cuDNN v7.6.5 for CUDA 10.0。
-
Anaconda3 v2019.10。另外我建立的工程中,Python版本是v3.7.6,TensorFlow的版本對應是2.0.1。
下面一一講解如何對這些進行安裝。
三、安裝CUDA與cuDNN
CUDA與cuDNN是干啥的,貼網上兩段話:“CUDA是NVIDIA推出的CUDA運算平台的工具集,CUDA提供了一個強大的開發環境,用於開發高性能的GPU加速應用。通過CUDA,你能開發、優化和部署你的應用在多種平台,例如GPU加速嵌入式系統、桌面工作站,企業數據中心,雲平台和HPC超級計算機。”、“cuDNN專門針對深度神經網絡框架設計的一套GPU計算加速方案。全世界的深度學習研究者和框架開發者都使用CUDNN來增強GPU計算性能。”這里其實不太清楚對A卡是咋適配的,所以我默認使用的都是N卡。。。
簡而言之,這兩個東西就是給顯卡配置環境的,讓你的顯卡具有機器計算的環境。話不多說,直接開始:
1、下載CUDA v10.0
地址:https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64
現在點進去應該直接就是10.0版本的下載,不是的話點擊“Legacy Releases”找,也可以直接下載最新的試試看。我是Windows系統,因此以Windows為例(別的系統。。還是自己再找找有沒有別的配置方案)。

點擊之后出現如下畫面,可以照我的選。

這里面Version是選系統的版本。Installer Type就是選擇安裝類型,如果選擇exe(local),那就是要下載CUDA完整包,前面的exe(network)會利用官方的下載器下載。兩個都可以試試,看哪個快,我是用下載器下載比較快。
2、安裝CUDA
注意:開始安裝CUDA前,需要關閉任何正在運行的Unity和Visual Studio程序。
如果下載network類型的話,下載好后直接打開,解壓地址隨意選擇,點OK。出現如下畫面。

注意:這里會檢查系統的兼容性,如果不兼容的話,它會有Warning的提示,要是沒有直接顯示同意NVIDIA軟件許可協議的話,就要注意了,這里應該是CUDA的版本與你的顯卡不兼容,所以可以試着換個低版本的CUDA下載安裝。
如果CUDA版本與顯卡版本匹配的話直接顯示許可協議同意,如下圖。


后面的可以都默認,一路“下一步”,裝完就OK。
3、安裝cuDNN v7.6.5 for CUDA 10.0
地址:https://developer.nvidia.com/cudnn
在頁面中選擇“Download cuDNN”。

點擊后,會出現以下畫面,這里我們需要有一個NVIDIA的賬號,有的話直接登錄,沒有的話花2分鍾注冊一個登錄即可。

我這里直接登錄,出現的畫面中點擊“I Agree to the Terms of the……”。

這里我們選擇和之前CUDA對應的版本來下載,之前我們下載的是CUDA 10.0,因此選擇第三個。打開選項后選擇對應系統版本進行下載,我們這里選擇Win10。

下載之后是一個壓縮包,如下。

解壓之后,將解壓文件中的“bin”、“include”、“lib”三個文件夾覆蓋到之前CUDA安裝的路徑下,如果之前CUDA安裝時未改路徑的話,應該是這個路徑:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

至此,CUDA和cuDNN安裝完畢,下面還要對“環境變量”進行配置。
4、設置環境變量和路徑
在開始菜單中,搜索“envir”,總之進入“編輯系統環境變量”。

點擊“環境變量”。

然后在“系統變量”中點擊“新建”,按下圖輸入。

注意,上面是用戶的環境變量,下面是系統的環境變量,我之前沒注意,都把這些變量加到上面去了,不過應該只要用自己的用戶登錄都行,大家可以把變量加到下面去。
然后還要在在系統變量的“Path”中加入兩個路徑。


以上就是CUDA和cuDNN的環境變量配置,之后裝AnaConda3還需要進行環境變量配置,之后會有寫到。
再次提醒!!!!我們上面的圖片上雖然下載的是CUDA v10.2,但是實際上我們要用的是CUDA v10.0版本的,要對應我們Tensorflow的版本才行!!!希望大家對應文字來下載配置,隨機應變,不要只是看圖了,我們這里用CUDA v10.0哦,不是10.2!!!!!!
四、安裝Anaconda
1、下載Anaconda3 2019.10
地址:https://www.anaconda.com/distribution/
進入網站后,找到下面的截圖,按自己的系統需要下載。

下載好后,進行安裝。

一路下一步就行,最好選擇默認路徑進行安裝,里面的選項選不選也隨意,然后Install就行。
2、Anaconda環境配置
這一步應該不是必須的,但以防萬一,還是配置一下。還是進入“編輯系統環境變量”,在系統變量(或用戶變量)的Path里新建以下四個地址(這里的地址是根據之前Anaconda安裝路徑來設定的,我這里的路徑是默認路徑):

五、ml-agents環境配置
1、下載ml-agents源碼
下載地址:https://github.com/Unity-Technologies/ml-agents
我下的是master分支上的,也就是2020年3月5號左右,版本是0.15.0。

當然,在git上下載太慢了,而且下下來可能壓縮包還包含錯誤,坑的呀批。所以建議利用碼雲下載,快捷方便,具體可以看下面網址的教程:
https://blog.csdn.net/TeFuirnever/article/details/99110367
下載好后在任意地方解壓,如下。

以上源碼下載好后,以作備用,下面先配置Anaconda。
2、Anaconda換源
在用Anaconda創建環境時,會自動下載相應的依賴庫,包括python、tensorflow、pip、wheel等等。雖然我也不知道這些是干啥的。。。但是默認用國外的地址下載慢的要死,而且很有可能在創建環境時失敗!
所以需要換下載這些庫的地址,方法很多,網上很多是敲命令行,我這里直接修改配置文件來換源。找到C:\Users\<你的用戶名>文件下,有一個名為“.condarc”文件,則是Anaconda的配置文件,打開進行編輯。

可以直接按我的進行配置,我配置的是清華的鏡像源,里面好像還亂入了個中科大的。
https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
然后保存,進行下面的步驟。
3、Anaconda創建環境
Anaconda的環境創建可以用Anaconda Prompt,也就是命令行來建立,也可以利用Anaconda Nvigator來創建,后者主要是可視化的創建過程。這玩意其實就是搭建訓練平台,之后Unity中的項目訓練通過socket和Anaconda中你搭建好的mlagents環境進行通信,實現訓練過程。
首先找到“Anaconda Navigator”運行。

運行后找到“Environments”,新裝的里面只有一個“base(root)”,我這里之前已經建立好了一個ML_Agents,不用管它,我們新建一個,點擊“Create”。如下圖:

點擊后,出現如下對話框,其中Name隨意寫,Python版本就選3.7。

然后建立,會等一會兒,可以看到右下角有進度條不停滑動,如果這里滑動半天,最后提示失敗,那就說明是因為依賴庫沒有下載下來,那你就需要參考前面的“Anaconda換源”來換個鏡像地址試試看。
這里如果成功的話,我們進行下一步。

建立成功后,例如我建立的環境叫“EnvirExample”,然后點擊三角符號,“Open Terminal”,這個時候我們就進入命令台模式了,之后都需要在這里輸入命令進行操作。

到這里后,我們cd到之前下好ml-agents源碼解壓的地方,例如我這里是桌面地址,則輸入如下命令:cd /d C:\Users\Xu\Desktop\ml-agents ,然后回車。

然后,下面需要恢復ml-agents需要的庫,這里需要裝兩個文件夾里的東西,分別是ml-agents-envs和ml-agents。

因此,下一步我們在命令行里先敲: pip install -e ml-agents-envs 。如下:

按理來說,這里會進行就會自動下載依賴文件了,結果我在這里卡了好久,可能會出現以下錯誤:

整了半天,還有各種別的錯誤出現,最后總結出來的原因是,因為鏡像站太慢或者是沒有相對應的庫,因此找到了解決方案:
http://www.manongjc.com/detail/8-newslizewxdvgby.html
上面的地址是解決方法,也可以不用看,在這一步,我們只需要修改命令為:
pip install -e ml-agents-envs -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
這樣的話,就可以通過豆瓣鏡像下載庫了,這里大坑。成功后的樣子:

然后,用同樣的方法下載ml-agents文件架下的庫,命令如下:
pip install -e ml-agents -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
若成功則顯示如下:

上面的樣子可能長得不一樣,總之如果安裝成功,那命令行里肯定沒有類似黃色、紅色的字體,就說明這兩個文件夾中的環境配置成功了!最麻煩的配置已經過去了。下面我們就可以開始使用了!!激動激動~
六、ML-Agents試運行
1、Unity官方訓練示例
我們這里直接用一個ml-agents官方的實例來實驗一下,先打開Unity,打開官方的項目,官方項目就在ml-agents源碼的“Project”文件夾中,如下圖:

我用2019直接打開,會提示我源工程版本較老,自動升級一下就行。
打開項目后,我們在Project->Assets->ML-Agents->Examples->3DBall->Scenes->中找到3DBall場景,如下:

這里我們可以直接運行,可以看到12個小平台努力不讓球掉落,這里每個平台的Agent已經有官方訓練好的Model了,后綴名為.nn,如下圖:


我們用ml-agents中的強化學習時,其實就是預先沒有這個訓練模型(即這個.nn文件),我們自己需要訓練一個出來。
2、訓練一個自己的模型出來
Unity先停止運行。
打開我們之前在Anaconda中的控制台,之前安裝完環境應該還沒關,當然要是關了重新打開的話,記的還是要選擇我們創建的環境,我的是“EnvirExample”,然后打開Terminal。同時還要cd到ml-agents的目錄去,我的在桌面,則輸入:cd /d C:\Users\Xu\Desktop\ml-agents 。

總之需要滿足前面括號里是你創建的環境,后面是ml-agents源碼目錄。
然后輸入以下命令,准備開始訓練:
mlagents-learn config\trainer_config.yaml --run-id=test01 --train

這里第二個“config\trainer_config.yaml”就是源文件中對此次訓練的配置文件。

出現畫面后,切換到Unity上開始運行項目。就可以進行訓練啦~

這個例子應該會訓練500000步,訓練完后,會輸出相應的模型文件。


這里就是訓練出的模型,可以替換Unity中的模型文件,試試看自己訓練出的數據。
在控制台里,還可以輸入一下命令查看訓練圖:
tensorboard --logdir=summaries

然后在瀏覽器里復制地址,我這里的是http://localhost:6006/。打開之后就可以看到訓練統計數據了~

至此,ml-agents的配置和初運行就大功告成啦~!
引用:https://www.bilibili.com/video/av49257917?from=search&seid=5553688680482591789
https://blog.csdn.net/u014361280/article/details/102782486#一、ML-Agents 介紹
https://github.com/Unity-Technologies/ml-agents/
寫文不易~因此做以下申明:
1.博客中標注原創的文章,版權歸原作者 煦陽(本博博主) 所有;
2.未經原作者允許不得轉載本文內容,否則將視為侵權;
3.轉載或者引用本文內容請注明來源及原作者;
4.對於不遵守此聲明或者其他違法使用本文內容者,本人依法保留追究權等。
