PAI-Blade 通用推理优化:系统优化实践(上)|学习笔记

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
对象存储 OSS,20GB 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 快速学习 PAI-Blade 通用推理优化:系统优化实践(上)。

开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:PAI-Blade 通用推理优化:系统优化实践(上)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/855/detail/14119


PAI-Blade 通用推理优化:系统优化实践(上)

 

内容介绍:

一.AI推理加速

二.Blade

三.Blade 示例

 

Blade 是 pai 团队自主研发的推理优化工具,主要内容为如何使用 blade 优化 Tensorflow 模型。

 

一.AI 推理加速

Blade 作为一款加速推理工具,它有如下四个特点:

 image.png

1.blade 支持市面上主流的深度学习框架

包括 flow 和 Py,同时对于主流的模型种类,不管是 NLP 还是 CV 的模型,还是 ASR 的模型,都具有不错的支持

2.自动优化

通过自动优化的手段大大降低了用户优化模型的门槛,用户不再需要深入的算法知识,模型知识或者是加速硬件的知识,即可以对模型进行游玩,同时 blade 的整个优化过程对用户透明,不需要去了解推理优化过程中比较复杂问题。

3.blade 适配不同的硬件

不管是 gpu,cpu 是端测的意见不对,都有比较好的适配。

4.生产环境检验

第四也是最重要的一点,blade 是经过阿里生产环境检验的产品,不管是在 eas 的在线推理服务场景中,还是在手淘端测的场景中均有不错的表现。

 

二.Blade

1.blade 技术架构

 image.png

当我们需要对一个模型优化的时候,我们需要把模型提供给 blade.

如果您的模型是 py 模型,可以提供 script,如果你的模型是 Tensofrflow 模型,你可以提供 Pro pb,除了模型本身以外,为了达到更好的优化效果,用户还可以提供一些优化配置,用来描述模型的一些特征,优化配置我们会在后面的事例中看到,同时为了更精准的指导 py 对模型进行优化,用户还可以提供测试数据.

当用户的模型配置和数据加载到 blade 之后,blade 首先会做算图的优化,所谓计算图的优化是一种的优化手段,它是跟设备无关的,这里主要包括一些常量表达式,共同表达式去除等等,除了这些比较通用的优化之外 blade 还有一些有一些比较特别的手段,比如 ai 是 pai 团队自主研发的深度学习编译器,它可以将计算图生成为高效编译器,从而大大提升模型的执行效率。

另外我们也可以通过量化的手段来把模型的尺寸变小,达到加速推理速度的目的,在不同的硬件上面,我们还存在于场上的加速度,比如在 pu 上面有 mkl 或者在其他的硬件端的硬件设备上也有相对应的加速库,blade 可以做到对这些加速库的无缝集成,整个的优化过程,blade 会去智能的组装不同的优化手段,让他们在一起配合,从而达到一个联合优化的目的,为用户输出一个最终的优化模型,最终优化模型的格式与用户输入的格式是相同的。比如说如果用户输入的是 py 模型,那么优化完产生的也是py模型,如果用户输入的是 flow pb 那么优化完产生的也是 flow pb,是为了减少用户在 blade 工程上面所造成的累加,除了优化的模型之外,blade 的还会声称一个优化的说明,在优化说明内部,我可以观察到本次优化更详细的信息。包括使用的硬件,软件的相关信息。以及 blade 内每一个加速手段生效的情况的说明会在后面多次观察到。

2.blade 产品形态

 image.png

同时 blade 作为一款产品,可以方便的在不同的环境中供用户使用,我们这里主要分两种情况,一种是如果您的产品使用了 pad 的大量产品,那么你可以在开发的过程中在 pai 的 dsw 的镜像里面或者在训练的过程中拍的 pai-DLC的镜像里面可以直接使用blade,作为一个默认的包安装在这两个产品之中,同时如果您使用了 eas 作为模型的部署,那么也在 eas 中做了默认的集成,不再需要带运行或是做其他的。操作机可以使用 blade,可以使用 eas 来运行类的优化完的模型,我们还开发了一个用户,甚至连在开发和训练中集成模型都不需要,只需要在模型上线之前额外配置一个分类的在上线前机构完成型的优化,此做法存在模型的优化过程和在线的步骤过程融为一体,整体更加丝滑顺畅。

