深度強化學習課程文件

實戰

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

實踐

Ask a Question Open In Colab

我們已經學習了 ML-Agents 是什麼以及它是如何工作的。我們還研究了我們將要使用的兩個環境。現在我們已經準備好訓練我們的代理了!

Environments

要驗證此實踐以進行認證,您只需將訓練好的模型推送到 Hub。沒有最低結果要求即可驗證此實踐。但如果您想獲得不錯的結果,可以嘗試達到以下目標:

  • 對於 Pyramids:平均獎勵 = 1.75
  • 對於 SnowballTarget:平均獎勵 = 15 或 30 個目標在一次訓練中被擊中。

有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

要開始實踐,請點選“在 Colab 中開啟”按鈕 👇

Open In Colab

我們強烈**建議學生使用 Google Colab 進行實踐練習**,而不是在個人電腦上執行。

使用 Google Colab,**您可以專注於學習和實驗,而無需擔心環境設定的技術問題。**

單元 5:ML-Agents 簡介

Thumbnail

在本筆記本中,您將瞭解 ML-Agents 並訓練兩個代理。

  • 第一個將學習向生成的目標發射雪球
  • 第二個需要按下按鈕生成一個金字塔,然後導航到金字塔,將其推倒,並移動到頂部的金磚。為此,它需要探索其環境,我們將使用一種稱為好奇心的技術。

之後,您將能夠直接在瀏覽器中觀看您的代理玩遊戲

有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

⬇️ 以下是您在本單元結束時將實現的一個示例。⬇️

Pyramids SnowballTarget

🎮 環境:

📚 RL-庫:

我們正在不斷努力改進我們的教程,因此,**如果您在本筆記本中發現任何問題**,請在 GitHub 倉庫上提出問題

本筆記本的目標 🏆

在本筆記本結束時,您將:

  • 瞭解 ML-Agents 如何工作以及環境庫。
  • 能夠在 Unity 環境中訓練代理

先決條件 🏗️

在深入學習本筆記本之前,您需要:

🔲 📚 閱讀單元 5 瞭解 ML-Agents 是什麼以及它是如何工作的 🤗

讓我們訓練我們的代理 🚀

設定 GPU 💪

  • 為了加速智慧體的訓練,我們將使用 GPU。為此,請轉到 Runtime > Change Runtime type
GPU Step 1
  • 硬體加速器 > GPU
GPU Step 2

克隆倉庫 🔽

  • 我們需要克隆包含 ML-Agents 的倉庫。
# Clone the repository (can take 3min)
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents

設定虛擬環境 🔽

  • 為了使 ML-Agents 在 Colab 中成功執行,Colab 的 Python 版本必須滿足庫的 Python 要求。

  • 我們可以檢查 `setup.py` 檔案中的 `python_requires` 引數以瞭解支援的 Python 版本。這些檔案是設定 ML-Agents 庫以供使用所必需的,可以在以下位置找到:

    • /content/ml-agents/ml-agents/setup.py
    • /content/ml-agents/ml-agents-envs/setup.py
  • Colab 當前的 Python 版本(可以透過 `!python --version` 檢查)與庫的 `python_requires` 引數不匹配,因此安裝可能會靜默失敗並導致後續執行相同命令時出現以下錯誤:

    • /bin/bash: 第 1 行: mlagents-learn: 找不到命令
    • /bin/bash: 第 1 行: mlagents-push-to-hf: 找不到命令
  • 為了解決這個問題,我們將建立一個與 ML-Agents 庫相容的 Python 版本的虛擬環境。

注意: 為了將來的相容性,請務必檢查安裝檔案中的 `python_requires` 引數,如果 Colab 的 Python 版本不相容,請將您的虛擬環境設定為下面指令碼中支援的最大 Python 版本。

# Colab's Current Python Version (Incompatible with ML-Agents)
!python --version
# Install virtualenv and create a virtual environment
!pip install virtualenv
!virtualenv myenv

# Download and install Miniconda
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local

# Activate Miniconda and install Python ver 3.10.12
!source /usr/local/bin/activate
!conda install -q -y --prefix /usr/local python=3.10.12 ujson  # Specify the version here

# Set environment variables for Python and conda paths
!export PYTHONPATH=/usr/local/lib/python3.10/site-packages/
!export CONDA_PREFIX=/usr/local/envs/myenv
# Python Version in New Virtual Environment (Compatible with ML-Agents)
!python --version

安裝依賴 🔽

# Go inside the repository and install the package (can take 3min)
%cd ml-agents
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents

SnowballTarget ⛄

如果您需要回顧此環境的工作原理,請檢視此部分 👉 https://huggingface.co/deep-rl-course/unit5/snowball-target

