三步实现BERT模型迁移部署到昇腾
本文分享自华为云社区 《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模型迁移部署到昇腾的更多相关文章
- MongoDB入门三步曲3--部署技术:主备、副本集和数据分片
mongodb部署--主备.副本及数据分片 主备复制 副本集 数据分片 主备复制 主备复制是最基本的一种多点部署方案,在读写分离.热备份.数据恢复等方面具有重要作用. 在真实的生产环境,主备库肯定需要 ...
- 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速
前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...
- 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager
尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...
- 三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署
本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 前文:三分钟快速上手TensorFlow 2.0 (上)——前置基础.模型建立与可视化 tf.train. ...
- 三步将Node应用部署到Heroku上
Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https: ...
- 三步将Node应用部署到Heroku上 --转载
Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https: ...
- 使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager
以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 也可根据需要通过 Az ...
- 有关从经典部署模型迁移到 Azure Resource Manager 部署模型的常见问题
此迁移计划是否影响 Azure 虚拟机上运行的任何现有服务或应用程序? 不可以. VM(经典)是公开上市的完全受支持的服务. 你可以继续使用这些资源来拓展你在 Azure 上的足迹. 如果我近期不打算 ...
- 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型
以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...
- IDEA tomcat三步实现热部署
IDEA tomcat三步实现热部署 添加Artifacts选项 添加Artifacts选项,XXXwar 和 XXXwar exploded二选一,若要热部署须选后者. 设置tomcat部署方案 设 ...
随机推荐
- 每天5分钟复习OpenStack(三)
每天5分钟复习OpenStack(三) 为什么要拉起kvm 虚拟机要熟悉这些操作? 作为一个运维工程师,将来有大量的时间是在制作镜像,镜像的制作就是在kvm虚拟化环境拉起kvm 管理的虚拟机的过程,安 ...
- VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)
账号秘密都对,但是缺登录不成功的问题 诀窍可能是: 在属性设置中把LeetCode版本改成cn.点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可. 大 ...
- Acwing76场周赛
题目链接 这次还是只做出来两道题,前两题都挺简单的,注意第二题需要开long long不开会wa,代码粘上来,以后可能会看吧 第一题 #include<iostream> #include ...
- html5学习内容-5
(一)文字环绕排版 文字环绕图形 shape-outside属性 margin-box:外边距环绕 padding-box:内边距环绕 border-box:边框环绕 content-box:内容环绕 ...
- 我们在开发第一个flutter小程序时需要注意什么
Flutter这些年发展的很快,特别是在 Google 持续的加持下,Flutter SDK 的版本号已经来到了 3开头,也正式开始对 Windows.macOS 和 Linux 桌面环境提供支持.如 ...
- 在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法——AssemblyMetadataAttribute
在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法--AssemblyMetadataAttribute <# .SYNOPSIS 获取程序集文件属性的指定元数据特性 .DES ...
- 删除当前文件夹不是.vue文件,电脑命令符
::-----------------------------------------@echo offsetlocal EnableDelayedExpansionset _thisFilePath ...
- C# 面试常见递归算法
前言 今天我们主要总结一下C#面试中常见递归算法. C#递归算法计算阶乘的方法 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!.180 ...
- BI工具:让数据分析井然有序一望而知
BI(Business Intelligence)工具是一类专门用于数据分析和决策支持的软件工具. 它们能够将企业内部和外部的数据进行整合.处理和可视化,帮助用户从海量数据中获取有价值的见解和洞察,并 ...
- DDD学习与感悟——总是觉得自己在CRUD怎么办?
一.DDD是什么? DDD全名叫做Domins drives Design:领域驱动设计.再说的通俗一点就是:通过领域建模的方式来实现软件设计. 问题来了:什么是软件设计?为什么要进行软件设计? 软件 ...