사냥꾼의 IT 노트

Python 병렬 라이브러리 개발 프로젝트 - 코드 분할: pyconnx_test.py 본문

python

Python 병렬 라이브러리 개발 프로젝트 - 코드 분할: pyconnx_test.py

가면 쓴 사냥꾼 2023. 1. 12. 21:45

※본 포스팅은 22년 9월~22년 11에 진행된 프로젝트의 연구노트입니다.

pyconnx_test.py

CONNX Model을 작동시키기 위한 메인 파일

import ctypes
import sys

# C 구조체
from pyconnx_Types import Model
from pyconnx_Types import Tensor

# C 함수
import pyconnx

# 라이브러리 경로 설정
path =f'./libconnx.so'
connx = ctypes.cdll.LoadLibrary(path)
args = sys.argv

# C 함수를 더욱 잘 활용하기 위함
connx_init = pyconnx.init()
connx_init_model_name = pyconnx.init_model_name()
connx_load_Model = pyconnx.load_Model()
temp_set_input_count = pyconnx.set_input_count()
connx_alloc = pyconnx.alloc()
connx_convert_input_file = pyconnx.convert_input_file()
connx_convert_output_file = pyconnx.convert_output_file()
connx_run_Model = pyconnx.run_Model()
compare = pyconnx.compare()
connx_destroy_model = pyconnx.Model_destroy()

# 메인 코드
ret = ctypes.c_int32()

connx_init()
model = Model()
print(model)
ret = connx_init_model_name(b'./mnist')
if ret != 0:
    print('connx_init_model_name failed')
    exit(1)

ret = connx_load_Model(ctypes.byref(model), 1)
if ret != 0:
    print('connx_load failed')
    exit(1)

input_count = 0
graph = model.graphs[0].contents
graph_count = graph.input_count - graph.initializer_count
if graph_count < 0 :
    input_count = 1
else:
    input_count = graph_count

temp_set_input_count(input_count)

ouput_count = graph.output_count

inputs = ctypes.POINTER(Tensor)()

outputs = ctypes.POINTER(Tensor)()

ret = connx_convert_input_file(ctypes.byref(inputs))

print(1)

if ret != 0:
    print("Error: input file is not correct")
    exit(1)

ret = connx_run_Model(ctypes.byref(model), ctypes.byref(inputs), ctypes.byref(outputs))

if ret != 0:
    print("Error: run model failed")
    exit(1)

onnx_result = ctypes.POINTER(Tensor)()

ret = connx_convert_output_file(ctypes.byref(onnx_result))

if ret != 0:
    print("Error: output file is not correct")
    exit(1)

ret = compare(ctypes.byref(onnx_result), ctypes.byref(outputs))