动手实践
我们了解了 ML-Agents 是什么以及它是如何工作的。我们还研究了将要使用的两个环境。现在我们准备好训练我们的智能体了!
为了验证此动手实践以用于认证流程,您**只需要将训练好的模型推送到 Hub**。为了验证此动手实践,**没有最低结果要求**。但是,如果您想获得良好的结果,可以尝试达到以下目标
- 对于 金字塔:平均奖励 = 1.75
- 对于 SnowballTarget:平均奖励 = 15 或在一集中射击 30 个目标。
有关认证流程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
要开始动手实践,请点击“在 Colab 中打开”按钮 👇
我们强烈**建议学生在动手练习中使用 Google Colab**,而不是在他们的个人电脑上运行它们。
通过使用 Google Colab,**您可以专注于学习和实验,而无需担心**设置环境的技术方面。
单元 5:ML-Agents 简介
在本笔记本中,您将了解 ML-Agents 并训练两个智能体。
- 第一个智能体将学习**向生成的靶子上投掷雪球**。
- 第二个智能体需要按下按钮生成一个金字塔,然后导航到金字塔,将其击倒,**并移动到顶部的金色砖块**。为此,它需要探索其环境,我们将使用一种称为好奇心的技术。
之后,您将能够**直接在浏览器中观看您的智能体玩游戏**。
有关认证流程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
⬇️ 以下是**在本单元结束时您将获得的结果示例**。⬇️
🎮 环境:
- 金字塔
- SnowballTarget
📚 RL 库:
我们一直在努力改进我们的教程,因此**如果您在本笔记本中发现任何问题**,请在 GitHub 仓库上打开一个 issue。
本笔记本的目标 🏆
在本笔记本结束时,您将
- 了解**ML-Agents**的工作原理和环境库。
- 能够**在 Unity 环境中训练智能体**。
先决条件 🏗️
在深入研究笔记本之前,您需要
🔲 📚 **学习什么是 ML-Agents 以及它是如何工作的,请阅读单元 5** 🤗
让我们训练我们的智能体 🚀
设置GPU 💪
- 为了**加速智能体的训练,我们将使用GPU**。为此,请转到
运行时 > 更改运行时类型
硬件加速器 > GPU
克隆仓库并安装依赖项 🔽
- 我们需要克隆包含**允许您将训练好的智能体推送到Hub的库的实验版本**的仓库。
# Clone the repository
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents
# Go inside the repository and install the package
cd ml-agents
pip install -e ./ml-agents-envs
pip install -e ./ml-agents
雪球目标 ⛄
如果您需要复习此环境的工作原理,请查看此部分 👉 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
我们使用wget
从https://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
我们解压缩executable.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
作为一个实验,尝试修改一些其他的超参数。Unity提供了非常好的文档,在这里解释了每个超参数。
现在您已经创建了配置文件并了解了大多数超参数的作用,我们准备训练我们的智能体 🔥。
训练智能体
要训练我们的智能体,我们需要**启动mlagents-learn并选择包含环境的可执行文件**。
我们定义四个参数
mlagents-learn <config>
:超参数配置文件所在的路径。--env
:环境可执行文件所在的路径。--run_id
:您要赋予训练运行ID的名称。--no-graphics
:在训练期间不启动可视化。
训练模型并使用--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网站存储您的身份验证令牌。
- 创建一个新的令牌(https://huggingface.co/settings/tokens)**并赋予写入权限**
- 复制令牌
- 运行下面的单元格并粘贴令牌
from huggingface_hub import notebook_login
notebook_login()
如果您不想使用Google Colab或Jupyter Notebook,则需要使用此命令代替:huggingface-cli login
然后我们需要运行mlagents-push-to-hf
。
我们定义四个参数
--run-id
:训练运行ID的名称。--local-dir
:保存智能体的位置,它是results/<run_id名称>,在我的例子中是results/First Training。--repo-id
:您想要创建或更新的Hugging Face仓库的名称。它始终是<您的Hugging Face用户名>/<仓库名称> 如果仓库不存在,**它将自动创建**--commit-message
:由于HF仓库是git仓库,因此您需要提供提交信息。
例如
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仓库,这意味着您可以拥有不同的提交,使用新的推送更新您的仓库等。**
但现在最棒的是:**能够在线可视化您的智能体 👀。**
观看您的智能体玩耍 👀
这一步很简单
转到此处:https://huggingface.co/spaces/ThomasSimonini/ML-Agents-SnowballTarget
启动游戏,然后点击右下角的按钮将其置于全屏状态
第一步,输入你的用户名(用户名区分大小写:例如,我的用户名是 ThomasSimonini,而不是 thomassimonini 或 ThOmasImoNInI),然后点击搜索按钮。
第二步,选择你的模型仓库。
第三步,**选择你想回放的模型**
- 我有多个模型,因为我们每 500000 个时间步保存一次模型。
- 但因为我想要最新的那个,所以我选择
SnowballTarget.onnx
👉 尝试使用不同的模型步骤来观察智能体的改进效果,这是一个好方法。
并且,不要犹豫在 discord 的 #rl-i-made-this 频道分享你的智能体获得的最佳分数 🔥
现在让我们尝试一个更具挑战性的环境,叫做 Pyramids(金字塔)。
Pyramids 🏆
将环境zip文件下载并移动到./training-envs-executables/linux/
- 我们的环境可执行文件位于zip文件中。
- 我们需要下载它并将其放置到
./training-envs-executables/linux/
目录下。 - 我们使用 Linux 可执行文件,因为我们使用的是 colab,而 colab 机器的操作系统是 Ubuntu(Linux)。
我们使用 wget
从 https://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 配置文件
- 与第一个自定义环境相反,**Pyramids 是由 Unity 团队制作的**。
- 因此,PyramidsRND 配置文件已经存在,位于 ./content/ml-agents/config/ppo/PyramidsRND.yaml。
- 你可能会问为什么 “RND” 会出现在 PyramidsRND 中。RND 代表 *随机网络蒸馏*,它是一种生成好奇心奖励的方法。如果你想了解更多信息,我们写了一篇文章解释了这种技术:https://medium.com/data-from-the-trenches/curiosity-driven-learning-through-random-network-distillation-488ffd8e5938
对于本次训练,我们将修改一项内容。
- 总训练步数超参数过高,因为我们只需要 100 万训练步数就能达到基准(平均奖励 = 1.75)。👉 为此,我们转到 config/ppo/PyramidsRND.yaml,**并将 max_steps 更改为 1000000。**
作为实验,你也可以尝试修改其他一些超参数。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 个不同的环境,我们还在构建一些自定义环境。最好的学习方式是自己尝试,享受乐趣。
你可以在 Hugging Face 上找到当前可用环境的完整列表 👉 https://github.com/huggingface/ml-agents#the-environments
要查看智能体的演示,请访问 👉 https://huggingface.co/unity
目前,我们已经集成了
今天就到这里。恭喜你完成了本教程!
最好的学习方式是练习和尝试。为什么不尝试其他环境呢?ML-Agents 有 18 个不同的环境,但你也可以创建自己的环境。查看文档并享受乐趣!
第六单元见 🔥,