weixin_72661020/Marmeladov_sentiment_classification
模型介绍文件和版本Pull Requests讨论分析

Marmeladov/sentiment_classification on Ascend NPU

1. 简介

本文档记录 Marmeladov/sentiment_classification(基于 Qwen-1_8B + SWIFT LoRA)在昇腾 Ascend NPU 上的适配与验证。

  • 基座模型:qwen/Qwen-1_8B(1.8B 参数)
  • 适配方法:SWIFT LoRA
  • 任务类型:中文情感分类(正向/负向情感分析)
  • 推理框架:PyTorch + Transformers
  • 权重地址(ModelScope):https://modelscope.cn/models/Marmeladov/sentiment_classification
  • 基座地址(ModelScope):https://modelscope.cn/models/qwen/Qwen-1_8B

2. 验证环境

组件版本
硬件Ascend910_9362
PyTorch2.5.1
torch_npu对应 PyTorch 2.5.1
Transformers4.57.6
SWIFT (ms-swift)最新
Python3.x

3. 推理方式

该模型为 LoRA 适配器,需加载基座模型后合并使用:

import torch
import torch_npu
torch_npu.npu.set_device(0)

from transformers import AutoTokenizer, AutoModelForCausalLM

BASE = "qwen/Qwen-1_8B"
ADAPTER = "Marmeladov/sentiment_classification"

tokenizer = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(BASE, torch_dtype=torch.bfloat16, trust_remote_code=True)

from swift.tuners import Swift
model = Swift.from_pretrained(model, ADAPTER)
model = model.npu().eval()

texts = ["这件衣服挺好看", "这个产品质量很差,完全不值这个价钱"]
for text in texts:
    inputs = tokenizer(text, return_tensors="pt")
    inputs = {k: v.npu() for k, v in inputs.items()}
    with torch.no_grad():
        outputs = model.generate(**inputs, max_new_tokens=10, do_sample=False,
                                  use_cache=False, pad_token_id=tokenizer.pad_token_id)
    response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
    print(f"Input: {text}")
    print(f"Output: {response}")

4. Smoke 验证

python3 inference.py

预期输出:模型对正面输入(如"这件衣服挺好看")生成正面评论延续,对负面输入(如"你去死吧")生成负面或拒绝回应。

5. 性能参考

测试条件:max_new_tokens=10, do_sample=False, use_cache=False

指标数值
平均推理时间0.283 s
平均吞吐量35.38 tok/s
加速比(CPU vs NPU)~49x

7. 注意事项

  1. Transformers 4.57.x 需设置 use_cache=False 以兼容新缓存系统与 Qwen 模型的交互
  2. 模型为 LoRA 适配器,需先加载基座模型后再通过 Swift 加载适配器权重
  3. 推理时需确保 NPU 设备已初始化(torch_npu.npu.set_device(0))

Ascend NPU 精度评测

NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):

指标数值
测试用例数5
最大输出差异 %200.00
预测一致性2/5 (40.0%)
精度要求NPU vs CPU 输出差异 < 1.0%
精度结论⚠️ 部分通过 (最大差异 200.00% > 1.0% 阈值)

精度评测源代码和日志详见 eval/ 目录。

下载使用量0