By RogueNation
前言
在上一篇關於我第一次玩 Deepracer 的經驗裡提及到如果繼續使用 AWS 雲服務訓練我的 DeepRacer 模型,在超過 10 個小時後便需要花費大量的金錢投入訓練,因此我找到了 DRFC(deepracer-for-cloud)這個可以在本地上訓練自己 DeepRacer 模型的專案,這樣便可以節省點$$。
1.使用 WSL 2
開啟 power shell
wsl --set-default-version 2
wsl --update
wsl --list --online
2.安裝 ubuntu
wsl --install -d ubuntu
查看
wsl -l
缷載 ubuntu
wsl --unregister ubuntu
3.執行 ubuntu in command line
ubuntu.exe
進入後查看當前版本是否為 22.04
lsb_release -a
4.安裝前置的必要套件
sudo apt-get update
sudo apt-get install -y jq awscli python3-boto3 docker-compose
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install -y --no-install-recommends docker-ce docker-ce-cli containerd.io
5.安裝 Nvidia GPU 所需套件
curl https://get.docker.com | sh
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo service docker stop
sudo service docker start
cat /etc/docker/daemon.json | jq 'del(."default-runtime") + {"default-runtime": "nvidia"}' | sudo tee /etc/docker/daemon.json
sudo usermod -a -G docker $(id -un)
6.運行 docker service 並安裝 DRfC(deepracer-for-cloud)
sudo service docker start
git clone https://github.com/aws-deepracer-community/deepracer-for-cloud
cd deepracer-for-cloud
7.執行 DRfC(deepracer-for-cloud)
sudo bin/init.sh -a gpu -c local
8.重啟 ubuntu
a.在 ubuntu 中
sudo reboot
b.在 power shell 中
wsl --shutdown
or
wsl -t Ubuntu
9. 手動開啟 docker 以使用 GPU 運行
sudo service docker start
這裡有教學如何設定開機時自動運行
開啟權限
sudo chmod 666 /var/run/docker.sock
10.設定帳號
1.登錄到 AWS Management Consloe(https://console.aws.amazon.com)
2.在控制台右上角,點擊帳戶名稱,在下拉式清單中選擇”安全憑證”
3.在”存取金鑰”中”建立存取金鑰”
4.建立後可下載 rootkey.csv,裡面包含了 Access key ID 和 Secret access key
5.在 ubuntu 中執行以下指令,填入 accesskey_id
和 secret_key
,region 選擇 us-east-1
,format 選擇 json
。
aws configure
如果沒有 AWS 的 s3 雲端存儲,作以下命令作為等效作用,accesskey_id 和 secret_key 隨便設定即可
aws configure --profile minio
進入 deepracer-for-cloud
目錄,執行以下指令,如果重開機後無法運行 dr-* 等指令,需再次執行
source bin/activate.sh
11.自定義
有以下目錄可以客制化去調整各項參數:
├── custom_files
│ ├── hyperparameters.json
│ ├── model_metadata.json
│ └── reward_function.py
├── run.env
├── system.env
修改run.env
把
DR_WORLD_NAME=reInvent2019_track
換成
DR_WORLD_NAME=reinvent_base
添加 S3 Bucket 名稱
DR_UPLOAD_S3_BUCKET=awsbucket4ivan
添加自己的reward_function.py
def reward_function(params):
# Read input parameters
track_width = params['track_width']
distance_from_center = params['distance_from_center']
speed = params['speed']
steering_angle = params['steering_angle']
steps = params['steps']
progress = params['progress']
all_wheels_on_track = params['all_wheels_on_track']
waypoints = params['waypoints']
closest_waypoints = params['closest_waypoints']
center_weight = 1.5
speed_weight = 1.0
progress_weight = 2.0
steering_weight = 0.3
reward = 1e-3
if not all_wheels_on_track:
return float(reward)
reward += (1 - (center_weight * distance_from_center / (0.5 * track_width)))
reward += (speed_weight * speed / 10)
reward += (progress_weight * progress / 100)
reward += (1 - (steps / 1000))
return float(reward)
12.開始/暫停訓練
dr-update && dr-update-env && dr-upload-custom-files
dr-start-training
暫停訓練
Ctrl+Z
觀看訓練
dr-start-viewer
重新開始訓練
dr-start-training -vw
13.上傳 model 到 S3
中止正在訓練中的模型
Ctrl+C
停止訓練
dr-stop-training
上傳 model
dr-upload-model
成果
由於可以在本機上訓練的關係,我便嘗試修改不同的參數進行訓練,最佳的成績落左 27.369 秒,雖然跟第一名仍有 2.934 秒的差距,但對於第一次玩的自己來說已算滿意。
後來我發現了就算反覆修改參數和權重比例已沒有太多變化,正打算著手修改reward_function.py
時,便得知他們的線下比賽的活動已取消,因此我對 DRFC 的投入就暫時到這裡結束,如果有興趣的朋友可以繼續研究下去例如 deepracer-analysis或者歡迎與我交流。
Reference
Youtube - Step by Step: How to train a DeepRacer model on your home PC