本文分享自华为云社区 《bert模型昇腾迁移部署案例》,作者:AI印象。

镜像构建

1. 基础镜像(由工具链小组统一给出D310P的基础镜像)

From xxx

2. 安装mindspore 2.1.0,假定whl包和tar包已经下载到本地,下载地址:https://www.mindspore.cn/lite/docs/zh-CN/r2.0/use/downloads.html

ADD . /usr/local/
RUN cd /usr/local && \
pip install mindspore_lite-2.1.0-cp37-cp37m-linux_x86_64.whl && \
tar -zxvf mindspore-lite-2.1.0-linux-x64.tar.gz && \
ln -s /usr/local/mindspore-lite-2.1.0-linux-x64 /usr/local/mindspore-lite

3. 安装cann包6.3.RC2版本,假定也下载到本地,下载地址:https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373/software

RUN ./Ascend-cann-toolkit_6.3.RC2_linux-x86_64.run --install

4. 安装pip依赖

RUN pip install --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple onnx onnxruntime flask gunicorn

5. 安装昇腾迁移工具tailor,假定也下载到本地

RUN pip install tailor-0.2.1-py3-none-any.whl

6. 生成镜像

docker build -t bert_poc_test:v1.0.0 .

容器部署

宿主机用户目录/home/xxx/下存放着若干文件:

/home/xxx
--- model
--- model.onnx
--- model.mindir
--- infer
--- run.sh
--- infer_server.py
--- mslite_model.py

1. 运行容器

docker run -itd --privileged -p 50033:22 -p 8443:8443 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /home/xxx:/home/xxx --name bert_d310p bert_poc_test:v1.0.0 /bin/bash

参数说明:

-itd 设置交互守护运行容器,可以退出容器

-- privileged 设置特权容器,可以查看所有npu卡信息

-p 主机端口和容器端口映射

2. 进入容器

docker exec -it bert_d310p bash

进入容器内部,执行npu-smi info命令查看npu卡使用情况

3. 使用tailor工具转换并优化模型文件

tailor --model_path=/home/xxx/model/ model.onnx --input_shape=input_ids:1,70 --aoe=True

执行成功后在/home/xxx/model/ output/model_fp16_aoe_xxx/convert目录下会生成转换成功的mindir文件,然后将这个文件拷贝到/home/xxx/model下

4. 修改infer_server.py指定模型文件路径, 这里给出例子

import os
from flask import Flask
from mslite_model import MsliteModel
import numpy as np app = Flask(__name__)
os.environ['DEVICE_ID'] = "0" model_path = "/home/xxx/model/model.mindir"
input_data = np.random.randn(1,70).astype(np.int32) model = MsliteModel(model_path) @app.route('/', methods=['POST'])
def infer():
print("receive request")
res = model([input_data])
return str(res) if __name__ == '__main__':
app.run(debug=False, host="0.0.0.0", port=8443)

5. 修改run.sh文件指定进程个数,这里给出例子

#! /bin/bash
source /usr/local/Ascend/ascend-toolkit/set_env.sh
host_ip=$(hostname -i)
service_port=8443
listen_address="${host_ip}:${service_port}"
worker_num=60
worker_threads=5
worker_timeout=120
gunicorn -w ${worker_num} --threads ${worker_threads} -t ${worker_timeout} -b ${listen_address} infer_server:app

6. 启动服务

sh run.sh

7. 外部调用请求

使用curl:

curl -kv -X POST http://{宿主机ip}:8443/

性能评估

1. 安装java

下载jdk包

拷贝到/opt/jdk

解压

然后设置环境变量:

export JAVA_HOME=/opt/jdk/jdk1.8.0_252

export PATH=${JAVA_HOME}/bin:${PATH}

2. 安装jemter

下载jmeter包

拷贝到/opt/jmeter

解压

然后设置环境变量

export PATH=/opt/jmeter/apache-jmeter-5.4.1/bin:${PATH}

也可以持久化到 /etc/profile

source /etc/profile

3. 测试qps

服务器端gunicorn使用60个worker,显存占用接近80%

客户端jmeter使用一个进程压测 iops为248 平均时延为4ms

客户端使用2个进程, npu使用率到71%,qps到356 平均时延5ms

客户端使用4个进程,npu使用率已经到了97%,qps到429 平均时延9ms

