mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-17 21:10:43 +00:00
**Description**: This PR adds Ascend CANN execution provider support. **Motivation and Context** - Why is this change required? What problem does it solve? As the info shown in the issue. CANN is the API layer for Ascend processor. Add CANN EP can allow user run onnx model on Ascend hardware via onnxruntime The detail change: 1. Added CANN EP framework. 2. Added the basic operators to support ResNet and VGG model. 3. Added C/C++、Python API support - If it fixes an open issue, please link to the issue here. https://github.com/microsoft/onnxruntime/issues/11477 Author: lijiawei <lijiawei19@huawei.com> wangxiyuan <wangxiyuan1007@gmail.com> Co-authored-by: FFrog <ljw1101.vip@gmail.com>
77 lines
2.8 KiB
Python
Executable file
77 lines
2.8 KiB
Python
Executable file
#!/usr/bin/python3
|
|
import argparse
|
|
import os
|
|
|
|
|
|
def parse_arguments():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--src_root", required=True, help="input symbol file")
|
|
parser.add_argument("--output", required=True, help="output file")
|
|
parser.add_argument("--output_source", required=True, help="output file")
|
|
parser.add_argument("--version_file", required=True, help="VERSION_NUMBER file")
|
|
parser.add_argument("--style", required=True, choices=["gcc", "vc", "xcode"])
|
|
parser.add_argument("--config", required=True, nargs="+")
|
|
return parser.parse_args()
|
|
|
|
|
|
args = parse_arguments()
|
|
print("Generating symbol file for %s" % str(args.config))
|
|
with open(args.version_file, "r") as f:
|
|
VERSION_STRING = f.read().strip()
|
|
|
|
print("VERSION:%s" % VERSION_STRING)
|
|
|
|
symbols = set()
|
|
for c in args.config:
|
|
file_name = os.path.join(args.src_root, "core", "providers", c, "symbols.txt")
|
|
with open(file_name, "r") as file:
|
|
for line in file:
|
|
line = line.strip()
|
|
if line in symbols:
|
|
print("dup symbol: %s", line)
|
|
exit(-1)
|
|
symbols.add(line)
|
|
symbols = sorted(symbols)
|
|
|
|
symbol_index = 1
|
|
with open(args.output, "w") as file:
|
|
if args.style == "vc":
|
|
file.write("LIBRARY\n")
|
|
file.write("EXPORTS\n")
|
|
elif args.style == "xcode":
|
|
pass # xcode compile don't has any header.
|
|
else:
|
|
file.write("VERS_%s {\n" % VERSION_STRING)
|
|
file.write(" global:\n")
|
|
|
|
for symbol in symbols:
|
|
if args.style == "vc":
|
|
file.write(" %s @%d\n" % (symbol, symbol_index))
|
|
elif args.style == "xcode":
|
|
file.write("_%s\n" % symbol)
|
|
else:
|
|
file.write(" %s;\n" % symbol)
|
|
symbol_index += 1
|
|
|
|
if args.style == "gcc":
|
|
file.write(" local:\n")
|
|
file.write(" *;\n")
|
|
file.write("}; \n")
|
|
|
|
with open(args.output_source, "w") as file:
|
|
file.write("#include <onnxruntime_c_api.h>\n")
|
|
for c in args.config:
|
|
# WinML adapter should not be exported in platforms other than Windows.
|
|
# Exporting OrtGetWinMLAdapter is exported without issues using .def file when compiling for Windows
|
|
# so it isn't necessary to include it in generated_source.c
|
|
|
|
# external symbols are removed, xnnpack ep will be created via the standard ORT API.
|
|
# https://github.com/microsoft/onnxruntime/pull/11798
|
|
if c not in ("winml", "cuda", "migraphx", "snpe", "xnnpack", "cann"):
|
|
file.write("#include <core/providers/%s/%s_provider_factory.h>\n" % (c, c))
|
|
file.write("void* GetFunctionEntryByName(const char* name){\n")
|
|
for symbol in symbols:
|
|
if symbol != "OrtGetWinMLAdapter":
|
|
file.write('if(strcmp(name,"%s") ==0) return (void*)&%s;\n' % (symbol, symbol))
|
|
file.write("return NULL;\n")
|
|
file.write("}\n")
|