如果你使用的是自有的开发环境,为了作为一个没有帮助可以直接在开发或者是训练环境中进行安装,安装完了之后即可。有一个简单的派送就可以完成模型的优化。同时如果是使用了自定义的部署环境,不管是派送的环境还是直接加的环境,都提供对应的 SDK,同时 SDK 可以做到对用户的环境尽量想清楚,在派送时只需要 import 的 plugin即可,假设只需要额外再链接一个 blade 的 sheer,除此之外不需要改动任何的用户代码

 

三.Blade 示例

如何在不同的环境下使用 blade,四个示例分别是:Mask RCNNBertPTQEAS Plugin。

image.png

1. Blade 基本使用

安装

(1):!pip3 install tensorflow-gpu==1.15.0

首先安装 gpu 包

(2): pip installpai_blade_gpu==3.16.0-f

https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/repo.html

如果使用 gpu 包安装 blade_gpu==3.16.0最新版本,安装仓库在后面。

(3):!pip list grep blade

pai-blade-gpu3.16.0

此时查看到3.16.0已经安装完成

(4):!nvcc --version

nvcc:NVIDIA (R)Cuda compiler driver

Copyright (c)2005-2018 NVIDIA Corporation

Built on Sat_Aug_25_21:08:01_CDT_2018

Cuda compilation tools,release 10.0,V10.0.130

Cuda10环境

(5): nvidia-smi

Mon Aug3019:13:21 2021

image.png

测试环境中有2张 T4卡

(6)导入 Blade

import os

import numpy as np

import tensorflow.compat.v1 as tf

import blade

第一步 import blade

使用 blade 接口优化操作

(7)准备模型与数据

在调用接口之前需要做数据模型准备工作

演示优化 rcnn 模型,先将其下载

!rm-f mask_rcnn_resnet50_atrous_coco_2018_01_28.pb mask_rcnn_test_img.jpg

!Wgethttp://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/mask_rcnn/mask_rcnn_resnet50_atrous_coco_2018_01_28.pb!Wgethttp://pai-bl.de.oss-cn-zhangjiakou.aliyuncs.com/demo/mask_rcnn/mask_rcnn_test_ing.jpg

--2021-08-30 19:13:25--http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/mask_rcnn/mask_rcnn_resnet50_atrous_coco_2018_01_28.pb

Resolving pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)...47.92.17.105

Connecting to pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)47.92.17.1051:80...connected.

HTTP request sent,awaiting response...200 OK

Length:145011833 (138M)[application/octet-stream]

Saving to:'mask_rcnn_resnet50_atrous_coco_2018_01_28.pb'

1145.011

.83323.8M8/s

1n5.8s

image.png

(8)

from

IPython.display import display

from PIL import Image

import numpy as np

img Image.open('maskrcnn_test_img.jpg')

display(img)

img_data np.asarray(img)

img_data np.expand dims(img data,axis=0)

print(img_data.shape)

print(img_data.dtype)

test_data ={'image_tensor:0':img_data}

image.png

(1,375,500,3)

Unit8

//此图片时 rcnn 官方训练中的一张里面有很多物体,通过 PIL 加载后可以看到是一张,375×500,类型是 uint8.

(9)

graph_def= tf.GraphDef()

with open('mask_rcnn_resnet50_atrous_coco_2018_01_28.pb','rb')as f:

graph_def.ParseFromString(f.read())

是一个 graph_def 直接读出即可。

(10)执行优化

input_nodes=['image_tensor']

