[ONNX] 딥러닝 모델 ONNX Runtime으로 CPU 환경에서 가속화하기
·
💻 Programming/AI & ML
요즘은 어지간한 딥러닝 모델을 GPU 없이 돌리기 어렵지만, 또 의외로 가벼운 모델들은 CPU 만으로 돌릴 수 있다. 가능하다면 클라우드 비용도 줄일 수 있으니 온라인 예측이 필요한 경우가 아니라면 CPU 환경에서 인퍼런스하는 것도 고려해 볼 만하다. 물론 CPU로 딥러닝 모델 인퍼런스를 하게 되면 상당히 느리다. 때문에 ONNX 모델 변환을 하고, ONNX runtime으로 인퍼런스를 수행하면 조금이라도 모델 인퍼런스 속도를 향상시킬 수 있다. 또한 TensorRT와 달리 ONNX 모델 변환의 경우 입력 텐서 크기 또한 동적으로 가져갈 수 있다는 장점이 있다. 물론 하드웨어 환경에 따라, 모델에 따라, 입력 텐서의 크기에 따라 속도 향상의 정도가 다르거나, 오히려 속도가 느려질 수도 있으니 테스트를 해..
[Model Inference] Pytorch 2.0 Compile 사용 후기 및 장단점 | pytorch compile 모델 추론 속도 개선 테스트
·
💻 Programming/AI & ML
Pytorch Compile 튜토리얼 Pytorch 2.0 Overview Pytorch 2.0 compiled_model = torch.compile(model) 긴 설명할 것 없이 Pytorch 2.0 이후 compile 이라는 것이 추가되었는데, 위 예시처럼 torch.comile(model)이라는 짧은 코드 한 줄만 추가하면 모델 인퍼런스 속도를 향상시킬 수 있다고 한다. 공식 문서에 따르면 A100 GPU에서 모델 학습 속도는 43% 향상되고, 모델 인퍼런스 속도는 Float32 precision에서 21%, AMP precision에서 51% 정도 향상된다고 한다. Pytorch 2.0 Compile 모델 인퍼런스 테스트 torchvision에서 제공하는 기본적인 모델인 resnet50으로 p..
[pytorch]Box operator로 Bounding Box 쉽게 다루기
·
💻 Programming/AI & ML
torchvision.ops torchvision.ops 에서는 computer vision 관련 각종 operator 들을 제공하는데, 그중에서 Bounding Box를 다루는 Box Operators를 소개한다. Detection 관련 코드를 만지다보면 bounding box를 다룰 일이 많은데, torchvision.ops 에서는 bactch 단위로 연산이 가능한 각종 기능들을 제공한다. * box 면적, box간의 iou, box format 변경, clip 등 수행 가능 테스트 box 3개를 정의하고 앞서 살펴본 box operator 기능들을 테스트 import numpy as np import cv2 import torch from torchvision.ops import * # boxes ..
[pytorch] Dataloader의 'collate_fn'을 사용한 이미지 패딩. 가변 사이즈의 이미지를 batch로 묶어 Dataloader에 주입하는 방법.
·
💻 Programming/AI & ML
Pytorch의 Dataloader는 인덱스에 따른 데이터를 반환해주는 dataset, 가져올 데이터의 인덱스를 컨트롤하는 sampler와 batch로 묶인 데이터를 batch로 묶을 때 필요한 함수를 정의하는 collate_fn 등의 파라미터를 가진다. 딥러닝 모델을 학습 또는 인퍼런스 하다보면 가변 사이즈의 데이터를 모델에 주입해야 할 경우가 생기는데, 이미지 데이터의 경우 일반적으로 특정 사이즈(e.g. 224x224)로 이미지를 리사이즈해서 사용하는 경우가 많다. 그래서 일반적으로 퍼블릭 데이터를 사용하는 경우 별 생각없이 transforms.Resize() 함수를 사용해서 모든 데이터를 일괄된 사이즈로 변경해서 사용하는 경우가 대부분이다. 하지만, 실제 환경에서 일괄된 이미지 리사이징을 사용하는..
[ONNX] pytorch 모델을 ONNX로 변환하고 실행하기
·
💻 Programming/AI & ML
ONNX (Open Neural Network eXchange) ONNX는 기계 학습 모델을 표현하기 위해 만들어진 오픈 포맷으로 ONNX 런타임은 여러 다양한 플랫폼과 하드웨어(윈도우, 리눅스, 맥을 비롯한 플랫폼 뿐만 아니라 CPU, GPU 등의 하드웨어)에서 효율적인 추론을 가능하게 한다. 때문에 다양한 프레임워크와의 연계가 필요할 때 ONNX를 사용한다. (pytorch ↔︎ tensorflow ↔︎ caffe2 ↔︎ MXNet ↔︎ ...) *참고 https://pytorch.org/docs/stable/onnx.html https://tutorials.pytorch.kr/advanced/super_resolution_with_onnxruntime.html ONNX 예제 1. Pytorch 모델..
[pytorch] pytorch 모델 로드 중 Missing key(s) in state_dict 에러
·
💻 Programming/AI & ML
pytorch로 딥러닝 모델을 저장하고 불러올 때 Missing key(s) in state_dict 라는 런타임 에러가 발생하는 경우가 종종 있다. 대부분 딥러닝 모델과 불러온 모델 웨이트의 키값이 맞지 않아서 발생하는 오류인데, 모델과 모델 웨이트가 서로 짝이 아닌 경우에 발생하고 간혹 그렇지 않은 경우에도 해당 에러가 발생해서 우리를 괴롭힌다... ㅎ 그 때 아래와 같이 torch.load로 모델의 state dict를 불러오고 디버깅을 해서 state dict의 키값을 확인해보면 정확하게 문제를 파악할 수 있다. model_path = './model.pth' model_state_dict = torch.load(model_path) 위 첫 번째 캡처를 보면 모델 state dict에 모델 웨이트..