冬
gcw_IDzXRVNw/WindFM-ascend
模型介绍
文件和版本
Pull Requests
讨论
分析

WindFM 昇腾 NPU 适配部署文档

1. 模型简介

WindFM 是用于风功率时间序列预测的模型,来自 WindFM 项目。

该模型采用多层 Transformer 架构,结合时间特征 embedding 和离散化风功率嵌入,实现风功率预测。

模型架构

属性值
参数量4.10M
d_model256
Transformer 层数4
Attention Heads8
FFN Dimension512
S1/S2 Embedding Size1024
S1 Bits10
S2 Bits10
权重精度float32

模型特点

  • 多层 Transformer: 4层 Transformer 编码器进行序列建模
  • 双嵌入通道: S1/S2 离散化嵌入捕获风功率的两种模式
  • 时间特征编码: 支持 day/hour/minute/month/weekday 时间特征
  • RoPE 旋转位置编码: 部分维度使用旋转位置编码
  • RMSNorm: 使用 RMSNorm 归一化

输入输出格式

  • 输入 x: 形状 (batch_size, seq_len, 2) 的离散化风功率索引
  • 时间特征: 形状 (batch_size, seq_len, 5) 的时间特征 (day, hour, minute, month, weekday)
  • 输出 S1: 形状 (batch_size, seq_len, 1024) 的 S1 预测 logits
  • 输出 S2: 形状 (batch_size, seq_len, 1024) 的 S2 预测 logits

2. 环境依赖清单

2.1 硬件要求

  • 华为昇腾系列 AI 处理器(Ascend 910B/310P 等)
  • 建议 ≥ 1 GB NPU 显存(WindFM 推理峰值约 20 MB)
  • 本次实测使用 910B2(单卡 61 GB)

2.2 软件依赖

依赖项版本要求说明
操作系统CentOS 7.6+ / Ubuntu 18.04+支持主流 Linux 发行版
CANN5.0.RC2+华为昇腾计算架构
Python3.10 / 3.12推荐 3.12
PyTorch2.0.0+推荐 2.10
torch_npu与 PyTorch 版本匹配昇腾 PyTorch 扩展
safetensors0.4.0+安全张量加载

2.3 安装方式

pip install torch_npu -i https://repo.huaweicloud.com/repository/pypi/simple
pip install safetensors -i https://repo.huaweicloud.com/repository/pypi/simple

3. 分步推理操作流程

3.1 准备工作

cd /workspace/agent/WindFM-ascend

3.2 基本推理

python3 inference.py --device npu:0

3.3 查看 NPU 显存使用

python3 inference.py --device npu:0 --show_npu_memory

3.4 自定义序列长度

python3 inference.py --device npu:0 --seq_len 200

4. 测试用例与输出结果

测试用例 1: 基本推理 (seq_len=96)

python3 inference.py --device npu:0 --show_npu_memory

输出结果:

[W819 07:11:51.701549030 FunctionLoader.cpp:48] Warning: LD_PRELOAD detected...
[设备] npu:0
NPU设备数量: 1
  设备 0: Ascend910B2
[配置] d_model: 256
[配置] n_heads: 8
[配置] n_layers: 4
[配置] ff_dim: 512
[配置] s1_bits: 10
[配置] s2_bits: 10
[参数量] 4.10M

[模型加载]

模型: WindFM (风功率预测)
  - 任务: 风功率时间序列预测
  - 参数量: 4.10M
[模型已迁移至] npu:0
[NPU显存 · 模型加载后] 总显存=61.0GB | 已分配=15.7MB | 缓存=34.00MB | 峰值=15.7MB

构建测试输入: 随机风功率数据 (seq_len=96)
输入形状 x: (1, 96, 2)
时间特征形状: (1, 96, 5)

运行推理...
[NPU显存 · 推理完成后] 总显存=61.0GB | 已分配=16.5MB | 缓存=34.00MB | 峰值=17.1MB

==============================================================================
输出摘要
==============================================================================
  模型: WindFM (风功率预测)
  输入形状: (1, 96, 2)
  时间特征形状: (1, 96, 5)
  输出 S1 形状: (1, 96, 1024)
  输出 S2 形状: (1, 96, 1024)
  总耗时: 0.30s
  输出 S1 finite: True
  输出 S2 finite: True
  输出 S1 均值: -2.6320
  输出 S1 范围: [-8.3477, 2.6805]
  输出 S2 均值: -2.2659
  输出 S2 范围: [-7.7282, 3.1618]

性能指标:

指标值
参数量4.10M
推理耗时0.30s
NPU 显存峰值17.1 MB
输出精度float32

测试用例 2: 长序列推理 (seq_len=200)

python3 inference.py --device npu:0 --seq_len 200 --show_npu_memory

输出结果:

...
  输入形状 x: (1, 200, 2)
  时间特征形状: (1, 200, 5)
  输出 S1 形状: (1, 200, 1024)
  输出 S2 形状: (1, 200, 1024)
  总耗时: 0.30s
  输出 S1 finite: True
  输出 S2 finite: True
  输出 S1 均值: -2.6478
  输出 S1 范围: [-8.0242, 3.0149]
  输出 S2 均值: -2.2753
  输出 S2 范围: [-7.5028, 3.4965]

测试用例 3: CPU 设备推理

python3 inference.py --device cpu

5. 注意事项

  1. 模型来源: WindFM 来自 WindFM GitHub
  2. 权重加载: 使用 safetensors 格式加载权重,device 设置为 cpu 后迁移至 NPU
  3. 旋转编码: 每层注意力使用旋转位置编码,部分维度旋转
  4. 双通道输出: 模型输出 S1/S2 两个通道的预测 logits
  5. 时间特征: 输入时间特征需包含 day/hour/minute/month/weekday 5个维度

6. 推理脚本参数说明

参数类型默认值说明
--model_pathstr/workspace/agent/WindFM模型路径
--devicestrnpu:0设备 (npu:0, cpu, cuda:0)
--show_npu_memoryboolFalse显示 NPU 显存信息
--seq_lenint96输入序列长度