URSA-1.7B-IBQ512 Ascend NPU 部署指南
项目简介
URSA-1.7B-IBQ512 是一个 1.7B 参数的 Text-to-Image 生成模型,由 BAAI 开发。该模型基于 uniform discrete diffusion 技术,支持 512x512 分辨率图像生成。
注意: 本测试主要验证了 Transformer 权重在 NPU 上的精度。完整的文生图功能测试需要额外安装 URSA 库和 Qwen3-1.7B base model。
特性
- 支持 Ascend NPU 推理加速
- CPU vs NPU 精度对比测试 (< 1% 误差)
- 基于 Transformer 架构的扩散模型
环境要求
- 硬件: 华为 Ascend 910 系列 NPU
- CANN: 8.0.RC1 或更高版本
- PyTorch: 2.0+ with torch_npu
- Docker: 容器名称 test-modelagent
目录结构
/data/ysws/agentsp/5-14/URSA-1.7B-IBQ512/
├── model_index.json # 模型索引
├── transformer/ # Transformer 权重 (已测试)
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
├── vae/ # VAE 编解码器
├── tokenizer/ # Qwen2 Tokenizer
├── scheduler/ # Kinetic Optimal Scheduler
└── README.md
部署步骤
1. 进入容器
docker exec -it test-modelagent bash
2. 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
3. 完整安装 (可选 - 用于完整文生图测试)
# 安装 URSA 库 (需要 GitHub SSH 访问)
pip install git+ssh://git@github.com:baaivision/URSA.git
# 或安装依赖
pip install diffusers transformers accelerate
4. 执行推理+精度测试
cd /data/ysws/agentsp/5-14/URSA-1.7B-IBQ512-ascend/
python3 inference.py
测试验证
精度测试结果
| 指标 | 实测值 | 阈值 | 状态 |
|---|
| Max error (sum) | 7.81e-03 | < 4.89e+00 | ✅ PASS |
| Max error (mean) | 7.45e-09 | < 1.00e-04 | ✅ PASS |
| Max error (std) | 1.19e-07 | < 1.00e-03 | ✅ PASS |
性能数据
| 操作 | 耗时 |
|---|
| 模型加载 | 0.02s |
| CPU 参考计算 (20 tensors) | 6.04s |
| NPU 张量读取 (20 tensors) | 8.17s |
测试日志
完整测试日志保存在 log.txt
模型结构
- 模型类型: Text-to-Image Transformer
- 参数量: 1.7B
- Transformer 层数: 28
- Hidden size: 2048
- 注意力头数: 16 (8 KV heads)
- 词汇表大小: 282741
- 分辨率: 512x512
完整 Pipeline 组件
| 组件 | 类型 | 状态 |
|---|
| tokenizer | Qwen2TokenizerFast | 需要额外安装 |
| scheduler | KineticOptimalScheduler | 已下载 |
| transformer | URSATransformer3DModel | ✅ 已测试 |
| vae | AutoencoderVQ | 已下载 |
张量精度详情
| 张量名称 | Sum Error | Mean Error | Std Error |
|---|
| lm_head.weight | 2.44e-03 | 9.09e-12 | 1.86e-09 |
| model.embed_tokens.weight | 7.81e-03 | 7.28e-12 | 0.00e+00 |
| model.layers.0.input_layernorm.weight | 0.00e+00 | 0.00e+00 | 1.86e-09 |
| model.layers.0.mlp.down_proj.weight | 3.81e-06 | 6.82e-13 | 1.86e-09 |
| model.layers.0.self_attn.q_proj.weight | 3.81e-06 | 9.09e-13 | 1.86e-09 |
完整文生图测试 (需要额外配置)
from diffnext.pipelines import URSAPipeline
import torch
model_id = "/data/ysws/agentsp/5-14/URSA-1.7B-IBQ512"
pipe = URSAPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16,
trust_remote_code=True
)
pipe = pipe.to("npu:0")
prompt = "A beautiful landscape with mountains"
image = pipe(prompt=prompt).frames[0]
image.save("output.png")
参考链接