# 本地强化学习训练服务 该服务把 Web 平台发出的受限训练请求转换为本机训练子进程,并提供状态轮询、停止任务和 `policy.onnx` 下载接口。服务只绑定 `127.0.0.1`,不执行前端传入的任意命令。 仓库已在 [`rl/`](rl/) 内置 `Unitree-Go2-Flat` 所需的 PPO 训练代码、Go2 模型资产和 ONNX 导出逻辑,不再要求另外克隆 `unitree_rl_mjlab`。`mjlab`、PyTorch 等大型运行依赖仍需安装在本机训练环境中。 ## 准备训练环境 使用仓库已有的 `.venv` 项目虚拟环境: ```bash source .venv/bin/activate python -m pip install -r training_server/rl/requirements.txt ``` ## 启动 使用已安装训练依赖的 Python 解释器启动服务: ```bash npm run training-server -- \ --trainer-python "$PWD/.venv/bin/python" ``` 服务启动时会在终端显示一个随机访问令牌。将该令牌填入前端“访问令牌”字段后再连接。令牌只保存在当前浏览器标签页的 `sessionStorage` 中。自动化启动时可固定令牌: ```bash MUJOCO_TRAINING_TOKEN='至少十六个字符的随机令牌' npm run training-server -- \ --trainer-python /path/to/training-env/bin/python ``` 默认训练工程是仓库内的 `training_server/rl`。如需使用包含其他已注册任务的外部训练工程,仍可通过 `--trainer-root /path/to/trainer` 或 `UNITREE_RL_MJLAB_ROOT` 覆盖。默认端口是 `8765`。如果前端不是从 `localhost` 或 `127.0.0.1` 提供,可显式添加来源: ```bash python training_server/server.py \ --trainer-python /path/to/training-env/bin/python \ --allow-origin http://192.168.1.10:5173 ``` 服务一次只运行一个训练任务,最多保留 20 个任务的内存状态,每个任务最多保留 200 行最近日志。停止服务或在界面点击“停止训练”会同步终止整个训练进程组。训练请求的 W&B 模式默认为 `offline`,保留本地指标但不登录;也可以在界面选择完全禁用或在线模式。所有 API 请求都必须携带启动时生成的 Bearer Token。 ## 接口 - `GET /api/training/health`:运行环境、允许的任务和活动任务; - `POST /api/training/jobs`:发起训练; - `GET /api/training/jobs/{id}`:状态、迭代进度和最近日志; - `DELETE /api/training/jobs/{id}`:停止训练; - `GET /api/training/jobs/{id}/artifacts/policy.onnx`:下载本次生成的策略。 任务保存在服务内存中,服务重启后历史任务状态会丢失;训练日志、checkpoint 和 ONNX 产物保留在 `training_server/rl/logs/rsl_rl/`,使用外部训练工程时则保留在对应工程中。 ## 测试 ```bash python3 -m pip install -r requirements-dev.txt npm run lint:python npm run test:training-server ```