进一步加大进程个数到8个,性能开始下降:

综上,bert poc模型在D310p 单卡qps可以达到429。

点击关注,第一时间了解华为云新鲜技术~

三步实现BERT模型迁移部署到昇腾的更多相关文章

  1. MongoDB入门三步曲3--部署技术:主备、副本集和数据分片

    mongodb部署--主备.副本及数据分片 主备复制 副本集 数据分片 主备复制 主备复制是最基本的一种多点部署方案,在读写分离.热备份.数据恢复等方面具有重要作用. 在真实的生产环境,主备库肯定需要 ...

  2. 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速

    前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...

  3. 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...

  4. 三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署

    本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 前文:三分钟快速上手TensorFlow 2.0 (上)——前置基础.模型建立与可视化 tf.train. ...

  5. 三步将Node应用部署到Heroku上

    Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https: ...

  6. 三步将Node应用部署到Heroku上 --转载

    Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https: ...

  7. 使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 也可根据需要通过 Az ...

  8. 有关从经典部署模型迁移到 Azure Resource Manager 部署模型的常见问题

    此迁移计划是否影响 Azure 虚拟机上运行的任何现有服务或应用程序? 不可以. VM(经典)是公开上市的完全受支持的服务. 你可以继续使用这些资源来拓展你在 Azure 上的足迹. 如果我近期不打算 ...

  9. 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型

    以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...

  10. IDEA tomcat三步实现热部署

    IDEA tomcat三步实现热部署 添加Artifacts选项 添加Artifacts选项,XXXwar 和 XXXwar exploded二选一,若要热部署须选后者. 设置tomcat部署方案 设 ...

随机推荐

  1. 01--OpenStack 手动安装手册(Icehouse)

    #OpenStack 手动安装手册(Icehouse) 声明:本博客欢迎转发,但请保留原作者信息!作者:[罗勇] 云计算工程师.敏捷开发实践者博客:http://yongluo2013.github. ...

  2. Go泛型解密:从基础到实战的全方位解析

    本篇文章深入探讨了Go语言的泛型特性,从其基础概念到高级用法,并通过实战示例展示了其在实际项目中的应用. 关注[TechLeadCloud],分享互联网架构.云服务技术的全维度知识.作者拥有10+年互 ...

  3. Python 利用pymysql和openpyxl操作MySQL数据库并插入Excel数据

    1. 需求分析 本文将介绍如何使用Python连接MySQL数据库,并从Excel文件中读取数据,将其插入到MySQL数据库中. 2. 环境准备 在开始本文之前,请确保您已经安装好了以下环境: Pyt ...

  4. SpringBoot系列之MyBatis Plus自动填充实现

    系列博客专栏:SpringBoot2.0系列博客专栏 开发环境 JDK 1.8 SpringBoot2.2.1 Maven 3.2+ Mysql5.7.36 开发工具 IntelliJ IDEA sm ...

  5. 矩阵重叠 (3.18 leetcode每日打卡)

    度简单66收藏分享切换为英文关注反馈矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形 ...

  6. go基础-泛型

    概述 在强类型变成语言中,类型是确定不可变,如函数入参是确定类型.链表元素是确定类型,这极大限制了函数功能.也有些解决方案,为每种类型都实现一版函数,会导致大量重复代码:使用类型转换,使用特殊形参(如 ...

  7. MySQL-管理员root@'locahost' 丢失,怎么处理?

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 跳过授权表 ----> 不开启验证功能(无密码登录) --skip-grant-tables 阻止所有tcp/i ...

  8. MySQL - Plugin 'InnoDB' registration as a STORAGE ENGINE failed 错误处理

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin Plugin 'InnoDB' registration as a STORAGE ENGINE failed,从详细 ...

  9. JSON多层嵌套复杂结构数据扁平化处理转为行列数据

    背景 公司的中台产品,需要对外部API接口返回的JSON数据进行采集入湖,有时候外部API接口返回的JSON数据层级嵌套比较深,举个栗子: 上述的JSON数据中,最外层为请求返回对象,data里面包含 ...

  10. JS对后端响应的long类型数据处理精度丢失问题

    1.数据库的数据 2.前端拿到的数据 前端帮我们进行四舍五入了,这并不是我想要的 3.解决办法 把后端响应的数据long类型转成string类型,可以使用Stream流的方式或者for循环的方式,对响 ...