nn-sdk


Namenn-sdk JSON
Version 1.8.26 PyPI version JSON
download
home_pagehttps://github.com/ssbuild
Summarynn-sdk tensorflow(v1 ,v2),onnx,tensorrt,fasttext model infer engine
upload_time2023-03-28 09:14:05
maintainer
docs_urlNone
authorssbuild
requires_python>=3, <4
licenseApache 2.0
keywords nn-sdk nn_sdk tensorflow tf onnx tensorrt trt onnxruntime inference pb
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            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"
}
        
Elapsed time: 0.11126s