教你從頭到尾利用DQN自動玩flappy bird(全程命令提示,GPU+CPU版)

v_JULY_v發表於2016-10-13

    教你從頭到尾利用DQN自動玩flappy bird(全程命令提示,GPU+CPU)



作者:驍哲、李偉、July
說明:本文分兩部分,第一部分為GPU版教程,第二部分為CPU版教程,兩個教程都主要由驍哲編寫,李偉校對,而最後跑的是yenchenlin的github開源demo。如遇問題歡迎加Q群交流:472899334。且若探究實驗背後原理,請參看此課程:深度學習線上班
時間:二零一六年十月十三日。



前言

    我們在上一篇教程《基於torch學汪峰寫歌詞、聊天機器人、影象著色/生成、看圖說話、字幕生成》中說到:“讓每一個人都能玩一把,無限降低初學朋友的實驗門檻”,那是否能把難度再次降低呢,比如部分同學不熟悉Linux命令咋整,那是不是不熟悉Linux命令就沒法折騰了?然既然是為了讓每個人都能玩一把,那就應該盡最大可能照顧到最大多數。

    本教程提供全程命令提示,以便讓Linux命令暫不熟的同學也能搭建起來。因此,自動玩轉flappy bird分三個步驟:

  1. 不管三七二十一,先把遊戲搭建起來
  2. 搭建起來後,Linux命令後續慢慢熟悉,熟悉後,一通百通,搭建其他實驗的環境也會立馬順暢許多
  3. 取得成就感和安心之後,再細細深究實驗背後之原理(當然,深度學習線上班上也會深究實驗背後原理)

   另本教程省略了ubuntu14.04安裝,如果此前沒安裝過Ubuntu,可以參看《教你從頭到尾利用DL學梵高作畫》裡的第4.1部分。且,本文字一開始只有GPU版的教程,但為照顧到沒有GPU的同學,特地在本文第二部分增加CPU版的教程,以讓每一個人都能玩。

   還是這個事,歡迎更多朋友跟我們一起做實驗,一起玩。包括本flappy bird在內的8個實驗:梵高作畫、文字生成、自動聊天機器人、影象著色、影象生成、看圖說話、字幕生成、flappy bird,今2016年內做出這8個實驗中的任意一個並在微博上AT@研究者July,便送100上課券,把實驗心得發社群 ask.julyed.com 後,再送100上課券。




第一部分、GPU版教程

1.1NVIDIA驅動、CUDAcudnn安裝

下載相應檔案,後續 使用,下載地址 : 

以下操作均使用root賬戶 

apt-get update (更新源)

