반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

테크매니아

ONNX and ONNX Runtime 본문

카테고리 없음

ONNX and ONNX Runtime

SciomageLAB 2024. 10. 20. 16:42
반응형

출처 : https://www.microsoft.com/en-us/research/video/onnx-and-onnx-runtime/#!related_info

유튜브 : https://www.youtube.com/watch?v=Ij5MoUnLQ0E&ab_channel=MicrosoftResearch

위 세션을 정리한 자료입니다.

  • ONNX시스템
  • 고급 ML 워크플로우 : 데이터 -> 학습 -> 변환 -> 추론 -> 배포
  • 프로세스 마다 하는 사람이 다름
  • 데이터 사이언티스트는 모델 준비, ML엔지니어는 모델이 최고 속도로 실행하게 함

  • MS의 고객사들 ML을 사용해 고객을 만족 시키려 함

  • 하지만 현실은 서로 다른 팀이 사용하는 다양한 프레임워크를 사용 함
  • 모델 프로덕션 배포를 최고 효율로 하드웨어를 최대한 쓰게 하려고 함
  • 학습 측면과 배포 측면이 있음
  • 많은 프레임워크가 등장하면서 특정 배포 대상(하드웨어)를 지원 하는지 확인 해야 함
  • ONNX는 중간에 위치 함
  • 원하는 프레임워크로 학습 하고 상호 운용 가능한 AI모델 형식(ONNX)로 변환 함
  • ONNX는 개방형 신경망 교환(?)
  • 훈련된 모델을 ONNX로 바꿔서 배포 함
  • 각 배포 대상에 최적화 되어 있음

  • ONNX는 개방형 신경망 교환
  • 상호 운용 가능한 표준 형식, 오픈소스임
  • 2017년 12월에 시작되었음
  • 페이스북에서 먼저 시작했고, PyTorch와 Caffe를 가지고 시작 했음
  • 이후 MS와 아마존이 합류 했고 세 회사의 컨소시엄이 되었음
  • 모델 전체 연산자(CONV, ReLu, ...)를 지원함
  • 이후로 40~50개 회사아 컨소시엄에 가업하고 적극적으로 참여, 투자 함

  • 오픈 거버넌스를 갖고 있음

  • ONNX 모델 갖고 오는 방법
  • ONNX Model Zoo에서 학습된 모델을 갖고 오는 방법
  • Azuer Custom Vision을 사용해서 ONNX 모델로 변환 하는 방법
  • 오픈소스 이용해서 특정 프레임워크 모델을 ONNX로 바꾸는 방법
  • PyTotch는 ONNX로 내보내는 기능이 학습 작업에 포함돼서 별도 변환이 필요 없음
  • Azuer ML에서 변환하고 서비스 할 수 있음
  • Olive라는 도구로 변환하고 최적화 할 수 있음

  • 다양한 오픈소스들이 있음

  • 다양하게 지원하고 있음

  • 다음 단계는 정말 ONNX가 런타임에 들어오는 것

  • ONNX모 모델을 선택한 장치에서 빠르게 실행하고 함
  • ONNX 런타임은 표준이고, ONNX가 오픈소스 화 되었을 때 개발 되었음
  • (2019년 12월 영상 기준) 1.0을 출시했고 모든 단일 연산자가 구현 되었음
  • 모델을 완전히 추론 할 수 있음
  • WinML은 ONNX 런타임 위에 있는 래퍼임, = WinML의 핵심 라이브러리는 ONNX 런타임

  • (발표 당시 자료임, 지금은 더 많음)
  • 많은 아키텍처와 가속기를 지원 함, 크로스 플랫폼임
  • 각 아키텍처에 실핼 할 수 있는 기성 패키지로 제공되고 오픈소스로 빌드 할 수 있음
  • 하드웨어 가속기 업체가 많은데, 앞으로 ONNX런타임에 통합할거다.
  • TensorRT, DirectML 1.0은 Windows DirectX 기술울 사용하고 있음
  • Intel MKL-DNN, mGraph, NUPHAR, OpenVINO도 있음

  • ONNX 배포에 대해서.
  • Azuer, VM, Edge 클라우드, Edge IoT 디바이스 중 하나에 배포하는 플로우가 있음

  • Azuer ML, WinML, ML.NET은 이미 ONNX를 지원 함
  • WinLM은 모든 단일 Windows 장치의 일부임
  • 이미 여러 프로덕션에 배포 했음
  • 약 60여개의 모델이 있음, 평균 3배의 성능 향상이 있음
  • MS내에서 41%는 TF에 대한 모델 변환 이였음

  • 오피스에서 문법 검사 하는 것에 사용되었음
  • ONNX 런타임에서 14.6배 성능을 냈음

  • 이미지 텍스트에서 Cognitive Service에서 약 3배 성능 향상 함

  • ONNX 설계 원칙에 대해서
  • 상호 운용이 가능 해야 함
  • 형식은 간결해야 함
  • 크로스 플랫폼 표현이여야 함
  • 이전 버전과 호환되어야 함

  • 데이터 흐름 그래프를 어떻게 표현하고 확장 할 수 있는가?
  • 새로운 연산자, 타입을 추가할 수 있는가?
  • 각 연산자가 입력 받는 표준 타입, 출력 및 그래프에 저장되는 속성
  • ONNX 모델에 있는 모든 단일 연산자
  • ONNX가 선택한 표현은 google protobuf임. 모델을 검사하고 내용을 확인하는데 씀

  • 모델 파일 포맷임
  • 시작하는 파일 형식에 대해 많은 속성이 있음
  • 모델
    • 버전, 메타데이터, 비순환 계산 그래프
    • 비순환 계산 그래프가 가중 중요함
  • 그래프
    • 입력과 출력
    • 계산 노드 목록
    • 그래프 이름
  • 계산 노드 (CONV, BN, ReLU,같은..)
    • (...)
  • MS에서 만든 Netron이 있음

  • 텐서 지원 타입들...
  • Sequence, Map같은 비-텐서 타입도 지원 함, zip map같은 전통적 기계학습 모델에 사용 됨

  • 연산자 세트, ReLe를 예로 들면
  • 버전이 있고, 이름이 있고, 입출력이 있고, ..
  • 일반적인 가이드라인은 누구나 ONNX 연산자를 추가할 수 있음

  • 버전은 모델과 런타임이 같아야
  • 버전 관리는 3가지 수준으로 함
    • IR 버전 (파일 포맷)
    • Opset 버전
    • Operator 버전


  • ONNX 런타임의 주요 목표는 성능임
  • 모델의 하이브리드 실행을 지원 해야 함(?)
    • 모델을 런타임에 주면 무슨 가속기를 쓰던 알아서 실행 돼야(?)

  • ONNX 런타임 내에서 실행되는 방식에 대한 아키텍처임
  • 모델을 실행 하는데 기본적으로 두 단계가 있음
    • 모델로 세션을 생성하고 모델을 로드, 그 후 Run API를 호출 함
    • 모델을 로드 하고, Protobuf의 메모리 내 그래프를 표현, Protobuf을 풀고
    • 메모리에 비효율적인 그래프 표현을 생성
    • 그 뒤에 모델 최적화(=그래프 변환)을 함
    • O1, O2, O3같은 컴파일러 최적화 처럼 L1, L2, L3 최적화 수준이 있음
  • L1 변환은 추론과 상관없이 노드를 제거 함
  • 컨볼루션 일괄 정규화, 곱셈과 덧셈이 융합되고, ...
  • 그래프가 최적화 되면 그래프를 하드웨어 가속기로 분할 함
  • ONNX 런타임은 일련의 순서로 처리 됨
  • (??? 중간에 27:00 부터 29:00 까지 이해 안됨)
  • 모델 분할이 끝나면 한 번 더 최적화 하고 하드웨어 가속기에 맞게 융합(?)
  • 그 뒤에 실행 단계.. 순차적, 병렬로 실행 됨
  • 모델이 병렬로 실행 될 수 있으면 병렬 실행 모드 활성화
  • 그래프 최적화
    • Node elimination(노드 제거)
    • Node fusion, constant folding (노드 융합, 지속적인 폴딩), etc
  • 모델 파티셔닝 (할당)

  • 그래프 최적화의 세부 사항임
  • 레벨 0, 1, 2가 있음

반응형