首页 > 其他分享 >三步实现BERT模型迁移部署到昇腾

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

时间:2023-09-21 11:26:42浏览次数:61  
标签:BERT -- local xxx usr home 迁移 三步 model

本文分享自华为云社区 《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,--,local,xxx,usr,home,迁移,三步,model
From: https://www.cnblogs.com/huaweiyun/p/17719444.html

相关文章

  • 迁移docker的data-root流程
    在部署jumpserver的时候采用了官方推荐的docker部署方式,但是由于前期规划不是很周全,导致docker运行一段时间后,磁盘空间不足,导致jumpserver运行异常。未解决这个问题,考虑将docker的data-root目录进行迁移,迁移到一个空间较为充裕的磁盘目录下Docker的data-root目录是用于存储Docker容......
  • oracle数据库迁移
    一、原始信息记录及复制1.记录欲迁移库的sid,是否为归档模式(查看方法:以sys用户登入sqlplus后运行archiveloglist,建库时默认为非归档模式)以及如下文件的存放位置:参数文件,密码文件,控制文件,日志文件,数据文件参数文件存放在C:\oracle\product\10.2.0\db_1\dbs目录下,名为SPFILE<sid>......
  • 解决方案 | 无需重装系统如何实现更换旧盘到新盘的系统迁移问题?
    一、背景新买的电脑用了一段时间系统自带2个硬盘位置(预装的盘我们称为“旧盘”),最近又买了新的硬盘(下称“新盘”)。1把旧盘从主硬盘位置卸下来,移动到从硬盘位置;2把新盘装到主硬盘位置;3进入旧盘系统,格式化新盘,并且分为2个区,我们称为E盘、F盘。操作方法:https://zhuanlan.zhihu.......
  • GitLab 升级迁移待办清单
    GitLab大版本升级测试用例项目从模板项目URL导入,来创建新的项目议题通过QuickActions、关联新建、直接新建模板关联项标签工时评论看板里程碑分支通过+号、新建按钮、本地推送远程新建删除分支合并请求新建合并请求模板主题,评审意......
  • 大型语言模型:SBERT — 句子BERT
    了解siameseBERT网络如何准确地将句子转换为嵌入简介Transformer在NLP领域取得了进化性的进步,这已不是什么秘密。基于Transformer,还发展出了许多其他机器学习模型。其中之一是BERT,它主要由几个堆叠的Transformer编码器组成。除了用于一系列不同的问题(例如情感分析或问......
  • oracle11g_获取所有对象&&表数据脚本(迁移后数据比对)
    oracle11g进行数据库迁移后,数据比对靠人工的话比较麻烦,通过如下脚本可以直接取数,获取对象及数据结果文件后,通过notpad++即可进行对比脚本内容如下--------------------------------------------------------------------------------------------------------------------------......
  • oracle19c(CDB模式)_获取所有对象&&表数据脚本(迁移后数据比对)
    oracle19c进行数据库迁移后,数据比对靠人工的话比较麻烦,通过如下脚本可以直接取数,获取对象及数据结果文件后,通过notpad++即可进行对比脚本内容如下--------------------------------------------------------------------------------------------------------------------------......
  • WSL2迁移至其他目录
    WSL2迁移至其他目录要将WindowsSubsystemforLinux2(WSL2)迁移到其他目录,执行以下步骤:创建新的WSL2安装目录:确保你的WSL2子系统已关闭。在PowerShell中运行以下命令来停止WSL2:wsl--shutdown在新位置创建一个目录,用于存放WSL2文件系统。例如,可以创建......
  • gitlab迁移到新的docker容器中
    迁移步骤1、备份旧gitlab数据gitlab-rakegitlab:backup:create默认会保存在/var/opt/gitlab/backups,实际情况可以使用find查找下文件路径2、在新服务器上使用docker搭建相同版本的gitlabversion:'3'services:gitlab:image:'gitlab/gitlab-ce:11.9.8-ce.0'......
  • anaconda环境迁移
    在路径A下的anaconda坏了。重新安装一个anaconda3,放在B路径。安装完成后condainitA里面所有的env都移动到B路径新的anaconda下。直接mvA/anaconda3/envsB/anaconda3/envs,把A路径下的所有env都移动到新的anaconda下。然后vim修改各个env下bin/pip和bin/python3-config......