nvidia Jetson orin - dingdongdengdong/astra_ws GitHub Wiki
TensorRT Python API๋ฅผ ํ์ฉํ๋ ๊ฒ์ด Jetson Orin์์ Python์ผ๋ก AI ๋ชจ๋ธ์ ๊ตฌ๋ํ๋ฉด์๋ ํจ์จ์ฑ์ ๊ทน๋ํํ๋ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
์ด์ ๋ต๋ณ์์ ๊ฐ์กฐํ๋ฏ์ด, Python์ GIL์ด๋ ์ธํฐํ๋ฆฌํฐ ์ค๋ฒํค๋ ๊ฐ์ ๋ณธ์ง์ ์ธ ํ๊ณ๊ฐ ์๋๋ผ๋, AI ๋ชจ๋ธ ์ถ๋ก ์ ์ค์ ๋ณ๋ชฉ์ ๋๊ฐ ์ปดํจํ ์ง์ฝ์ ์ธ ํ๋ ฌ ์ฐ์ฐ๊ณผ ๊ฐ์ ๋ถ๋ถ์์ ๋ฐ์ํ๋ฉฐ, ์ด ๋ถ๋ถ์ GPU์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. TensorRT๋ ๋ฐ๋ก ์ด GPU ์์์์ ์ถ๋ก ์ ๊ทน๋๋ก ์ต์ ํํด์ฃผ๋ NVIDIA์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
TensorRT Python API ํ์ฉ์ ์ด์ ์ต์ ํ๋ GPU ์ถ๋ก :
๊ทธ๋ํ ์ต์ ํ: TensorRT๋ ์ ๊ฒฝ๋ง ๊ทธ๋ํ๋ฅผ ๋ถ์ํ์ฌ ๋ถํ์ํ ๋ ์ด์ด๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ ์ด์ด๋ฅผ ๋ณํฉํ๋ฉฐ, ์ปค๋ ์ตํฉ(Kernel Fusion)๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ GPU ์ฐ์ฐ์ ์ต์ ํํฉ๋๋ค.
์ ๋ฐ๋ ์ต์ ํ: FP32(๋จ์ ๋ฐ๋ ๋ถ๋์์์ ) ์ธ์ FP16(๋ฐ์ ๋ฐ๋) ๋๋ INT8(์ ์ 8๋นํธ)๊ณผ ๊ฐ์ ๋ฎ์ ์ ๋ฐ๋๋ก ๋ชจ๋ธ์ ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ์ค์ด๊ณ ๊ณ์ฐ ์๋๋ฅผ ๋์ ๋๋ค. Jetson Orin๊ณผ ๊ฐ์ ์๋ฒ ๋๋ ๋๋ฐ์ด์ค์์๋ ๋ฎ์ ์ ๋ฐ๋ ์ฐ์ฐ์ด ํนํ ์ค์ํฉ๋๋ค.
์ปค๋ ์๋ ํ๋: ํน์ GPU ํ๋์จ์ด์ ์ต์ ํ๋ ์ปค๋(CUDA ์ฝ์ด์์ ์คํ๋๋ ์ฝ๋)์ ์๋์ผ๋ก ์ ํํ๊ณ ํ๋ํ์ฌ ์ต๊ณ ์ ์ฑ๋ฅ์ ๋์ด๋ ๋๋ค.
๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ๋์ ์ฒ๋ฆฌ๋: ์ด๋ฌํ ์ต์ ํ ๋๋ถ์ TensorRT๋ ํจ์ฌ ๋ฎ์ ์ถ๋ก ์ง์ฐ ์๊ฐ(latency)๊ณผ ๋์ ์ฒ๋ฆฌ๋(throughput)์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ค์๊ฐ ๋ฐ์์ด ํ์์ ์ธ ์์จ์ฃผํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Python ํ๊ฒฝ์์์ ์ฑ๋ฅ ์ด์ : Python์ผ๋ก ๊ฐ๋ฐํ๋ ํธ์์ฑ์ ์ ์งํ๋ฉด์, ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ(PyTorch, TensorFlow)๋ง ์ฌ์ฉํ ๋๋ณด๋ค ํจ์ฌ ํฅ์๋ ์ถ๋ก ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. Python ์ฝ๋๊ฐ TensorRT ์์ง์ ๋ก๋ํ๊ณ ์คํํ๋ ์ค๋ฒํค๋๋ GPU ์ถ๋ก ์๊ฐ ์์ฒด์ ๋นํด ๋ฏธ๋ฏธํฉ๋๋ค.
Jetson Orin์ ์ต์ ํ: TensorRT๋ NVIDIA ํ๋์จ์ด์ ํนํ๋์ด ์์ผ๋ฉฐ, Jetson Orin์ Tensor Cores์ ๊ฐ์ AI ๊ฐ์๊ธฐ ํ๋์จ์ด๋ฅผ ์ต๋ํ ํ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
TensorRT Python API๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ํ๋ฆ ๋ชจ๋ธ ํ์ต ๋ฐ ์ ์ฅ: PyTorch, TensorFlow ๋ฑ์ผ๋ก AI ๋ชจ๋ธ์ ํ์ต์ํค๊ณ torch.save(), model.save() ๋ฑ์ผ๋ก ๋ชจ๋ธ์ ์ ์ฅํฉ๋๋ค.
ONNX๋ก ๋ณํ: ํ์ต๋ ๋ชจ๋ธ์ ONNX(Open Neural Network Exchange) ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ONNX๋ ๋ค์ํ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ ๊ฐ์ ๋ชจ๋ธ ํธํ์ฑ์ ์ํ ํ์ค์ ๋๋ค.
PyTorch: torch.onnx.export()
TensorFlow: tf.saved_model.save() ํ tf2onnx ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ณํ
TensorRT ์์ง ๋น๋ (Python API):
Python์์ tensorrt ๋ผ์ด๋ธ๋ฌ๋ฆฌ (NVIDIA์์ ์ ๊ณต)๋ฅผ ์ํฌํธํฉ๋๋ค.
ONNX ํ์ผ์ ๋ก๋ํ๊ณ tensorrt.Builder, tensorrt.Network, tensorrt.BuilderConfig ๋ฑ์ ์ฌ์ฉํ์ฌ TensorRT ์์ง์ ๋น๋ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ต์ ํ ๋ ๋ฒจ (FP16, INT8), ์ต๋ ๋ฐฐ์น ํฌ๊ธฐ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
๋น๋๋ TensorRT ์์ง์ .trt ๋๋ .plan ํ์ผ๋ก ์ ์ฅ๋ ์ ์์ต๋๋ค. ์ด ์์ง์ ํน์ GPU์ ์ข ์๋๋ฏ๋ก, Jetson Orin์์ ๋น๋ํ๊ณ Jetson Orin์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
TensorRT ์์ง ๋ก๋ ๋ฐ ์ถ๋ก :
ROS2 Python ๋ ธ๋ ๋ด์์ ๋ฏธ๋ฆฌ ๋น๋๋ .trt (๋๋ .plan) ํ์ผ์ ๋ก๋ํฉ๋๋ค.
D435i์์ ๋ค์ด์ค๋ ์ผ์ ๋ฐ์ดํฐ(์: ์ด๋ฏธ์ง)๋ฅผ ๋ชจ๋ธ์ ์ ๋ ฅ ํ์์ ๋ง๊ฒ NumPy ๋ฐฐ์ด๋ก ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ TensorRT ์์ง์ ์ ๋ ฅ์ผ๋ก ์ ๊ณตํ๊ณ ์ถ๋ก ์ ์ํํฉ๋๋ค.
์ถ๋ก ๊ฒฐ๊ณผ(NumPy ๋ฐฐ์ด)๋ฅผ ํ์ฒ๋ฆฌํ์ฌ ROS2 ๋ฉ์์ง ํ์์ผ๋ก ๋ณํํ๊ณ ๋ฐํํฉ๋๋ค.