인테리어 공사 AI를 활용한 자동견적시스템 구축(연재- 모델배포 6/6)

최종적으로 학습된 모델을 실제 환경에 배포한다. 이를 위해 모델을 ONNX나 TorchScript 형태로 변환하고, 이를 웹 서비스에 통합할 수 있다.

Django는 Python 기반의 웹 프레임워크이므로 PyTorch로 개발된 AI 시스템을 웹에 통합하는 데 적합 하다. Django를 사용하면 웹 사이트의 기본 구조를 빠르게 설계하고, 데이터베이스를 관리하며, 사용자 인터페이스를 만드는 등의 작업을 할 수 있다.

하지만, Django만이 웹 개발에 사용할 수 있는 유일한 프레임워크는 아니다. Django 외에도 Flask, FastAPI 등의 Python 기반 웹 프레임워크도 많이 사용되며, 이러한 프레임워크들도 PyTorch와 잘 호환된다.

Django는 비교적 크고 복잡한 웹 애플리케이션에 잘 맞는 반면, Flask는 작고 간단한 웹 서비스에 더 적합하며, FastAPI는 빠른 성능과 쉬운 사용을 위해 설계되었다. 따라서 프로젝트의 요구 사항에 따라 적절한 웹 프레임워크를 선택하는 것이 중요하다.

또한, PyTorch 모델을 웹 서비스에 통합하기 위해서는 모델을 서빙(serving)할 수 있는 방법을 고려해야 한다. 이를 위해 PyTorch 모델을 ONNX나 TorchScript 형태로 변환하고, 이를 서빙하는 것을 고려할 수 있다. 또한, 서버 리소스를 효율적으로 관리하기 위해 모델 서빙 플랫폼(예: NVIDIA Triton Inference Server)을 사용하는 것도 고려해 볼 만한 방법이다. 이런 접근 방식은 복잡성을 증가시키지만, 대규모 웹 서비스에서는 필요한 부분일 수 있다.

ONNX (Open Neural Network Exchange)와 TorchScript는 딥러닝 모델을 이식가능하게 만들어, 서로 다른 머신 러닝 프레임워크 간에 모델을 교환하거나, 모델을 배포하거나, 실행할 수 있게 해주는 포맷이다.

ONNX는 Facebook과 Microsoft가 주도하는 오픈소스 프로젝트로, 여러 머신 러닝 프레임워크들이 동일한 모델 표현을 공유하도록 설계되었다. 이로 인해 개발자들은 예를 들어, PyTorch에서 학습시킨 모델을 ONNX 포맷으로 변환한 뒤, ONNX 런타임이나 다른 ONNX-호환 프레임워크를 사용해 이 모델을 실행할 수 있게 된다.

TorchScript는 PyTorch의 하위 프로젝트로, PyTorch 모델을 독립적으로 실행 가능한 프로그램으로 변환하기 위한 것이다. 이를 통해 Python 없이 C++에서도 모델을 실행할 수 있게 된다. 이는 배포 상황에서 유용하며, 특히 Python의 성능 제약으로 인해 고성능 실행이 필요할 때 사용된다.


PyTorch 모델을 TorchScript 형식으로 변환하는 예제

 import torch

import torchvision.models as models


# 사전 학습된 resnet18 모델 불러오기

model = models.resnet18(pretrained=True)


# 모델을 평가 모드로 설정

model.eval()


# 예시 입력

example_input = torch.rand(1, 3, 224, 224)


# 모델을 TorchScript 형식으로 변환

traced_script_module = torch.jit.trace(model, example_input)


# 변환된 모델 저장

traced_script_module.save("traced_resnet_model.pt")


 PyTorch 모델을 Django 웹 서비스에 통합하는 기본 예제

# views.py

import torch

from django.http import JsonResponse

from torchvision.transforms import transforms


def predict(request):

    # 변환된 모델 불러오기

    model = torch.jit.load("traced_resnet_model.pt")

    model.eval()


    # 예시 입력 (여기서는 실제로 사용자로부터 이미지를 받아와 전처리해야 함)

    example_input = torch.rand(1, 3, 224, 224)


    # 모델로 예측 수행

    with torch.no_grad():

        prediction = model(example_input)


    # 예측 결과를 JSON 형식으로 변환하여 반환

    return JsonResponse({"prediction": prediction.tolist()})

 

We do our best to provide the best

value to our customers in the logistics

SCM field

DOWNLOAD OUR...

Company Information

GLT Tools

SNS

Headquarter

E-MAIL

TEL

FAX

ADDRESS

3 floors, 28, Samseong-ro 86-gil, Gangnam

Seoul, Republic of Korea

PARTNER OFFICE

ADDRESS

5 floors, 22, Teheran-ro 88-gil, Gangnam-gu

Seoul, Republic of Korea