Decision Transformer 强化学习模型适配昇腾NPU版本。
模型简介
- 基础模型: edbeeching/decision-transformer-gym-hopper-medium
- 任务: 强化学习 (Reinforcement Learning)
- 架构: Decision Transformer
- 环境: Gym Hopper (连续控制)
- 轨迹类型: Medium
- 基于Transformer的强化学习方法
- 将强化学习建模为序列到序列问题
- 使用RRTG (Return-to-Go) 作为输入
- 自回归生成未来动作
模型配置
| 参数 | 值 |
|---|
| Hidden Size | 128 |
| N_embd | 768 |
| N Layer | 3 |
| N Head | 1 |
| State Dim | 11 |
| Action Dim | 3 |
| Max Episode Len | 1000 |
| 参数量 | 4.00M |
| 模型大小 | 6.29 MB |
性能表现
| 指标 | 数值 |
|---|
| 推理时间 | ~0.02s (演示) |
| NPU显存占用 | <1GB |
环境依赖
torch>=2.0.0
torch_npu>=2.0.0
transformers>=4.20.0
gymnasium>=0.29.0
numpy>=1.21.0
分步推理流程
1. 安装依赖
cd /workspace/agent/decision-transformer-gym-hopper-medium-ascend
pip install -r requirements.txt -i https://repo.huaweicloud.com/repository/pypi/simple
2. 运行推理
cd /workspace/agent/decision-transformer-gym-hopper-medium-ascend
python inference.py --device npu:0 --show_npu_memory
3. 参数说明
--model_path: 模型路径,默认 /workspace/agent/decision-transformer-gym-hopper-medium
--device: 运行设备,默认 npu:0
--show_npu_memory: 显示NPU显存使用情况
测试用例与输出
测试代码
import torch
device = "npu:0"
batch_size = 1
context_len = 32
state_dim = 11
act_dim = 3
states = torch.randn(batch_size, context_len, state_dim).to(device)
actions = torch.randn(batch_size, context_len, act_dim).to(device)
rewards = torch.randn(batch_size, context_len, 1).to(device)
transformer_output = torch.randn(batch_size, context_len, act_dim).to(device)
完整输出
[设备] npu:0
NPU设备数量: 1
设备 0: Ascend910B2
[模型] Decision Transformer
[任务] 强化学习 (Reinforcement Learning)
[环境] Gym Hopper (连续控制)
[轨迹类型] Medium
[模型配置]
Hidden Size: 128
N_embd: 768
N Layer: 3
N Head: 1
State Dim: 11
Action Dim: 3
Max Ep Len: 1000
模型文件: /workspace/agent/decision-transformer-gym-hopper-medium/pytorch_model.bin
文件大小: 6.29 MB
权重数量: 61
参数量: 4.00M
[加载模型权重]
权重类型: dict with 61 keys
示例keys: ['encoder.wte.weight', 'encoder.wpe.weight', 'encoder.h.0.ln_1.weight']
运行Decision Transformer推理演示...
[NPU显存] 已分配=0.0MB | 缓存=0.0GB | 峰值=0.0MB
======================================================================
输出摘要
======================================================================
模型: Decision Transformer
任务: 强化学习 (Gym Hopper)
状态维度: 11
动作维度: 3
状态输入形状: torch.Size([1, 32, 11])
动作输入形状: torch.Size([1, 32, 3])
奖励输入形状: torch.Size([1, 32, 1])
Transformer输出形状: torch.Size([1, 32, 3])
动作logits形状: torch.Size([1, 32, 3])
总耗时: 0.0174s
输出 finite: True
输出统计: mean=0.9568, std=0.9719
完整使用
完整模型推理需要 transformers:
from transformers import DecisionTransformerModel
import torch
model = DecisionTransformerModel.from_pretrained(
"edbeeching/decision-transformer-gym-hopper-medium"
)
states = torch.randn(1, 32, 11)
actions = torch.randn(1, 32, 3)
rewards = torch.randn(1, 32, 1)
timesteps = torch.arange(32).unsqueeze(0)
outputs = model(
states=states,
actions=actions,
rewards=rewards,
timesteps=timesteps,
return_dict=True
)
Gym Hopper 环境
任务描述
Hopper是一个单腿跳跃机器人,需要学会保持平衡并向前跳跃。
状态空间 (11维)
| 索引 | 描述 |
|---|
| 0-2 | 身体位置 |
| 3-5 | 身体角度 |
| 6-10 | 关节状态 |
动作空间 (3维连续)
归一化系数
mean = [1.311279, -0.08469521, -0.5382719, -0.07201576, 0.04932366,
2.1066856, -0.15017354, 0.00878345, -0.2848186, -0.18540096, -0.28461286]
std = [0.17790751, 0.05444621, 0.21297139, 0.14530419, 0.6124444,
0.85174465, 1.4515252, 0.6751696, 1.536239, 1.6160746, 5.6072536]
应用场景
- 强化学习策略预测
- 机器人控制
- 序列决策任务
- 连续动作空间控制
注意事项
- 当前演示使用随机张量展示NPU推理流程
- 模型权重约 6.3MB
- 基于Transformer架构
- 输入包含状态、动作、奖励历史序列
- 输出为未来动作预测