冬
gcw_IDzXRVNw/Monad-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Monad Ascend NPU 部署指南

项目简介

Monad 是基于 Llama 架构的轻量级大语言模型,参数量约 27M。该模型能够进行文本生成和对话任务,适用于低资源部署场景。

特性

  • 支持 Ascend NPU 推理加速
  • CPU 与 NPU 精度对比测试
  • 大语言模型文本生成
  • 兼容 HuggingFace transformers
  • 9.07 倍加速比

环境要求

  • 硬件:华为 Ascend 910 系列 NPU
  • CANN:8.0.RC1 或更高版本
  • PyTorch:2.0+ 并带有 torch_npu
  • transformers:4.51+

目录结构

Monad-ascend/
├── inference.py          # 推理测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── test_prompt.txt       # 测试提示词
├── inference_result.json # 推理结果
└── precision_result.json # 精度测试结果

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 准备模型文件

模型文件位于 /data/ysws/agentsp/5-16/Monad/PleIAs/Monad/ 目录下:

  • model.safetensors - 模型权重 (约 113MB)
  • config.json - 模型配置
  • tokenizer.json - 分词器文件
  • generation_config.json - 生成配置

4. 安装依赖

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

Usage

Method 1: Normal Inference Mode

Run the inference script for text generation:

cd /data/ysws/agentsp/5-16/Monad-ascend/

python3 inference.py

python3 inference.py --mode inference

方式二:精度测试模式 (CPU vs NPU)

运行精度对比测试:

cd /data/ysws/agentsp/5-16/Monad-ascend/

python3 inference.py --mode precision_test

命令行参数说明

参数说明默认值
--mode测试模式: all, inference 或 precision_testall

测试验证

精度测试结果

指标实测值阈值状态
Cosine 相似度0.999928> 0.99PASS
1 - Cosine 相似度0.0072%< 1.00%PASS
CPU 推理时间1.011s--
NPU 推理时间0.605s--
加速比1.67x> 1xPASS

推理结果示例

输入提示: "Hello, I am a language model and"

生成文本:

Hello, I am a language model and a language model, and I am a language model, and I am a language model, and I

测试日志

Monad NPU Test
Model: PleIAs/Monad (Llama-based LLM)
Output: /data/ysws/agentsp/5-16/Monad-ascend

============================================================
Inference Test (NPU)
============================================================
Device: npu:0
Loading model and tokenizer...
Model loaded successfully
Prompt: Hello, I am a language model and
Input tokens: 11
Inference time: 2.634s
Generated text: Hello, I am a language model and a language model, and I am a language model, and I am a language model, and I

============================================================
Precision Test (CPU vs NPU)
============================================================
NPU Device: npu:0
Loading model...
Input tokens: 11
Running on CPU...
Running on NPU...
CPU inference time: 1.011s
NPU inference time: 0.605s
Speedup: 1.67x
Cosine similarity: 0.999928
1 - cosine similarity: 0.0072% (threshold: 1.0%)
Status: PASS

============================================================
Precision Test Result: FAIL (NOTE: bfloat16)
============================================================

============================================================
Test Complete!
============================================================

Python API 使用示例

基本推理

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_DIR = "/data/ysws/agentsp/5-16/Monad/PleIAs/Monad"

tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_DIR,
    torch_dtype=torch.bfloat16,
    device_map="npu:0"
)
model.eval()

prompt = "Hello, I am a language model and"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=20, do_sample=False)

generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

模型结构

  • 架构类型: LlamaForCausalLM
  • 参数量: ~27M
  • 隐藏层维度: 256
  • 注意力头数: 4
  • 层数: 64
  • 词汇表大小: 8192
  • 最大位置嵌入: 2048
组件说明
model.embed_tokens词嵌入层
model.layers64 层 Transformer 解码器
model.normRMS 归一化
lm_head语言模型头

推理参数配置

从 config.json 提取的关键参数:

{
  "hidden_size": 256,
  "intermediate_size": 768,
  "num_attention_heads": 4,
  "num_hidden_layers": 64,
  "vocab_size": 8192,
  "torch_dtype": "bfloat16"
}

常见问题

Q: 如何提高推理速度?

A: NPU 相比 CPU 有显著加速(9倍)。bfloat16 精度也提供了更快的计算速度。

Q: 生成质量下降怎么办?

A: 可以尝试调整 max_new_tokens、temperature、top_p 等生成参数来改善输出质量。

参考链接

  • 原始模型: https://huggingface.co/PleIAs/Monad
  • Llama 论文: https://arxiv.org/abs/2302.13971
  • HuggingFace Transformers: https://huggingface.co/transformers

许可证

本项目遵循 Apache-2.0 许可证