본문 바로가기
Development/TensorRT

[TensorRT] Ubuntu docker container를 이용한 TensorRT 사용

by shuka 2021. 9. 17.
728x90
728x90

1. nvidia-docker 설치

docker에 대한 설치는 밑의 링크에 잘 성명되어 있어서 따라 설치하면 된다.

 

https://nodoudt.tistory.com/50

 

[Linux] nvidia-docker 2 설치하기

1. 준비 사항 GNU/Linux x86_64 with kernel version > 3.10 Docker >= 1.12 NVIDIA GPU with Architecture > Fermi (2.1) NVIDIA drivers ~= 361.93 (untested on older versions) 드라이버 버전에 따라 사용할..

nodoudt.tistory.com

 

만약 terminal에서 nvidia-docker 명령어를 실행하였을 때 권한 거부가 발생하면 밑의 usermod명령어를 사용해서 계정 속성을 변경해준다.

sudo usermod -aG docker $USER
sudo service docker restart

속성을 변경하고 내 경우에는 재부팅을 해주니까 됐다.

 

 

설치가 완료되고 terminal에 명령어를 치면 다음과 같이 뜬다.

 

 

2. TensorRT docker container 

docker 설치가 완료되었다면 tensorrt의 이미지를 pull 한다.

 

nvidia-docker pull nvcr.io/nvidia/tensorrt:<버전1>-py<버전2>

ex) nvidia-docker pull nvcr.io/nvidia/tensorrt:19.12-py3

 

버전1은 TensorRT Release 버전으로 각 버전마다 설치되어 있는 tensorrt버전, cuda버전, cudnn버전 등이 다르게 설치되어 있고, 버전2는 python버전으로 python2를 쓰면 py2, python3을 쓰면 py3로 하면 된다.

 

밑의 링크는 tensorrt에 대한 docker container 버전이 설명되어 있다.

 

https://docs.nvidia.com/deeplearning/tensorrt/container-release-notes/rel_21-08.html#rel_21-08

 

Container Release Notes :: NVIDIA Deep Learning TensorRT Documentation

The NVIDIA container image for TensorRT, release 21.08, is available on NGC. Contents of the TensorRT container This container includes the following: The TensorRT C++ samples and C++ API documentation. The samples can be built by running make in the /work

docs.nvidia.com

 

원하는 tensorrt container 버전을 pull하고 나면 이미지가 받아졌는지 확인을 한다.

 

nvidia-docker ps -l

 

받아진 이미지에 대해 container를 생성하는데 나는 다음과 같은 명령어들을 포함하여 사용한다.

 

nvidia-docker run -ti -v <호스트 폴더>:<container path> --ipc=host --name test <다운받은 docker 이미지 이름>

nvidia-docker run -ti -v /home/test_folder:/test_folder --ipc=host --name test nvcr.io/nvidia/tensorrt:19.12-py3

 

-v는 현재 local에 있는 폴더를 container 내부에서도 연결하여 사용할 수 있게 하고, 여러 폴더를 연결하고 싶으면 -v 옵션을 여러번 해서 사용하면 된다.

(ex) -v /home/test/test_folder1:/test_folder1 -v /home/test/test_folder2:/test_folder2

 

여기서 --ipc라는 옵션도 있는데 docker container안에서 pytorch를 실행하다 보면 local에서는 잘 돌아갔는데 container에서는 메모리가 부족하다는 에러가 발생할 때가 있어서 해당 문제를 해결하기 위해 옵션에 넣어 주었다.

 

https://shuka.tistory.com/12

 

docker container에서 pytorch 메모리 문제

local에서 잘 돌아가던 pytorch 코드를 docker의 container를 생성하여 pytorch 코드를 실행하면 가끔 메모리가 부족하다는 오류를 확인할 경우가 있다. Unexpected bus error encountered in worker. This might..

shuka.tistory.com

 

container를 run으로 생성하면 바로 container에 들어가게 되지만 terminal을 종료하거나 하면 명령어로 container에 들어가야 된다.

 

nvidia-docker exec -ti test /bin/bash

or

nvidia-docker attach test

 

exec과 attach로 접속하는 차이점은 attrach는 background에서 실행되고 있는 container애 접속한다고 보면 되고, exec은 새로운 프로세스를 실행시킨다고 생각하면 된다.

 

 

 

3. C++ TensorRT example

container가 생성되면 container 안에 간단한 TensorRT 예제가 있는데 만약 테스트를 해보고 싶다면 해당 경로에 들어가서 빌드만 해주면 된다.

 

cd /workspace/tensorrt/samples
make -j4

 

빌드가 완료되면 bin폴더에 실행 파일들이 생성된다.

 

4. python TensorRT example

python에 대한 TensorRT의 예제는 /opt/tensorrt/sample/python에 있는데 해당 sample를 돌리기 위해서는 몇몇몇 필요한 python 라이브러리가 있다.

 

 필요한 라이브러리는 /opt/tensorrt/python에 있는 python_setup.sh 를 실행하면 받아지기도 하고 직접 보면서 설치해도 된다.

 

 

 

5. 모델 변환

TensorRT container안에는 당연히 해당 버전에 맞춰져 있는 trtexec가 있어서 모델 변환도 가능하다.

 

cd /workspace/tensorrt/bin
./trtexec

 

https://shuka.tistory.com/6

 

[TensorRT]Onnx모델을 tensorrt모델로 변환

Onnx모델을 tensorrt모델로 변환 1. TensorRT란? TensorRT는 NVIDIA gpu를 사용하여 onnx나 tensorflow와 같은 모델을 최적화시켜 모델의 처리 속도를 향상시켜주는 엔진으로, 밑에 tensorrt홈페이지와 블로그에..

shuka.tistory.com

 

728x90
반응형

댓글