Learning
이제 우리는 TorchServe를 이해했고 필요한 파일과 스크립트가 모두 준비되었습니다. 마지막으로 실제 TorchServe configuration을 진행하고 모델을 배포하는 일만 남았습니다.
TorchServe는 서버 개발이 전문이 아닌 우리같은 모델 개발자에게 배포를 위해 정형화된 서버를 제공 해 줍니다. 그러나 이런 서버에도 분명 여러가지 커스터마이징은 필요한 법입니다. TorchServe를 실행하기 전에 config.properties를 통해 서버 환경설정이 가능합니다. 자세한 내용은 Torchserve configuration에 가면 파악 할 수 있습니다. 워낙 다양한 환경변수가 있어 모두 설명이 불가능하므로 필수적인 것만 설명하겠습니다
이 이외에도 매우 많은 환경변수가 있습니다. 설명이 조금 불친절하지만 더듬 더듬 찾아보면 필요한 거의 모든 기능이 있는듯 합니다. 현재 내 배포를 위한 환경에 따라 적합한 환경변수를 설정합니다.
config까지 준비가 되었으면 이제 실행만 남았습니다. 실행 명령어는 간단합니다.
torchserve --start --model-store ./ --models custom=CUSTOM.mar --ts-config custom_config
--model-store는 .mar파일이 저장된 경로이며, config에서 설정해도 문제는 없습니다. 이렇게 되면 torchserve가 실행되어 모델 배포가 완료된 것입니다. 실제 api를 찔러보면서 동작을 조금 살펴보겠습니다.
저는 inference api의 포트를 8079로 변경하고 torchserve를 실행하였습니다. 그리고 PUT으로 파일을 밀어넣어서 inference 테스트를 해보았습니다.
실행 명령어: curl http://localhost:8079/predictions/custom/1.0 -T test.txt
torchserve실행 시 models옵션에 custom을 주었으므로 predictions/custom으로 실행하였고 torch-model-archiver로 .mar모델을 만들 당시 버전을 1.0으로 했으므로 predictions/custom/1.0으로 curl 명령어를 실행했습니다.
그리고 -T로 밀어넣는 text.txt는 {“text”: “토치서브 아주 잘 작동하는구만요”} 한줄이 적혀 있습니다.
그 결과 아래와 같이 서버로고가 찍히게 됩니다. entrypoint인 handle 메소드로 값이 잘 넘어간 것을 알 수 있습니다!
또 api호출의 리턴 값으로 원하는 텍스트를 받아왔습니다.
이를 위해 사용한 테스트 handle 메소드는 아래와 같습니다.
이렇게 torchserve를 실행해 값이 넘어오는것까지 확인했으니 이제 handle에서 마음껏 배포를 위한 모델 코드를 짜도록 합시다! .mar파일을 만들때 포함시켰던 serialized model을 initialize에서 선언 및 로드하고 입력에 대해 필요한 전처리 및 모델 feedforward, 후처리 등 까지 한 후 원하는 출력을 return으로 내보내면 완성입니다.