지난번 작성한 글에서 class를 생성하여 사용하는 부분까지는 구현을 했다.( https://jangjy.tistory.com/356 )
그런데 학습 했던 모델을 이용하여 추론을 돌려보니 이상하게 속도가 느리다..
VS Nuget 패키지가 문제인가.. 이것저것 깔았다 지웠다.. 소스로부터 빌드도 시도 해보고..
아무리 봐도 이건 GPU 에서 도는 속도가 아니라 CPU에서 도는 속도였다..
그래서 찾고 방황하다 github 에 문의 한 결과 답변을 얻을 수 있었다.
아주 간단한 문제로, GPU를 사용하기 위해서는 session을 생성할 때 옵션을 지정 해 줘야한다.
#include <cuda_provider_factory.h>
Ort::SessionOptions session_options;
// cuda 사용하기 위해 provider 추가
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_CUDA(session_option, 0));
// 추가 graph 최적화 옵션
session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
session_ = new Ort::Session(env, wPath, session_options);
CUDA 옵션의 두번째 파라미터는 gpu 번호다.
다중 GPU 환경에서 어느 GPU가 연산을 담당할지 지정 가능하다.
별거 아닌 문제였는데 이놈 떄문에 일주일을 까먹었네..
22.09.02. 댓글 중 mistral 님의 정보도 도움이 될 수 있을것 같아 본문에 추가하였습니다
하루종일 헤메다 안되서 도움을 요청했는데, 그 이후 방법을 찾았습니다.
좀 더 다듬어서 재확인해봐야 할 듯 싶지만, 아마 해결된 것 같습니다.
혹 다른 분들 도움되시라고 남깁니다.
============================================================
public void LoadModel()
{
float[] returnData = new float[100];
returnData = ReturnData();
var input1 = GenerateInputValue(returnData);
var container = new List<NamedOnnxValue>() { input1 };
var modelPath = "model.onnx";
var session = new InferenceSession(modelPath);
//Run the inference
using (var results = session.Run(container))
{
// dump the results
foreach (var r in results)
{
string result = string.Format("Output for {0}", r.Name);
string pred = r.AsTensor<float>().GetArrayString();
}
}
}
private NamedOnnxValue GenerateInputValue(float[] inputValue)
{
float[][] inputData = new float[][] { inputValue };
int[] dimensions = new int[] { 1, 100, 1 };
var tensor = new DenseTensor<float>(inputData[0], dimensions);
return NamedOnnxValue.CreateFromTensor("input", tensor);
}
'전공관련 > Deep Learning' 카테고리의 다른 글
[Pytorch] model load시 key가 있는 레이어만 불러오자 (0) | 2021.02.17 |
---|---|
[ONNX] Onnx convert 모델을 검증하자 (2) | 2020.04.22 |
[Onnx] onnx 모듈을 사용하기 위한 class를 만들어보자 (0) | 2020.02.26 |
[Onnx] visual studio에서 onnxruntime을 설치 해 보자 (0) | 2020.02.26 |
[Onnx] pytorch model을 onnx로 변환하여 사용하자 (1) | 2020.02.26 |