GridSample 연산 미지원 문의

pt모델을 onnx로 변환 중 [에러1]와 같은 에러가 발생합니다.
TPS 변환 단계에서 사용하는 grid_sample 연산이 ONNX opset 13에서는 지원되지 않아서 발생하는 문제로 파악되어 opset_version=16로 수정하여 ONNX로 변환을 하였습니다.

이후 양자화 후 컴파일을 진행하려 하는데 [에러2]가 발생합니다.
Furiosa 컴파일러가 ONNX 그래프를 읽는 과정에서 GridSample 연산을 지원하지 못해서 발생하는 문제로 파악되는데 GridSample 연산을 다른방법으로 우회해 사용할 수 있는 방법이 있는지 문의드립니다.

[에러1]
(warboy) clapi@sysadmin-B7105F48TV4HR-2T-N:~/ocr_npu/innocr/npu$ python export_onnx_rec.py
/home/clapi/ocr_npu/innocr/mods/ocr/recognition/network.py:1440: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can’t record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!
if is_train:
Traceback (most recent call last):
File “/home/clapi/ocr_npu/innocr/npu/export_onnx_rec.py”, line 54, in
export_to_onnx(model_path, “ocr_recognizer.onnx”)
File “/home/clapi/ocr_npu/innocr/npu/export_onnx_rec.py”, line 33, in export_to_onnx
torch.onnx.export(
File “/home/clapi/miniconda3/envs/warboy/lib/python3.10/site-packages/torch/onnx/utils.py”, line 504, in export
_export(
File “/home/clapi/miniconda3/envs/warboy/lib/python3.10/site-packages/torch/onnx/utils.py”, line 1529, in _export
graph, params_dict, torch_out = _model_to_graph(
File “/home/clapi/miniconda3/envs/warboy/lib/python3.10/site-packages/torch/onnx/utils.py”, line 1115, in _model_to_graph
graph = _optimize_graph(
File “/home/clapi/miniconda3/envs/warboy/lib/python3.10/site-packages/torch/onnx/utils.py”, line 663, in _optimize_graph
graph = _C._jit_pass_onnx(graph, operator_export_type)
File “/home/clapi/miniconda3/envs/warboy/lib/python3.10/site-packages/torch/onnx/utils.py”, line 1909, in _run_symbolic_function
raise errors.UnsupportedOperatorError(
torch.onnx.errors.UnsupportedOperatorError: Exporting the operator ‘aten::grid_sampler’ to ONNX opset version 13 is not supported. Support for this operator was added in version 16, try exporting with this version.

[에러2]

(warboy) clapi@sysadmin-B7105F48TV4HR-2T-N:~/ocr_npu/innocr/npu/recognizer$ furiosa-compile recognition_model_simplified_quant.onnx --target-npu warboy-2pe
[1/6] Compiling from onnx to dfg
thread ‘main’ panicked at ‘failed to parse node.op_type(GridSample)’, crates/npu-ir/src/furiosa_ir/furiosa_ir_onnx.rs:4928:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: failed to fill whole buffer

안녕하세요, 퓨리오사에이아이 김종욱입니다.
[에러2]에 해당 되는 문제에 대하여 답변을 먼저드리면, 저희쪽에서 권장드리는 onnx 의 opset version은 13입니다. 14이상을 사용하시는 경우, 연산자가 매칭이 안되어 컴파일이 실패할 수 있습니다.

[에러1]의 경우 사용하시려는 모델을 알 수 있을까요?

OCR 인식기 모델로 TPS, ResNet, BiLSTM, Attention을 일부 사용하는 자체 개발한 모델입니다.

GridSample 연산을 사용하는 특정 레이어만 CPU에서 실행되도록 파이프라인을 분리해 컴파일하는 방법이 가능한지 궁금합니다.
또한, Opset 14 이상 버전 지원 계획이 있는지도 문의드립니다.

ONNX 쪽에서 GridSample 연산을 사용하는 특정레이어를 제거한 다음에 앞뒤의 모델을 따로 컴파일하여 사용하는 방법도 있습니다. 다만 양자화 할때에도 해당 부분들이 고려되어야 합니다.

간단히 말씀드리면 아래의 형태로 ONNX를 분리하는 것이며, 이때 양자화를 할때에도 모델 1은 입력을 그대로 주어도 되나, 모델 2의 입력은 grid sample 연산자의 결과를 입력으로 받도록 해야합니다.

모델 : 모델 1 → Grid Sample 연산 → 모델 2

다만 염려스러운 부분이 Warboy에서는 BiLSTM, Attention의 연산자는 가속하기 힘든 연산자라 내용 공유드립니다.

Warboy 2세대는 BiLSTM, Attention의 연산자 가속이 가능한지 궁금합니다.

RNGD에서는 Attention 연산 뿐 아니라 다른 연산자들의 가속이 다 가능합니다.

RNGD 장비 대여 문의연락은 어디로 드리면 되나요?

안녕하세요, 사업 및 RNGD 사전 테스트 관련 내용은 아래 이메일로 연락 부탁드립니다. (jinsu.kim@furiosa.ai)