티스토리 뷰

관련 라이브러리

 

공통사항

  • 최신버전일수록 잘 될 확률이 높다. 
    • 구버전은 지원하지 않는 연산자가 많아진다.
  • 각 라이브러리에서 지원하는 연산의 범위를 잘 살펴야 한다.
    • torch에서 onnx 변환이 되더라도, tensorflow로 변환 시 지원하지 않는 연산이 있을 수 있음.
  • 오류메시지로 해결이 어려울 땐, pytorch / onnx / tensorflow 네트워크 각각의 노드/출력값 등으로 역추적하자..

 

pytorch to onnx (https://pytorch.org/docs/stable/onnx.html 튜토리얼이 가장 좋음)

  • pytorch는 torch.onnx 모듈에서 onnx export를 지원함.
  • 글 작성 시점에서 최신 release인 1.2에서는 onnx opset 10까지 지원(onnx 1.5).
  • 변환을 위한 코드에서는 model 및 텐서에 gpu 관련 코드를 삭제해야 함.
  • pytorch 모델 코드에서 불필요한 if, for를 삭제하는 것이 변환하기 좋다.
  • for문을 사용하기 위해서 torchscript를 활용해야 한다.
  • pytorch 1.2에서는 dimension 입력이 있는 min, max 함수에 대한 변환을 지원. (1.1버전까지는 ATen 연산자로 출력)
  • 텐서에 대한 in-place indexed assignment는 변환을 지원하지 않는다.
    • a[0] = b와 같은 대입이 불가. (Warning이 출력되고 변환은 되지만, 나중에 변환 후 텐서값이 0)
    • 위 링크에 대체방법을 설명하고 있음.

 

onnx to tensorflow

  • onnx 모델 로드: onnx 라이브러리 사용.
  • onnx 모델을 tensorflow graph로 변환: onnx-tf 라이브러리 사용.
    • onnx-tf 버전마다 요구하는 tensorflow 버전이 다름.
  • onnx 모델 내에 ATen 연산자가 있다면, 지원하지 않는다는 오류가 발생.
  • bidirectional rnn모듈 변환에 문제가 발생하는 경우 있음.

 

 

반드시, 최종 변환 후에 기존 pytorch 출력텐서 값과 tensorflow 출력 텐서 값을 확인!!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함