使用GCP挑戰 Obstacle Tower

Lung-Ying Ling
12 min readJun 13, 2019

--

此篇最主要是分享如何在 Google Cloud Platform上玩Obstacle Tower,採用的演算法是rainbow。

創建一個新的VM

⚫登入GCP(https://cloud.google.com/gcp),並且註冊一個帳號,並且進入主控台。

GPU配額限制

在開始之前我們必須先設定GPU的配額,以免在初始化VM時遇到配額不足的問題。

註:還未將帳戶升級者必須先將帳戶升級,因為 GPU 和 TPU 不包含在「一律免費」優惠中。如果您將 GPU 和 TPU 新增至執行個體,則一律需要付費。

如何升級帳戶

您可以透過 Google Cloud Platform 主控台從免費試用版升級至付費帳戶,只要按一下網頁頂端的 [Upgrade] (升級) 按鈕即可。如果您沒有看[Upgrade] (升級) 按鈕,只要按一下頁面右上方的「免費試用狀態」圖示,頁面上就會顯示該按鈕。

詳細付費與免費的差異可查閱:

https://cloud.google.com/free/docs/gcp-free-tier#how-to-upgrade

⚫點選左上角導覽選單,選取IAM與管理員配額。

  1. 指標選擇GPUs(all regions)
  2. 將其打勾
  3. 點選編輯配額
  4. 輸入基本資料並且按下一步

⚫新增的配額限制官方建議為10(一開始我不知道配額現在的概念,直接填1000,結果就被官方關注並且建議為10😂)要求說明可以僅寫ML project即可,最後便是點選完成,提交要求。

大致上會等待1~2個小時不等,因為審核配額限制為人工審核。

等到配額限制的上限更改之後,我們便可以開始初始化VM!

創建VM

⚫點選左上角"導覽選單",選擇Compute EngineVM執行個體

啟動和運行的最簡單方法是在GCP市場中使用Google深度學習虛擬機模(點擊部署)。此VM將負責安裝深度學習庫Tensorflow及其依賴項。

⚫在左邊的側邊欄選取Marketplace,並且搜尋 Deep Learning VM,並且點選在COMPUTE ENGINE上啟動

啟動後就是要設定VM的基本配備

  1. framework改成CUDA9.0(後續tensorflow需要1.12版本,9.0會比較合適)
  2. 勾選GPU

另外至少要1 GPU,2 cores,13GB的RAM(初始設置),如果要更快可以選擇4 cores

開發人員小建議

訓練速度將取決於三個方面:環境可以逐步執行操作的速度,代理處理它們的速度以及兩者之間的通信速度。 由於環境相當輕,並且以固定的最大速度運行,因此不太可能因您選擇的GPU性能而受到瓶頸。 同樣,由於單個環境不能快速生成樣本,因此訓練不太可能消耗整個GPU。 在大多數情況下,環境與學習代理之間的通信將成為瓶頸對於成本效益,您可以選擇Nvidia P4 / T4,儘管使用更昂貴的GPU可能會獲得一些小的速度提升。

確定設置都ok後,就可以按部署。

看到部署成功,基本上就是成功創建了一個VM。

警告的話是有資源即將被棄用,不過現在運行還是ok的。

接下來就是左邊側欄點選Compute Engine,然後點SSH連進VM。

這樣就是成功連進來嚕~

建立 XServer

要渲染障礙塔環境,需要安裝XServer,以便在運行障礙塔時GPU可以渲染。假如已為VM配置了GPU,可以按照以下步驟。

⚫下載 Xorgmesa-utils

sudo apt update
sudo apt install -y xserver-xorg mesa-utils
遇到這個情況,按Enter即可。

初始化 xorg.conf

sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024

nvidia-xconfig --query-gpu-info

這將為特定的VM和GPU提供PCI訊息。找到讀取PCI BusID的那一行。

接下來我們要針對 xorg.conf 進行修改。

cd /etc/X11

由於修改需最大權限,所以這邊先

sudo su

第一個要修改的地方是新增BusID "X:Y:Z" ,他在 Section “Device”底下, X,Y和Z是上面的 — query-gpu-info命令返回的值。

vim xorg.conf

i 即可修改。

要將 Section Device 改成如下圖

BusID裡面的數值按照 — query-gpu-info命令返回的值。

接著要修改 Section “ServerLayout” & “Screen”,如不修改將發生

解決辦法

刪除或者使用#註釋掉/etc/X11/xorg.conf文件的ServerLayout 和 Screen 兩個部分。

參考資料: https://github.com/Unity-Technologies/obstacle-tower-env/issues/51

接著就是按 ESC,然後:wq儲存離開。

要啟動Xserver,需要運行以下兩個命令。請注意,如果重新啟動計算機,則需要再次運行這些程序,如果打開新的bash終端,則需要再次運行導出命令。

sudo /usr/bin/X :0 &
export DISPLAY=:0

接著跑

nvidia-smi

你應該看到Xorg正在你的GPU上運行。 為確保一切正常運行,請運行命令glxgears,並確保它以成千上萬的幀速率運行 — 這意味著我們使用GPU成功將OpenGL圖形渲染到虛擬屏幕。

看到這個代表成功!

安裝 Obstacle Tower

現在需要安裝Obstacle Tower env包,為Obstacle Tower創建一個Gym界面。 創建並激活Python virtualenv。這將使您的安裝與系統Python環境分開。

virtualenv otc-env --system-site-packages
source otc-env/bin/activate

安裝 Obstacle Tower 環境

安裝障礙塔環境將使障礙塔充當OpenAI Gym環境,允許您使用流行的強化學習庫,如 Dopamine 或 Baselines.。Clone repo,並使用pip3安裝它及其依賴項。

git clone https://github.com/Unity-Technologies/obstacle-tower-env
cd obstacle-tower-env
pip3 install ./
cd ../

下載 Obstacle Tower 可執行文件

wget https://storage.googleapis.com/obstacle-tower-build/v2.2/obstacletower_v2.2_linux.zipunzip obstacletower_v2.2_linux.zip

安裝 Dopamine

使用Google Brain的Dopamine library進行培訓。使用最先進的Rainbow算法來訓練。

⚫首先安裝 Dopamine的先決條件

sudo apt update && sudo apt install cmake zlib1g-dev
pip3 install absl-py atari-py gin-config gym opencv-python

⚫然後 clone Dopamine repo

git clone https://github.com/google/dopamine.git

有關安裝過程的更多信息,請訪問Dopamine repo: https://github.com/google/dopamine.git

使 Dopamine 和 obstacle tower 相互兼容

安裝使Dopamine與Obstacle Tower文件交互的文件。

wget https://storage.googleapis.com/obstacle-tower-build/dopamine/dopamine_otc.zipunzip dopamine_otc.zip

在ZIP中,將有兩個文件:unity_lib.py和rainbow_otc.gin。一個是OTC環境的Dopamine Library,另一個是配置文件。

⚫將 unity_lib.py 放進dopamine/dopamine/discrete_domains

cp dopamine_otc/unity_lib.py dopamine/dopamine/discrete_domains/unity_lib.py

⚫ 將 rainbow_otc.gin 放置在一個方便的地點。

cp dopamine_otc/rainbow_otc.gin dopamine/dopamine/agents/rainbow/configs/rainbow_otc.gin

如果未將obstacletower_v2.2_linux.zip解壓縮到主目錄,則需要編輯rainbow_otc.gin,具體來說create_otc_environment.environment_path應該與提取的OTC可執行文件的路徑相對應。

此外,在此文件中,您可以找到有關培訓時間和評估代理的頻率的設置。 每次迭代,Dopamine將訓練 Runner.training_steps,評估(即以推理模式運行)Runner.evaluation_steps,記錄這些結果,並檢查代理。 它將在退出之前重複此過程Runner.num_iterations次數。 例如,您可以將Runner.num_iterations更改為訓練40萬步。 您還可以減少Runner.evaluation_steps以減少未訓練所花費的時間。 此文件中還有其他超參數,您可以修改這些超參數以提高性能。

註: 由於Dopamine僅支持單通道(即灰度)觀測,我們將OTC環境給出的觀測值轉換為灰度。

用Dopamine訓練

在後台進行訓練

此訓練很可能會長時間(可能超過24小時)! 這意味著在後台運行它,以便可以在此期間斷開與VM的連接。 一種方法是使用屏幕。 鍵入以下內容打開新屏幕:

screen -S dopamine_otc

這將打開一個新的Bash shell。您需要導出顯示並在此新shell中激活虛擬環境。

export DISPLAY=:0 
source otc-env/bin/activate

並在這裡運行Dopamine。現在,您可以從屏幕上分離(Ctrl + A, Ctrl +D)並註銷VM。訓練將在後台繼續進行。鍵入screen -r,重新連接到屏幕。

安裝tensorflow

由於我們所選擇的VM只有CUDA 0.9,所以必須手動安裝tensorflow

pip install tensorflow-gpu==1.12

開始訓練Dopamine

你現在準備在obstacle tower上運行Dopamine了!從Dopamine Library的根目錄運行以下命令。

cd ./dopamine
python -um dopamine.discrete_domains.train \
--base_dir=/tmp/dopamine \
--gin_files='dopamine/agents/rainbow/configs/rainbow_otc.gin'

其中base_dir是希望Dopamine保存其檢查點的目錄(您可以將其更改為/ /tmp/dopamine以外的其他內容)和tensorboard文件,gin_filesrainbow_otc.gin的路徑。

如果看到這個就表示成功在訓練嚕!

參考文件

  1. Training an Obstacle Tower agent using Dopamine and the Google Cloud Platform

喜歡這份文件的話可以幫我拍個手呦❤

--

--