下載環境 zip 檔案並將其移動到 ./training-envs-executables/linux/

  • 我們的環境可執行檔案是一個 zip 檔案。
  • 我們需要下載並將其放置到 ./training-envs-executables/linux/
  • 我們使用 Linux 可執行檔案,因為我們使用 Colab,而 Colab 機器的作業系統是 Ubuntu (Linux)
# Here, we create training-envs-executables and linux
mkdir ./training-envs-executables
mkdir ./training-envs-executables/linux

我們使用 wgethttps://github.com/huggingface/Snowball-Target 下載了 SnowballTarget.zip 檔案

wget "https://github.com/huggingface/Snowball-Target/raw/main/SnowballTarget.zip" -O ./training-envs-executables/linux/SnowballTarget.zip

我們解壓可執行的 zip 檔案。

unzip -d ./training-envs-executables/linux/ ./training-envs-executables/linux/SnowballTarget.zip

確保您的檔案可訪問

chmod -R 755 ./training-envs-executables/linux/SnowballTarget

定義 SnowballTarget 配置檔案

  • 在 ML-Agents 中,您在 config.yaml 檔案中定義訓練超引數。

有多個超引數。要更好地理解它們,您應該閱讀 文件中每個超引數的解釋

您需要在 ./content/ml-agents/config/ppo/ 中建立一個 `SnowballTarget.yaml` 配置檔案

我們將為您提供此配置的初步版本(複製並貼上到您的 SnowballTarget.yaml 檔案中),但您應該對其進行修改

behaviors:
  SnowballTarget:
    trainer_type: ppo
    summary_freq: 10000
    keep_checkpoints: 10
    checkpoint_interval: 50000
    max_steps: 200000
    time_horizon: 64
    threaded: true
    hyperparameters:
      learning_rate: 0.0003
      learning_rate_schedule: linear
      batch_size: 128
      buffer_size: 2048
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
    network_settings:
      normalize: false
      hidden_units: 256
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
Config SnowballTarget Config SnowballTarget

作為一項實驗,嘗試修改一些其他超引數。Unity 在此處提供了非常好的文件,解釋了每個超引數

現在您已經建立了配置檔案並瞭解了大多數超引數的作用,我們準備好訓練我們的代理了 🔥。

訓練代理

為了訓練我們的代理,我們需要啟動 mlagents-learn 並選擇包含環境的可執行檔案。

我們定義四個引數

  1. mlagents-learn <config>:超引數配置檔案的路徑。
  2. --env:環境可執行檔案的位置。
  3. --run_id:您希望為訓練執行 ID 指定的名稱。
  4. --no-graphics:訓練期間不啟動視覺化。
MlAgents learn

訓練模型並使用 --resume 標誌以在中斷時繼續訓練。

如果您第一次使用 --resume,它會失敗。嘗試重新執行該塊以繞過錯誤。

訓練將需要 10 到 35 分鐘,具體取決於您的配置。去喝杯 ☕️,您值得擁有 🤗。

mlagents-learn ./config/ppo/SnowballTarget.yaml --env=./training-envs-executables/linux/SnowballTarget/SnowballTarget --run-id="SnowballTarget1" --no-graphics

將代理推送到 Hugging Face Hub

  • 現在我們已經訓練好了代理,我們準備好將其推送到 Hub 並在瀏覽器中視覺化它玩遊戲 🔥。

為了能夠與社群分享您的模型,還需要遵循三個步驟

1️⃣ (如果尚未完成)建立 HF 帳戶 ➡ https://huggingface.co/join

2️⃣ 從 Hugging Face 網站登入並存儲您的身份驗證令牌。

Create HF Token
  • 複製令牌
  • 執行下方單元格並貼上令牌
from huggingface_hub import notebook_login

notebook_login()

如果您不想使用 Google Colab 或 Jupyter Notebook,則需要使用此命令代替:huggingface-cli login

然後我們需要執行 mlagents-push-to-hf

我們定義四個引數

  1. --run-id:訓練執行 ID 的名稱。
  2. --local-dir:代理儲存的位置,即 results/<run_id name>,在我的例子中是 results/First Training。
  3. --repo-id:您要建立或更新的 Hugging Face 倉庫的名稱。它總是 <您的 huggingface 使用者名稱>/<倉庫名稱>。如果倉庫不存在,它將自動建立
  4. --commit-message:由於 HF 倉庫是 git 倉庫,您需要提供一個提交訊息。
Push to Hub

例如

mlagents-push-to-hf --run-id="SnowballTarget1" --local-dir="./results/SnowballTarget1" --repo-id="ThomasSimonini/ppo-SnowballTarget" --commit-message="First Push"

mlagents-push-to-hf  --run-id= # Add your run id  --local-dir= # Your local dir  --repo-id= # Your repo id  --commit-message= # Your commit message

如果一切順利,您應該在過程結束時看到此內容(但 URL 會不同 😆)