output_nodes ['detection_boxes','detection_scores','detection_classes','num_detections','detection_masks']

optimized_model,_,report blade.optimize(

graph_def,

#待优化的模型,此处是 tf.GraphDef,也可以配置 savedModel 的路径.

"o1',#优化级别,o1(无损优化)或02(量化优化).

device_type='gpu',

#目标设备,gpu/cpu/edge.(设备类型)

inputs=input_nodes,

#输入节点(只有一组输入输出)也可以不提供,PAI-Blade 敏提版会自行发断

outputs=output_nodes#输出节点

test_data=[test_data}测试数据(可以接受多组测试数据,放在同一个列表中即可)

}

调用 blade 执行优化,blade 只有一个优化接口,blade.optimize。

执行接口会看到类似如下图输入

image.png

Blade 会将当前进行阶段打印以及优化执行的消息出

在优化完成后会打印 finish。

存在返回值

第一个返回值 optimized_model:将优化完的返回值放在此处,输入对象是 graph_def,产生的也是 graph_def。

同时还产生一个优化报告 report。

(11)查看优化报告

print("Report:{)"format(report))

Report:

"software_context":

"software":"tensorflow",

"version":"1.15.0"

"software":"cuda",

"version":"10.0.0"

"hardware_context":{

"device_type":"gpu",

"microarchitecture":"T4"

"user_config":""

"diagnosis":

"model":"tmp_graph.pbtxt",

"test data source":"user provided",

"shape_variation":"dynamic",

“message'":",

"test_data_info":"image_tensor:0 shape:(1,375,500,3)data type:uint8",

"optimizations":

{

"name":"TfStripUnusedNodes",

"status":"effective",

"speedup":"na",

"pre_run":“na",

"post run":"na"

"name":"TfStripDebugops",

"status":"effective",

"speedup":“"na",

"pre_run":"na",

"postrun":"na"

"name":"TfStripDebugops",

"status":"effective",

"speedup":"na",

"pre_run":"na",

"post_run":"na"

"name":"TfFoldConstants",

"status":"effective",

"speedup":"na",

"pre_run":"na",

"post_run":"na"

"name":"TfNonMaxSuppressionOpt",

"status":"effective",

"speedup":"1.68",

"pre_run":"579.67ms",

"post_run":"345.89 ms"

1

"overall":

"baseline":"558.78 ms",

"optimized":"345.22 ms"

"speedup":"1.62"

},

"model_info":{

"input_format":"frozen_pb"

"compatibility_list":

"device_type":"gpu",

"microarchitecture":"T4"

}

"model_sdk":{}

}

将其打印查看,会产生软件硬件环境信息比如code版本,flow版本信息,还有诊断信息比如:shape_variation":"dynamic", 是动态变化的(高度,维度都可以变化),还可以看到测试数据基本信息。

"optimizations":会将blade经过尝试后的优化手段存在此处。最重要的:pre_run 生效,pre_run生效需要579.67ms,还可以看到整个模型优化效果"overall",两者优化效果相似。

兼容项列表,模型优化与硬件相关,放在T4卡上;如需要其他卡则在其他卡上进行优化。

(12)验证模型性能

:import time

def benchmark(model):

fetch_list ['detection_boxes:0','detection_scores:0','detection_classes:0','num_detections:0','detection_masks:0']

tf.reset_default_graph()

with tf.Session()as sess:

sess.graph.as_default()

tf.import_graph_def(model,name="")

#Warmup!

for i in range(0,10):

sess.run(fetch_list,test_data)

Benchmark!

num_runs =50

start time.time()

for i in range(0,num_runs):

sess.run(fetch_list,test_data)

elapsed time.e()-start

rt_ms elapsec num_runs 1000.0

Show the result!

print("Latency of model:{.2f}ms."format(rt_ms))

跑50次取平均推理时间,可以看到此代码没有与blade相关

(13)对原模型测速。

:benchmark(graph_def)

