本文分享自华为云社区 《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. 每天5分钟复习OpenStack(三)

    每天5分钟复习OpenStack(三) 为什么要拉起kvm 虚拟机要熟悉这些操作? 作为一个运维工程师,将来有大量的时间是在制作镜像,镜像的制作就是在kvm虚拟化环境拉起kvm 管理的虚拟机的过程,安 ...

  2. VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)

    账号秘密都对,但是缺登录不成功的问题 诀窍可能是: 在属性设置中把LeetCode版本改成cn.点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可. 大 ...

  3. Acwing76场周赛

    题目链接 这次还是只做出来两道题,前两题都挺简单的,注意第二题需要开long long不开会wa,代码粘上来,以后可能会看吧 第一题 #include<iostream> #include ...

  4. html5学习内容-5

    (一)文字环绕排版 文字环绕图形 shape-outside属性 margin-box:外边距环绕 padding-box:内边距环绕 border-box:边框环绕 content-box:内容环绕 ...

  5. 我们在开发第一个flutter小程序时需要注意什么

    Flutter这些年发展的很快,特别是在 Google 持续的加持下,Flutter SDK 的版本号已经来到了 3开头,也正式开始对 Windows.macOS 和 Linux 桌面环境提供支持.如 ...

  6. 在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法——AssemblyMetadataAttribute

    在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法--AssemblyMetadataAttribute <# .SYNOPSIS 获取程序集文件属性的指定元数据特性 .DES ...

  7. 删除当前文件夹不是.vue文件,电脑命令符

    ::-----------------------------------------@echo offsetlocal EnableDelayedExpansionset _thisFilePath ...

  8. C# 面试常见递归算法

    前言 今天我们主要总结一下C#面试中常见递归算法. C#递归算法计算阶乘的方法 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!.180 ...

  9. BI工具:让数据分析井然有序一望而知

    BI(Business Intelligence)工具是一类专门用于数据分析和决策支持的软件工具. 它们能够将企业内部和外部的数据进行整合.处理和可视化,帮助用户从海量数据中获取有价值的见解和洞察,并 ...

  10. DDD学习与感悟——总是觉得自己在CRUD怎么办?

    一.DDD是什么? DDD全名叫做Domins drives Design:领域驱动设计.再说的通俗一点就是:通过领域建模的方式来实现软件设计. 问题来了:什么是软件设计?为什么要进行软件设计? 软件 ...