Your model is pushed to the hub. You can view your model here: https://huggingface.co/ThomasSimonini/ppo-SnowballTarget

這是您模型的連結。它包含一個模型卡,解釋瞭如何使用它、您的 Tensorboard 和您的配置檔案。最棒的是,它是一個 git 倉庫,這意味著您可以有不同的提交,透過新的推送更新您的倉庫等。

但現在最棒的來了:能夠線上視覺化您的代理玩遊戲 👀。

觀看您的代理玩遊戲 👀

這一步很簡單

  1. 前往此處:https://huggingface.co/spaces/ThomasSimonini/ML-Agents-SnowballTarget

  2. 啟動遊戲並透過單擊右下角的按鈕將其全屏顯示

Snowballtarget load
  1. 在步驟 1 中,輸入您的使用者名稱(您的使用者名稱區分大小寫:例如,我的使用者名稱是 ThomasSimonini 而不是 thomassimonini 或 ThOmasImoNInI),然後單擊搜尋按鈕。

  2. 在步驟 2 中,選擇您的模型倉庫。

  3. 在步驟 3 中,選擇您想要回放的模型

  • 我有很多模型,因為我們每 500000 步儲存一個模型。
  • 但我想要最新的,所以我選擇 SnowballTarget.onnx

👉 最好嘗試使用不同的模型步驟,以檢視代理的改進。

別猶豫在 Discord 的 #rl-i-made-this 頻道分享您的代理獲得的最高分數 🔥

現在讓我們嘗試一個更具挑戰性的環境,叫做 Pyramids。

金字塔 🏆

下載環境 zip 檔案並將其移動到 ./training-envs-executables/linux/

  • 我們的環境可執行檔案是一個 zip 檔案。
  • 我們需要下載它並將其放置到 ./training-envs-executables/linux/
  • 我們使用 Linux 可執行檔案,因為我們使用的是 Colab,而 Colab 機器的作業系統是 Ubuntu (Linux)

我們使用 wgethttps://huggingface.co/spaces/unity/ML-Agents-Pyramids/resolve/main/Pyramids.zip 下載了 Pyramids.zip 檔案

wget "https://huggingface.co/spaces/unity/ML-Agents-Pyramids/resolve/main/Pyramids.zip" -O ./training-envs-executables/linux/Pyramids.zip

解壓它

unzip -d ./training-envs-executables/linux/ ./training-envs-executables/linux/Pyramids.zip

確保您的檔案可訪問

chmod -R 755 ./training-envs-executables/linux/Pyramids/Pyramids

修改 PyramidsRND 配置檔案

對於本次訓練,我們將修改一個地方

  • 總訓練步數超引數太高了,因為我們只需 1M 訓練步即可達到基準(平均獎勵 = 1.75)。👉 為此,我們轉到 config/ppo/PyramidsRND.yaml,並將 max_steps 更改為 1000000。
Pyramids config

作為一項實驗,您還應該嘗試修改一些其他超引數。Unity 在此處提供了非常好的文件,解釋了每個超引數

我們現在準備訓練我們的代理 🔥。

訓練代理

訓練將花費 30 到 45 分鐘,具體取決於您的機器,去喝杯 ☕️,您值得擁有 🤗。

mlagents-learn ./config/ppo/PyramidsRND.yaml --env=./training-envs-executables/linux/Pyramids/Pyramids --run-id="Pyramids Training" --no-graphics

將代理推送到 Hugging Face Hub

  • 現在我們已經訓練好了代理,我們準備好將其推送到 Hub,以便在您的瀏覽器中視覺化它玩遊戲 🔥。
mlagents-push-to-hf  --run-id= # Add your run id  --local-dir= # Your local dir  --repo-id= # Your repo id  --commit-message= # Your commit message

觀看您的代理玩遊戲 👀

👉 https://huggingface.co/spaces/unity/ML-Agents-Pyramids

🎁 額外:為什麼不在另一個環境上訓練呢?

現在您已經知道如何使用 MLAgents 訓練代理了,為什麼不嘗試另一個環境呢?

MLAgents 提供了 17 種不同的環境,我們正在構建一些自定義環境。最好的學習方法是自己嘗試,玩得開心。

cover

您可以在 Hugging Face 上找到當前所有可用環境的完整列表 👉 https://github.com/huggingface/ml-agents#the-environments

對於演示,您可以視覺化您的代理 👉 https://huggingface.co/unity

目前我們已整合

  • 蠕蟲演示,您可以在其中教蠕蟲爬行
  • Walker 演示,您可以在其中教代理走向目標

今天就到這裡。恭喜您完成本教程!

學習的最佳方式是實踐和嘗試。為什麼不嘗試另一個環境呢?ML-Agents 有 18 種不同的環境,但您也可以建立自己的環境。檢視文件並盡情享受吧!

單元 6 見 🔥,

繼續學習,保持出色 🤗

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.