• modelscope适配昇腾NPU


    注意

    我只做了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

    选好后一般会有两个文件,一个是驱动,一个是固件:

    安装驱动

    安装流程是,先安装驱动,在安装固件

    1. chmod +x *.run
    2. ## 安装驱动
    3. # 先进行check
    4. ./xx.run --check
    5. # 然后进行安装
    6. ./xx.run --full
    7. ## 安装固件
    8. # 先进行check
    9. ./xx.run --check
    10. # 然后进行安装
    11. ./xx.run --full

    官方的安装流程可以参考一下:

    安装驱动 - Atlas 300I Pro 推理卡 5.1.RC2 NPU驱动和固件安装指南 06 - 华为

    安装完后执行一下,npu-smi info, 出现下图这样就说明安装正确了:

    安装Ascend-cann-toolkit

    这一步可以先不做,如果后面出现相关报错了,或者你的驱动目录(一般是/usr/local/Ascend这个目录)中没有ascend-toolkit目录,你可以做下这一步。

    首先下载toolkit包

    (如果时间富裕的话,这些包都安装一下,如果想偷懒的话就安装 toolkit这个包就行了)

    1. # 安装
    2. chmod +x xxx-toolkit-xx.run
    3. # 运行
    4. ./xxx-toolkit-xx.run --install
    5. # 如果报错的话,可以加上 --force参数,或者使用其他版本
    应用环境部署

    首先你得有一个正常的modelscope的环境,这是前提呀!!!,如果没有的话请先准备好,再往后执行。

    安装python依赖
    1. # 安装 decorator-5.1.1-py3-none-any.whl
    2. # 安装torch_npu
    3. 版本要结合 torch/cann的版本
    4. 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

    1. from modelscope.pipelines import pipeline
    2. from modelscope.utils.constant import Tasks
    3. import torch_npu
    4. if __name__ == '__main__':
    5. device = "npu:1"
    6. torch_npu.npu.set_device("npu:1")
    7. ner_pipeline = pipeline(Tasks.named_entity_recognition,
    8. 'damo/nlp_raner_named-entity-recognition_chinese-base-ecom', device_map=device)
    9. result = ner_pipeline('他继续与貝塞斯達遊戲工作室在接下来辐射4游戏。')
    10. print(result)
    使用容器

    首先要安装一个ascend-docker-runtime:

    https://github.com/Ascend/ascend-docker-runtime/tags

    然后再运行容器的指令中添加如下参数:

    1. -e LD_LOBRARY_PATH=/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/ \
    2. --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
    3. --device=/dev/davinci4 --device=/dev/davinci5 \
    4. --device=/dev/davinci6 --device=/dev/davinci7 \
    5. --device=/dev/davinci_manager \
    6. --device=/dev/devmm_svm \
    7. --device=/dev/hisi_hdc \
    8. -v /usr/local/Ascend:/usr/local/Ascend \
    9. -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    10. -v /usr/local/dcmi:/usr/local/dcmi \

    进入容器,首先执行一下: source /usr/local/Ascend/ascend-toolkit/set_env.sh

    然后运行python脚本即可。

    问题交流

     QQ 614809646

  • 相关阅读:
    【Linux】进程概念
    java168-java连接SQL server数据库
    langchain 之 Tools 多案例使用(一)
    netty怎么解决拆包粘包的问题
    【iOS开发】(六)react Native 路由嵌套传参与框架原理(完)20240423
    数维图API文档:SovitJS编辑器集成API使用说明
    33、用户查询缓存(缓存雪崩)
    数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Javascript版)
    自动控制原理快速入门+理解
    【内网穿透】远程访问RabbitMQ服务
  • 原文地址:https://blog.csdn.net/u014686399/article/details/134221278