如何在 Windows 本地搭建 AWS deepracer 訓練環境

drfc

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_idsecret_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

Screenshot 2024-03-31

添加 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

GitHub - deepracer-for-cloud

Youtube - Step by Step: How to train a DeepRacer model on your home PC

Tracks - 路線名稱

Medium - DeepRacer for Cloud (DRFC) Local setup

donate