Colab 本质上是一个运行在 Linux 环境中的云端计算平台。具体特点包括:
Google Colab 是一个云端环境,运行在 Google 的服务器上,而不是你的本地计算机。因此,你在 Colab 上新建的文件(如 PPO1.ipynb)默认存储在 Colab 的临时文件系统中,而不是直接存储在你的本地计算机上。
!pwd # 输出当前工作目录,通常是 /content
!ls # 列出当前目录下的文件,应该能看到 PPO1.ipynb
虽然 Colab 的文件默认存储在云端,但你可以通过以下方式将文件保存到本地计算机:
from google.colab import drive
drive.mount('/content/drive')
!cp PPO1.ipynb /content/drive/My\ Drive/PPO1.ipynb
如果你在 Colab 中点击“文件” > “保存”,Colab 会提示将 Notebook 保存到 Google Drive(通常是 My Drive/Colab Notebooks/ 目录)
你可以在 Google Drive 的 Colab Notebooks 文件夹中找到它:
colab文件管理操作
创建一个文件夹:
!mkdir my_folder
将文件移动到文件夹:
!mv PPO1.ipynb my_folder/PPO1.ipynb
查看文件夹内容:
!ls my_folder
在文件夹中创建新文件:
with open('my_folder/new_file.txt', 'w') as f:
f.write('Hello, Colab!')
1.Google Drive 集成:你可以通过挂载 Google Drive,将文件和文件夹保存到云端,实现持久化存储
2.多文件支持:你可以在一个 Notebook 中操作多个文件或文件夹,例如:
克隆整个 GitHub 存储库(包含多个文件和文件夹)。
下载并解压 ZIP 文件(如 Huggy 环境),管理多个文件。
3.管理多个文件和文件夹
在 Colab 中操作:
创建一个项目文件夹,管理所有相关文件:
!mkdir my_project
!mv PPO1.ipynb my_project/
!echo "New content" > my_project/notes.txt
压缩文件夹并下载:
!zip -r my_project.zip my_project
from google.colab import files
files.download('my_project.zip')
1. 环境配置
我们需要克隆 ML-Agents 存储库,配置 Python 环境,安装依赖,并下载 Huggy 环境。
# 克隆 ML-Agents 存储库(可能需要 3 分钟),获取最新代码和示例
!git clone --depth 1 https://github.com/Unity-Technologies/ml-agents
# 下载 Miniconda 安装脚本,用于创建独立的 Python 环境
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 赋予安装脚本执行权限,以便运行
!chmod +x Miniconda3-latest-Linux-x86_64.sh
# 静默安装 Miniconda 到 /usr/local 目录,-b 表示非交互式,-f 强制覆盖
!./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
# 激活 Miniconda 环境,准备配置 Python
!source /usr/local/bin/activate
# 在 Miniconda 中安装 Python 3.10.12 和 ujson 包,-q 静默,-y 自动确认
!conda install -q -y --prefix /usr/local python=3.10.12 ujson
# 设置 PYTHONPATH 环境变量,指向 Miniconda 的 Python 包路径,确保导入正确
import os
os.environ["PYTHONPATH"] = "/usr/local/lib/python3.10/site-packages/"
# 设置 CONDA_PREFIX 环境变量,指定 Conda 环境路径
os.environ["CONDA_PREFIX"] = "/usr/local/envs/myenv"
# 检查当前 Python 版本,确认是否正确安装为 3.10.12
!python --version
# 切换工作目录到 ml-agents 存储库根目录
%cd ml-agents
# 安装 ml-agents-envs 包,作为可编辑模式 (-e) 便于开发
!pip3 install -e ./ml-agents-envs
# 安装 ml-agents 包,作为可编辑模式 (-e) 便于开发
!pip3 install -e ./ml-agents
# 创建 trained-envs-executables 和 linux 子目录,用于存放环境文件
!mkdir -p ./trained-envs-executables/linux
# 从 Hugging Face 下载 Huggy 环境 ZIP 文件,保存到指定路径
!wget "https://github.com/huggingface/Huggy/raw/main/Huggy.zip" -O ./trained-envs-executables/linux/Huggy.zip
# 解压 Huggy.zip 到 linux 目录,-d 指定目标目录
!unzip -d ./trained-envs-executables/linux/ ./trained-envs-executables/linux/Huggy.zip
# 设置 Huggy 文件夹及其内容的读写执行权限,确保可运行
!chmod -R 755 ./trained-envs-executables/linux/Huggy
2. 模型训练
我们将使用 PPO 算法训练 Huggy 环境,并保存模型到指定目录。ML-Agents 提供了 mlagents-learn 命令来启动训练。
behaviors:
Huggy:
trainer_type: ppo # 指定使用 PPO 算法作为训练器
hyperparameters:
batch_size: 2048 # 每次训练的批次大小
buffer_size: 20480 # 经验回放缓冲区大小
learning_rate: 0.0003 # 学习率
beta: 0.005 # 熵正则化系数,控制探索
epsilon: 0.2 # PPO 的剪切范围
lambd: 0.95 # 优势函数的衰减因子
num_epoch: 3 # 每个批次训练的 epoch 数
learning_rate_schedule: linear # 学习率调整策略
network_settings:
normalize: false # 是否标准化输入
hidden_units: 128 # 隐藏层神经元数量
num_layers: 2 # 神经网络层数
vis_encode_type: simple # 视觉编码类型
reward_signals:
extrinsic:
gamma: 0.99 # 折扣因子,平衡短期和长期奖励
strength: 1.0 # 外部奖励的权重
keep_checkpoints: 5 # 保留的检查点数量
max_steps: 500000 # 最大训练步数
time_horizon: 64 # 每次更新的时间步长
summary_freq: 10000 # 记录总结的频率(步数)
运行训练: 使用 mlagents-learn 命令训练模型,指定 Huggy 环境和配置文件。
# 使用 mlagents-learn 启动训练,指定配置文件、环境和运行 ID
!mlagents-learn ./ppo_config.yaml --env=./trained-envs-executables/linux/Huggy/Huggy --run-id=huggy-ppo --force
# --force 强制覆盖已有训练结果,训练数据保存在 ./results/huggy-ppo/
3. 保存训练结果
训练完成后,模型文件(.onnx 格式)和日志会保存在 ./results/huggy-ppo/ 目录。我们将这些文件组织到一个项目文件夹 ml_agents_project 中。
# 创建项目文件夹并移动文件
!mkdir -p ml_agents_project
!mv PPO1.ipynb ml_agents_project/ # 假设 PPO1.ipynb 已存在
!mkdir -p ml_agents_project/trained_envs
!mv trained-envs-executables/linux/Huggy ml_agents_project/trained_envs/
!mkdir -p ml_agents_project/models
!mv results/huggy-ppo ml_agents_project/models/
4.上传到 Google Drive
将整个项目文件夹上传到 Google Drive,实现持久化存储。
# 挂载 Google Drive 到 Colab 文件系统
from google.colab import drive
drive.mount('/content/drive')
# 将整个项目目录复制到 Google Drive 的 My Drive 路径
!cp -r ml_agents_project /content/drive/My\ Drive/ml_agents_project
下次会话加载
在新的 Colab 会话中,从 Google Drive 加载项目文件夹,继续使用。
# 挂载 Google Drive 到 Colab 文件系统
from google.colab import drive
drive.mount('/content/drive')
# 从 Google Drive 复制项目目录到当前工作目录
!cp -r /content/drive/My\ Drive/ml_agents_project .
# 切换到项目目录
%cd ml_agents_project
# 列出目录内容,确认文件加载成功
!ls -l
下载到本地
将整个项目文件夹压缩为 ZIP 文件,并下载到本地计算机。
# 压缩项目文件夹
!zip -r ml_agents_project.zip ml_agents_project
# 下载到本地
from google.colab import files
files.download('ml_agents_project.zip')
应用示例
场景:你训练了一个 Huggy 环境的 PPO 模型,想将其分享给团队成员,用于展示或进一步开发。
!cp -r /content/drive/My\ Drive/ml_agents_project . %cd ml_agents_project
!mlagents-learn --env=./trained_envs/Huggy/Huggy --run-id=huggy-ppo --resume
ml_agents_project/
├── PPO1.ipynb # 你的 Colab Notebook 文件,记录代码和训练配置
├── trained_envs/ # 存放训练环境的子目录
│ └── Huggy/ # Huggy 环境的可执行文件和相关资源
│ ├── Huggy # 可执行环境文件 (Linux 二进制)
│ ├── Huggy_Data/ # 环境数据文件夹 (可能包含 Unity 资源)
│ └── ... # 其他环境相关文件
├── models/ # 存放训练模型和日志的子目录
│ └── huggy-ppo/ # 训练结果目录,包含模型和检查点
│ ├── Huggy.onnx # 训练好的 PPO 模型文件
│ ├── events.out.tfevents # TensorBoard 日志文件
│ ├── checkpoint # 训练检查点文件
│ ├── ... # 其他训练日志或配置文件
└── (可能包含其他文件) # 未来可能添加的配置文件或脚本
上传到 Google Drive 后的结构
当你运行 !cp -r ml_agents_project /content/drive/My\ Drive/ml_agents_project 时,上述结构会被复制到 Google Drive 的 My Drive/ml_agents_project 路径:
Google Drive/
└── My Drive/
└── ml_agents_project/
├── PPO1.ipynb
├── trained_envs/
│ └── Huggy/
│ ├── Huggy
│ ├── Huggy_Data/
│ └── ...
├── models/
│ └── huggy-ppo/
│ ├── Huggy.onnx
│ ├── events.out.tfevents
│ ├── checkpoint
│ └── ...
└── (可能包含其他文件)
压缩和下载后的本地结构
运行 !zip -r ml_agents_project.zip ml_agents_project 并下载后,解压 ml_agents_project.zip 到本地计算机,将恢复相同的目录结构:
本地计算机/
└── Downloads/ (或你指定的目录)
└── ml_agents_project.zip (解压后)
├── PPO1.ipynb
├── trained_envs/
│ └── Huggy/
│ ├── Huggy
│ ├── Huggy_Data/
│ └── ...
├── models/
│ └── huggy-ppo/
│ ├── Huggy.onnx
│ ├── events.out.tfevents
│ ├── checkpoint
│ └── ...
└── (可能包含其他文件)