apt-get install vim (安裝VIM,也可使用 emacs nano

vi /etc/default/grub (進入grub檔案)

啟用字元介面登入

將這行     GRUB_CMDLINE_LINUX_DEFAULT="quiet"  中的 quiet 修改為 text

GRUB_CMDLINE_LINUX_DEFAULT="text"

儲存退出

update-grub2 (更新一下)

reboot (重啟)

1.1.1、 Install NVIDIA Driver 安裝NVIDIA驅動

  cd /**/**/** (cdcuda所在檔案目錄下)    

  ./NVIDIA-Linux-x86_64-367.44.run   (安裝NVIDIA驅動,此檔案需執行許可權,chmod +x NVIDIA-Linux-x86_64-367.44.run

  reboot  (重啟)

1.1.2、 Install CUDA 安裝CUDA

  cd /**/**/** (cdcuda所在檔案目錄下)

  ./cuda_8.0.27_linux.run  (安裝CUDA,此檔案需執行許可權,如遇許可權問題 可執行  chmod +x 檔名

  accept之後第一個選項填寫“n”(該選項讓你選擇是否安裝NVIDIADriver,之前已經安裝過了,  所以不需要),之後一路“綠燈”。

vi /etc/default/grub    (開啟grub

啟用圖形介面登入

將這行     GRUB_CMDLINE_LINUX_DEFAULT="text"  中的 text修改為 quiet

儲存退出

update-grub2 (更新一下)

reboot (重啟)

1.1.3、 Install cuDNN 安裝cuDNN

  tar xvzf cudnn-7.5-linux-x64-v5.1-ga.tgz   (解壓)

CUDNN解壓,將解壓出來的檔案複製到 CUDA 目錄 如下

  sudo cp cuda/include/cudnn.h /usr/local/cuda/include  (複製)

  sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64   (複製)

  sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*   (加許可權)

CUDA Environment Path    新增CUDA的環境變數

終端中執行

  export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"

  export CUDA_HOME=/usr/local/cuda

  export PATH="$CUDA_HOME/bin:$PATH"  

 


1.2、原始碼安裝Tensorflow

apt-get install git  

Clone the TensorFlow repository    克隆Tensorflow

  git clone https://github.com/tensorflow/tensorflow

1.2.1、 Install Bazel   安裝Bazel

Install JDK 8   安裝JDK8

  sudo add-apt-repository ppa:webupd8team/java   (新增源)

  sudo apt-get update   (更新)

  sudo apt-get install oracle-java8-installer   (安裝)

 Add Bazel distribution URI as a package source (one time setup) (將BazelURL新增為源)

  echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list  

  curl https://bazel.io/bazel-release.pub.gpg | sudo apt-key add -

Update and install Bazel  更新並下載Bazel

  sudo apt-get update && sudo apt-get install bazel

  sudo apt-get upgrade bazel

1.2.2、 Install other dependencies   安裝其他依賴

  sudo apt-get install python-numpy swig python-dev python-wheel python-pip

Configure the installation  配置 (這裡注意configure後面的提示,提示已經給出)

  ./configure(clone 下來的 tensorflow目錄執行

Please specify the location of python. [Default is /usr/bin/python]:

Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N

No Google Cloud Platform support will be enabled for TensorFlow

Do you wish to build TensorFlow with GPU support? [y/N] y

GPU support will be enabled for TensorFlow

Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]:

Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 8.0  (此處根據實際情況修改)

Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:

Please specify the cuDNN version you want to use. [Leave empty to use system default]: 5  (此處根據實際情況修改)

Please specify the location where cuDNN 5 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:

Please specify a list of comma-separated Cuda compute capabilities you want to build with.

You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.

Please note that each additional compute capability significantly increases your build time and binary size.

[Default is: "3.5,5.2"]:3.0(這個值視機器配置而定,配置越高值越高,參考  https://developer.nvidia.com/cuda-gpus#collapse4,而3.0通用

Setting up Cuda include

Setting up Cuda lib

Setting up Cuda bin

Setting up Cuda nvvm

Setting up CUPTI include

Setting up CUPTI lib64

Configuration finished

1.2.3、 Create the pip package and install    建立pip包並且安裝

  bazel build -c opt //tensorflow/tools/pip_package:build_pip_package  (筆者用公司網提示error,翻牆後問題解決)

  bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

  bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg(筆者安裝過程中出現ImportErrorNo module named setuptools,解決辦法:apt-get install python-pip,安裝python-pip就行了)

  sudo pip install /tmp/tensorflow_pkg/tensorflow-0.11.0rc0-py2-none-any.whl

1.2.4、 Setting up TensorFlow for Development    編譯設定Tensorflow

  bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

  bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

  mkdir _python_build

  cd _python_build

  ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .

  ln -s ../tensorflow/tools/pip_package/* .

  python setup.py develop

1.2.5、 Train your first TensorFlow neural net model    測試Tensorflow

  cd tensorflow/models/image/mnist

  export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"

  export CUDA_HOME=/usr/local/cuda (這裡重新新增環境變數是因為筆者安裝過程中提示未能找到CUDA

  python convolutional.py(筆者這裡出現AttributeErrortype object 'NewBase' has no attribute 'is_abstract'問題,解決辦法:sudo pip install six --upgrade -- target="/usr/lib/python2.7/dist-packages"

 


1.3、安裝OpenCV

Download OpenCV    下載OpenCV

  瀏覽器開啟  http://opencv.org/

  右側下載Linux版本的OpenCV

  cd到下載目錄

  unzip opencv-2.4.13.zip

  cd opencv-2.4.13

  mkdir release  

  sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev  

  cd release  

  cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..  

  sudo make install  

 


1.4、下載FlappyBird

Download DeepLearningFlappyBird     下載FlappyBird

  git clone --recursive https://github.com/yenchenlin/DeepLearningFlappyBird

 


1.5、 安裝pygame

  Install  pygame    安裝pygame

  wget http://www.pygame.org/ftp/pygame-1.9.1release.tar.gz   下載pygame

  sudo apt-get install libsdl1.2-dev      SDL安裝)

  sudo apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-net1.2-dev libsdl-sge-dev libsdl-sound1.2-dev libportmidi-dev libsmpeg-dev   (安裝其他依賴包)

  cd pygame-1.9.1release

  python config.py

run deep_q_network.py

  python  deep_q_network.py        執行deep_q_network.py  (筆者這裡報錯:AttributeError:'module' object has no attribute 'stack',解決辦法:sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose)

git clone git://github.com/numpy/numpy.git numpy  (筆者這裡執行了一下cd numpypython setup.py install,發現報錯缺少cython於是執行後面的命令:apt-get install cython)

cd numpy

python setup.py install



1.6、GPU版的執行程式

    全部安裝完後,再次執行

  python  deep_q_network.py

    畫面卡住等待一下,GPUCUDA在執行需要時間..

    稍等片刻,奇蹟出現了,飛鳥開始自動飛、自動上下跳躍、自動穿過障礙,要知道純人工手動玩很難堅持9s!


    靜態圖片可能看不出啥效果,視訊見這:http://weibo.com/1580904460/EcxQh6em0

    至此,這個曾虐遍全球無數人的遊戲,就這樣在我們手裡,利用深度學習自動玩轉了!無不體現深度學習的神奇與魅力。



第二部分、CPU版教程

有GPU則按照上述第一部分來,那沒GPU咋辦呢?沒GPU有CPU也能跑。

以下操作均使用root賬戶

2.1、 安裝Tensorflow

原始碼安裝方式

Clone the TensorFlow repository    克隆Tensorflow

  git clone https://github.com/tensorflow/tensorflow

2.1.1、 Install Bazel   安裝Bazel

Install JDK 8   安裝JDK8

  sudo add-apt-repository ppa:webupd8team/java   (新增源)

  sudo apt-get update   (更新)

  sudo apt-get install oracle-java8-installer   (安裝)

 Add Bazel distribution URI as a package source (one time setup) (將BazelURL新增為源)

  echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list  

  curl https://bazel.io/bazel-release.pub.gpg | sudo apt-key add -

Update and install Bazel  更新並下載Bazel

  sudo apt-get update && sudo apt-get install bazel

  sudo apt-get upgrade bazel

2.1.2、 Install other dependencies   安裝其他依賴

  sudo apt-get install python-numpy swig python-dev python-wheel python-pip

Configure the installation  配置 (這裡注意configure後面的提示,提示已經給出)

  ./configure    [clone 下來的 tensorflow

目錄執行]

標註顏色的字型  需要手動輸入

Please specify the location of python. [Default is /usr/bin/python]:

Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N

No Google Cloud Platform support will be enabled for TensorFlow

Do you wish to build TensorFlow with GPU support? [y/N] N

Configuration finished

2.1.3、 Create the pip package and install    建立pip包並且安裝

  bazel build -c opt //tensorflow/tools/pip_package:build_pip_package  (筆者用公司網提示error,翻牆後問題解決)

  bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

  bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg(筆者安裝過程中出現ImportErrorNo module named setuptools,解決辦法:apt-get install python-pip,安裝python-pip就行了。)

  sudo pip install /…/…/tensorflow-0.11.0rc0-py27-none-any.whl  

上述tensorflow...whl檔案 下載地址  https://github.com/tensorflow/tensorflow#installation 

 選擇 Linux_CPU-only中的對應版本

2.1.4、 Setting up TensorFlow for Development    編譯設定Tensorflow

  bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

  mkdir _python_build

  cd _python_build

  ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .

  ln -s ../tensorflow/tools/pip_package/* .

  python setup.py develop

2.1.5、 Train your first TensorFlow neural net model    測試Tensorflow

  cd tensorflow/models/image/mnist

  python convolutional.py(筆者這裡出現AttributeErrortype object 'NewBase' has no attribute 'is_abstract'問題,解決辦法:sudo pip install six --upgrade -- 

target="/usr/lib/python2.7/dist-packages"



2.2、安裝OpenCV

Download OpenCV    下載OpenCV

  瀏覽器開啟  http://opencv.org/

  右側下載Linux版本的OpenCV

  cd到下載目錄

  unzip opencv-2.4.13.zip

  cd opencv-2.4.13

  mkdir release  

  sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev  

  cd release  

  cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..  

  sudo make install  

 

 

2.3、 下載FlappyBird

Download DeepLearningFlappyBird     下載FlappyBird

  git clone --recursive https://github.com/yenchenlin/DeepLearningFlappyBird

 

 

2.4、 安裝pygame

  Install  pygame    安裝pygame

  wget http://www.pygame.org/ftp/pygame-1.9.1release.tar.gz   下載pygame

  sudo apt-get install libsdl1.2-dev      SDL安裝)

  sudo apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-net1.2-dev libsdl-sge-dev libsdl-sound1.2-dev libportmidi-dev libsmpeg-dev   (安裝其他依賴包)

  cd pygame-1.9.1release

  python config.py

run deep_q_network.py

  python  deep_q_network.py        執行deep_q_network.py  (筆者這裡報錯:AttributeError:'module' object has no attribute 'stack',解決辦法:

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas  

python-sympy python-nose

git clone git://github.com/numpy/numpy.git numpy  (筆者這裡執行了一下cd numpypython setup.py install,發現報 

錯缺少cython於是執行後面的命令)

apt-get install cython

cd numpy

python setup.py install



2.6、CPU版的執行程式

 全部安裝完後,再次執行

  python  deep_q_network.py

畫面不會卡頓,cpu版本會立刻出現結果(筆者這裡第一次時候沒有執行root,會報錯,同學們切記執行上條命令前一定要root!

PS:按照FlappyBird安裝教程安裝,可以直接應用在”學梵高作畫”的教程裡,兩者可以通用!



參考文獻

  1. 教你從頭到尾利用DL學梵高作畫:GTX 1070 cuda 8.0 tensorflow gpu版
  2. 5月深度學習班學員小蔡同學寫的簡易教程:用MAC DQN玩Flappy Bird
  3. https://github.com/yenchenlin/DeepLearningFlappyBird



後記

    七月線上開發/市場團隊,二零一六年十月十三日。

相關文章