【CANN训练营】Atlas 200I DK A2开发板运行ChatYuan-large对话机器人应用

news2024/11/24 9:40:16

环境介绍

PC
操作系统:Ubuntu 22
内存:32GB
Python:3.8
开发板
华为Atlas 200I DK A2
内存:4G
NPU:昇腾310B

环境准备

只需要一台Linux 系统的PC机即可
Python版本需要3.7、3.8、3.9

准备CANN ToolKit

下载CANN ToolKit
这边为了和目前手上的200I DK A2开发板版本保持一致所以我使用了CANN 6.2 RC1版本的ToolKit

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%206.2.RC1/Ascend-cann-toolkit_6.2.RC1_linux-x86_64.run

安装CANN ToolKit

chmod a+x Ascend-cann-toolkit_6.2.RC1_linux-x86_64.run
./Ascend-cann-toolkit_6.2.RC1_linux-x86_64.run --full

设置环境变量

vim ~/.bashrc

在文件末尾添加如下

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

libascend_hal.so: cannot open shared object file:No such…解决办法
确认文件是否存在
进入到CANN ToolKit目录,例如/usr/local/Ascend/或者/home/用户名/Ascend/具体根据实际环境

find . -name libascend_hal.so

查看输出结果得到文件路径

./ascend-toolkit/6.2.RC1/x86_64-linux/devlib/libascend_hal.so
./ascend-toolkit/6.2.RC1/runtime/lib64/stub/libascend_hal.so
./ascend-toolkit/latest/x86_64-linux/devlib/libascend_hal.so

拷贝文件到/usr/local/lib/

cp ./ascend-toolkit/6.2.RC1/x86_64-linux/devlib/libascend_hal.so /usr/local/lib/

进入“/etc/ld.so.conf”,并将“/usr/local/lib”添加至文件最后一行

vim /etc/ld.so.conf

另起一行添加以下内容:

/usr/local/lib/

资源生效

ldconfig

使用atc命令验证

atc

输出结果

ATC start working now, please wait for a moment.
ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10054: The requied parameter [--model] for ATC is empty. Another possible reason is that the value of some parameter is not enclosed by quotation marks ("").

说明安装完成

克隆代码仓

git clone https://gitee.com/HUAWEI-ASCEND/ascend-devkit

将ChatBOT代码拷贝出来

cp -r src/E2E-Sample/ChatBot/ModelConvert ./

模型导出流程

原理介绍

为了能够在4G内存下运行大型语言模型,我们需要把在线推理的模型权重转化为离线推理模型。
在转化为ONNX离线推理模型之后,我们会对模型进行剪裁,并对decoder与lm_head部分进行int8量化

安装依赖包

pip install -r ./requirements.txt

导出模型

导出CHatYuan-Large-V2模型

导出encoder部分模型

python export_encoder.py --version=v2

导出第一次自回归的decoder与lm_head部分模型

python export_decoder_first.py --version=v2

导出第2-N次自回归的decoder与lm_head部分模型

python export_decoder_iter.py --version=v2

注:如果需要导出V1版本的模型将--version设置为v1即可

模型剪裁

这里我们可以使用onnxsim工具来剪裁一些不必要的算子。onnxsim运行需要较长时间,请耐心等待。
剪裁encoder部分模型

onnxsim ./encoder.onnx ./encoder_sim.onnx

剪裁第一次自回归的decoder与lm_head部分模型

onnxsim ./decoder_first.onnx ./decoder_first_sim.onnx

剪裁第2-N次自回归的decoder与lm_head部分模型

onnxsim ./decoder_iter.onnx ./decoder_iter_sim.onnx

对decoder部分模型进行int8量化

在4G内存设备上运行此Demo必须执行此步骤

python quant_decoder.py

使用ATC工具将encoder部分模型转换为混合精度的om模型

注意: 为防止OOM问题,请在内存大于10G的设备上执行此命令。

atc --model=encoder_sim.onnx \
--framework=5 \
--soc_version=Ascend310B1 \
--output=encoder \
--input_format=ND \
--input_shape="input_ids:1,768;attention_mask:1,768" \
--precision_mode=allow_fp32_to_fp16 

