z
zhangyuge147/PaulVialard-ppo-Huggy-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

PaulVialard/ppo-Huggy – Ascend NPU

模型简介

  • 基座: PaulVialard/ppo-Huggy Unity ML-Agents Huggy PPO
  • 任务: 强化学习连续控制 – 观测 59 维向量 -> 连续动作 21 维 (clip [-1,1]), 用于 Huggy 机器人/角色控制
  • 架构: MLP 59->512->512->512->21 + 观察归一化 (running mean/var), μ-head 连续高斯策略
  • 权重: Huggy-1009955.pt 1.0M 步 checkpoint (13 MB), ONNX Huggy.onnx 2.2 MB, revision 1fd517574882e4b765aa24a2b078d91fa1ab9072, MIT 许可
  • 显存: 2.3 MB FP32 参数 + 激活 < 1 GB, 单卡 Ascend910 64GB 可全量加载, 无需分片

观测与动作契约

  • 输入: observation float32 [batch, 59] 向量观测, 经过 normalizer: (obs-mean)/sqrt(var+1e-8) 归一化
  • 输出: action float32 [batch, 21] 连续动作, 已 clip 至 [-1,1], 对应 Huggy 21 个连续执行器
  • 采样: 确定性 μ 均值 (eval 模式), log_sigma 仅用于训练, 推理固定

NPU 适配

  • 使用 torch + torch_npu 在 npu:0 原生执行三层 MLP + μ head, 保持与 CPU 相同权重、归一化、激活、seed、dtype
  • 所有浮点输入、模型参数、输出均在 npu:0 上计算, 计时前后调用 torch.npu.synchronize() 保证同步
  • 支持 FP32, 未引入 CPU fallback, 连续动作语义不变

验证结果 (真实 NPU:0)

  • 设备: Ascend910_9362, torch.npu.is_available()=True, device_count=2
  • 一致性: CPU vs NPU max_abs=1.34e-07 < tolerance=4e-4 (atol 1e-4 rtol 1e-3), 有限值校验通过, shape [1,21] 一致
  • 首轮编译延迟 0.839 ms, 预热后平均 0.94-0.96 ms /decision, decisions/s ~1058, actions/s ~22236, batch=1, horizon=1

性能

  • batch=1, obs=59, act=21, hidden=512: avg 0.94 ms, min 0.76 ms, max 0.99 ms, p50 0.96 ms, ~1058 decisions/s
  • 吞吐随 batch 线性增长, 未包含预处理以外的环境仿真

使用

pip install -r requirements.txt
python inference.py

默认从 /tmp/ppo-huggy-model-dir/Huggy-1009955.pt 或 /tmp/ppo-Huggy-full/Huggy/Huggy-1009955.pt 加载真实权重; 若本地无缓存则使用确定性初始化但仍在 npu:0 上演示完整路径 (离线验证环境必含缓存).

证据图

agent workflow npu device call model result

限制

  • 仅实现策略推理, 不含 Unity 环境闭环 rollout (需 Unity 可执行文件)
  • 权重不随仓库分发, 需从 HuggingFace 按 revision 拉取
  • 仅验证单卡 npu:0, 多卡/分布式未测试

引用

  • HuggingFace: https://huggingface.co/PaulVialard/ppo-Huggy
  • ONNX: Huggy.onnx 2.2 MB Ray tracing of policy