使用GCP挑戰 Obstacle Tower
此篇最主要是分享如何在 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與管理員的配額。
- 指標選擇GPUs(all regions)
- 將其打勾
- 點選編輯配額
- 輸入基本資料並且按下一步
⚫新增的配額限制官方建議為10(一開始我不知道配額現在的概念,直接填1000,結果就被官方關注並且建議為10😂)要求說明可以僅寫ML project即可,最後便是點選完成,提交要求。
等到配額限制的上限更改之後,我們便可以開始初始化VM!
創建VM
⚫點選左上角"導覽選單",選擇Compute Engine的VM執行個體。
啟動和運行的最簡單方法是在GCP市場中使用Google深度學習虛擬機模(點擊部署)。此VM將負責安裝深度學習庫Tensorflow及其依賴項。
⚫在左邊的側邊欄選取Marketplace,並且搜尋 Deep Learning VM,並且點選在COMPUTE ENGINE上啟動
啟動後就是要設定VM的基本配備
- framework改成CUDA9.0(後續tensorflow需要1.12版本,9.0會比較合適)
- 勾選GPU
另外至少要1 GPU,2 cores,13GB的RAM(初始設置),如果要更快可以選擇4 cores
開發人員小建議
訓練速度將取決於三個方面:環境可以逐步執行操作的速度,代理處理它們的速度以及兩者之間的通信速度。 由於環境相當輕,並且以固定的最大速度運行,因此不太可能因您選擇的GPU性能而受到瓶頸。 同樣,由於單個環境不能快速生成樣本,因此訓練不太可能消耗整個GPU。 在大多數情況下,環境與學習代理之間的通信將成為瓶頸對於成本效益,您可以選擇Nvidia P4 / T4,儘管使用更昂貴的GPU可能會獲得一些小的速度提升。
確定設置都ok後,就可以按部署。
看到部署成功,基本上就是成功創建了一個VM。
接下來就是左邊側欄點選Compute Engine,然後點SSH連進VM。
這樣就是成功連進來嚕~
建立 XServer
要渲染障礙塔環境,需要安裝XServer,以便在運行障礙塔時GPU可以渲染。假如已為VM配置了GPU,可以按照以下步驟。
⚫下載 Xorg 和 mesa-utils
sudo apt update
sudo apt install -y xserver-xorg mesa-utils
初始化 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 改成如下圖
接著要修改 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_files
是rainbow_otc.gin
的路徑。
參考文件
喜歡這份文件的話可以幫我拍個手呦❤