Latency of model:568.11 ms.

与前面579.67ms 基本对应

(14)对优化后的模型测速

把 blade 需要的所有依赖全部 import 进来

:import blade.runtime.tensorflow

benchmark(optimized_model)

Latency of model:337.11 ms.

可以看到优化大概是337ms,与前面345.89 ms计本对应

(15)保存优化结果

:tf.train.write_graph(optimized_model,"./""optimized.pb",as_text=False)

:'./optimized.pb'

验证 ok 将优化后模型保存,整个优化过程结束。

2. 优化 Tensorflow ASR 模型

整个过程与前面所讲基本相同。

(1)安装

pip3 install tensorflow-gpum=1.15.0

(2):pip install pai_blade_gpu==3.16.0-f hutps://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/repo.html

(3):Ipip list I grep blade

pai-blade-gpu

3.16.0

(4):Invcc --version

nvcc:NVIDIA (R)Cuda compiler driver

Copyright (c)2005-2018 NVIDIA Corporation

Built on Sat_Aug_25_21:08:01_CDT_2018

Cuda compilation tools,release 10.0,V10.0.130

(5)导入 Blade

import os

import numpy as np

import tensorlow.compat.vl as tf

import blade

(6):准备模型与数据

!rm -f frozen.pb test_bc4.npy

!wget https://pai-blade.cn-hangzhou.oss.aliyun-inc.com/test_public_model/bbs/tf_aicompiler_demo/frozen.pb

!wget https://pai-blade.cn-hangzhou.oss.aliyun-inc.com/test_public_model/bbs/tf_aicompiler_demo/test_bc4.npy

image.png

准备了 test_bc4测试数据。

(7)加载模型和测试数据

graph_def tf.GraphDef()

with open('./frozen.pb',

'rb')as f:

graph_def.ParseFrimString(f.read())

test_data np.load('test_bc4.npy',allow_pickle=True,encoding='bytes',)item()

test_data

//与上文相同有 2个加载和输入

:{b'encoder_.memory_.placeholder:0':array([5.6524896,-6.493541,-15.712473,:.,

-2.8141196,-12.232562],dtype=f1oat32),

5.6796246,

b'encoder_memory_length_placeholder:0':array([71,72,54,92],dtype=int32))

Placeholder,memory_length典型的 asr 模型

(9)优化模型

