nn-sdk tensorflow(v1 ,v2),onnx,tensorrt,fasttext model infer engine
## nn-sdk
前言:
支持开发语言c/c++,python,java
支持推理引擎tensorflow(v1,v2) onnxruntime tensorrt,fasttext 注:tensorrt 7,8测试通过(建议8),目前tensorrt只支持linux系统
支持多子图,支持图多输入多输出, 支持pb [tensorflow 1,2] , ckpt [tensorflow] , trt [tensorrt] , fasttext
支持fastertransformer pb [32精度 相对于传统tf,加速1.9x]
pip install tf2pb , 进行模型转换,tf2pb pb模型转换参考: https://pypi.org/project/tf2pb
模型加密参考test_aes.py,目前支持tensorflow 1 pb模型 , onnx模型 , tensorrt fasttext模型加密
推荐环境ubuntu系列 centos7 centos8 windows系列
python (test_py.py) , c语言 (test.c) , java语言包 (nn_sdk.java)
更多使用参见: https://github.com/ssbuild/nn-sdk
instructions:
Support development languages c/c++, python, java
Support inference engine tensorflow (v1, v2) onnxruntime tensorrt, fasttext Note: tensorrt 7, 8 passed the test (recommended 8), currently tensorrt only supports linux system
Support multiple subgraphs, support multiple input and multiple output graphs, support pb [tensorflow 1,2] , ckpt [tensorflow] , trt [tensorrt] , fasttext
Support fastertransformer pb [32 precision compared to traditional tf, speed up 1.9x]
pip install tf2pb , model conversion, tf2pb pb model conversion reference: https://pypi.org/project/tf2pb
Model encryption reference test_aes.py, currently supports tensorflow 1 pb model, onnx model, tensorrt fasttext model encryption
Recommended environmentubuntu series centos7 centos8 windows series
python (test_py.py) , c language (test.c) , java language package (nn_sdk.java)
For more usage see: https://github.com/ssbuild/nn-sdk
config:
aes: 加密参考test_aes.py
engine:
0: tensorflow
1: onnx
2: tensorrt
3: fasttext
log_level:
0: fatal
2: error
4: warn
8: info
16: debug
model_type: tensorflow model type
0: pb format
1: ckpt format
fastertransformer:
fastertransformer算子,模型转换参考tf2pb, 参考 https://pypi.org/project/tf2pb
ConfigProto: tensorflow 显卡配置
device_id: GPU id
engine_major: 推理引擎主版本 tf 0,1 tensorrt 7 或者 8 , fasttext 0
engine_minor: 推理引擎次版本
graph: 多子图配置
node: 例子: tensorflow 1 input_ids:0 , tensorflow 2: input_ids , onnx: input_ids
dtype: 节点的类型根据模型配置,对于c++/java支持 int int64 long longlong float double str
shape: 尺寸维度
更新详情:
2022-07-28 enable tf1 reset_default_graph
2022-06-23 split tensorrt to trt_sdk , optimize onnx engine and modify onnx engine reload bug.
2022-01-21 modify define graph shape contain none and modity demo note,modity a tensorflow 2 infer dtype bug,
remove a deprecationWarning in py>=3.8
2021-12-09 graph data_type 改名 dtype , 除fatal info err debug 增加warn
2021-11-25 修复nn-sdk非主动close, close小bug.
2021-10-21 修复fastext推理向量维度bug
2021-10-16 优化 c++/java接口,可预测动态batch
2021-10-07 增加 fasttext 向量和标签推理
## python demo
```python
# -*- coding: utf-8 -*-
from nn_sdk import *
config = {
"model_dir": r'/root/model.pb',
"aes":{
"use":False,
"key":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
"iv":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
},
"log_level": 8,# 0 fatal , 2 error , 4 warn, 8 info , 16 debug
'engine':0, # 0 tensorflow, 1 onnx , 2 tensorrt , 3 fasttext
"device_id": 0,
'tf':{
"ConfigProto": {
"log_device_placement": False,
"allow_soft_placement": True,
"gpu_options": {"allow_growth": True},
"graph_options":{
"optimizer_options":{"global_jit_level": 1}
},
},
"engine_major": 1, # tensorflow engine majar version
"is_reset_graph": 1, # 1 reset_default_graph , 0 do nothing
"model_type": 0,# 0 pb , 1 ckpt
#配置pb模型
"saved_model":{
# model_type为 1 pb , 模型有效,
# 模型是否是是否启用saved_model冻结 , 如果是,则 use=True并且配置tags
# 普通 freeze pb , use = False
'enable': False, # 是否启用saved_model
'tags': ['serve'],
'signature_key': 'serving_default',
},
"fastertransformer":{"enable": False}
},
'onnx':{
'tensorrt': True, #是否启用tensorrt算子
},
'trt':{
#pip install trt-sdk , support tensorrt 7.2 8.0 8.2 8.4 or more new
"engine_major": 8,# 7 or 8
"engine_minor": 0,
"enable_graph": 0,
},
'fasttext': {
"engine_major": 0,
"threshold":0, # 预测k个标签的阈值
"k":1, # 预测k个标签 score >= threshold
"dump_label": 1, #输出内部标签,用于上层解码
"predict_label": 1, #获取预测标签 1 , 获取向量 0
},
"graph": [
{
# 对于Bert模型 shape [max_batch_size,max_seq_lenth],
# 其中max_batch_size 用于c++ java开辟输入输出缓存,输入不得超过max_batch_size,对于python没有作用,取决于上层用户真实输入
# python 限制max_batch_size 在上层用户输入做 , dtype and shape are not necessary for python
# 对于fasttext node 对应name可以任意写,但不能少
# dtype must be in [int int32 int64 long longlong uint uint32 uint64 ulong ulonglong float float32 float64 double str]
"input": [
{
"node":"input_ids:0",
#"dtype":"int64",
#"shape":[1, 256] #Python may be empty, c/c++ java must exist , it will be used to alloc mem
},
{
"node":"input_mask:0",
#"dtype":"int64",
#"shape":[1, 256] #Python may be empty , c/c++ java must exist , it will be used to alloc mem
}
],
"output": [
{
"node":"pred_ids:0",
#"dtype":"int64",
#"shape":[1, 256] #Python may be empty , c/c++ java must exist , it will be used to alloc mem
},
],
}
]}
seq_length = 256
input_ids = [[1] * seq_length]
input_mask = [[1] * seq_length]
sdk_inf = csdk_object(config)
if sdk_inf.valid():
net_stage = 0
ret, out = sdk_inf.process(net_stage, input_ids,input_mask)
print(ret)
print(out)
sdk_inf.close()
```
## java demo
```java
package nn_sdk;
//输入缓冲区 自定义 可自定义改
class nn_buffer_batch{
//输入 输出内存节点,名字跟图配置一样,根据图对象修改。
public float [] input_ids = null;//推理图的输入,
public float[] pred_ids = null;//推理的结果保存
public int batch_size = 1;
public nn_buffer_batch(int batch_size_){
this.input_ids = new float[batch_size_ * 10];
this.pred_ids = new float[batch_size_ * 10];
this.batch_size = batch_size_;
for(int i =0;i<1 * 10;i++) {
this.input_ids[i] = 1;
this.pred_ids[i] = 0;
}
}
}
//包名必须是nn_sdk
public class nn_sdk {
//推理函数
public native static int sdk_init_cc();
public native static int sdk_uninit_cc();
public native static long sdk_new_cc(String json);
public native static int sdk_delete_cc(long handle);
//nn_buffer_batch 类
public native static int sdk_process_cc(long handle, int net_state,int batch_size, nn_buffer_batch buffer);
static {
//动态库的绝对路径windows是engine_csdk.pyd , linux是 engine_csdk.so
System.load("engine_csdk.pyd");
}
public static void main(String[] args){
System.out.println("java main...........");
nn_sdk instance = new nn_sdk();
nn_buffer_batch buf = new nn_buffer_batch(2);
sdk_init_cc();
String json = "{\r\n"
+ " \"model_dir\": r'model.ckpt',\r\n"
+ " \"aes\":{\r\n"
+ " \"enable\":False,\r\n"
+ " \"key\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\r\n"
+ " \"iv\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\r\n"
+ " },\r\n"
+ " \"log_level\": 4,# fatal 1 , error 2 , info 4 , debug 8\r\n"
+ " 'engine':0, # 0 tensorflow, 1 onnx , 2 tensorrt , 3 fasttext\r\n"
+ " \"device_id\": 0,\r\n"
+ " 'tf':{\r\n"
+ " #tensorflow2 ConfigProto无效\r\n"
+ " \"ConfigProto\": {\r\n"
+ " \"log_device_placement\": False,\r\n"
+ " \"allow_soft_placement\": True,\r\n"
+ " \"gpu_options\": {\r\n"
+ " \"allow_growth\": True\r\n"
+ " },\r\n"
+ " \"graph_options\":{\r\n"
+ " \"optimizer_options\":{\r\n"
+ " \"global_jit_level\": 1\r\n"
+ " }\r\n"
+ " },\r\n"
+ " },\r\n"
+ " \"engine_version\": 1, # tensorflow版本\r\n"
+ " \"model_type\": 1,# 0 pb , 1 ckpt\r\n"
+ " \"saved_model\":{ # 当model_type为pb模型有效, 普通pb enable=False , 如果是saved_model冻结模型 , 则需启用enable并且配置tags\r\n"
+ " 'enable': False, # 是否启用saved_model\r\n"
+ " 'tags': ['serve'],\r\n"
+ " 'signature_key': 'serving_default',\r\n"
+ " },\r\n"
+ " \"fastertransformer\":{\r\n"
+ " \"enable\": False,\r\n"
+ " }\r\n"
+ " },\r\n"
+ " 'onnx':{\r\n"
+ " \"engine_version\": 1,# onnxruntime 版本\r\n"
+ " },\r\n"
+ " 'trt':{\r\n"
+ " \"engine_version\": 8,# tensorrt 版本\r\n"
+ " \"enable_graph\": 0,\r\n"
+ " },\r\n"
+ " 'fasttext': {\r\n"
+ " \"engine_version\": 0,# fasttext主版本\r\n"
+ " \"threshold\":0, # 预测k个标签的阈值\r\n"
+ " \"k\":1, # 预测k个标签\r\n"
+ " \"dump_label\": 1, #输出内部标签,用于上层解码\r\n"
+ " \"predict_label\": 1, #获取预测标签 1 , 获取向量 0\r\n"
+ " },\r\n"
+ " \"graph\": [\r\n"
+ " {\r\n"
+ " # 对于Bert模型 shape [max_batch_size,max_seq_lenth],\r\n"
+ " # 其中max_batch_size 用于c++ java开辟输入输出缓存,输入不得超过max_batch_size,对于python没有作用,取决于上层用户真实输入\r\n"
+ " # python限制max_batch_size 在上层用户输入做\r\n"
+ " # 对于fasttext node 对应name可以任意写,但不能少\r\n"
+ " \"input\": [\r\n"
+ " {\"node\":\"input_ids:0\", \"data_type\":\"float\", \"shape\":[1, 10]},\r\n"
+ " ],\r\n"
+ " \"output\": [\r\n"
+ " {\"node\":\"pred_ids:0\", \"data_type\":\"float\", \"shape\":[1, 10]},\r\n"
+ " ],\r\n"
+ " }\r\n"
+ " ]}";
System.out.println(json);
long handle = sdk_new_cc(json);
System.out.printf("handle: %d\n",handle);
int code = sdk_process_cc(handle,0,buf.batch_size,buf);
System.out.printf("sdk_process_cc %d \n" ,code);
if(code == 0) {
for(int i = 0;i<20 ; i++) {
System.out.printf("%f ",buf.pred_ids[i]);
}
System.out.println();
}
sdk_delete_cc(handle);
sdk_uninit_cc();
System.out.println("end");
}
}
```
## c/c++ demo
```commandline
#include <stdio.h>
#include "nn_sdk.h"
int main(){
if (0 != sdk_init_cc()) {
return -1;
}
printf("配置参考 python.........\n");
const char* json_data = "{\n\
\"model_dir\": \"/root/model.ckpt\",\n\
\"log_level\":8, \n\
\"device_id\":0, \n\
\"tf\":{ \n\
\"ConfigProto\": {\n\
\"log_device_placement\":0,\n\
\"allow_soft_placement\":1,\n\
\"gpu_options\":{\"allow_growth\": 1}\n\
},\n\
\"engine_version\": 1,\n\
\"model_type\":1 ,\n\
},\n\
\"graph\": [\n\
{\n\
\"input\": [{\"node\":\"input_ids:0\", \"data_type\":\"float\", \"shape\":[1, 10]}],\n\
\"output\" : [{\"node\":\"pred_ids:0\", \"data_type\":\"float\", \"shape\":[1, 10]}]\n\
}\n\
]\n\
}";
printf("%s\n", json_data);
auto handle = sdk_new_cc(json_data);
const int INPUT_NUM = 1;
const int OUTPUT_NUM = 1;
const int M = 1;
const int N = 10;
int *input[INPUT_NUM] = { 0 };
float* result[OUTPUT_NUM] = { 0 };
int element_input_size = sizeof(int);
int element_output_size = sizeof(float);
for (int i = 0; i < OUTPUT_NUM; ++i) {
result[i] = (float*)malloc(M * N * element_output_size);
memset(result[i], 0, M * N * element_output_size);
}
for(int i =0;i<INPUT_NUM;++i){
input[i] = (int*)malloc(M * N * element_input_size);
memset(input[i], 0, M * N * element_input_size);
for (int j = 0; j < N; ++j) {
input[i][j] = i;
}
}
int batch_size = 1;
int code = sdk_process_cc(handle, 0 , batch_size, (void**)input,(void**)result);
if (code == 0) {
printf("result\n");
for (int i = 0; i < N; ++i) {
printf("%f ", result[0][i]);
}
printf("\n");
}
for (int i = 0; i < INPUT_NUM; ++i) {
free(input[i]);
}
for (int i = 0; i < OUTPUT_NUM; ++i) {
free(result[i]);
}
sdk_delete_cc(handle);
sdk_uninit_cc();
return 0;
}
```
## 模型加密模块
```commandline
# -*- coding: UTF-8 -*-
import sys
from nn_sdk.engine_csdk import sdk_aes_encode_decode
def test_string():
data1 = {
"mode":0,# 0 加密 , 1 解密
"key": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
"iv": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
"data": bytes([1,2,3,5,255])
}
code,encrypt = sdk_aes_encode_decode(data1)
print(code,encrypt)
data2 = {
"mode":1,
"key": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
"iv": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),
"data": encrypt
}
code,plain = sdk_aes_encode_decode(data2)
print(code,plain)
def test_encode_file(in_filename,out_filename):
with open(in_filename,mode='rb') as f:
data = f.read()
if len(data) == 0 :
return -1
data1 = {
"mode": 0, # 0 加密 , 1 解密
"key": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
"iv": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
"data": bytes(data)
}
code, encrypt = sdk_aes_encode_decode(data1)
if code != 0:
return code
with open(out_filename, mode='wb') as f:
f.write(encrypt)
return code
def test_decode_file(in_filename,out_filename):
with open(in_filename, mode='rb') as f:
data = f.read()
if len(data) == 0:
return -1
data1 = {
"mode": 1, # 0 加密 , 1 解密
"key": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
"iv": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
"data": bytes(data)
}
code, plain = sdk_aes_encode_decode(data1)
if code != 0:
return code
with open(out_filename, mode='wb') as f:
f.write(plain)
return code
test_encode_file(r'C:\Users\acer\Desktop\img\a.txt',r'C:\Users\acer\Desktop\img\a.txt.encode')
test_decode_file(r'C:\Users\acer\Desktop\img\a.txt.encode',r'C:\Users\acer\Desktop\img\a.txt.decode')
```
Raw data
{
"_id": null,
"home_page": "https://github.com/ssbuild",
"name": "nn-sdk",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3, <4",
"maintainer_email": "",
"keywords": "nn-sdk,nn_sdk,tensorflow,tf,onnx,tensorrt,trt,onnxruntime,inference,pb",
"author": "ssbuild",
"author_email": "9727464@qq.com",
"download_url": "",
"platform": "linux_x86_64",
"description": "nn-sdk tensorflow(v1 ,v2),onnx,tensorrt,fasttext model infer engine\n## nn-sdk \n \u524d\u8a00:\n \u652f\u6301\u5f00\u53d1\u8bed\u8a00c/c++,python,java\n \u652f\u6301\u63a8\u7406\u5f15\u64cetensorflow(v1,v2) onnxruntime tensorrt,fasttext \u6ce8:tensorrt 7,8\u6d4b\u8bd5\u901a\u8fc7(\u5efa\u8bae8),\u76ee\u524dtensorrt\u53ea\u652f\u6301linux\u7cfb\u7edf\n \u652f\u6301\u591a\u5b50\u56fe,\u652f\u6301\u56fe\u591a\u8f93\u5165\u591a\u8f93\u51fa, \u652f\u6301pb [tensorflow 1,2] , ckpt [tensorflow] , trt [tensorrt] , fasttext\n \u652f\u6301fastertransformer pb [32\u7cbe\u5ea6 \u76f8\u5bf9\u4e8e\u4f20\u7edftf,\u52a0\u901f1.9x] \n pip install tf2pb , \u8fdb\u884c\u6a21\u578b\u8f6c\u6362,tf2pb pb\u6a21\u578b\u8f6c\u6362\u53c2\u8003: https://pypi.org/project/tf2pb\n \u6a21\u578b\u52a0\u5bc6\u53c2\u8003test_aes.py,\u76ee\u524d\u652f\u6301tensorflow 1 pb\u6a21\u578b , onnx\u6a21\u578b , tensorrt fasttext\u6a21\u578b\u52a0\u5bc6\n \u63a8\u8350\u73af\u5883ubuntu\u7cfb\u5217 centos7 centos8 windows\u7cfb\u5217\n python (test_py.py) , c\u8bed\u8a00 (test.c) , java\u8bed\u8a00\u5305 (nn_sdk.java)\n \u66f4\u591a\u4f7f\u7528\u53c2\u89c1: https://github.com/ssbuild/nn-sdk\n instructions:\n Support development languages c/c++, python, java\n Support inference engine tensorflow (v1, v2) onnxruntime tensorrt, fasttext Note: tensorrt 7, 8 passed the test (recommended 8), currently tensorrt only supports linux system\n Support multiple subgraphs, support multiple input and multiple output graphs, support pb [tensorflow 1,2] , ckpt [tensorflow] , trt [tensorrt] , fasttext\n Support fastertransformer pb [32 precision compared to traditional tf, speed up 1.9x]\n pip install tf2pb , model conversion, tf2pb pb model conversion reference: https://pypi.org/project/tf2pb\n Model encryption reference test_aes.py, currently supports tensorflow 1 pb model, onnx model, tensorrt fasttext model encryption\n Recommended environmentubuntu series centos7 centos8 windows series\n python (test_py.py) , c language (test.c) , java language package (nn_sdk.java)\n For more usage see: https://github.com/ssbuild/nn-sdk\n\n config:\n aes: \u52a0\u5bc6\u53c2\u8003test_aes.py\n engine: \n 0: tensorflow \n 1: onnx \n 2: tensorrt \n 3: fasttext\n log_level: \n 0: fatal \n 2: error \n 4: warn\n 8: info \n 16: debug\n model_type: tensorflow model type\n 0: pb format \n 1: ckpt format\n fastertransformer:\n fastertransformer\u7b97\u5b50,\u6a21\u578b\u8f6c\u6362\u53c2\u8003tf2pb, \u53c2\u8003 https://pypi.org/project/tf2pb\n ConfigProto: tensorflow \u663e\u5361\u914d\u7f6e\n device_id: GPU id\n engine_major: \u63a8\u7406\u5f15\u64ce\u4e3b\u7248\u672c tf 0,1 tensorrt 7 \u6216\u8005 8 , fasttext 0\n engine_minor: \u63a8\u7406\u5f15\u64ce\u6b21\u7248\u672c\n graph: \u591a\u5b50\u56fe\u914d\u7f6e \n node: \u4f8b\u5b50: tensorflow 1 input_ids:0 , tensorflow 2: input_ids , onnx: input_ids\n dtype: \u8282\u70b9\u7684\u7c7b\u578b\u6839\u636e\u6a21\u578b\u914d\u7f6e\uff0c\u5bf9\u4e8ec++/java\u652f\u6301 int int64 long longlong float double str\n shape: \u5c3a\u5bf8\u7ef4\u5ea6\n \u66f4\u65b0\u8be6\u60c5:\n 2022-07-28 enable tf1 reset_default_graph\n 2022-06-23 split tensorrt to trt_sdk , optimize onnx engine and modify onnx engine reload bug.\n 2022-01-21 modify define graph shape contain none and modity demo note,modity a tensorflow 2 infer dtype bug,\n remove a deprecationWarning in py>=3.8\n 2021-12-09 graph data_type \u6539\u540d dtype , \u9664fatal info err debug \u589e\u52a0warn\n 2021-11-25 \u4fee\u590dnn-sdk\u975e\u4e3b\u52a8close, close\u5c0fbug.\n 2021-10-21 \u4fee\u590dfastext\u63a8\u7406\u5411\u91cf\u7ef4\u5ea6bug\n 2021-10-16 \u4f18\u5316 c++/java\u63a5\u53e3,\u53ef\u9884\u6d4b\u52a8\u6001batch\n 2021-10-07 \u589e\u52a0 fasttext \u5411\u91cf\u548c\u6807\u7b7e\u63a8\u7406\n\n## python demo\n\n\n```python\n\n# -*- coding: utf-8 -*-\nfrom nn_sdk import *\nconfig = {\n \"model_dir\": r'/root/model.pb',\n \"aes\":{\n \"use\":False,\n \"key\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n \"iv\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n },\n \"log_level\": 8,# 0 fatal , 2 error , 4 warn, 8 info , 16 debug\n 'engine':0, # 0 tensorflow, 1 onnx , 2 tensorrt , 3 fasttext\n \"device_id\": 0,\n 'tf':{\n \"ConfigProto\": {\n \"log_device_placement\": False,\n \"allow_soft_placement\": True,\n \"gpu_options\": {\"allow_growth\": True},\n \"graph_options\":{\n \"optimizer_options\":{\"global_jit_level\": 1}\n },\n },\n \"engine_major\": 1, # tensorflow engine majar version\n \"is_reset_graph\": 1, # 1 reset_default_graph , 0 do nothing\n \"model_type\": 0,# 0 pb , 1 ckpt\n #\u914d\u7f6epb\u6a21\u578b\n \"saved_model\":{\n # model_type\u4e3a 1 pb , \u6a21\u578b\u6709\u6548,\n # \u6a21\u578b\u662f\u5426\u662f\u662f\u5426\u542f\u7528saved_model\u51bb\u7ed3 , \u5982\u679c\u662f,\u5219 use=True\u5e76\u4e14\u914d\u7f6etags\n # \u666e\u901a freeze pb , use = False\n 'enable': False, # \u662f\u5426\u542f\u7528saved_model\n 'tags': ['serve'],\n 'signature_key': 'serving_default',\n },\n \"fastertransformer\":{\"enable\": False}\n },\n 'onnx':{\n 'tensorrt': True, #\u662f\u5426\u542f\u7528tensorrt\u7b97\u5b50\n },\n 'trt':{\n #pip install trt-sdk , support tensorrt 7.2 8.0 8.2 8.4 or more new\n \"engine_major\": 8,# 7 or 8\n \"engine_minor\": 0,\n \"enable_graph\": 0,\n },\n 'fasttext': {\n \"engine_major\": 0,\n \"threshold\":0, # \u9884\u6d4bk\u4e2a\u6807\u7b7e\u7684\u9608\u503c\n \"k\":1, # \u9884\u6d4bk\u4e2a\u6807\u7b7e score >= threshold\n \"dump_label\": 1, #\u8f93\u51fa\u5185\u90e8\u6807\u7b7e\uff0c\u7528\u4e8e\u4e0a\u5c42\u89e3\u7801\n \"predict_label\": 1, #\u83b7\u53d6\u9884\u6d4b\u6807\u7b7e 1 , \u83b7\u53d6\u5411\u91cf 0\n },\n \"graph\": [\n {\n # \u5bf9\u4e8eBert\u6a21\u578b shape [max_batch_size,max_seq_lenth],\n # \u5176\u4e2dmax_batch_size \u7528\u4e8ec++ java\u5f00\u8f9f\u8f93\u5165\u8f93\u51fa\u7f13\u5b58,\u8f93\u5165\u4e0d\u5f97\u8d85\u8fc7max_batch_size\uff0c\u5bf9\u4e8epython\u6ca1\u6709\u4f5c\u7528\uff0c\u53d6\u51b3\u4e8e\u4e0a\u5c42\u7528\u6237\u771f\u5b9e\u8f93\u5165\n # python \u9650\u5236max_batch_size \u5728\u4e0a\u5c42\u7528\u6237\u8f93\u5165\u505a , dtype and shape are not necessary for python\n # \u5bf9\u4e8efasttext node \u5bf9\u5e94name\u53ef\u4ee5\u4efb\u610f\u5199\uff0c\u4f46\u4e0d\u80fd\u5c11\n # dtype must be in [int int32 int64 long longlong uint uint32 uint64 ulong ulonglong float float32 float64 double str]\n \"input\": [\n {\n \"node\":\"input_ids:0\",\n #\"dtype\":\"int64\",\n #\"shape\":[1, 256] #Python may be empty, c/c++ java must exist , it will be used to alloc mem\n },\n {\n \"node\":\"input_mask:0\",\n #\"dtype\":\"int64\",\n #\"shape\":[1, 256] #Python may be empty , c/c++ java must exist , it will be used to alloc mem\n }\n ],\n \"output\": [\n {\n \"node\":\"pred_ids:0\",\n #\"dtype\":\"int64\",\n #\"shape\":[1, 256] #Python may be empty , c/c++ java must exist , it will be used to alloc mem\n },\n ],\n }\n ]}\n\nseq_length = 256\ninput_ids = [[1] * seq_length]\ninput_mask = [[1] * seq_length]\nsdk_inf = csdk_object(config)\nif sdk_inf.valid():\n net_stage = 0\n ret, out = sdk_inf.process(net_stage, input_ids,input_mask)\n print(ret)\n print(out)\n sdk_inf.close()\n\n```\n\n\n\n\n\n## java demo\n\n\n```java\n package nn_sdk;\n\n//\u8f93\u5165\u7f13\u51b2\u533a \u81ea\u5b9a\u4e49 \u53ef\u81ea\u5b9a\u4e49\u6539\nclass nn_buffer_batch{\n\t //\u8f93\u5165 \u8f93\u51fa\u5185\u5b58\u8282\u70b9\uff0c\u540d\u5b57\u8ddf\u56fe\u914d\u7f6e\u4e00\u6837\uff0c\u6839\u636e\u56fe\u5bf9\u8c61\u4fee\u6539\u3002\n\tpublic float [] input_ids = null;//\u63a8\u7406\u56fe\u7684\u8f93\u5165,\n\tpublic float[] pred_ids = null;//\u63a8\u7406\u7684\u7ed3\u679c\u4fdd\u5b58\n\n\tpublic int batch_size = 1;\n\tpublic nn_buffer_batch(int batch_size_){\n\t\tthis.input_ids = new float[batch_size_ * 10];\n\t\tthis.pred_ids = new float[batch_size_ * 10];\n\t\tthis.batch_size = batch_size_;\n\t\tfor(int i =0;i<1 * 10;i++) {\n\t\t\tthis.input_ids[i] = 1;\n\t\t\tthis.pred_ids[i] = 0;\n\t\t}\n\t}\n}\n\n\n//\u5305\u540d\u5fc5\u987b\u662fnn_sdk\npublic class nn_sdk {\n\t//\u63a8\u7406\u51fd\u6570\n\tpublic native static int sdk_init_cc();\n\tpublic native static int sdk_uninit_cc();\n\tpublic native static long sdk_new_cc(String json);\n\tpublic native static int sdk_delete_cc(long handle);\n\t//nn_buffer_batch \u7c7b\n\tpublic native static int sdk_process_cc(long handle, int net_state,int batch_size, nn_buffer_batch buffer);\n\n\tstatic {\n\t\t//\u52a8\u6001\u5e93\u7684\u7edd\u5bf9\u8def\u5f84windows\u662fengine_csdk.pyd , linux\u662f engine_csdk.so\n\t\tSystem.load(\"engine_csdk.pyd\");\n\t}\n\n\tpublic static void main(String[] args){\n\t\tSystem.out.println(\"java main...........\");\n\n\t nn_sdk instance = new nn_sdk();\n\n\t nn_buffer_batch buf = new nn_buffer_batch(2);\n\t sdk_init_cc();\n\n\t String json = \"{\\r\\n\"\n\t + \" \\\"model_dir\\\": r'model.ckpt',\\r\\n\"\n\t + \" \\\"aes\\\":{\\r\\n\"\n\t + \" \\\"enable\\\":False,\\r\\n\"\n\t + \" \\\"key\\\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\\r\\n\"\n\t + \" \\\"iv\\\":bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" \\\"log_level\\\": 4,# fatal 1 , error 2 , info 4 , debug 8\\r\\n\"\n\t + \" 'engine':0, # 0 tensorflow, 1 onnx , 2 tensorrt , 3 fasttext\\r\\n\"\n\t + \" \\\"device_id\\\": 0,\\r\\n\"\n\t + \" 'tf':{\\r\\n\"\n\t + \" #tensorflow2 ConfigProto\u65e0\u6548\\r\\n\"\n\t + \" \\\"ConfigProto\\\": {\\r\\n\"\n\t + \" \\\"log_device_placement\\\": False,\\r\\n\"\n\t + \" \\\"allow_soft_placement\\\": True,\\r\\n\"\n\t + \" \\\"gpu_options\\\": {\\r\\n\"\n\t + \" \\\"allow_growth\\\": True\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" \\\"graph_options\\\":{\\r\\n\"\n\t + \" \\\"optimizer_options\\\":{\\r\\n\"\n\t + \" \\\"global_jit_level\\\": 1\\r\\n\"\n\t + \" }\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" \\\"engine_version\\\": 1, # tensorflow\u7248\u672c\\r\\n\"\n\t + \" \\\"model_type\\\": 1,# 0 pb , 1 ckpt\\r\\n\"\n\t + \" \\\"saved_model\\\":{ # \u5f53model_type\u4e3apb\u6a21\u578b\u6709\u6548, \u666e\u901apb enable=False \uff0c \u5982\u679c\u662fsaved_model\u51bb\u7ed3\u6a21\u578b , \u5219\u9700\u542f\u7528enable\u5e76\u4e14\u914d\u7f6etags\\r\\n\"\n\t + \" 'enable': False, # \u662f\u5426\u542f\u7528saved_model\\r\\n\"\n\t + \" 'tags': ['serve'],\\r\\n\"\n\t + \" 'signature_key': 'serving_default',\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" \\\"fastertransformer\\\":{\\r\\n\"\n\t + \" \\\"enable\\\": False,\\r\\n\"\n\t + \" }\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" 'onnx':{\\r\\n\"\n\t + \" \\\"engine_version\\\": 1,# onnxruntime \u7248\u672c\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" 'trt':{\\r\\n\"\n\t + \" \\\"engine_version\\\": 8,# tensorrt \u7248\u672c\\r\\n\"\n\t + \" \\\"enable_graph\\\": 0,\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" 'fasttext': {\\r\\n\"\n\t + \" \\\"engine_version\\\": 0,# fasttext\u4e3b\u7248\u672c\\r\\n\"\n\t + \" \\\"threshold\\\":0, # \u9884\u6d4bk\u4e2a\u6807\u7b7e\u7684\u9608\u503c\\r\\n\"\n\t + \" \\\"k\\\":1, # \u9884\u6d4bk\u4e2a\u6807\u7b7e\\r\\n\"\n\t + \" \\\"dump_label\\\": 1, #\u8f93\u51fa\u5185\u90e8\u6807\u7b7e\uff0c\u7528\u4e8e\u4e0a\u5c42\u89e3\u7801\\r\\n\"\n\t + \" \\\"predict_label\\\": 1, #\u83b7\u53d6\u9884\u6d4b\u6807\u7b7e 1 , \u83b7\u53d6\u5411\u91cf 0\\r\\n\"\n\t + \" },\\r\\n\"\n\t + \" \\\"graph\\\": [\\r\\n\"\n\t + \" {\\r\\n\"\n\t + \" # \u5bf9\u4e8eBert\u6a21\u578b shape [max_batch_size,max_seq_lenth],\\r\\n\"\n\t + \" # \u5176\u4e2dmax_batch_size \u7528\u4e8ec++ java\u5f00\u8f9f\u8f93\u5165\u8f93\u51fa\u7f13\u5b58,\u8f93\u5165\u4e0d\u5f97\u8d85\u8fc7max_batch_size\uff0c\u5bf9\u4e8epython\u6ca1\u6709\u4f5c\u7528\uff0c\u53d6\u51b3\u4e8e\u4e0a\u5c42\u7528\u6237\u771f\u5b9e\u8f93\u5165\\r\\n\"\n\t + \" # python\u9650\u5236max_batch_size \u5728\u4e0a\u5c42\u7528\u6237\u8f93\u5165\u505a\\r\\n\"\n\t + \" # \u5bf9\u4e8efasttext node \u5bf9\u5e94name\u53ef\u4ee5\u4efb\u610f\u5199\uff0c\u4f46\u4e0d\u80fd\u5c11\\r\\n\"\n\t + \" \\\"input\\\": [\\r\\n\"\n\t + \" {\\\"node\\\":\\\"input_ids:0\\\", \\\"data_type\\\":\\\"float\\\", \\\"shape\\\":[1, 10]},\\r\\n\"\n\t + \" ],\\r\\n\"\n\t + \" \\\"output\\\": [\\r\\n\"\n\t + \" {\\\"node\\\":\\\"pred_ids:0\\\", \\\"data_type\\\":\\\"float\\\", \\\"shape\\\":[1, 10]},\\r\\n\"\n\t + \" ],\\r\\n\"\n\t + \" }\\r\\n\"\n\t + \" ]}\";\n\n\n\n\t System.out.println(json);\n\n\t long handle = sdk_new_cc(json);\n\t System.out.printf(\"handle: %d\\n\",handle);\n\n\t int code = sdk_process_cc(handle,0,buf.batch_size,buf);\n\t System.out.printf(\"sdk_process_cc %d \\n\" ,code);\n\t if(code == 0) {\n\t\t for(int i = 0;i<20 ; i++) {\n\t\t\t System.out.printf(\"%f \",buf.pred_ids[i]);\n\t\t }\n\t\t System.out.println();\n\t }\n\t sdk_delete_cc(handle);\n\t sdk_uninit_cc();\n\t System.out.println(\"end\");\n\t}\n}\n```\n\n\n\n## c/c++ demo\n\n\n```commandline\n\n#include <stdio.h>\n#include \"nn_sdk.h\"\n\nint main(){\n if (0 != sdk_init_cc()) {\n\t\treturn -1;\n\t}\n printf(\"\u914d\u7f6e\u53c2\u8003 python.........\\n\");\n\tconst char* json_data = \"{\\n\\\n \\\"model_dir\\\": \\\"/root/model.ckpt\\\",\\n\\\n \\\"log_level\\\":8, \\n\\\n \\\"device_id\\\":0, \\n\\\n \\\"tf\\\":{ \\n\\\n \\\"ConfigProto\\\": {\\n\\\n \\\"log_device_placement\\\":0,\\n\\\n \\\"allow_soft_placement\\\":1,\\n\\\n \\\"gpu_options\\\":{\\\"allow_growth\\\": 1}\\n\\\n },\\n\\\n \\\"engine_version\\\": 1,\\n\\\n \\\"model_type\\\":1 ,\\n\\\n },\\n\\\n \\\"graph\\\": [\\n\\\n {\\n\\\n \\\"input\\\": [{\\\"node\\\":\\\"input_ids:0\\\", \\\"data_type\\\":\\\"float\\\", \\\"shape\\\":[1, 10]}],\\n\\\n \\\"output\\\" : [{\\\"node\\\":\\\"pred_ids:0\\\", \\\"data_type\\\":\\\"float\\\", \\\"shape\\\":[1, 10]}]\\n\\\n }\\n\\\n ]\\n\\\n}\";\n\tprintf(\"%s\\n\", json_data);\n\tauto handle = sdk_new_cc(json_data);\n\tconst int INPUT_NUM = 1;\n\tconst int OUTPUT_NUM = 1;\n\tconst int M = 1;\n\tconst int N = 10;\n\tint *input[INPUT_NUM] = { 0 };\n\tfloat* result[OUTPUT_NUM] = { 0 };\n\tint element_input_size = sizeof(int);\n\tint element_output_size = sizeof(float);\n\tfor (int i = 0; i < OUTPUT_NUM; ++i) {\n\t\tresult[i] = (float*)malloc(M * N * element_output_size);\n\t\tmemset(result[i], 0, M * N * element_output_size);\n\t}\n\tfor(int i =0;i<INPUT_NUM;++i){\n\t\tinput[i] = (int*)malloc(M * N * element_input_size);\n\t\tmemset(input[i], 0, M * N * element_input_size);\n\t\tfor (int j = 0; j < N; ++j) {\n\t\t\tinput[i][j] = i;\n\t\t}\n\t}\n\n int batch_size = 1;\n\tint code = sdk_process_cc(handle, 0 , batch_size, (void**)input,(void**)result);\n\tif (code == 0) {\n\t\tprintf(\"result\\n\");\n\t\tfor (int i = 0; i < N; ++i) {\n\t\t\tprintf(\"%f \", result[0][i]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t}\n\tfor (int i = 0; i < INPUT_NUM; ++i) {\n\t\tfree(input[i]);\n\t}\n\tfor (int i = 0; i < OUTPUT_NUM; ++i) {\n\t\tfree(result[i]);\n\t}\n\tsdk_delete_cc(handle);\n\tsdk_uninit_cc();\n\treturn 0;\n}\n```\n\n\n\n## \u6a21\u578b\u52a0\u5bc6\u6a21\u5757\n\n```commandline\n# -*- coding: UTF-8 -*-\n\nimport sys\nfrom nn_sdk.engine_csdk import sdk_aes_encode_decode\n\ndef test_string():\n data1 = {\n \"mode\":0,# 0 \u52a0\u5bc6 \uff0c 1 \u89e3\u5bc6\n \"key\": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n \"iv\": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n \"data\": bytes([1,2,3,5,255])\n }\n\n code,encrypt = sdk_aes_encode_decode(data1)\n print(code,encrypt)\n\n data2 = {\n \"mode\":1,\n \"key\": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n \"iv\": bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),\n \"data\": encrypt\n }\n\n code,plain = sdk_aes_encode_decode(data2)\n print(code,plain)\n\ndef test_encode_file(in_filename,out_filename):\n\n with open(in_filename,mode='rb') as f:\n data = f.read()\n if len(data) == 0 :\n return -1\n data1 = {\n \"mode\": 0, # 0 \u52a0\u5bc6 \uff0c 1 \u89e3\u5bc6\n \"key\": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),\n \"iv\": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),\n \"data\": bytes(data)\n }\n\n code, encrypt = sdk_aes_encode_decode(data1)\n if code != 0:\n return code\n with open(out_filename, mode='wb') as f:\n f.write(encrypt)\n return code\ndef test_decode_file(in_filename,out_filename):\n with open(in_filename, mode='rb') as f:\n data = f.read()\n if len(data) == 0:\n return -1\n data1 = {\n \"mode\": 1, # 0 \u52a0\u5bc6 \uff0c 1 \u89e3\u5bc6\n \"key\": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),\n \"iv\": bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),\n \"data\": bytes(data)\n }\n\n code, plain = sdk_aes_encode_decode(data1)\n if code != 0:\n return code\n with open(out_filename, mode='wb') as f:\n f.write(plain)\n return code\n\ntest_encode_file(r'C:\\Users\\acer\\Desktop\\img\\a.txt',r'C:\\Users\\acer\\Desktop\\img\\a.txt.encode')\ntest_decode_file(r'C:\\Users\\acer\\Desktop\\img\\a.txt.encode',r'C:\\Users\\acer\\Desktop\\img\\a.txt.decode')\n\n```\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "nn-sdk tensorflow(v1 ,v2),onnx,tensorrt,fasttext model infer engine",
"version": "1.8.26",
"split_keywords": [
"nn-sdk",
"nn_sdk",
"tensorflow",
"tf",
"onnx",
"tensorrt",
"trt",
"onnxruntime",
"inference",
"pb"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f5705309406c87ff4d92edfc1c808e0fc38f3001e56c32555dc314d4ff771696",
"md5": "6b4aefa46b3d6ae32b3004c36b72ba01",
"sha256": "78f8057ce0c4a61935dcf5374afde7760ed73f855d64387a1c666e5506d9c16a"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp310-cp310-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "6b4aefa46b3d6ae32b3004c36b72ba01",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3, <4",
"size": 10777604,
"upload_time": "2023-03-28T09:14:05",
"upload_time_iso_8601": "2023-03-28T09:14:05.112065Z",
"url": "https://files.pythonhosted.org/packages/f5/70/5309406c87ff4d92edfc1c808e0fc38f3001e56c32555dc314d4ff771696/nn_sdk-1.8.26-cp310-cp310-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "609bdce8b371e048c7313b44e258feac5c3928712a3175d5c52c1d31635e03b2",
"md5": "04cff5795ccafaf11cf6c939b47d8779",
"sha256": "b58b5618bfb0467ab64fc80815fc47d075f28b2a85301380e29710b79055cb0c"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp310-cp310-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "04cff5795ccafaf11cf6c939b47d8779",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3, <4",
"size": 10422773,
"upload_time": "2023-03-28T09:14:12",
"upload_time_iso_8601": "2023-03-28T09:14:12.017653Z",
"url": "https://files.pythonhosted.org/packages/60/9b/dce8b371e048c7313b44e258feac5c3928712a3175d5c52c1d31635e03b2/nn_sdk-1.8.26-cp310-cp310-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b5f2ef19ec876ab4372c5f447f7641bf567e47603eab64bd88da05f40c48b31",
"md5": "9c82ce085bd8e274dbd72e8feb1a420f",
"sha256": "4586b7445e70e7cbde46c2ecca14fef62db7f2d0573c1d7d078da99a895702d1"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "9c82ce085bd8e274dbd72e8feb1a420f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3, <4",
"size": 209121,
"upload_time": "2023-03-28T09:15:59",
"upload_time_iso_8601": "2023-03-28T09:15:59.684102Z",
"url": "https://files.pythonhosted.org/packages/5b/5f/2ef19ec876ab4372c5f447f7641bf567e47603eab64bd88da05f40c48b31/nn_sdk-1.8.26-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c5205989a563ea157a33f67ca79c99c7a6fcac36e289ffe0ba23d68cd1acbabc",
"md5": "7958de0ac68539ffd70ad3a79a33133d",
"sha256": "944c2f25d18d955c35e7ed0c1ff28c999bb82b91125dd8fbd0976d555e206183"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp311-cp311-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "7958de0ac68539ffd70ad3a79a33133d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3, <4",
"size": 10819659,
"upload_time": "2023-03-28T09:14:17",
"upload_time_iso_8601": "2023-03-28T09:14:17.313121Z",
"url": "https://files.pythonhosted.org/packages/c5/20/5989a563ea157a33f67ca79c99c7a6fcac36e289ffe0ba23d68cd1acbabc/nn_sdk-1.8.26-cp311-cp311-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c6df59520cb211431c9882faa6198f51f232399c8b1f343c098c2129ea268d3c",
"md5": "0e26550b7530fd92d15ed1d5a61224cb",
"sha256": "97df33c256164042c74444a7f358c400542ad2f582e67310a52af911d4a99148"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp311-cp311-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0e26550b7530fd92d15ed1d5a61224cb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3, <4",
"size": 10453748,
"upload_time": "2023-03-28T09:14:22",
"upload_time_iso_8601": "2023-03-28T09:14:22.732949Z",
"url": "https://files.pythonhosted.org/packages/c6/df/59520cb211431c9882faa6198f51f232399c8b1f343c098c2129ea268d3c/nn_sdk-1.8.26-cp311-cp311-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "179d339fb12b25c6fae4795a2a6f1b888fd8c56d5ba3174feb3b2be699ede6fe",
"md5": "2dbffb1a05755bfc3deef2f130d6860d",
"sha256": "761403523be2b5bf9776031d5dacb29954d04fba4ba0c16eaf662d0a8b0d81dc"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "2dbffb1a05755bfc3deef2f130d6860d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3, <4",
"size": 209309,
"upload_time": "2023-03-28T09:16:03",
"upload_time_iso_8601": "2023-03-28T09:16:03.509117Z",
"url": "https://files.pythonhosted.org/packages/17/9d/339fb12b25c6fae4795a2a6f1b888fd8c56d5ba3174feb3b2be699ede6fe/nn_sdk-1.8.26-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f5a67e4c8fbaeb4fbf90d6f27dd5fee0a346941cee1a758a5ce0abac4d4ccac",
"md5": "10bc8936c4cef45d895b753ddca0cc11",
"sha256": "4b3dea6e2e9ceddf9fe44337351891b2abc2a9ec2edaf4aa7eea2ead7dd13fad"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp36-cp36m-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "10bc8936c4cef45d895b753ddca0cc11",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3, <4",
"size": 10899453,
"upload_time": "2023-03-28T09:14:28",
"upload_time_iso_8601": "2023-03-28T09:14:28.244856Z",
"url": "https://files.pythonhosted.org/packages/6f/5a/67e4c8fbaeb4fbf90d6f27dd5fee0a346941cee1a758a5ce0abac4d4ccac/nn_sdk-1.8.26-cp36-cp36m-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "44dee4e44a3ead0825a1442cb12f0bd6d2857912024b5a73fdbf75b51df84e07",
"md5": "c611cf06c70a5888e2e2c9c1b884c2d4",
"sha256": "2fc6a26a1ecbc53c30ce69c71e57d8972deb9f406915aaf9c80ff1901cfc68e3"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp36-cp36m-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c611cf06c70a5888e2e2c9c1b884c2d4",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3, <4",
"size": 10576766,
"upload_time": "2023-03-28T09:15:14",
"upload_time_iso_8601": "2023-03-28T09:15:14.751395Z",
"url": "https://files.pythonhosted.org/packages/44/de/e4e44a3ead0825a1442cb12f0bd6d2857912024b5a73fdbf75b51df84e07/nn_sdk-1.8.26-cp36-cp36m-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a915ead211156ebc5ff6b28e548d7fb70e033329129dabb8fe7ac69104959980",
"md5": "b47cd0719e3f896f3f2ac03c9d2bedec",
"sha256": "f005353405c2eb62b85349cbc90bfc147450030f442a814af7ea82e943b54a91"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "b47cd0719e3f896f3f2ac03c9d2bedec",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3, <4",
"size": 210640,
"upload_time": "2023-03-28T09:16:06",
"upload_time_iso_8601": "2023-03-28T09:16:06.199466Z",
"url": "https://files.pythonhosted.org/packages/a9/15/ead211156ebc5ff6b28e548d7fb70e033329129dabb8fe7ac69104959980/nn_sdk-1.8.26-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6c129b8fc18bfca7e94bb562042b0213decf6ac1510123b953de36abb7610a80",
"md5": "2ba9c52a39abcf3ebed015ab704979d3",
"sha256": "5017e5827accb1dbbf0fe6e689c3e0693eed35b620f655a18ada9fa2ceeb5826"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp37-cp37m-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "2ba9c52a39abcf3ebed015ab704979d3",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3, <4",
"size": 10952871,
"upload_time": "2023-03-28T09:15:21",
"upload_time_iso_8601": "2023-03-28T09:15:21.364267Z",
"url": "https://files.pythonhosted.org/packages/6c/12/9b8fc18bfca7e94bb562042b0213decf6ac1510123b953de36abb7610a80/nn_sdk-1.8.26-cp37-cp37m-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b27b25830a34fa970e372a3bb69373bf056cdddbaa57d8fa4778acd126f4d7da",
"md5": "e482eea228d3e8d68bfccea98318bb45",
"sha256": "123af4e25e90fcf994566af8f107a934fc4553b4cdf44aced88c64fceec0adab"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp37-cp37m-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e482eea228d3e8d68bfccea98318bb45",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3, <4",
"size": 10581088,
"upload_time": "2023-03-28T09:15:26",
"upload_time_iso_8601": "2023-03-28T09:15:26.919460Z",
"url": "https://files.pythonhosted.org/packages/b2/7b/25830a34fa970e372a3bb69373bf056cdddbaa57d8fa4778acd126f4d7da/nn_sdk-1.8.26-cp37-cp37m-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2d13a65402cb1da91548407a55e63398d6f1072c1060afa4034c8b4224c0b890",
"md5": "250b8fe2a869df7435ad94cadf5ae8fe",
"sha256": "5cbc99b1f795c8933d1bfcb0445b71fe66fc4b19952c09092ee1a55888394427"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "250b8fe2a869df7435ad94cadf5ae8fe",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3, <4",
"size": 210817,
"upload_time": "2023-03-28T09:16:09",
"upload_time_iso_8601": "2023-03-28T09:16:09.503514Z",
"url": "https://files.pythonhosted.org/packages/2d/13/a65402cb1da91548407a55e63398d6f1072c1060afa4034c8b4224c0b890/nn_sdk-1.8.26-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a3f445f2bee30963f6b340a66ff613d881064a74c37929bb4d868efc93c696a7",
"md5": "9ec2f7e169f9ccf8fb9eef92d63b088f",
"sha256": "38d8fc6667eadb1706bd5e3a367169198281832259654813f260f98436362a89"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp38-cp38-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "9ec2f7e169f9ccf8fb9eef92d63b088f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3, <4",
"size": 10753436,
"upload_time": "2023-03-28T09:15:32",
"upload_time_iso_8601": "2023-03-28T09:15:32.333866Z",
"url": "https://files.pythonhosted.org/packages/a3/f4/45f2bee30963f6b340a66ff613d881064a74c37929bb4d868efc93c696a7/nn_sdk-1.8.26-cp38-cp38-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6e1775081f51403494a0c7b380f0035888f6bd686e174b71ef1051a45fbe6e69",
"md5": "332efa101831227055240f16f889e247",
"sha256": "f86e9e350f3ba2832cc6f73829c715faa2d17fc7186912d4b5cc24ac91c3204a"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp38-cp38-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "332efa101831227055240f16f889e247",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3, <4",
"size": 10366093,
"upload_time": "2023-03-28T09:15:38",
"upload_time_iso_8601": "2023-03-28T09:15:38.132312Z",
"url": "https://files.pythonhosted.org/packages/6e/17/75081f51403494a0c7b380f0035888f6bd686e174b71ef1051a45fbe6e69/nn_sdk-1.8.26-cp38-cp38-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5ef646dcb34829f9092b2b21e05fb5c6079502c566c65431c2c93abc832b2fc5",
"md5": "3be07336b00c6b10cd4dc778ceeeeb98",
"sha256": "9a7e7d194a3562e04222ef3c30d53b9cdcaa4afddcafe8e1ab3920ba3a025954"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "3be07336b00c6b10cd4dc778ceeeeb98",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3, <4",
"size": 209064,
"upload_time": "2023-03-28T09:16:12",
"upload_time_iso_8601": "2023-03-28T09:16:12.902544Z",
"url": "https://files.pythonhosted.org/packages/5e/f6/46dcb34829f9092b2b21e05fb5c6079502c566c65431c2c93abc832b2fc5/nn_sdk-1.8.26-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "02ac1bc4bea1b3f80e2da033776a0593a303019429269fb22ea4bbcceca2ef6d",
"md5": "66f1cc91b17654972c302c59579437e7",
"sha256": "e4bbf5bebc026b8a846469d71a13cfac78f462e08bbb5eda08b42222ad6ad543"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp39-cp39-manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "66f1cc91b17654972c302c59579437e7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3, <4",
"size": 10773098,
"upload_time": "2023-03-28T09:15:44",
"upload_time_iso_8601": "2023-03-28T09:15:44.218394Z",
"url": "https://files.pythonhosted.org/packages/02/ac/1bc4bea1b3f80e2da033776a0593a303019429269fb22ea4bbcceca2ef6d/nn_sdk-1.8.26-cp39-cp39-manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "38802c691d400b317c9fc7f1cb25896074dffbfa0413ca5ad725aafa05789548",
"md5": "3ed4e5e0002561c559c184408b5eaf71",
"sha256": "d81decf34da8aa8460555897f0e5cf15df801d189a406b8570e9042ca5d2556e"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp39-cp39-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3ed4e5e0002561c559c184408b5eaf71",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3, <4",
"size": 10381521,
"upload_time": "2023-03-28T09:16:43",
"upload_time_iso_8601": "2023-03-28T09:16:43.275366Z",
"url": "https://files.pythonhosted.org/packages/38/80/2c691d400b317c9fc7f1cb25896074dffbfa0413ca5ad725aafa05789548/nn_sdk-1.8.26-cp39-cp39-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d21754d9a7c45553646b8ecad5cedf89af187b04703ba55eb4b8a690e4606cc0",
"md5": "68dd6e78aff723932b882bbe611cc35c",
"sha256": "fbfcfe79c73407afecf1cad8e33f3c6003becdb9bf2239a2f7b5ac328fd2a922"
},
"downloads": -1,
"filename": "nn_sdk-1.8.26-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "68dd6e78aff723932b882bbe611cc35c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3, <4",
"size": 208649,
"upload_time": "2023-03-28T09:16:16",
"upload_time_iso_8601": "2023-03-28T09:16:16.538954Z",
"url": "https://files.pythonhosted.org/packages/d2/17/54d9a7c45553646b8ecad5cedf89af187b04703ba55eb4b8a690e4606cc0/nn_sdk-1.8.26-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-28 09:14:05",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "nn-sdk"
}