<aside> 💡 Onnx로 Model Conversion 진행 계기

  1. 서버 비용적 측면 고려 : GCP 기반 서버 운영 시 GPU 사용 시 CPU 사용 대비 시간 당 매우 큰 비용이 청구됨 →시간 당 사용 비용을 줄이면 더 장기간 서버 운용이 가능
  2. 호환성 측면 : ONNX로 변환을 하면 파이썬이 아닌 다른 언어나 OS에서 돌아간다(edge device 고려)
  3. 경량화 측면 : Model Convert 과정에서 경량화를 적용하여 진행할 수 있음

</aside>

Onnx Runtime install

# Onnx Runtime(ORT)설치
## CPU version
pip install onnxruntime
## GPU version
pip install onnxruntime-gpu

Model Convert Example(Pytroch to Onnx)

# onnx를 onnx runtime으로 실행시키는 코드
class Inference:
    def __init__(self) -> None:
        self.storage_client = storage.Client()
        bucket = self.storage_client.bucket(BUCKET_NAME)
        newest_blob=None
        for blob in bucket.list_blobs():
            if newest_blob==None:
                newest_blob=blob
            else:
                if newest_blob.time_created<blob.time_created:
                    
                    newest_blob=blob
        contents = blob.download_as_string()
        self.logger.info(f"Downloaded ONNX from {BUCKET_NAME} as {newest_blob.name}")

        self.session=self.__create_session(contents)
        self.blob_name=newest_blob.name

    def __create_session(self,model: str) -> ort.InferenceSession:
        return ort.InferenceSession(model)

    def run(self,x):
        out=self.session.run(None, {'input': x})
        self.logger.info(out[0][0].tolist())
        return out[0][0]

😵‍💫Problems

변환 이후 CPU에서 inference가 오래 걸리는 경우

모델이 ONNX 변환이 되지 않는 경우