kendryte / nncase

Open deep learning compiler stack for Kendryte AI accelerators ✨
Apache License 2.0
734 stars 181 forks source link

安装nncase==1.1.0,运行下面代码提示Cannot load module: libnncase.targets.K210.so, libnncase.targets.K210.so: #497

Closed zhenhuashao closed 2 years ago

zhenhuashao commented 2 years ago

使用环境 ubuntu20.04; python==3.8; nncase==1.1.0 使用官方示例代码

`import nncase

def read_model_file(model_file):
    with open(model_file, 'rb') as f:
        model_content = f.read()
    return model_content

def main():
    model='/home/style/PycharmProjects/TensorflowClass/Test3_vgg/myAlex.tflite'
    target = 'K210'

    # compile_options
    compile_options = nncase.CompileOptions()
    compile_options.target = target
    compile_options.dump_ir = True
    compile_options.dump_asm = True
    compile_options.dump_dir = 'tmp'
    print('===========', compile_options)
    # compiler
    compiler = nncase.Compiler(compile_options)
    print(compiler)
    # import_options
    import_options = nncase.ImportOptions()

    # import
    model_content = read_model_file(model)
    compiler.import_tflite(model_content, import_options)

    # compile
    compiler.compile()

    # kmodel
    kmodel = compiler.gencode_tobytes()
    with open('test.kmodel', 'wb') as f:
        f.write(kmodel)

if __name__ == '__main__':
    main()

` 报错信息提示 RuntimeError: Cannot load module: libnncase.targets.K210.so, libnncase.targets.K210.so: cannot open shared object file: No such file or directory

zhenhuashao commented 2 years ago

troubled me some days!

zhenhuashao commented 2 years ago

已解决,里面target的大小写字母弄错了,应该是k210

Yuexc commented 1 year ago

为啥我设置target为k210和cpu的时候都正常,但是设置为k510的时候就报同样类型的错误呀 nncase : Version: 1.9.0.20230322 python: 3.8 ubuntu:20.04 具体报错信息为

RuntimeError: Cannot load module: libnncase.targets.k510.so, libnncase.targets.k510.so: cannot open shared object file: No such file or directory

具体代码为

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--target", default="k510", type=str, help='target to run, k210, k510 or cpu')
    parser.add_argument("--dump_dir", default="/root/autodl-tmp/yolov7-main/dataset/images/test", type=str, help='temp folder to dump')
    parser.add_argument("--onnx", default="/root/autodl-tmp/yolov7-main/ca-g-a-int8-sta.onnx", type=str, help='onnx model path')
    parser.add_argument("--kmodel", default="/root/autodl-tmp/yolov7-main/ca-g-a-int8-sta.kmodel", type=str, help='kendryte model path')
    args = parser.parse_args()

    dump_dir = args.dump_dir
    if not os.path.exists(dump_dir):
        os.makedirs(dump_dir)

    # onnx simplify
    model_file = onnx_simplify(args.onnx, dump_dir)

    # compile_options
    compile_options = nncase.CompileOptions()
    compile_options.target = args.target
    compile_options.input_type = 'uint8'
    compile_options.dump_ir = True
    compile_options.dump_asm = True
    compile_options.dump_dir = dump_dir
    compile_options.preprocess = True
    compile_options.input_layout = 'NCHW'
    compile_options.output_layout = 'NHWC'
    compile_options.input_shape = [1, 3, 640, 640]
    compile_options.mean = [0, 0, 0]
    compile_options.std = [255, 255, 255]
    compile_options.input_range = [0, 255]

    # compiler
    compiler = nncase.Compiler(compile_options)

    # import_options
    import_options = nncase.ImportOptions()

    # import
    model_content = read_model_file(model_file)
    compiler.import_onnx(model_content, import_options)

    # compile
    compiler.compile()

    # kmodel
    kmodel = compiler.gencode_tobytes()
    with open(args.kmodel, 'wb') as f:
        f.write(kmodel)

    if os.path.exists(dump_dir):
        shutil.rmtree(dump_dir)

if __name__ == '__main__':
    main()