运行ChatBot

环境准备

关闭OOM Killer

使用root用户登录,在/etc/rc.local文件中删除或注释掉以下内容:

echo 1 > /proc/sys/vm/enable_oom_killer
echo 0 > /sys/fs/cgroup/memory/usermemory/memory.oom_control

修改/sys/fs/cgroup/memory/usermemory/memory.oom_control配置,这个操作是disable oom_killer

echo 1 > /sys/fs/cgroup/memory/usermemory/memory.oom_control

在打开了内存控制的用户下,在~/.bashrc文件中将以下代码注释掉:

echo $$ > /sys/fs/cgroup/memory/usermemory/tasks

重启系统

init 6

挂载swap分区

通过free -h命令查看内存使用情况,如果内存总量小于4G,则需要挂载swap分区

free -h

申请一个2.5G的文件作为swap分区【推荐2.5G以上,请提前预留足够的空间】

sudo fallocate -l 2.5G /swapfile 

修改文件权限

sudo chmod 600 /swapfile

创建swap分区

sudo mkswap /swapfile

挂载swap分区

sudo swapon /swapfile

通过 free -h查看swap分区是否挂载成功

free -h

运行

安装依赖

pip install -r requirements.txt

拷贝模型

请将dist_chatbot_standalone.zip、models.zip、tokenizer_file.zip解压后放入对应目录

运行

python main.py

运行截图:
请添加图片描述

相关资源的下载地址

资源名称下载地址
dist_chatbot_standalonehttps://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/samples/23.0.RC1/e2e-samples/ChatBot/dist_chatbot_standalone.zip
models(V1版本)https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/samples/23.0.RC1/e2e-samples/ChatBot/models.zip
models(V2版本)前面在PC机上完成生成的文件
tokenizer_filehttps://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/samples/23.0.RC1/e2e-samples/ChatBot/tokenizer_file.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos6.5 用户权限例题

例题一:为网站管理员创建一个FTP帐户webmaster,将其加入到ftp组中,其登录的主目录为WEB站点的主目录/var/www/jnds.net,设置其为系统帐户,但却没有登录系统的权限,备注该用户为“FTP User” 解&#xff1a…

【RocketMQ】005-Docker 部署 RocketMQ

【RocketMQ】005-Docker 部署 RocketMQ 文章目录 【RocketMQ】005-Docker 部署 RocketMQ一、部署1、拉取镜像MQ 镜像可视化平台镜像 2、创建挂载目录创建 nameserver 挂载目录创建 broker 目录创建 broker 配置文件目录 3、编辑配置文件4、启动服务启动 nameserver启动 broker启…

pytorch保存、加载和解析模型权重

1、模型保存和加载 主要有两种情况:一是仅保存参数,二是保存参数及模型结构。 保存参数: torch.save(net.state_dict()) 加载参数(加载参数前需要先实例化模型): param torch.load(param.pth) net.load_…

AWS 中文入门开发教学 47- S3 - 基本的使用

知识点 S3 - 基本的使用方法实战演习 创建存储桶 阻止所有公网访问: 打开版本控制、添加标签: KMS是收费的: 创建成功: 上传文件 选择存储类:

这是中国人工智能AI激情澎湃的一周

融资 贝联珠贯完成 5000 万元天使轮融资,业务涵盖 AI 型算力市场据投中网报道,近日,云资源管理服务提供商浙江贝联珠贯宣布完成 5000 万元天使轮融资,由元璟资本、红杉中国种子基金和舟轩股权投资。 盛大网络 CEO 陈天桥再投 1…

springboot就业信息管理系统

本次设计任务是要设计一个就业信息管理系统,通过这个系统能够满足就业信息管理功能。系统的主要功能包括:首页,个人中心,学生管理,导师管理,企业管理,招聘信息管理,应聘信息管理&…

DMA是一个超级简化版的cpu吗?

来自群友的讨论 我的理解是DMA某种程度相当于一个CPU是因为DMA拥有访问其他地址空间的权利。 从系统角度考虑,对整个系统的观测者一般CPU DSP GPU DMA是一个级别,其他都是slave。cache一致性POC是要保证所有观测者,包括DMA观测到相同数据。 …

