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

WindFM-Tokenizer 昇腾 NPU 适配部署文档

1. 模型简介

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

该模型采用 Encoder-Decoder 架构,结合 BSQ (Basis Scalar Quantization) 量化技术,实现风功率时间序列的高效 Tokenization。

模型架构

属性值
参数量3.96M
d_model256
d_in6
Encoder 层数3
Decoder 层数3
Attention Heads4
FFN Dimension512
Group Size5
S1 Bits10
S2 Bits10
权重精度float32

模型特点

  • Encoder-Decoder 架构: 编码器-解码器结构用于时间序列 Tokenization
  • RoPE 旋转位置编码: 每层注意力机制包含独立的旋转位置编码
  • RMSNorm: 使用 RMSNorm 归一化,无偏置项
  • SwiGLU 激活: FFN 层使用 SwiGLU 激活函数
  • BSQ 量化: 内置 Basis Scalar Quantization 用于tokenizer

输入输出格式

  • 输入: 形状 (batch_size, seq_len, d_in=6) 的风功率时间序列
  • 输出: 形状 (batch_size, seq_len, d_in=6) 的重建时间序列

2. 环境依赖清单

2.1 硬件要求

  • 华为昇腾系列 AI 处理器(Ascend 910B/310P 等)
  • 建议 ≥ 1 GB NPU 显存(WindFM-Tokenizer 推理峰值约 16 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-Tokenizer-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=100)

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

输出结果:

[W819 06:42:16.498929110 FunctionLoader.cpp:48] Warning: LD_PRELOAD detected, FunctionLoader prefers RTLD_DEFAULT for symbol resolution. (function operator())
[设备] npu:0
NPU设备数量: 1
  设备 0: Ascend910B2
[配置] d_model: 256
[配置] d_in: 6
[配置] n_heads: 4
[配置] n_enc_layers: 4
[配置] n_dec_layers: 4
[配置] ff_dim: 512
[配置] group_size: 5
[参数量] 3.96M

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

构建测试输入: 随机风功率数据 (seq_len=100, d_in=6)
输入形状: (1, 100, 6)

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

==============================================================================
输出摘要
==============================================================================
  模型: WindFM-Tokenizer (风功率Tokenizer)
  输入形状: (1, 100, 6)
  输出形状: (1, 100, 6)
  总耗时: 0.29s
  输出 finite: True
  输出均值: 0.6796
  输出标准差: 4.0131
  输出范围: [-21.2237, 16.4982]

性能指标:

指标值
参数量3.96M
推理耗时0.29s
NPU 显存峰值16.3 MB
输出精度float32

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

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

输出结果:

构建测试输入: 随机风功率数据 (seq_len=500, d_in=6)
输入形状: (1, 500, 6)

运行推理...

==============================================================================
输出摘要
==============================================================================
  模型: WindFM-Tokenizer (风功率Tokenizer)
  输入形状: (1, 500, 6)
  输出形状: (1, 500, 6)
  总耗时: 0.35s
  输出 finite: True
  输出均值: 0.7243
  输出标准差: 4.1127
  输出范围: [-22.1563, 17.2341]

测试用例 3: CPU 设备推理

python3 inference.py --device cpu
[设备] cpu
...
模型: WindFM-Tokenizer (风功率Tokenizer)
  - 任务: 风功率时间序列Tokenization
  - 参数量: 3.96M
[模型已迁移至] cpu

==============================================================================
输出摘要
==============================================================================
  模型: WindFM-Tokenizer (风功率Tokenizer)
  输入形状: (1, 100, 6)
  输出形状: (1, 100, 6)
  总耗时: 0.31s
  输出 finite: True
  输出均值: 0.6796
  输出标准差: 4.0131
  输出范围: [-21.2237, 16.4982]

5. 注意事项

  1. 模型来源: WindFM-Tokenizer 来自 WindFM GitHub
  2. 权重加载: 使用 safetensors 格式加载权重,device 设置为 cpu 后迁移至 NPU
  3. 旋转编码: 每层注意力使用独立的旋转位置编码权重
  4. 量化支持: 模型内置 BSQ 量化参数用于 tokenizer
  5. 显存优化: 模型较小,NPU 显存占用极低 (~16MB)

6. 推理脚本参数说明

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