华为云搭建神经网络密态推理服务
神经网络密态推断
1 整体架构说明
1.1 概述
近年来神经网络模型性能得到快速发展,基于模型推断的在线智能服务成为具有潜力的人工智能应用范式,然而随着其应用于越来越多的隐私敏感领域,比如金融机构、政府部门、医疗健康等重要基础行业,数据的隐私安全正在成为人工智能大规模应用的关键挑战。
神经网络密态推断旨在通过使用同态加密对推断数据进行加密,并针对原始模型密文计算中由于参数规模和复杂非线性算子等因素导致的性能显著下降和计算开销显著提升等限制进行针对性优化,使神经网络模型初步实现密文推断的能力,缓解原始数据请求神经网络推断服务过程中的隐私数据泄漏风险,展示了面向链上的未来安全人工智能应用愿景。
1.2 逻辑架构
神经网络密态推断模块由以下几部分构成:
-
模型密态推断服务 HE-server:HE-server部署于“诚实且好奇”的外部环境,为用户提供神经网络模型的推断服务。HE-server中密态推断环境,并提供模型部署、性能评估、推断等API接口。
-
模型密态推断服务 HE-client:HE-client部署于可信环境中,为用户提供同态加密服务。当HE-client被调用时会对用户明文推断数据进行加密,并通过tcp协议将大密文数据
protobuf
序列化并分包传输至HE-server。 -
隐私计算平台:可通过隐私计算平台(e.g. FATE)中部署拓展模块,实现用户隐私数据推断功能。
2 主要流程
神经网络密态推断主要流程概要如下图所示,推断请求者首先请求加载、密态性能评估模型(直接调用或通过FATE隐私计算平台调用),然后使用已加载模型进行密态数据推断服务。此处通过一个典型应用场景描述神经网络密态推断服务的处理流程。
以下User指实际真实用户或拥有he_nn模块的FATE平台。
当用户User需要获取对应任务的神经网络模型时,须先调用HE-server的对应接口(无须通过HE-client,无隐私泄漏风险),简要流程如下:
- A1). User查询HE_server当前模型列表
- A2). User根据模型列表,判断是否需要初始化新的模型,并指定请求模型的信息
- A3). HE_server收到模型加载请求,从模型缓存中加载或根据不同神经网络类型的密态转换策略加载对应模型
- A4). HE_server按照请求信息对模型进行评估,返回的评估结果包括模型性能和明文/密文运行时间
当用户获取所需模型后,同时对HE_server和HE_client进行调用,实现在密态数据输入下获取推断结果。简要流程如下:
- B1). User请求密态推断结果,分别对HE_server和HE_client进行调用
- B2). HE_server与HE_client进行密文计算环境测试与加密参数同步
- B3). HE_server与HE_client密态通信并得到最后计算结果,最后由HE_client解密并返回给User
- B4). User可以获取当前推断任务的状态,或查询历史任务
下面将对上述“模型加载与密态性能评估”和“模型推断”两个关键流程进行介绍。
- 绿色:在HE_server中执行的流程
- 蓝色:在HE_client中执行的流程
2.1 模型加载与密态性能评估
HE_server的模型加载与性能评估接口的设计目标是帮助用户快速获取所需神经网络模型:
- HE_server目前提供了
mlp
,cnn
,Alexnet
,rnn
和Bert
等五种骨架模型的同态化模型加载服务,用户可根据使用场景请求对应模型类型的神经网络模型。 - HE_server将会把历史加载模型存放于缓存中,用户可以通过查询对应类型模型并选择加载同种类型的模型。
- 用户可以在明文或密文环境下测试模型性能,明文环境默认为
cpu
模式,密文环境默认为SEAL
模式,模型评估结果将包含“模型精度”和“测试运行时间”两部分。
模型加载与性能评估具体流程上图所示,其中:
- User首先发起模型加载请求;
- 若加载新的模型,HE_server将根据不同模型类型,采取不同的模型转换策略生成可支持“密文推断”的模型。新加载的模型将会加入注册模型中,其中包括“模型类型”、“模型ID”、“模型精度”、“模型缓存路径”等信息;
- 若加载已存在于模型缓存中的模型文件信息,HE_server将自动执行一次非加密环境下的性能评估测试,并更新对应模型信息;
- 当User发起模型评估请求后,HE_server将根据请求的测试集大小生成测试集,并根据加密参数设置模拟密态推断数据,进行性能评估结果并返回;
2.2 模型推断流程
密态推断设计目标是使用户无需泄漏原始信息的情况下收到高性能的神经网络推断服务:
- 若采用明文模式发起推断请求,可以单独向HE_server请求并把明文推断数据文件上传,也可以通过HE_client代理进行推断服务。
- 密文推断请求将完全保护用户的推断数据对HE_server不可见,保障用户隐私。
使用密态推断服务,需要注意以下内容:
- 密文模式下的推断请求,必须同时向HE_server和HE_client请求才能完成,
- 用户无法直接通过本地加密的方式上传密文文件,进行密态推断请求,因为:
- 推断过程中需要依赖于HE_server与HE_client的通信,需要HE_client实时响应并重加密来实现
relu
等非线形算子的计算; - 由于密文存储代价大传输需依赖于HE_client内置的tcp通信传输序列化密文数据;
- HE_client会将密文直接传输给HE_server并指定不同模型类型预设的计算图节点。
- 推断过程中需要依赖于HE_server与HE_client的通信,需要HE_client实时响应并重加密来实现
模型推断具体流程上图所示,其中:
- 用户首先发起推断请求;
- HE_client首先向HE_server发起一次密文计算测试,保证当前加密环境与加密参数设置一致;
- HE_client将与HE_server通信以同步当前推断任务的加密参数、推断数据信息(e.g. 同步推断数据的tensor_shape使HE_server可以模拟激活计算图)等;
- HE_client加密推断数据,同时HE_server生成模拟推断数据以生成计算图;
- HE_client将推断数据分段传输至HE_server,并向HE_server提供密态推断过程中的重加密服务;
- 推断完成后,HE_client将解密推断结果,并返回至用户。
神经网络密态推断使用文档
1 简介
神经网络密态推断旨在通过使用同态加密对推断数据进行加密,并针对原始模型密文计算中由于参数规模和复杂非线性算子等因素导致的性能显著下降和计算开销显著提升等限制进行针对性优化,使神经网络模型初步实现密文推断的能力,缓解原始数据请求神经网络推断服务过程中的隐私数据泄漏风险,展示了面向链上的未来安全人工智能应用愿景。
2 部署
创建工作目录 ${WORKDIR}
2.1 下载源码
git clone https://git.code.tencent.com/IBPC/06-encrypt-estimation.git ${WORKDIR}/tmp
# cd ${WORKDIR}/tmp && git checkout he-server && mv he_server ${WORKDIR}
cd ${WORKDIR}/tmp && mv he_server ${WORKDIR}
2.2 启动容器
- 以
docker-compose
为例,需先检查docker-compose
docker-compose version
- 新建
docker-compose-heserver.yml
文件
cd ${WORKDIR} && vi docker-compose-heserver.yml
- 在
docker-compose-he-server.yml
中写入以下内容
version: '3'
services:
he-server:
container_name: he-server
image: he_trans:v1.1
ports:
- 12993:8080
- 34000:34000
volumes:
- ${WORKDIR}/he_server:/home/he-transformer/he_server
command: tail -F anything
- 如果需要部署he-client,则额外添加
docker-compose-he-client.yml
cd ${WORKDIR} && cp -r he_server he_client && vi docker-compose-heclient.yml
- 在
docker-compose-he-client.yml
中写入以下内容
version: '3'
services:
he-client:
container_name: he-client
image: he_trans:v1.1
ports:
- 12995:8081
volumes:
- ${WORKDIR}/he_client:/home/he-transformer/he_server
command: tail -F anything
- 启动容器
docker-compose -f docker-compose-he-server.yml up -d && docker-compose -f docker-compose-he-client.yml up -d
2.3 启动HE_server
- 配置he-transformer环境
# 进入容器
docker exec -it he-server /bin/bash
export HE_SERVER=/home/he-transformer/he_server
# 编译密态环境he-transformer
cd /home/he-transformer/build
make install
./test/unit-test
- 安装he-server依赖环境
# 激活he-server虚拟环境
source /home/he-transformer/build/external/venv-tf-py3/bin/activate
# 安装依赖
cd /home/he-transformer/build && make install python_client
pip install python/dist/pyhe_client-*.whl
cd ${HE_SERVER} && pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
- 根据实际需求修改he_server相关配置(可选)
apt-get update && apt-get install vim && vi app.ini
可根据需求修改
model
,inference
,log
对应目录,需要放置与he_server
外时,注意修改[2.2](#2.2 启动容器)节中的docker-compose-he-server.yml
的volumes
字段
- 测试he-server本地环境
bash ${HE_SERVER}/test/scripts/local_test.sh
- 启动he-server
cd /home/he-transformer/he-server && python app.py
- 测试he-server API
bash ${HE_SERVER}/test/scripts/api_test.sh
2.4 启动HE_client
- 进入容器
docker exec -it he-client /bin/bash
-
中间步骤同[2.3](#2.3 启动HE_server)节(可按需修改
clientport
) -
启动he-client
cd /home/he-transformer/he-server/client && python client_app.py
- 测试he-client
bash ${HE_SERVER}/test/scripts/client_server_test.sh -h ${HE-SERVER-URL}
he-client的测试需先保证he-server启动成功
2.5 FATE拓展模块(可选)
此处仅提供docker-compose
部署实例,详情参考FATE官方文档
- 准备挂载目录
cd ${WORKDIR} && mkdir fate_dev
cp -r ${WORKDIR}/he_server/fate_dev ${WORKDIR}/fate_dev
- 准备
docker-compose-fate-dev.yml
cd ${WORKDIR} && cd fate_dev
vi docker-compose-fate.yml
写入如下内容
version: '3'
services:
fate-dev:
container_name: fate-dev
image: federatedai/standalone_fate:1.9.0
ports:
- 12996:8080
- 12997:9360
- 12998:9380
volumes:
- ${WORKDIR}/fate_dev/fate_dev:/data/projects/fate/fate_dev
启动并进入容器
docker-compose -f docker-compose-fate.yml up -d
docker exec -it fate-dev /bin/bash
source /data/projects/fate/bin/init_env.sh
fate_test unittest federatedml --yes
- 加入he-nn模块
# 加入he-nn模块
cd /data/projects/fate/fate_dev && bash he_nn_setup.sh
# 重启fate-flow
bash /data/projects/fate/fateflow/bin/service.sh restart
3 API
3.1 model load
3.1.1 接口说明
url | model/load |
---|---|
协议 | http |
请求方式 | POST |
3.1.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
model_type | 必选 | string | 请求的参数类型 |
is_init | 可选 | int | 请求模型是否初次加载 |
model_name | 可选 | int | 请求模型的name或id |
3.1.3 返回说明
示例:
{
"code": 200,
"data": {
"loadModel": "success",
"model_id": "320cec4a-8ba1-11ed-a8c1-0242ac130003",
"model_name": "320cecMLP",
"model_type": "MLP"
},
"message": "调用成功!"}
3.2 model list
3.2.1 接口说明
url | model/get_list |
---|---|
协议 | http |
请求方式 | POST |
3.2.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
model_type | 必选 | string | 查询的模型类型 |
3.2.3 返回说明
示例:
{
'code': 200,
'data': {
'model_list': [
{'model_id': '05d6a590-808d-11ed-9854-0242ac130003', 'model_name': '05d6a5MLP', 'model_type': 'MLP'},
{'model_id': '395825a6-808d-11ed-9854-0242ac130003', 'model_name': '395825Cryptonets', 'model_type': 'Cryptonets'},
{'model_id': '419ef5f0-808d-11ed-9854-0242ac130003', 'model_name': '419ef5MLP', 'model_type': 'MLP'},
{'model_id': '397a67fa-808e-11ed-9854-0242ac130003', 'model_name': '397a67RNN', 'model_type': 'RNN'},
{'model_id': '3e7bf35e-808e-11ed-9854-0242ac130003', 'model_name': '3e7bf3BERT', 'model_type': 'BERT'},
{'model_id': '29bb78d6-8ba1-11ed-a8c1-0242ac130003', 'model_name': '29bb78Cryptonets', 'model_type': 'Cryptonets'},
{'model_id': '320cec4a-8ba1-11ed-a8c1-0242ac130003', 'model_name': '320cecMLP', 'model_type': 'MLP'},
{'model_id': '2a99da4e-8ba2-11ed-a8c1-0242ac130003', 'model_name': '2a99daRNN', 'model_type': 'RNN'},
{'model_id': '349f53e8-8ba2-11ed-a8c1-0242ac130003', 'model_name': '349f53BERT', 'model_type': 'BERT'}], 'quary_state': 'success'}, 'message': '调用成功!'}.
3.3 model eval
3.3.1 接口说明
url | model/test |
---|---|
协议 | http |
请求方式 | POST |
3.3.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
model_type | 必选 | string | 评估模型的类型 |
model_name | 必选 | string | 评估模型name或id |
is_encryption | 必选 | bool | 评估是否加密 |
enc_param | 可选 | string | 评估使用的加密参数, 默认为N13_L8 |
3.3.3 返回说明
示例:
{
'code': 200,
'data': {
'batch_size': 1,
'encryption_parameters': '',
'is_enc': False,
'loadModel': 'success',
'log': 'log',
'model_id': '3e7bf35e-808e-11ed-9854-0242ac130003',
'model_name': '3e7bf3BERT',
'model_type': 'BERT',
'test_acc': 1.0,
'time_cost': '0.11416935920715332(s)'
}, 'message': '调用成功!'}
3.4 model inference
3.4.1 接口说明
url | model/inference |
---|---|
协议 | http |
请求方式 | POST |
3.4.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
model_type | 必选 | string | 推断模型类型 |
model_name | 必选 | string | 推断模型name或id |
inf_file_name | 必选 | string | 推断请求的数据文件(需为.npy 格式) |
is_encryption | 必选 | string | 是否加密(yes 或no ) |
encryption_params | 可选 | string | 如果is_encryption='yes' 则默认加密参数为N13_L8 |
batch_size | 必选 | int | 推断文件中包含多少条数据 |
3.4.3 返回说明
示例:
{'code': 200,
'data':
{'inference_file': '83d702test.npy',
'inference_id': '83d8c200-8bac-11ed-a8c1-0242ac130003',
'inference_result': '[[-4.0945258140563965, 4.05887508392334]]',
'inference_size': 1,
'is_encryption': 'yes',
'loadModel': 'success',
'log': 'log',
'model_id': '3e7bf35e-808e-11ed-9854-0242ac130003',
'model_name': '3e7bf3BERT',
'model_type': 'BERT',
'time_cost': '24.76659655570984(s)'
}, 'message': '调用成功!'}
注意:
- 直接通过POST请求调用此API需要先通过[3.5节](#3.5 upload file)的
uploadfile
上传文件- 直接通过POST请求调用此API需要请求数据进行预处理,根据模型类型不同预处理过程也不同,可参考
he_server/test/inference_api_test.py
文件。
3.5 upload file
3.5.1 接口说明
url | model/uploadfile |
---|---|
协议 | http |
请求方式 | POST |
3.5.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
file_name | 必选 | string | 上传的文件的文件名 |
3.5.3 返回说明
示例:
{'code': 200, 'data': {'file_upload': 'success', 'inf_file_name': '83d702test.npy'}, 'message': '调用成功!'}
3.6 inference list
3.6.1 接口说明
url | model/get_inference |
---|---|
协议 | http |
请求方式 | POST |
3.6.2 请求说明
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
inference_id | 可选 | string | 查询的推断任务id(如果为空,则默认查到所有推断任务) |
3.6.3 返回说明
示例(查询推断列表):
{'code': 200, 'data':
{'inference_list': [
{'encryption_parameter': 'he_seal_ckks_config_N13_L8.json', 'finish_time': '2022-12-21 07:04:15.796252', 'inference_file': 'a28f44test.npy', 'inference_id': 'a29127fa-80fd-11ed-ba7b-0242ac130003', 'inference_size': 2, 'is_encryption': 'yes', 'model_name': 'latest', 'model_type': 'Cryptonets', 'start_time': '2022-12-21 07:03:56.085714', 'state': 'finished', 'stop_time': None},
{'encryption_parameter': 'he_seal_ckks_config_N13_L8.json', 'finish_time': None, 'inference_file': 'ec942ftest.npy', 'inference_id': 'ec9773b8-8102-11ed-98ec-0242ac130003', 'inference_size': 2, 'is_encryption': 'yes', 'model_name': 'latest', 'model_type': 'MLP', 'start_time': '2022-12-21 07:41:47.761999', 'state': 'started', 'stop_time': None},
{'encryption_parameter': 'he_seal_ckks_config_N13_L8.json', 'finish_time': None, 'inference_file': 'eb36betest.npy', 'inference_id': 'eb39e334-810c-11ed-bbf5-0242ac130003', 'inference_size': 1, 'is_encryption': 'yes', 'model_name': 'latest', 'model_type': 'RNN', 'start_time': '2022-12-21 08:53:20.438392', 'state': 'started', 'stop_time': None},
{'encryption_parameter': 'he_seal_ckks_config_N13_L8.json', 'finish_time': None, 'inference_file': '833b7btest.npy', 'inference_id': '833ccd26-813b-11ed-bd48-0242ac130003', 'inference_size': 1, 'is_encryption': 'yes', 'model_name': 'latest', 'model_type': 'BERT', 'start_time': '2022-12-21 14:26:52.320738', 'state': 'started', 'stop_time': None},
], 'quary_state': 'success'}, 'message': '调用成功!'}
示例(查询指定推断任务):
{'code': 200,
'data': {
'inference_list': {
'encryption_parameter': 'he_seal_ckks_config_N13_L8.json',
'finish_time': '2022-12-21 16:57:18.075244',
'inference_file': '72e682test.npy',
'inference_id': '72e81f6a-8150-11ed-9324-0242ac130003',
'inference_size': 1,
'is_encryption': 'yes',
'model_name': 'latest',
'model_type': 'RNN',
'start_time': '2022-12-21 16:56:44.353570',
'state': 'finished',
'stop_time': None},
'quary_state': 'success'},
'message': '调用成功!'}
4 FATE 拓展模块
4.1 he-nn-load
Name | Type | Description | Default |
---|---|---|---|
model_type |
string |
支持的模型类型,包括MLP ,CNN ,AlexNet ,RNN ,BERT |
'CNN' |
server_url |
string |
指定的HE-server API地址 | '127.0.0.1:12995' |
is_init |
bool |
是否首次加载此模型(首次加载时将绑定一个新的模型,否则将从已绑定的模型中选择) | True |
model_id |
string |
加载指定model_id 的模型(只有在is_init=False 时生效) |
'' |
4.2 he-nn-eval
Name | Type | Description | Default |
---|---|---|---|
model_id |
string |
评估的模型id | 'latest' |
model_type |
string |
评估模型类型 | CNN |
server_url |
string |
指定的HE-server API地址 | '127.0.0.1:12993' |
start_batch |
int |
加载dataset的start_batch |
0 |
batch_size |
int |
加载dataset的batch_size (注意:最大值是512) |
1 |
is_encryption |
bool |
评估时是否对测试集加密 | False |
encryption_parameters |
string |
指定使用预设的加密参数,包括N11_L1 ,N12_L4 ,N13_L8 三种安全等级的加密参数 |
'N13_L8' |
is_custom_enc_param |
bool |
是否使用自定义加密参数(注意:如果值为True ,自定义加密参数文件需要命名为'custom_enc_param.json' ,并与DSL配置文件在同一目录下) |
False |
4.3 he-nn-inference
Name | Type | Description | Default |
---|---|---|---|
model_id |
string |
推断模型id | 'latest' |
model_type |
strint |
推断模型类型 | CNN |
server_url |
string |
指定的HE-server API地址 | '127.0.0.1:12993' |
num_inference |
int |
推断请求数量 | 1 |
file_inference |
string |
推断请求文件(注意:需要为numpy格式的文件) | ./inference_data.npy |
is_encryption |
bool |
评估时是否对测试集加密 | False |
encryption_parameters |
string |
指定使用预设的加密参数,包括N11_L1 ,N12_L4 ,N13_L8 三种安全等级的加密参数 |
'N13_L8' |
is_custom_enc_param |
bool |
是否使用自定义加密参数(注意:如果值为True ,自定义加密参数文件需要命名为'custom_enc_param.json' ,并与DSL配置文件在同一目录下) |
False |
client |
bool |
是否使用he-client | False |
client_url |
bool |
he-client的API地址 | '127.0.0.1:12995' |
4.4 example
模型加载作业
# 进入he_nn example 目录
cd ${FATE_PROJECT}/examples/dsl/v2/he_nn
# 提交模型加载作业
flow job submit -c he_nn_model_load_conf.json -d he_nn_model_load_dsl.json
推断作业
# 密态推断
flow job submit -c he_nn_model_inference_conf.json -d he_nn_model_inference_dsl.json
# client模式密态推断
flow job submit -c he_nn_model_client_inference_conf.json -d he_nn_model_client_inference_dsl.json
类似以下输出则作业提交成功
{
"data": {
"board_url": "http://127.0.0.1:8080/index.html#/dashboard?job_id=202210271050422864400&role=guest&party_id=9999",
"code": 0,
"dsl_path": "/data/projects/fate/fateflow/jobs/202210271050422864400/job_dsl.json",
"job_id": "202210271050422864400",
"logs_directory": "/data/projects/fate/fateflow/logs/202210271050422864400",
"message": "success",
"model_info": {
"model_id": "guest-9999#host-10000#model",
"model_version": "202210271050422864400"
},
"pipeline_dsl_path": "/data/projects/fate/fateflow/jobs/202210271050422864400/pipeline_dsl.json",
"runtime_conf_on_party_path": "/data/projects/fate/fateflow/jobs/202210271050422864400/guest/9999/job_runtime_on_party_conf.json",
"runtime_conf_path": "/data/projects/fate/fateflow/jobs/202210271050422864400/job_runtime_conf.json",
"train_runtime_conf_path": "/data/projects/fate/fateflow/jobs/202210271050422864400/train_runtime_conf.json"
},
"jobId": "202210271050422864400",
"retcode": 0,
"retmsg": "success"
}
获取模型加载结果
-
使用fate-flow:
-
获取作业id(作业提交成功时返回的
jobId
),获取模块名(作业提交时he_nn_model_load_dsl.json
配置的components.name
) -
进入
${FATE_PROJECT}/fateflow/logs/${jobId}/guest/${COMPONENTS_NAME}
即可查看 -
如下输出结果代表模型加载成功
{'code': 200, 'data': {'loadModel': 'success', 'log': 'log', 'model_id': 'ae98806e-4e05-11ed-9a7d-0242ac130003', 'model_name': '0003Cryptonets', 'model_owner': 'test_owner', 'model_type': 'Cryptonets', 'test_acc': 0.9453125}, 'message': '调用成功!'}
-
-
使用fate-board:
- 开启fate-board,浏览器打开
${IP}:12996
,进入对应jobId
条目并进入详情页面
- 等待作业完成
- 开启fate-board,浏览器打开
5 性能测试
针对5种主流模型架构的密文替换,在Intel Xeon Gold 5218 CPU@2.30GHz,256G RAM运行环境下,测试情况如下:
MLP
model_type | back_end | accuracy | total times(s) |
---|---|---|---|
origin-model | cpu | 0.984375 | 0.218(512) |
he-model | cpu | 0.973 | 0.256(512) |
he-model | HE-SEAL | 0.974609 | 0.394(512) |
he-model | HE-SEAL N13_L8 | 0.976562 | 1.126(512) |
转换精度损失为1.1%, 推断效率额外开销为14.8%。
CNN
model_type | back_end | accuracy | total times(s) |
---|---|---|---|
origin-model | cpu | 0.984231 | 0.531(512) |
he-model | cpu | 0.962891 | 0.542(512) |
he-model | HE-SEAL | 0.962891 | 3.276(512) |
he-model | HE-SEAL N13_L8 | 0.9375 | 8.3125(1) |
转换精度损失为2.1%,推断效率额外开销为2.0%
AlexNet
model_type | back_end | accuracy | total times(s) |
---|---|---|---|
origin-model | cpu | 0.987324 | 0.721(512) |
he-model | cpu | 0.972345 | 0.663(512) |
he-model | HE-SEAL | 0.977342 | 6.329(512) |
he-model | HE-SEAL N13_L8 | 0.964354 | 10.345(1) |
转换精度损失为1.5%,模型简化,无推断效率额外开销
RNN
model_type | back_end | accuracy | total times(s) |
---|---|---|---|
origin-model | cpu | 0.807223 | 50.256(512) |
he-model | cpu | 0.743257 | 47.208(512) |
he-model | HE-SEAL | 0.742303 | 167.329(512) |
he-model | HE-SEAL N13_L8 | 0.732939 | 21.293(1) |
转换精度损失为6.4%,模型简化,无推断效率额外开销
BERT
model_type | back_end | accuracy | total times(s) |
---|---|---|---|
bert-tiny | cpu | 0.802478 | 4.937(512) |
he-model | cpu | 0.818807 | 4.396(512) |
he-model | HE-SEAL N11_L1 | 0.818359 | 23.625(1) |
he-model | HE-SEAL N13_L8 | 0.816250 | 25.726(1) |
转换精度损失为0.5%, 模型简化,无推断效率额外开销
- 点赞
- 收藏
- 关注作者
评论(0)