【学习bubbliiiing代码-2】从txt中获取类别名称以及类别数量

本系列主要用于自我学习,参考的为bubbliiiing的代码 写一个优雅的:从txt文件中获得类别名与类别数的函数,如下: #---------------------------------------------------# # 获得类别名与类别数 #-----------------------------…

Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接

Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言2. 实现过程3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到底怎样实现这个的过程,希望能够帮助到那些正在做…

主动配电网故障恢复的重构与孤岛划分统一模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SIP协议学习(2)

文章目录 注册(REGISTER)1、AOR和Contact区别2、注册概述3、注册与定位服务4、注册超时处理5、注册消息6、多Contact地址处理7、下期预告 注册(REGISTER) 1、AOR和Contact区别 在学习注册之前,首先区分一下AOR和Cont…

Threads上线5天用户增至1亿,Threads软件常见问题百问百答

7月10日,脸书(Facebook)母公司Meta旗下新应用程序Threads上线的第5天,其用户数量已经超过1亿。这一增长速度打破聊天机器人ChatGPT的纪录——推出两个月内活跃用户量才破亿。 Threads或成为史上用户数增长速度最快的消费者应用。 …

Mysql数据库基础和增删改查操作

目录 一、数据库基本概念 二、数据库类型和常用数据库 1.关系型数据库 2.非关系型数据库 三、数据库的数据类型 四、SQL语句 1.简介 2.分类 五、SQL语句的使用 1.数据库操作 (1)创建数据库 ​编辑 (2)查看数据库 &am…

mac MySQL修改密码

简介: MySQL是一种常用的关系型数据库管理系统。在某些情况下,您可能需要关闭MySQL服务或修改root密码。本文将向您展示如何执行这些操作的步骤。 步骤1:关闭MySQL服务 打开MySQL软件并关闭它。 或者使用以下命令关闭MySQL服务&#xff1a…

conda的使用

一、conda 1、为什么使用conda 在安装Python包的过程中,可能遇到依赖包的问题。例如,要安装numpy,需要先安装BLAS和LAPACK等库。在使用pip等包管理工具时,这些依赖包需要手动安装,操作起来可能比较繁琐。而conda是一个…

pdf怎么添加水印图片?分享3个超实用解决方法

在使用PDF文件时,我们经常会看到一些设置的水印,这提醒观看者文件的所有权。给PDF文件添加水印是一种常见且实用的功能。为了解决如何给PDF添加水印的问题,我将介绍几种常用的方法。 方法一:使用WPS添加水印 WPS是我们常用的办公…

【分布式应用】zookeeper集群

目录 一、zookeeper概述1.1zookeeper工作机制1.2Zookeeper 数据结构1.3Zookeeper 应用场景1.4Zookeeper 选举机制第一次启动选举机制**非第一次启动选举机制 二、部署 Zookeeper 集群2.1环境配置2.2安装 Zookeeper 一、zookeeper概述 Zookeeper是一个开源的分布式的&#xff0c…

1.内核驱动中,驱动注册,阻塞IO,gpio子系统,中断处理的整体结合示例

一,功能实现要求 /*功能实现 在stm32开发板上实现功能 1.使用阻塞IO读取number变量的值,当number的值改变时打印number的值 2.注册KEY1按键的驱动和LED1的驱动以及对应的设备文件, 3.按键和指示灯设备信息放在同一个设备树的节点中 4.当KEY1…

TypeScript 类型体操:合并映射类型的处理结果为联合类型(记录)

一般索引索引 type boy {name : string,age : number } 对索引类型映射 type onlyBoy<obj> {readonly [key in keyof obj] : obj[key] } 使用 type res onlyBoy<boy>; 输出 这些都是对索引类型整体做的变换&#xff0c;变换的结果依然是一个索引类型。有的…

提示“无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动”,如何解决?

在aspx网站部署过程中&#xff0c;出现“无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动”的提示&#xff0c;如下图&#xff0c;如何解决&#xff1f; 解决方案1&#xff1a; Web.Config里面 把sessionState 的mode改为&quo…