Deep Reinforcement Learning
使用說明書
這份檔案是我重新整理過,大部分的內容主要都是來自我的部落格,只是我將閱讀的順序做個整理,目的是讓那些對深度學習學打遊戲有興趣的人可以給他們個基礎文件去實作,只要照著這份文件從頭到尾做一次,相信很快就能建立出一個深度學習的環境出來,而不用像我以前一樣漫無目的地在網路上尋找相關資料,著實節省許多時間。
我們要跑出的例子是這個,這是一支訓練機器人從無到有學會打乒乓球的一支程式,從無到有學會以我的顯卡1070來說大約花四個小時的時間訓練完成。
https://github.com/asrivat1/DeepLearningVideoGames
當然網站上還有許多其他的程式,不過經過我的篩選後我覺得這支程式是最適合新手的,程式碼淺顯易懂很快就可以上手
簡易版 GPU (限定 cuda 7.5, cudnn v4.0) 15
複雜版 安裝任意版本 cuda cudnn (從來源安裝) 15
-
安裝linux
-
-
下載可以製作開機碟的程式:
-
https://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
下載完後圖示..........................
-
-
下載要安裝的Linux系統-14.04LTS:
-
https://www.ubuntu-tw.org/modules/tinyd0/
-
-
將系統運用剛剛下載的開機碟程式放入隨身碟中:
-
-
-
將安裝隨身碟插入電腦修改Grub設定
-
如果你將剛剛的隨身碟直接插入已經換好顯卡的那台電腦,你會發現無法進入安裝畫面,這是因為預設的Linux14.04版本的頻率和你顯卡的頻率不同所導致,因此你進入後馬上就會出現 out of range 的字樣,所以這時我們要對開機Grub做點小小改變,在開機的時候不要按選擇作業系統進去,先按e 編輯進入畫面,然後將找到文件中下面這行字,quiet splash nomodeset 並在它後面加上紅色字串,但這僅僅只是暫時的,稍候我們還是要進入到系統中去修改grub文件
參考資料:http://shamangary.logdown.com/posts/773013-install-torch7-cuda-cudnn-nvidia-driver
-
-
正式安裝Linux:
-
選擇其他
-
-
-
-
-
分割硬碟
-
-
這裡注意如果是空的硬碟,需要點擊那個空間,然後按減號,才可以變為 Linux 的 free space ,選擇 + 號才可以開始分割您的隨身碟 ,用來安裝開機程式的裝置請選擇 根目錄 '/ '
-
-
-
Linux目錄意義
-
-
「/」
所謂的根目錄,一切的起點,所有的目錄都從「根」開始,一個接一個的掛下去。意義跟Windows的C:\很像。所有的目錄一定都會掛在根目錄底下,所以一定會佔到一個分割區。
「/home」
所謂的家目錄,使用者的桌面資料、文件、音樂、個人設定檔等等,都會在這個資料夾。通常以帳號分別,例如筆者創了一個叫「amola」帳號,家目錄就會是「/home/amola」,如果筆者又多建了一個「aluba」帳號,家目錄就是「/home/aluba」,以此類推。
「/home」的作用幾乎跟Windows系統的「我的文件(My Documents)」一致,但「/home」底下還會有軟體設定檔,每一個帳戶登入的軟體設定都存在這裡,瀏覽器或P2P程式的預設下載目錄,也一定會在/home/個人帳號/這個範圍內。重要性跟「我的D槽」不相上下。
「swap」
指的是置換空間,也是所謂的虛擬記憶體。關於這個空間的利用最有爭議,說法也有很多。也有人提供將swap分割區轉成實體檔案掛載的教學。不管怎樣,swap可以說是僅次於根目錄以下最重要的分割區,地位等同Windows系統的pagefile.sys。多了他乍看好像不一定有什麼效能優化,但少了他會很麻煩。
「/media」跟「/mnt」
其實這兩個資料夾的意思很像,都是「掛載」外部新增的硬體設備。較早的Linux系統僅出現「/mnt」這個資料夾,並設定為預設的掛載資料夾。如果使用者新買了顆硬碟,裝進電腦裡,Windows的做法會多給他一個英文字母做為磁碟機代號,Linux則會先處於「未掛載」的狀態,除非使用者另外下指令,或是透過修改設定檔的方式去主動掛載他,才能繼續利用。之所以會叫做「mnt」,一般認為是源於掛載(mount)的意思。
-
-
安裝完系統後進入grub文件修改
-
我選擇用 gedit編輯器,關於編輯器的選擇有很多種,有vim,nano...等,可以參考
http://linux.vbird.org/linux_basic/0310vi.php,跟上面的步驟一樣,將nomodeset加入文件中
sudo gedit /etc/default/grub
儲存之後重新讀取更新,這樣我們就解決進入黑屏的問題了
sudo update-grub
-
-
安裝顯卡驅動
-
安裝完後進入系統會發現解析度不對,這是因為我們還沒安裝 Nvidia 驅動程式, 由於這塊GPU太新,所以用apt-get 會找不到符合的驅動,因此要從 ppa 下載,因此輸入以下指令安裝
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-367
-
-
檢查安裝正確與否
-
如果開啟 software呈現如以下畫面說明應該是安裝好了
-
安裝 cuda
-
首先官網下載cuda安裝包 8.0:
-
https://developer.nvidia.com/cuda-toolkit
-
-
下載好了後執行安裝
-
切記 不要再安裝顯卡驅動了 因為我們剛剛已經安裝過了
sudo sh cuda_8.0.27_linux.run
-
-
設置環境
-
sudo gedit /etc/profile
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
source /etc/profile
檢查path,有進去就對了
echo $PATH
-
-
檢查cuda 安裝成功與否:
-
到 sample 資料夾底下
cd /usr/local/cuda-8.0/samples
編譯
make -j
然後到資料夾中找到程式執行
cd /usr/local/cuda-8.0/samples/bin/x86_64/linux/release
執行程式
./deviceQuery
出現以下圖片代表成功
打 nvcc --version 確認是否如以下
-
安裝 cudnn
-
cudnn 介紹:
-
NVIDIA cuDNN 是一個為深層神經網路設計的 GPU 加速原式函式庫,提供經過調校的常式建置方法,這些常式則常用於 DNN 應用,例如:
-
旋積
-
Pooling
-
Softmax
-
神經元動作包括:
-
Sigmoid
-
Rectified Linear (ReLU)
-
Hyperbolic Tangent (TANH)
-
當然所有這些函數支援一般向前和往回傳送功能。 cuDNN 的旋積常式主要力求效能上的優勢,並在大量減少記憶體需求的情況下優於相同常式的最快速 GEMM 建置方法。
cuDNN 擁有客製化的資料格式,針對其所有常式的輸入和輸出所用的 4D 張量支援不同尺寸的先後排序、 Striding 和 Subregion 功能。這種靈活性可在任何神經網路內進行簡單的整合,並可避免 GEMM 旋積有時需要的輸入/輸出調換步驟。
cuDNN 可讓深層神經網路開發人員透過簡易的方法取得頂尖的效能,並可專注於設計他們的應用和解答機器學習的問題,而無需額外編寫客製化的程式碼。 cuDNN 可在 Windows 或 Linux OSes 環境執行,並可與全部 NVIDIA GPU,從 Tegra K1 等低功耗嵌入式 GPU 到 Tesla K40 等高階伺服器 GPU 並用。當開發人員使用 cuDNN 時,他們可以放心得到現有和未來 NVIDIA GPU 的高效能,而且可從未來全新的 GPU 功能和特性受惠。
-
-
下載
-
也是到官網下載,要註冊,https://developer.nvidia.com/rdp/cudnn-download
-
-
解壓縮資料夾
-
tar -zxvf cudnn-8.0-linux-x64-v5.0-ga.tgz
裡面是一個cuda 資料夾 包含
複製裏面資料到 local/cuda 裏面
cd ../cuda/lib64
sudo cp ./* /usr/local/cuda/lib64/
cd ../cuda/include
sudo cp cudnn.h /usr/local/cuda/include/
更新他們的軟連結
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
-
檢查cudnn 安裝成功與否:
到官網下載cudadnn sample
解壓縮
tar -zxvf cudnn-sample-v5.tgz
到目標資料夾
cd mnist CUDNN
編譯
make -j
執行
./mnistCUDNN
有可能會跑出下列錯誤
./mnistCUDNN: error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory
解決方法:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
成功跑出範例:
-
安裝Tensorflow
Tensorflow 官網:
https://www.tensorflow.org/versions/r0.10/get_started/os_setup.html#pip-installation
-
簡易版(沒有GPU):
到官網選擇您要的python 版本,這裡選擇 python 2.7, 打入下面指令
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
執行安裝
sudo pip install --upgrade $TF_BINARY_URL
-
簡易版 GPU (限定 cuda 7.5, cudnn v4.0)
一樣方法, 選擇作業系統版本 打入下面指令 (小編是 Ubuntu 14.04 64bit)
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
安裝:
sudo pip install --upgrade $TF_BINARY_URL
-
複雜版 安裝任意版本 cuda cudnn (從來源安裝)
因為這張顯卡算蠻新的,所以安裝cuda 7.5 會造成很多問題,網路上查閱相關資料發現 cuda 8.0 是最符合的,因此只有唯一的安裝方法 Install From Source,大概說一下,從來源安裝的意思就是 去clone tensorflow 原始碼,然後經由 google 開發的軟體 bazel 進行編譯 , 有點類似 Cmake,最後自己做出 pip 安裝包,經由pip 安裝。
-
先安裝相關包
sudo apt-get install swig python-dev python-numpy python-wheel python-pip
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
bazel 官網:https://bazel.build/versions/master/docs/install.html#ubuntu
按照官網描述 先從PPA安裝 JDK8.0
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
下載安裝檔:檔源:https://github.com/bazelbuild/bazel/releases
這裡選擇 bazel-0.3.1-installer-linux-x86_64.sh
下載完成後 執行安裝
./bazel-0.3.1-installer-linux-x86_64.sh --user
設置環境
gedit etc/profile
再最後面加上
export PATH="$PATH:$HOME/bin"
執行
source /etc/profile
在terminal 打上 bazel 安裝成功圖示
-
設定 tensorflow 環境
cd移動到 tensorflow 根目錄 執行configure 一步一步根據你的環境設定
下圖為我的設定圖
./configure
-
開始用bazel編譯tensorflow
下載源代碼:
git clone https://github.com/tensorflow/tensorflow.git
修改資料
到tensorflw根目錄 移到 third_party/gpus/crosstool/CROSSTOOL
打開資料 找到相關的程式碼 往下加入此行
cxx_builtin_include_directory: "/usr/local/cuda-8.0/include"
開始用bazel compile tensorflow
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
成功畫面:
-
建立出 安裝的package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
-
安裝
sudo pip install /tmp/tensorflow_pkg/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
-
測試tensorflow程式碼:
#!/usr/bin/env python
# Author: Abhay Harpale
# Website: abhay.harpale.net/blog/
"""
gpu test for tensorflow
"""
import tensorflow as tf
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print sess.run(c)
如果畫面如下 就表示成功
參考資料:
-
安裝Anaconda
如果你是python 新手 ,那我強烈建議你可以安裝 Anaconda 包來學習python,因為python 最強大的就是有許多依賴包可以安裝,但是新手通常會卡在安裝卡很久,我就是過來人 有pip install easy-install wheel install,剛開始模模糊糊的,甚至安裝時還遇到一堆錯誤,後來才發現 Anaconda 這個包
Anaconda 的特點:
1.包含了眾多流行的科學、數學、工程、數據分析的 Python 包
2.完全開源和免費
3.額外的加速、優化是收費的,但對於學術用途可以申請免費的 License
4.全平台支持:Linux、Windows、Mac
5.支持 Python 2.6、2.7、3.3、3.4,可自由切換,
6.內帶spyder 編譯器
7.自帶jupyter notebook 環境 (舊版的ipython notebook
-
到官網下載
https://www.continuum.io/downloads
從官網載下來的檔案
-
執行安裝指令
cd 到檔案位置 執行以下命令
bash Anaconda2-4.1.1-Linux-x86_64.sh
他會要你閱讀一些條約 並問你同不同意 按Enter 就可以一直看下去
如果想要跳過 有個小技巧 可以直接按 Ctrl + C
填寫 yes 並按下 Enter
接下來問你要安裝的位置,如果不想變就直接按 Enter 吧,最後會問你要不要 加入 ~/.bashrc 的環境變數,選擇是,最後檢查一下環境變數正確與否
-
開啟方式
再來就是要開啟好用的spyder 但是我發現他好像沒有安裝
開啟方法,只要再terminal 打spyder 就可以了,然後這視窗都不能關閉,關了spyder 就關了
-
注意事項
重要!! 必須記住系統python 和 Anaconda 安裝python 包的位置
/home/darren/anaconda2/lib/python2.7/site-packages
/usr/local/lib/python2.7/dist-packages
-
安裝相關依賴項目
所有前置工作都完成後,就可以開始安裝跑程式的主要依賴項了,我們要跑的程式是這個:https://github.com/asrivat1/DeepLearningVideoGames
當然網路上也有許多其他的範例,但我發現這支程式比起其他範例更容易讓人理解。
這是一個用深度學習機器人從無到有打乒乓球的AI程式
依照官網的敘述我們有以下東西需要安裝,前兩項我們剛剛就已經裝完了,剩下pygame以及open-cv需要安裝而已
-
Python 2.7 or 3
-
TensorFlow 0.7
-
pygame
-
OpenCV-Python
-
安裝pygame
conda install -c https://conda.binstar.org/kne pygame
-
安裝open-cv
conda install opencv
-
測試程式
將以上步驟全部執行完成時,用anaconda執行文件中的 deep_q_network.py 檔案,先到左上角按檔案,然後找到檔案位置按開啟,之後調整成以下設定
如果出現以下畫面而且沒有發生錯誤的話就代表成功了
留言列表