Showing
1 changed file
with
299 additions
and
0 deletions
코드/연합학습/quantization/install_tensorRT.ipynb
0 → 100644
1 | +{ | ||
2 | + "nbformat": 4, | ||
3 | + "nbformat_minor": 0, | ||
4 | + "metadata": { | ||
5 | + "colab": { | ||
6 | + "name": "Untitled0.ipynb", | ||
7 | + "provenance": [], | ||
8 | + "private_outputs": true, | ||
9 | + "collapsed_sections": [] | ||
10 | + }, | ||
11 | + "kernelspec": { | ||
12 | + "name": "python3", | ||
13 | + "display_name": "Python 3" | ||
14 | + }, | ||
15 | + "accelerator": "GPU" | ||
16 | + }, | ||
17 | + "cells": [ | ||
18 | + { | ||
19 | + "cell_type": "markdown", | ||
20 | + "metadata": { | ||
21 | + "id": "8k6IDrTDGZ5W" | ||
22 | + }, | ||
23 | + "source": [ | ||
24 | + "## Pytorch 추론시간 단축을 위한 정밀도 감소 - TensorRT / torch2trt library\n", | ||
25 | + "\n", | ||
26 | + "### 환경설정\n", | ||
27 | + "\n", | ||
28 | + "- [Nvidia developer portal](https://developer.nvidia.com/nvidia-tensorrt-7x-download) 회원가입\n", | ||
29 | + "- TensorRT 7.0.0.11 for Ubuntu 1804 and CUDA 10.0 DEB local repo package 다운로드 후 colab 업로드\n", | ||
30 | + "\n", | ||
31 | + "### TensorRT 7.0 을 colab 에 설치하는 방법" | ||
32 | + ] | ||
33 | + }, | ||
34 | + { | ||
35 | + "cell_type": "code", | ||
36 | + "metadata": { | ||
37 | + "id": "ApojKcRcGf2j" | ||
38 | + }, | ||
39 | + "source": [ | ||
40 | + "!nvcc --version" | ||
41 | + ], | ||
42 | + "execution_count": null, | ||
43 | + "outputs": [] | ||
44 | + }, | ||
45 | + { | ||
46 | + "cell_type": "markdown", | ||
47 | + "metadata": { | ||
48 | + "id": "NZD-bw7YIlHL" | ||
49 | + }, | ||
50 | + "source": [ | ||
51 | + "### colab CUDA 10.1 삭제" | ||
52 | + ] | ||
53 | + }, | ||
54 | + { | ||
55 | + "cell_type": "code", | ||
56 | + "metadata": { | ||
57 | + "id": "jJQrjrcfIm8u" | ||
58 | + }, | ||
59 | + "source": [ | ||
60 | + "# remove CUDA 10.1\n", | ||
61 | + "\n", | ||
62 | + "!sudo apt-get --purge remove cuda nvidia* libnvidia-*\n", | ||
63 | + "!sudo dpkg -l | grep cuda- | awk '{print $2}' | xargs -n1 dpkg --purge\n", | ||
64 | + "!sudo apt-get remove cuda-*\n", | ||
65 | + "!sudo apt autoremove\n", | ||
66 | + "!sudo apt-get update" | ||
67 | + ], | ||
68 | + "execution_count": null, | ||
69 | + "outputs": [] | ||
70 | + }, | ||
71 | + { | ||
72 | + "cell_type": "markdown", | ||
73 | + "metadata": { | ||
74 | + "id": "tRhvY4fZIygS" | ||
75 | + }, | ||
76 | + "source": [ | ||
77 | + "### CUDA 10.0 설치 - 입력 세번 필요 (Y, 31, 1)" | ||
78 | + ] | ||
79 | + }, | ||
80 | + { | ||
81 | + "cell_type": "code", | ||
82 | + "metadata": { | ||
83 | + "id": "73tZNq2WI41u" | ||
84 | + }, | ||
85 | + "source": [ | ||
86 | + "# Installing CUDA 10.0\n", | ||
87 | + "\n", | ||
88 | + "!wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb\n", | ||
89 | + "!sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb\n", | ||
90 | + "!sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub\n", | ||
91 | + "!sudo apt-get update\n", | ||
92 | + "!wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb\n", | ||
93 | + "!sudo apt install -y ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb\n", | ||
94 | + "!sudo apt-get update\n", | ||
95 | + "\n", | ||
96 | + "# Install NVIDIA driver\n", | ||
97 | + "!sudo apt-get -y installnvidia-driver-418\n", | ||
98 | + "\n", | ||
99 | + "# Install development and runtime libraries (~4GB)\n", | ||
100 | + "!sudo apt-get install -y \\\n", | ||
101 | + " cuda-10-0 \\\n", | ||
102 | + " libcudnn7=7.6.2.24-1+cuda10.0 \\\n", | ||
103 | + " libcudnn7-dev=7.6.2.24-1+cuda10.0 --allow-change-held-packages" | ||
104 | + ], | ||
105 | + "execution_count": null, | ||
106 | + "outputs": [] | ||
107 | + }, | ||
108 | + { | ||
109 | + "cell_type": "code", | ||
110 | + "metadata": { | ||
111 | + "id": "5HAS_SQ7LBgj" | ||
112 | + }, | ||
113 | + "source": [ | ||
114 | + "!nvcc --version" | ||
115 | + ], | ||
116 | + "execution_count": null, | ||
117 | + "outputs": [] | ||
118 | + }, | ||
119 | + { | ||
120 | + "cell_type": "markdown", | ||
121 | + "metadata": { | ||
122 | + "id": "emv-dfsgLEE9" | ||
123 | + }, | ||
124 | + "source": [ | ||
125 | + "### TensorRT 설치 - colab .deb 파일 경로 확인" | ||
126 | + ] | ||
127 | + }, | ||
128 | + { | ||
129 | + "cell_type": "code", | ||
130 | + "metadata": { | ||
131 | + "id": "YI96JETCLJ3I" | ||
132 | + }, | ||
133 | + "source": [ | ||
134 | + "# install tensorrt\n", | ||
135 | + "!sudo dpkg -i \"/content/drive/My Drive/capstone1/CAN/nv-tensorrt-repo-ubuntu1804-cuda10.0-trt7.0.0.11-ga-20191216_1-1_amd64.deb\"\n", | ||
136 | + "!sudo apt-key add /var/nv-tensorrt-repo-cuda10.0-trt7.0.0.11-ga-20191216/7fa2af80.pub\n", | ||
137 | + "\n", | ||
138 | + "!sudo apt-get update\n", | ||
139 | + "\n", | ||
140 | + "!sudo apt-get install libnvinfer7=7.0.0-1+cuda10.0 libnvonnxparsers7=7.0.0-1+cuda10.0 libnvparsers7=7.0.0-1+cuda10.0 libnvinfer-plugin7=7.0.0-1+cuda10.0 libnvinfer-dev=7.0.0-1+cuda10.0 libnvonnxparsers-dev=7.0.0-1+cuda10.0 libnvparsers-dev=7.0.0-1+cuda10.0 libnvinfer-plugin-dev=7.0.0-1+cuda10.0 python-libnvinfer=7.0.0-1+cuda10.0 python3-libnvinfer=7.0.0-1+cuda10.0\n", | ||
141 | + "\n", | ||
142 | + "!sudo apt-mark hold libnvinfer7 libnvonnxparsers7 libnvparsers7 libnvinfer-plugin7 libnvinfer-dev libnvonnxparsers-dev libnvparsers-dev libnvinfer-plugin-dev python-libnvinfer python3-libnvinfer\n", | ||
143 | + "\n", | ||
144 | + "!sudo apt-get install tensorrt" | ||
145 | + ], | ||
146 | + "execution_count": null, | ||
147 | + "outputs": [] | ||
148 | + }, | ||
149 | + { | ||
150 | + "cell_type": "markdown", | ||
151 | + "metadata": { | ||
152 | + "id": "DcpWP5snL2yy" | ||
153 | + }, | ||
154 | + "source": [ | ||
155 | + "### TensorRT 설치 확인" | ||
156 | + ] | ||
157 | + }, | ||
158 | + { | ||
159 | + "cell_type": "code", | ||
160 | + "metadata": { | ||
161 | + "id": "uOW85nnxLdSB" | ||
162 | + }, | ||
163 | + "source": [ | ||
164 | + "!dpkg -l | grep TensorRT" | ||
165 | + ], | ||
166 | + "execution_count": null, | ||
167 | + "outputs": [] | ||
168 | + }, | ||
169 | + { | ||
170 | + "cell_type": "markdown", | ||
171 | + "metadata": { | ||
172 | + "id": "k7xHrhZuNb0U" | ||
173 | + }, | ||
174 | + "source": [ | ||
175 | + "### 런타임 다시시작하기" | ||
176 | + ] | ||
177 | + }, | ||
178 | + { | ||
179 | + "cell_type": "markdown", | ||
180 | + "metadata": { | ||
181 | + "id": "8EQ__AkjMH9G" | ||
182 | + }, | ||
183 | + "source": [ | ||
184 | + "### [torch2trt](https://github.com/NVIDIA-AI-IOT/torch2trt) 라이브러리 설치" | ||
185 | + ] | ||
186 | + }, | ||
187 | + { | ||
188 | + "cell_type": "code", | ||
189 | + "metadata": { | ||
190 | + "id": "k7IztAyvMGlP" | ||
191 | + }, | ||
192 | + "source": [ | ||
193 | + "cd /content/drive/My\\ Drive/capstone1/CAN" | ||
194 | + ], | ||
195 | + "execution_count": null, | ||
196 | + "outputs": [] | ||
197 | + }, | ||
198 | + { | ||
199 | + "cell_type": "code", | ||
200 | + "metadata": { | ||
201 | + "id": "qR0V215wMHXF" | ||
202 | + }, | ||
203 | + "source": [ | ||
204 | + "!pip3 install pycuda\n", | ||
205 | + "!git clone https://github.com/NVIDIA-AI-IOT/torch2trt" | ||
206 | + ], | ||
207 | + "execution_count": null, | ||
208 | + "outputs": [] | ||
209 | + }, | ||
210 | + { | ||
211 | + "cell_type": "code", | ||
212 | + "metadata": { | ||
213 | + "id": "fG9UtL6sNAgM" | ||
214 | + }, | ||
215 | + "source": [ | ||
216 | + "cd /content/drive/My\\ Drive/capstone1/CAN/torch2trt" | ||
217 | + ], | ||
218 | + "execution_count": null, | ||
219 | + "outputs": [] | ||
220 | + }, | ||
221 | + { | ||
222 | + "cell_type": "code", | ||
223 | + "metadata": { | ||
224 | + "id": "iMEc08ilNDW8" | ||
225 | + }, | ||
226 | + "source": [ | ||
227 | + "!python setup.py install" | ||
228 | + ], | ||
229 | + "execution_count": null, | ||
230 | + "outputs": [] | ||
231 | + }, | ||
232 | + { | ||
233 | + "cell_type": "code", | ||
234 | + "metadata": { | ||
235 | + "id": "LpK7xRFdNVbr" | ||
236 | + }, | ||
237 | + "source": [ | ||
238 | + "import tensorrt\n", | ||
239 | + "import torch2trt" | ||
240 | + ], | ||
241 | + "execution_count": null, | ||
242 | + "outputs": [] | ||
243 | + }, | ||
244 | + { | ||
245 | + "cell_type": "markdown", | ||
246 | + "metadata": { | ||
247 | + "id": "M1DDuNL4Npn-" | ||
248 | + }, | ||
249 | + "source": [ | ||
250 | + "### 추론시간 비교하기" | ||
251 | + ] | ||
252 | + }, | ||
253 | + { | ||
254 | + "cell_type": "code", | ||
255 | + "metadata": { | ||
256 | + "id": "9WddajL5Pj6E" | ||
257 | + }, | ||
258 | + "source": [ | ||
259 | + "cd /content/drive/My\\ Drive/capstone1/CAN" | ||
260 | + ], | ||
261 | + "execution_count": null, | ||
262 | + "outputs": [] | ||
263 | + }, | ||
264 | + { | ||
265 | + "cell_type": "code", | ||
266 | + "metadata": { | ||
267 | + "id": "PgKGWmSqNr4z" | ||
268 | + }, | ||
269 | + "source": [ | ||
270 | + "import utils\n", | ||
271 | + "import numpy as np\n", | ||
272 | + "import importlib\n", | ||
273 | + "importlib.reload(utils)\n", | ||
274 | + "\n", | ||
275 | + "utils.run_benchmark('./weights/fed_avg_50_0.9688.pth')" | ||
276 | + ], | ||
277 | + "execution_count": null, | ||
278 | + "outputs": [] | ||
279 | + }, | ||
280 | + { | ||
281 | + "cell_type": "markdown", | ||
282 | + "metadata": { | ||
283 | + "id": "qh7_UaFsRykh" | ||
284 | + }, | ||
285 | + "source": [ | ||
286 | + "- torch: 464 msc / 96.87 % / 0.05931\n", | ||
287 | + "- trt: 354 msc / 96.87 % / 0.05931\n", | ||
288 | + "- trt float 16: 323 msc / 96.87 % / 0.05931\n", | ||
289 | + "- trt int8 strict: 401 msc / 96.86 % / 06405\n", | ||
290 | + "\n", | ||
291 | + "\n", | ||
292 | + "#### int8 양자화 실패한 이유 추측\n", | ||
293 | + "- input 이 0.0 ~ 1.0 이기 때문에 계산이 전부 float 연산\n", | ||
294 | + "- nvidia tensorRT 가 정확도가 너무 낮아질 경우 양자화 무시\n", | ||
295 | + "- 사용법 미숙, 모델이 너무 간단함\n" | ||
296 | + ] | ||
297 | + } | ||
298 | + ] | ||
299 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment