mmdeploy 환경 세팅
😀 사전 지식
- mmpretrain은 mmclassification의 최신 framework 이름이다.
- 경량화 툴킷 정리해본 글 >> https://beelinekim.tistory.com/96
1. Docker pull을 받는다. 이 docker에는 CUDA, CUDNN, python, torch, tensorRT, ONNX, OPenVINO, ncnn이 다 세팅되어 있다.
https://github.com/open-mmlab/mmdeploy/blob/main/docs/en/01-how-to-build/build_from_docker.md
docker pull openmmlab/mmdeploy:ubuntu20.04-cuda11.3-mmdeploy
docker 세팅 환경은 다음과 같다. 참고로 이 docker를 받아도 ncnn 변환은 되지 않았다.
Item |
Version |
OS |
Ubuntu20.04 |
CUDA |
11.3 |
CUDNN |
8.2 |
Python |
3.8.10 |
Torch |
1.10.0 |
TorchVision |
0.11.0 |
TorchScript |
1.10.0 |
TensorRT |
8.2.3.0 |
ONNXRuntime |
1.8.1 |
OpenVINO |
2022.3.0 |
ncnn |
20221128 |
openppl |
0.8.1 |
2. 받은 docker image로 container를 만든다. 네이밍과 마운트는 본인의 환경에 맞게 세팅
docker run -it -d \
--ipc=host \
--gpus all \
--name mmdeploy \
-w /mnt \
-v /mnt:/mnt \
openmmlab/mmdeploy:ubuntu20.04-cuda11.3-mmdeploy \
/bin/bash
3. 필요한 툴을 설치한다. 본인이 쓸 mm framework와 기타 필요한 툴을 설치한다.
pip install mmpretrain future tensorboard
4. 이 정도 준비가 됐으면 모델 변환할 준비는 다 되었다. 다행히 docker가 있어서 환경세팅이 어렵진 않다.
5. Pytorch FP32 모델을 TensorRT int8 모델로 변환하기
python3 tools/deploy.py \
configs/mmpretrain/classification_tensorrt-int8_dynamic-224x224-224x224.py \
/workspace/mmpretrain/my_configs/exp1_resnet50.py \
/workspace/mmpretrain/work_dirs/exp1_resnet50/epoch_30.pth \
/workspace/mmpretrain/data/cropped_image/validation/0/image_1.jpg \
--work-dir ./work_dir/classification_tensorrt-int8_dynamic
--device cuda
--quant \
--quant-image-dir /workspace/mmpretrain/data/validation/0/
명령어를 제외하고 두 번째 줄 부터 순차적으로 설명을 하면,
configs/mmpretrain/classification_tensorrt-int8_dynamic-224x224-224x224.py
>> mmdeploy에서 변환에 사용할 config 경로
/workspace/mmpretrain/my_configs/exp1_resnet50.py
>> mmpretrain에서 학습했던 config 경로
/workspace/mmpretrain/work_dirs/exp1_resnet50/epoch_30.pth
>> mmpretrain에서 학습했던 모델, tensorRT로 변환할 모델 경로
/workspace/mmpretrain/data/cropped_image/validation/0/image_1.jpg
>> 모델 변환 전(pytorch 모델)과 후(tensorRT 모델)에 인퍼런스 테스트를 해 볼 1장의 이미지 경로
--work-dir ./work_dir/classification_tensorrt-int8_dynamic
>> 변환된 tensorRT 모델을 저장할 경로
--device cuda
>> 변환에 사용할 device
--quant
>> quantization 모델을 만들어라는 옵션
--quant-image-dir /workspace/mmpretrain/data/validation
>> Post Training Quantization 적용을 위해 calibration할 데이터셋 폴더 경로
6. --work_dir 경로에 모델이 만들어 졌을 것이고, 테스트를 해 볼 수 있다.
python3 tools/test.py \
configs/mmpretrain/classification_tensorrt-int8_static-224x224.py \
/workspace/mmpretrain/my_config/exp1_resnet50.py \
--model ./work_dir/classification_tensorrt-int8_dynamic/end2end.engine \
--device cuda \
--speed-test \
--batch-size 1
end2end.engine이 tensorRT 모델이다.
내가 테스트 해 봤을 때
FP32 torchscript 모델의 용량은 91MB, GPU 처리 속도는 131.69 FPS
INT8 TensorRT 모델의 용량은 24MB, GPU 처리 속도는 1144.47 FPS
의 결과를 보였다.
모델 용량 75% 감소, 인퍼런스 속도 8.7배 증가라는 결론을 얻을 수 있었다.
도움이 되셨다면 아무 광고나 클릭 한 번 부탁드립니다👍