optimized_model,_,report blade.optimize(

graph_def,

"01',

#待优化的模型,此处是 tf.GraphDef,也可以配置为 SavedMode lg 的路径.

#优化级别,01或02。

device_type='gpu',

#目标设备,gpu/cpu/edge.

config=blade.Config(),

inputs=['encoder_memory_placeholder','encoder_memory_length_placeholder'],

outputs=['score','seq_id'],

testdata=[test data]

[Progress]5%,phase:user_test_data_validation.

[Progress]10%,phase:test_data_deduction.

[Progress]15%,phase:CombinedSequence_4.

2821-08-3014:41:80,321[14722】[NF0

[:8]No trt library is found in the current environment.

2821-08-3614:41:80,321【14722】[NF0

[:8]No trt library is found in the current environment

image.png 

调用 blade.optimize 接口,放入模型选择 o1,优化选择 gpu(提供微调选项,选择默认值)

(10)查看优化报告

print("Report:{}"format(report))

Report:{

"software_context":

"software";"tensorflow",

"version":1.15.0"

"software":"cuda",

"version":"10.0.0"

}

"hardware_context":

"device_type":"gpu",

"microarchitecture":"T4",

"user_config":"",

"diagnosis":{

"model":"tmp_graph.pbtxt"

"test_data_source":"user provided",

"shape_variation":"dynamic",

"message":"

"test_data_info":"encoder_memory_placeholder:0 shape:(163840,data type:float32\nencoder_memory_length_placeholder:0 sh

pe:(4,)data type:int32"

"optimizations":

"name":"TfstripUnusedNodes",

"shape_variation":"dynamic",

"message":

"test_data_info":"encoder_memory_placeholder:0 shape:(163840,)data type:float32\nencoder_memory_length_placeholder:0 sha

pe:(4,)data type:int32"

},

"optimizations":

"name":"TfStripUnusedNodes",

"status":"effective",

"speedup":"na",

"pre_run":"na",

"postrun":"na"

"name":"TfStripDebugops",

"status":"effective",

"speedup":"na",

"pre_run":"na",

"post run":"na"

"name":"TfFoldConstants",

"status":"effective",

"speedup":"na",

"pre_run":"na",

"post run":"na"

"name":"TfAicompilerGpu",

"status":"effective",

"speedup":"1.89”,

"pre_run":"100.60 ms"

"p0st_run":“53.15ms"

"overall":{

"baseline":"95.70 ms",

"optimized":"52.41 ms",

"speedup":"1.83"

'model info":(

"input_format":"frozen_pb"

"compatibility_list":

"device_type":"gpu",

"microarchitecture":"T4"

"model_sdk":{}

}

"TfAicompilerGpu"减小,速度被提升,整个加速器由编译优化所带来,会根据模型,测试数据来查看是否需要优化生效。可以看到确实优化被加速。

(13)验证模型性能

import time

def benchmark(model):

tf.reset_default_graph()

with tf.Session()as sess:

sess.graph.as default()

tf.import_graph_def(model,name="")

Warmup!

for i in range(0,10):

sess.run(['score','seq_id'],test_data)

Benchmark!

num_runs 1000

start time.time()

for i in range(0,num_runs):

sess.run(['score','seq_id'],test_data)

elapsed time.time()-start

rt_ms elapsed num_runs 1000.0

Show the result!

#Benchmark!

cest-data

num_runs 1000

start time.time()

for i in range(0,num_runs):

sess.run(['score','seq_id'],test_data)

elapsed time.time()-start

rt_ms elapsed num_runs 1000.0

Show the result!

print("Latency of model:{:.2f}ms.".format(rt_ms))

写出 Benchmark!函数,不存在任何 blac e 特殊代码

(14)对原模型测速。

benchmark(graph_def)

Latency of model:97.46 ms.

(15)对优化后的模型测速

97.46 ms.与前面速度基本相同

import blade.runtime.tensorflow

os.environ ['TAO_COMPILATION_MODE_ASYNC=''0'

benchmark(optimized_model)

Latency of model:51.87 ms.

不同:将异步编译关掉

os.environ ['TAO_COMPILATION_MODE_ASYNC=''0'

为了明确测试优化效果,改成同步。,用户基本不需要做额外事情,就可以对其优化。

3.优化 Tensorflow ASR 模型

(1)安装

pip3 install tensorflow-gpum=1.15.0

(2):pip install pai_blade_gpu==3.16.0-f hutps://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/repo.html

(3):Ipip list I grep blade

pai-blade-gpu

3.16.0

(4):Invcc --version

nvcc:NVIDIA (R)Cuda compiler driver

Copyright (c)2005-2018 NVIDIA Corporation

Built on Sat_Aug_25_21:08:01_CDT_2018

Cuda compilation tools,release 10.0,V10.0.130

导入 Blade

(5):import os

import numpy as np

import tensorlow.compat.vl as tf

import blade

(6)准备模型与数据

wgethttps://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/t_resnet50_v1.5/frozen.pb

wgethttps://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/test_bc32.npy

wgethttps://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/calib_data_test_bc32.npy

--2021-08-3014:59:41--https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/frozen.pb

Resolving pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)...47.92.17.105

Connecting to pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)47.92.17.105:443...connected.

HTTP request sent,awaiting response...200 OK

Length:102562463 (98M)[application/octet-stream]

Saving to:'frozen.pb.1'

100%(======================>】102,562,46335.3B/51n2.8S

2021-08-3014:59:44(35.3MB/s)-'frozen.pb.1'saved[102562463/102562463]

--2021-08-30 14:59:45--https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/test_bc32.npy

Resolving pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)...47.92.17.105

Connecting to pai-blade.oss-cn-zhangjiakou.aliyuncs.com (pai-blade.oss-cn-zhangjiakou.aliyuncs.com)47.92.17.105:443...connected.

HTTP request sent,awaiting response...200 OK

Length:19267933 (18M)[application/octet-stream]

image.png

优化 resnet50,格式 frozen.pb,

测试数据:

https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/test_bc32.npy

格外准备数据集 calib_data_test_bc32.npy(比测试数据大一些)对模型数据集权重进行调节。全部准备完成后开始优化工作

(7)加载模型。

graph_def tf.GraphDef()

with open('frozen.pb','rb')as f:

graph_def.ParseFromString(f.read())

#加数调试数据。

test_data np.load('test_bc32.npy',allow_pickle=True,encoding='bytes',).item()

#加载校正数据集。

calib_data np.load('calib_data_test_bc32.npy',allow_pickle=True,encoding='bytes',)

通过 graph_def 将数据模型全部加载。

(8)执行优化

:optimized_model,opt_spec,report blade.optimize(

model=graph_def,

optimization_level='o2',

device_type='gpu',

test_data=test_data,

calib_data=calib_data

WARNING:tensorflow:From :6:remove_training_nodes (from tensorflow.python.framework.graph_util_imp

is deprecated and will be removed in a future version.

Instructions for updating:

Use 'tf.compat.v1.graph_util.remove_training_nodes'

WARNING:tensorflow:From :6:extract_sub_graph (from tensorflow.python.framework.graph_util_impl)i

s deprecated and will be removed in a future version.

Instructions for updating:

image.png

优化级别从 o1变为 o2,载 test_data=test_data,

calib_data=calib_data,都传入了一组数据。当优化过程执行完毕查看优化报告。

(10)查看优化报告

print("Report:()"format(report))

Report:{

"software_context":

"software":"tensorflow",

"version'":"1.15.0"

"software":"cuda",

"version":"10.8.0"},

"hardware context":{

"device_type":"gpu",

"microarchitecture":"T4"},

"user_config":""

"diagnosis":

"model":"tmp_graph.pbtxt",

"test_data_source":"user provided",

"shape_variation":"dynamic",

"message":"

"test_data_info":"input_tensor:0 shape:(32,224,224,3)data type:float32"

"optimizations'":{

"name":"TfStripUnusedNodes",

status":"effective",

Python 3

dified

"speedup":"na",

"prerun":"na",

rs ago

"post_run":"na"

es ago

rs ago

"name":"TfFoldConstants",

58g0

"status":"effective",

"speedup":"na",

"pre_run":"na",

"post_run":"na"

"name":"TfFoldBatchNorms",

"status":"effective",

"speedup":"0.82",

"pre run":"86.59 ms"

"p0 st_run":"105.73ms'

"name":"TfBladeInt8"

"status":"effective",

"speedup":"1.92"

"pre run":"94.32 ms"

"p0st_run":"49.23ms"

"name":"TfstripUnusedNodes",

"status":"effective",

"speedup":"na",

"pre run":"na",

"post run":"na",

"name":"TfstripDebugops",

"status":"effective",

"speedup":“"na",

"pre_run":"na",

"post_run“:"na"

"pre run":"94.32 ms"

utes ago

ours ago

"name":"TfStripDebugops",

"status":"effective",

utes ago

"speedup":"na",

"pre_run":"na",

"post run":"na"

"name":"TfFoldConstants",

"status":"effective",

"speedup":"1.60"

"pre_run":"83.98 ms"

"post_run":"52.52 ms"

"overall":{

"baseline":"82.14 ms",

"optimized":"53.31 ms",

"speedup":"1.54"

"modelinfo":{

"input_format":"frozen_pb"

"compatibility_list":[

"device type":"gpu",

"microarchitecture":"T4"

"model_sdk":{}

}

被提升到49ms,提升一倍速度

验证模型性能 

import time

sago

def benchmark(model):

tf.reset_default_graph()

with tf.Session()as sess:

sess.graph.as_default()

tf.import_graph_def(model,name="")

#Warmup!

for i in range(0,10):

sess.run(['ArgMax'],test_data)

Benchmark!

num_runs 100

start time.time()

for i in range(0,num_runs):

sess.run(['ArgMax'],test_data)

elapsed time.time()-start

rt_ms elapsed num_runs 1000.0

Show the result!

print("Latency of model:(:.2f}ms.".format(rt_ms))

对原模型测速。

:benchmark(graph_def)

Latency of model:81.92 ms.

对优化后的模型测速

import blade.runtime.tensorflow

benchmark(optimized_model)

Latency of model:51.90 ms.

自动调整模型参数

:quant_config={

'weight_ajustment':'true'#默认为'false',

optimized_model,opt_spec,report blade.optimize(

model=graph_def,

optimization_level='02',

device_type='gpu',

test_data=test_data,

calib_data=calib_data,

config=blade.Config(quant_config=quant_config)

执行原模型,测速81.92 ms.

优化后的模型测速51ms

在优化过程中还存在准确性的考验,会获得模型准确度的指示,通过 weight_ajustment 开启调整,从而尽可能降低模型在优化过程中带来的损失,我们可以看到量化 config 实际上是通过 config 参数到了里面后,其他的参数都没有变化。你也可以再看看我的视频之后我去尝试一下参数在精度上面会不会带来更多的一些提升。

4.EAS Plugin

pycat eas_demo.json

"name":"blade_eas_plugin_demo",

"model_path":"http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/aicompiler_eas_example.tar.gz",

"processor":"tensorflow_gpu_1.15",

"plugins":

"command":"blade -mode eas_plugin --optimize_for gpu",

"config":

"modelinfo":{

"frozen.pb":{

"inputs":

"encoder_memory_placeholder","encoder_memory_length placeholder"

"optimization_level":"ol",

"outputs'":{"score","seq-id"},

"test data":"test_bc4.npy"

"gpu":

"resource":"T4_8CORE",

"image":"registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest"}

"metadata":(

"cuda":"10.0"

"cpu":7,

"gpu":1

"mem0ry":16000,

"instance":

"region":"cn-hangzhou",

"resource":"eas-r-mvezgfq84g71ctzd00'

关于 EAS Plugin 信息暂不介绍,阿里云官网存在相关介绍。

主要 在 EAS 服务上如何开启 Plugin 自动地完成一轮优化

eas_demo.json 是非常典型的,服务的配置文件,这里包括了名称,新的地址,使用什么样的形式来进行,所以还能够看到了一些资源,比如说 CPU gpu 的一些资源组的一些原信息。

其实刚才讲的模型的名称,模型路径 Pro ,以及原信,息就可以足够拉起在线的服务,blade 如果要进行。相应的优化只需要在此代码中额外的添加一段 plugin。在 Plugin 中有几个关键字段,优化一个在 GPU 上运行的模型。

"command":"blade -mode eas_plugin --optimize_for gpu"

Blade,模式是 eas plugin 的模式。为 GPU 的设备而优化,同时需要指定一个执 行 plugin 的镜像。

image":"registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest"}

此 plugin 镜像是当前最新版本的 plugin 镜像

接下来看见的内容与前面部分看见的内容比较相似。

包里面有一个模型文件,叫 frozen.pb,节点是:

"encoder_memory_placeholder","encoder_memory_length placeholder"

优化级别:o1,     输出节点:"outputs'":{"score","seq-id"},

测试数据文件:"test data":"test_bc4.npy"(在前面节点看到的数据几乎相同)

优化需要 gpu 执行,优化插件,"resource":"T4_8CORE",

提供资源进行执行,将内容放入此资源组即可。

启用服务,Eascmd list 查看当前当前账户下不存在 Eas 服务,使用 Eas create 创建服务

 image.png

可以观察到在创建服务的过程中存在一个日志:正在执行~优化,

image.png

剩下的过程与普通的 eas 服务相同,会慢慢拉起用户需要的实例数最终在线运行 Service is running。

image.png

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
鲁棒优化入门(三)——鲁棒优化工具箱RSOME快速上手与应用实例
本文主要参考RSOME工具箱的用户手册《Users Guide for RSOME》 RSOME的用户手册并不是很长,但一些地方可能不是特别好理解,在这里我主要是通过写博客分享一下我的使用方法,和大家一起学习,也能加深自己的理解。
|
机器学习/深度学习 存储 并行计算
一篇就够:高性能推理引擎理论与实践 (TensorRT)
本文分享了关于 NVIDIA 推出的高性能的深度学习推理引擎 TensorRT 的背后理论知识和实践操作指南。
11014 8
一篇就够:高性能推理引擎理论与实践 (TensorRT)
|
26天前
|
数据采集 自然语言处理 算法
|
1月前
|
Shell Docker Python
LLM-02 大模型 本地部署运行 ChatGLM3-6B(13GB) 双卡2070Super8GB 环境配置 单机多卡 基于LLM-01章节 继续乘风破浪 为大模型微调做准备
LLM-02 大模型 本地部署运行 ChatGLM3-6B(13GB) 双卡2070Super8GB 环境配置 单机多卡 基于LLM-01章节 继续乘风破浪 为大模型微调做准备
46 1
|
3月前
|
数据采集 自然语言处理 调度
一文详谈RAG优化方案与实践
RAG通过检索现有的大量知识,结合强大的生成模型,为复杂的问答、文本摘要和生成任务带来了全新的解决方案。本文详细的介绍了RAG遇到的挑战、通用范式、工程实践、优化实现策略等。
|
6月前
|
机器学习/深度学习 缓存 算法
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
|
6月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与优化路径
【5月更文挑战第28天】 在数据驱动的时代,机器学习模型的效能已成为衡量技术创新的重要指标。本文旨在探讨如何通过策略性的方法构建高效的机器学习模型,并详细阐述优化过程的关键步骤。文章首先对当前机器学习领域面临的挑战进行分析,随后提出一系列切实可行的模型构建和优化策略,包括数据预处理的重要性、特征工程的核心地位、算法选择的多样性以及超参数调优的必要性。通过对这些策略的深入讨论,本文为读者提供了一套系统的方法论,以期达到提高模型性能和泛化能力的目的。
|
6月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与优化方法
在机器学习领域,构建一个既高效又准确的预测模型是每个数据科学家追求的目标。本文将探讨一系列策略和优化方法,用于提高机器学习模型的性能和效率。我们将从数据处理技巧、特征选择、算法调优以及模型评估等方面进行详细讨论。特别地,文章将重点介绍如何通过集成学习和自动化模型调优工具来提升模型的泛化能力。这些技术不仅能帮助减少过拟合的风险,还能确保模型在未知数据集上的表现更加鲁棒。
|
机器学习/深度学习 人工智能 TensorFlow
倚天性能优化—YCL AI计算库在resnet50上的优化
Yitian710 作为平头哥第一代ARM通用芯片,在AI场景与X86相比,软件生态与推理性能都存在一定的短板,本文旨在通过倚天AI计算库的优化,打造适合ARM架构的软件平台,提升倚天性能
|
机器学习/深度学习 数据采集 人工智能
LLM系列 | 02: Vicuna简介及模型部署实测
今天这篇小作文主要介绍Vicuna模型、基于官方模型13B模型部署服务及对话实测。
下一篇
无影云桌面