三步实现BERT模型迁移部署到昇腾

三步,实现,bert,模型,迁移,部署 · 浏览次数 : 6

小编点评

**BERT 模型迁移部署案例** **步骤 1:基础镜像构建** * 从工具链小组统一给出 D310P 基础镜像。 * 下载并安装 Mindspore 2.1.0。 **步骤 2:模型安装** * 下载 whl 和 tar 包。 * 使用 `tar` 解压缩 whl 包。 * 将 `mindspore-lite-2.1.0-linux-x64.tar.gz` 解压缩到 `/usr/local/mindspore-lite-2.1.0-linux-x64` 目录下。 * 创建软链接 `/usr/local/mindspore-lite-2.1.0-linux-x64` 到 `/usr/local/mindspore-lite3`。 **步骤 3:准备容器** * 创建一个名为 `bert_d310p` 的 docker 容器。 * 使用 `docker build` 命令构建镜像: ```bash docker build -t bert_poc_test:v1.0.0 . ``` **步骤 4:容器部署** * 使用 `docker run` 命令启动容器: ```bash 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 ``` **步骤 5:进入容器** * 使用 `docker exec` 命令进入容器: ```bash docker exec -it bert_d310p bash ``` **步骤 6:优化模型文件** * 使用 `tailor` 工具转换并优化模型文件: ```bash tailor --model_path=/home/xxx/model/ model.onnx --input_shape=input_ids:1,70 --aoe=True ``` **步骤 7:运行 infer_server.py** * 修改 `infer_server.py` 文件指定模型文件路径: ```python import osfrom flask import Flaskfrom mslite_model import MsliteModelimport numpy as npapp = Flask(__name__)os.environ['DEVICE_ID'] = "0"model_path = "/home/xxx/model/model.mindir" ``` * 启动 `infer_server.py` 服务: ```bash @app.route('/', methods=['POST'])def infer(): print("receive request") res = model([input_data]) return str(res) ``` **步骤 8:测试服务** * 使用 `curl` 请求服务: ```bash curl -kv -X POST http://{宿主机ip}:8443/性能评估1. ``` **步骤 9:调整服务参数** * 修改 `run.sh` 文件指定进程数量: ```bash #! /bin/bash source /usr/local/Ascend/ascend-toolkit/set_env.sh host_ip=$(hostname -i) service_port=8443 listen_address="0.0.0.0" ``` **步骤 10:启动服务** * 使用 `sh` 文件启动服务: ```bash sh run.sh ```

正文

本文分享自华为云社区 《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卡使用情况

10001.png

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下

10002.png

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%

10003.png

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

10004.png

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

10005.png

10006.png

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

10007.png

10008.png

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

10009.png

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

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

 

与三步实现BERT模型迁移部署到昇腾相似的内容:

三步实现BERT模型迁移部署到昇腾

本文从镜像构建、容器部署到性能评估,完成bert模型昇腾迁移部署案例。

电子表格也能做购物车?简单三步就能实现

在我们的项目当中,经常需要添加一些选择界面,让用户直观地进行交互,比如耗材、办公用品、设计稿或者其它可以选择的内容。 在线商城的商品目录和购物车无疑是一种大家都很熟悉的交互方式,但是在实际开发中,我们可能会遇到以下几个问题: 怎么及时响应产品的需求,快速实现功能上线? 怎样实现灵活变更模板,把数据、

FART 脱壳机原理分析

FART是一个基于Android 源码修改的脱壳机 可以脱整体壳和抽取壳 FART脱壳的步骤主要分为三步: 1.内存中DexFile结构体完整dex的dump 2.主动调用类中的每一个方法,并实现对应CodeItem的dump 3.通过主动调用dump下来的方法的CodeItem进行dex中被抽取的

[转帖]ramdisk三种实现方式

https://www.jianshu.com/p/c14cee74fa0a Ramdisk/ramfs/tmpfs Ramdisk:大小固定,默认4096k。在编译内核的时候需将block device 中的Ramdisk支持选项加上。如果对Ramdisk的支持已经编译进内核,可以如下方式使用:查

可视化学习:如何生成简单动画让图形动起来

在可视化展现中,动画是强化数据表达,吸引用户的重要技术手段,本文将介绍动画的三种实现形式,以及如何具体地在HTML/CSS和Shader中去实现动画。

C#使用MX Component实现三菱PLC软元件数据采集的完整步骤(仿真)

前言 本文介绍了如何使用三菱提供的MX Component插件实现对三菱PLC软元件数据的读写,记录了使用计算机仿真,模拟PLC,直至完成测试的详细流程,并重点介绍了在这个过程中的易错点,供参考。 用到的软件: 1. PLC开发编程环境GX Works2,GX Works2下载链接 https://

[转帖]VLAN与三层交换机

目录 一、VLAN概述与优势二、Trunk的作用三、IEEE 802.1q四、VLAN转发五、Trunk的配置六、单臂路由概述七、三层交换机实现VLAN之间通信的原理八、实验一九、实验二十、实验三 一、VLAN概述与优势 在使用交换机互联的以太网中,同一区域内的主机在相互通信时可能会产生广播报文,此

超级实用!React-Router v6实现页面级按钮权限

大家好,我是王天~ 今天咱们用 reac+reactRouter来实现页面级的按钮权限功能。这篇文章分三部分,实现思路、代码实现、踩坑记录。 嫌啰嗦的朋友,直接拖到第二章节看代码哦。 前言 通常情况下,咱们为用户添加权限时,除了页面权限,还会细化到按钮级别,比如、新增、删除、查看等权限。 如下效果,

模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案

模拟.NET实际应用场景,综合应用三个主要知识点:一是使用dnSpy反编译第三库及调试,二是使用Lib.Harmony库实现第三库拦截、伪造,三是实现同一个库支持多版本同时引用。

CRM系统化整合从N-1做减法实践

京销易系统已经接入大网、KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑。