注意
我只做了raner,raner-50cls,corom这三个模型的适配,不能保证其他模型同样好使。
我的环境信息
NPU: Atlas 300I Pro
Modelsope: 1.9.4(最好要使用这个版本呀,因为后面要改一下源码)
python: 3.8
torch: 2.0.1
内核以及系统版本:
有条件的可以升级一下内核到5.5或者以上,不然的话后面会出现警告(部分特性不支持)。我是没有条件升级的,不过目前模型的功能正常使用。
驱动
安装昇腾的驱动也是一个折磨的过程,主要是资料太少了,安装过程中的问题不太好找到解决办法。
确定环境信息
首先我们要清楚自己的环境信息,也就是你的npu的型号:
lspci |grep -i 'Processing accelerators'
通过上面命令我们可以知道,我们机器上有两个npu。 我们可以通过d500确定npu的型号(这里我没有找到官方的转换渠道,而是百度了一下,如果你有更好的方式,帮忙给留个言)
下载驱动
我们在下面这个网站找合适的驱动和cann,这个网站我也是找了好久。
https://www.hiascend.com/hardware/firmware-drivers/community?product=2&model=15&cann=7.0.0.alpha001&driver=1.0.20.alpha
下载的时候注意cpu架构,软件包格式可以选择run格式,组件选择npu。
cann的版本要和你的环境对应一下,尤其是torch的版本,可以去这个网站查一下:
pytorch: Ascend PyTorch adapter
选好后一般会有两个文件,一个是驱动,一个是固件:
安装驱动
安装流程是,先安装驱动,在安装固件
chmod +x *.run
## 安装驱动
# 先进行check
./xx.run --check
# 然后进行安装
./xx.run --full
## 安装固件
# 先进行check
./xx.run --check
# 然后进行安装
./xx.run --full
官方的安装流程可以参考一下:
安装驱动 - Atlas 300I Pro 推理卡 5.1.RC2 NPU驱动和固件安装指南 06 - 华为
安装完后执行一下,npu-smi info, 出现下图这样就说明安装正确了:
安装Ascend-cann-toolkit
这一步可以先不做,如果后面出现相关报错了,或者你的驱动目录(一般是/usr/local/Ascend这个目录)中没有ascend-toolkit目录,你可以做下这一步。
首先下载toolkit包
(如果时间富裕的话,这些包都安装一下,如果想偷懒的话就安装 toolkit这个包就行了)
# 安装
chmod +x xxx-toolkit-xx.run
# 运行
./xxx-toolkit-xx.run --install
# 如果报错的话,可以加上 --force参数,或者使用其他版本
应用环境部署
首先你得有一个正常的modelscope的环境,这是前提呀!!!,如果没有的话请先准备好,再往后执行。
安装python依赖
# 安装 decorator-5.1.1-py3-none-any.whl
# 安装torch_npu
版本要结合 torch/cann的版本
https://gitee.com/ascend/pytorch#pytorch%E4%B8%8Epython%E7%89%88%E6%9C%AC%E9%85%8D%E5%A5%97%E8%A1%A8
修改modelscope
代码仓库:
modelscope_for_ascend: modelscope 适配昇腾的NPU。 目前能运行的模型是raner,raner-50cls,corom,其他模型可以尝试一下,有问题大家一起解决。
找到你的python环境的site-packages, 将你的modelscope目录备份下,然后替换为仓库里的modelscope。
使用
不使用容器
执行如下脚本之前,要执行一下:source /usr/local/Ascend/ascend-toolkit/set_env.sh
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import torch_npu
if __name__ == '__main__':
device = "npu:1"
torch_npu.npu.set_device("npu:1")
ner_pipeline = pipeline(Tasks.named_entity_recognition,
'damo/nlp_raner_named-entity-recognition_chinese-base-ecom', device_map=device)
result = ner_pipeline('他继续与貝塞斯達遊戲工作室在接下来辐射4游戏。')
print(result)
使用容器
首先要安装一个ascend-docker-runtime:
https://github.com/Ascend/ascend-docker-runtime/tags
然后再运行容器的指令中添加如下参数:
-e LD_LOBRARY_PATH=/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/ \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
--device=/dev/davinci4 --device=/dev/davinci5 \
--device=/dev/davinci6 --device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend:/usr/local/Ascend \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/dcmi:/usr/local/dcmi \
进入容器,首先执行一下: source /usr/local/Ascend/ascend-toolkit/set_env.sh
然后运行python脚本即可。
问题交流
QQ 614809646