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 ๋ฉ”์‹œ์ง€ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.