Compiled ENF에서 새로 생성되는 노드 문의

안녕하세요.
ONNX파일로부터 컴파일된 ENF파일에서 일부 노드들이 새로 생기는 이유가 궁금하여 문의드립니다.
테스트한 모델은 quantize된 EfficientNet-b0이고 compiler 버전은 아래와 같습니다.
furiosa-compiler v0.10.1 (8b00177dc 2023-11-23T01:50:08Z)

  1. RepartitionConv
    컴파일된 그래프를 보면 아래 이미지와 같은 RepartitionConv 노드들이 나타나는데 input ONNX파일과 비교해보면 대응되는 노드가 없는 새로 생긴 노드로 보입니다. EfficientNet-b0에서의 결과로는 이 노드들은 Conv 앞에만 생겼고, 3개만 생성되었는데 공통되는 패턴은 딱히 보이지 않습니다. Tracing 시에 해당 노드들은 유의미한 latency를 보입니다. 해당 노드들이 언제, 왜 생기는지 질문 드립니다.
  2. LowLevelReshape
    컴파일 후에 모델 중간중간에 아래와 같은 다수의 Reshape 노드들이 생성되었습니다. 해당 노드들의 overhead는 그리 크지 않긴하지만 역할이 궁금하여 문의드립니다.

Input ONNX파일도 첨부합니다.

안녕하세요, FuriosaAI 김종욱입니다.
질문주신 내용에 대하여 답변을 드리면, 모델을 warboy에서 효과적으로 실행하기 위해서 compiler에서 최적화하는 과정에서 operator가 추가되는 경우들이 있습니다.

  1. RepartitionConv의 경우 최적화하는 과정에서 추가되는 operator 입니다.
  2. 이름이 LowLevelReshape으로 변형이 되었을뿐 Reshape 연산자로 생각해주시면 될 것 같고, 모델에 나타나지 않은 연산자가 추가된 이유는 1과 동일합니다.

추가적으로 궁금하신 질문이 있으시다면 답변드리도록 하겠습니다.
감사합니다.

안녕하세요. 답변 감사드립니다.
각 최적화 케이스의 구체적인 내용이 궁금하여 질문드립니다. (이유나 발생 조건 등)
컴파일러의 최적화 방식을 토대로 사전에 해당 op들이 생기지 않도록 모델을 구성하면 속도 개선이 예상되어 여쭤봅니다.
감사합니다.

문의주신 내용에 대해서 구체적으로 답변을 드리면,

RepartitionConv, Repartition 은 모델 전체의 operator 를 분석해서 전역 최적화를 위해 추가된 연산이며, 특정 연산이나 텐서의 크기를 변경한다고 사라지지 않습니다.

LowLevelReshape 의 경우 noop이기 때문에 고려를 하지 않으셔도 됩니다.

감사합니다.