DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (968)
    • Profile & Branding (25)
      • Career (18)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (98)
      • Book (67)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (64)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (7)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (5)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

[Deploy] ONNX: ๋‹ค๋ฅธ DNN ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ๋ชจ๋ธ ํ˜ธํ™˜ ํฌ๋ฉง(pytorch, tensorflow, TensorRT, ...)
Study: Artificial Intelligence(AI)/AI: Data Pipeline

[Deploy] ONNX: ๋‹ค๋ฅธ DNN ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ๋ชจ๋ธ ํ˜ธํ™˜ ํฌ๋ฉง(pytorch, tensorflow, TensorRT, ...)

2024. 2. 14. 23:29
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” '[Perception] ONNX: ๋‹ค๋ฅธ DNN ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ๋ชจ๋ธ ํ˜ธํ™˜ ํฌ๋ฉง(pytorch, tensorflow, ...)'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.

1. PyTorch, ONNX, TensorRT ๋น„๊ต

1) PyTorch 2.0

์–ธ์  ๊ฐ€๋ถ€ํ„ฐ Tensorflow๋ฅผ ์•ž์ง€๋ฅด๊ณ  ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” Deep Learning Framework์ด ๋œ PyTorch๊ฐ€ 2022๋…„ 12์›”์— ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ ์•Œ์•„์•ผ ํ•  ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ PyTorch๋Š” ๋„ˆ๋ฌด Pythonicํ•ด์„œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Python์˜ ํŠน์ง•

๊ทธ๋Ÿผ Pythonic ํ•˜๋‹ค๋Š” ๊ฒŒ ๋ญ๋ƒ?

  • ๊ฐ„๊ฒฐ์„ฑ / ๊ฐ€๋…์„ฑ: User friendlyํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์ง๊ด€์ ์ด๊ณ  over-engineering์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋“ฃ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ๋Š” ์ด๊ฒƒ์„ ๋ฒˆ์—ญํ•˜๋А๋ผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด: ์ปดํŒŒ์ผ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ปดํŒŒ์ผ ๊ณผ์ • ์—†์ด ๋งค๋ฒˆ ํ•œ์ค„ํ•œ์ค„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€ํ‘œ์ ์ธ ์ปดํŒŒ์ผ ์–ธ์–ด์ธ C์—์„œ๋Š” ๋ญ๊ฐ€ ์ž˜๋ชป ์ฝ”๋”ฉ๋˜๋ฉด ์•„์˜ˆ ์‹คํ–‰์„ ํ•  ์ˆ˜๊ฐ€ ์—†์ง€๋งŒ Python์—์„œ๋Š” ์ฒ˜์Œ์— ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๊ฐ€๋„ ์ค‘๊ฐ„์— ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ๋Š” ๋งค๋ฒˆ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๋ชจํ—˜์„ ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.. ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋А๋ฆฌ๊ฒ ์ฃ 

์ด ๋ฐ–์—๋„ Python์˜ ํŠน์ง•์€ ๋งŽ์ด ์žˆ์ง€๋งŒ ์•„๋ฌดํŠผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ๊ทธ๋งŒํผ ๋А๋ฆฌ๋‹ค๋ผ๋Š” ํŠน์ง•๋งŒ ์•„์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Pytorch 2.0์˜ ํŠน์ง•

๊ทธ๋ž˜์„œ PyTorch 2.0์—์„œ๋Š” torch.compile์„ ํฌํ•จํ•œ ๋ช‡๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋”์šฑ ๋น ๋ฅด๊ฒŒ Inference ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ ์ดํ•ดํ•˜๋ ค๋ฉด JIT(JustInTime)์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์š”์•ฝํ•˜์ž๋ฉด ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•˜์—ฌ ๊ทธ ๋’ค๋กœ๋Š” ๋น ๋ฅด๊ฒŒ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Œ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ torch.compile tutorial์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

2) ONNX

์ด๋ฏธ์ง€ ์ถœ์ฒ˜:  https://microsoft.github.io/ai-at-edge/docs/onnx/

ONNX๋Š” "Open Neural Network Exchange"์˜ ์•ฝ์–ด๋กœ, ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ONNX๋Š” ์ธ๊ณต์ง€๋Šฅ AI ๋ชจ๋ธ์„ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„์— ๋ชจ๋ธ์„ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ONNX๋Š” ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ๊ตฌ์กฐ์™€ ๊ฐ€์ค‘์น˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ค‘๋ฆฝ์ ์ธ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ ๋‹ค์–‘ํ•œ ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ(TensorFlow, PyTorch, Keras)๋กœ๋ถ€ํ„ฐ ๋ชจ๋ธ์„ ๋‚ด๋ณด๋‚ด๊ณ , ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ONNX ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์€ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์กฐํ•ฉํ•˜๊ณ  ๋ชจ๋ธ์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์–ธ์–ด, ํ”Œ๋žซํผ ๋ฐ ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TensorRT

TensorRT๋„ ONNX์™€ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑด NVIDIA์—์„œ ๋งŒ๋“  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์จ, NVIDIA GPU์—์„œ ์ตœ์ ํ™” ๋œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ˜„์žฌ๊นŒ์ง€๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ๊ตฌ๊ฐ€ NVIDIA GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜:  https://developer.nvidia.com/ko-kr/blog/nvidia-tensorrt-inference-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%EA%B0%80%EC%86%8D%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-nvidia%EC%9D%98-toolkit/

4) PyTorch 2.0 / ONNX / TensorRT ๋น„๊ต

๊ทธ๋Ÿผ ์ด์ œ ์„ธ๊ฐ€์ง€ ๋ชจ๋ธ ํ˜•์‹์„ ๋น„๊ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์‹คํ—˜ GPU๋Š” NVIDIA RTX 3090Ti๋กœ, TensorRT์—๊ฒŒ ์œ ๋ฆฌํ•œ ํ™˜๊ฒฝ์ž„์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋น„๊ต๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ 4๊ฐ€์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • PyTorch 2.0์€ batch size๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์ „์ž‘ ๋Œ€๋น„ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋ฃธ
    • ๋˜ํ•œ FP16์€ Batch size๊ฐ€ ํด์ˆ˜๋ก ๋น›์„ ๋ฐœํ•จ
    • ์ด๋Š” PyTorch 2.0์ด ํ•™์Šต ์ตœ์ ํ™”์— ์ดˆ์ ์„ ๋งž์ท„๊ธฐ ๋•Œ๋ฌธ
  • ONNX Runtime์€ Batch size๊ฐ€ ์ž‘์„ ๋•Œ PyTorch 2.0๋ณด๋‹ค ํšจ๊ณผ๊ฐ€ ์ข‹์Œ
    • ์ด๋Š” ONNX๊ฐ€ ์ถ”๋ก  ์ตœ์ ํ™”์— ์ดˆ์ ์„ ๋งž์ท„๊ธฐ ๋•Œ๋ฌธ
  • PyTorch Eager ๊ธฐ์กด๋ชจ๋“œ๋‚˜ PyTorch 2.0์ด๋‚˜ Batch size๊ฐ€ ์ž‘์œผ๋ฉด ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†์Œ
    • ์ด๊ฑด ์•„๋งˆ GPU๊ฐ€ ์˜ค๋ฒ„์ŠคํŽ™์ด๋ผ ๋ณด์œ ํ•œ ์ž์›์„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ
  • NVIDIA GPU์—์„œ๋Š” TensorRT๊ฐ€ ์ตœ๊ณ 
    • ๋‹น์—ฐํ•œ ๊ฒƒ์ด์ง€๋งŒ NVIDIA์—์„œ ์ตœ์ ํ™”๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Cache๋ฅผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋์œผ๋ฆฌ๋ผ ์ถ”์ •

์˜ค๋Š˜์€ ์œ„์™€ ๊ฐ™์ด PyTorch 2.0, ONNX, TensorRT ๊ฐ„์˜ ์ถ”๋ก  ์†๋„ ๋น„๊ต๋ฅผ ํ•ด๋ดค์œผ๋ฉฐ, ๊ฒฐ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ•™์Šตํ•  ๋•Œ๋Š” PyTorch 2.0 MixedPrecision ๋˜๋Š” FP16์ด ์ข‹์•„๋ณด์ž„
  2. ์ถ”๋ก ํ•  ๋•Œ๋Š” TensorRT๊ฐ€ ์ข‹์•„ ๋ณด์ด๊ธด ํ•จ. ํ•˜์ง€๋งŒ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•  ๋•Œ๋Š” GPU๋ฅผ ์“ฐ์ง€ ์•Š์„ ์ˆ˜๋„, GPU๊ฐ€ NVIDIA ์ œํ’ˆ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ๊ณ ๋ คํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์ด๋‚˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋ธ์„ ONNX ํฌ๋ฉง์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ONNX ํฌ๋ฉง์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ถ”๋ก  ์ตœ์ ํ™”๋„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2. ONNX

1) ONNX ๋ž€?

ONNX(Open Neural Network Exchange)๋Š” Tensorflow, PyTorch ์™€ ๊ฐ™์€ ์„œ๋กœ ๋‹ค๋ฅธ DNN ํ”„๋ ˆ์ž„์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋ธ๋“ค์„ ์„œ๋กœ ํ˜ธํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ณต์œ  ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋žตํžˆ ๋งํ•ด, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ํ™˜๊ฒฝ(Java, JS, C, C#, C++)์—์„œ ํ™˜๊ฒฝ์— ์ œ์•ฝ ์—†์ด ๊ตฌํ˜„๋œ ‘ML ๋ชจ๋ธ’์„ ํ˜ธ์ถœํ•˜๊ณ  ์ˆ˜ํ–‰ํ•˜์—ฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

1. Framework Interoperability

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋‹ค์‹œํ”ผ ํŠน์ • ํ™˜๊ฒฝ์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋ธ์„ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ importํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ONNX์˜ ์ตœ๋Œ€ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ปจ๋Œ€, Tensorflow์—์„œ ๋น ๋ฅด๊ฒŒ ๋ชจ๋ธ์„ ํ•™์Šต ์‹œํ‚จ ๋’ค์— ์ด๋ฅผ ๋ชจ๋ฐ”์ผ๋กœ ์˜ฎ๊ฒจ์„œ ์‚ฌ์šฉ์„ ํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. Shared Optimization

HW vendor(๊ฐ€์†๊ธฐ์™€ ๊ฐ™์€ HW ์ œ์กฐ์—…์ฒด)์˜ ์ž…์žฅ์—์„œ ONNX์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ๊ณต์œ ๋˜๋Š” ํฌ๋งท์ด ์กด์žฌํ•˜๋ฉด, ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„์‹œ ONNX representation์„ ๊ธฐ์ค€์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋งˆ์น˜ JSON ํฌ๋งท์ด ์ •๋ณด ํ‘œํ˜„์„ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ํ•ฉ์˜๋˜์–ด ์‚ฌ์šฉ๋˜๋“ฏ, ONNX๋ผ๋Š” ํ•ฉ์˜๋œ DNN ๋ชจ๋ธ ํฌ๋งท์ด ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ONNX ์‚ฌ์šฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ์ž์„ธํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2) ONNX Runtime ๋ž€?

ONNX ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„์ž…๋‹ˆ๋‹ค. ONNX ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ONNX ๋Ÿฐํƒ€์ž„์€ ๋น ๋ฅธ ์ถ”๋ก ์„ ์œ„ํ•œ ์ตœ์ ํ™”๋œ ์ปค๋„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ONNX Runtime์€ CPU, GPU ๋ฐ ๋”ฅ๋Ÿฌ๋‹ ๊ฐ€์†๊ธฐ(DNNL, NNAPI, OpenVINO)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ONNX Runtime์€ ONNX ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™”๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

+ ORT ํ˜•์‹

  • ‘์ถ•์†Œ๋œ ํฌ๊ธฐ’์˜ ONNX Runtime ๋นŒ๋“œ์—์„œ ์ง€์›ํ•˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.
  • onnx ํ˜•ํƒœ์—์„œ ort ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ์„ ํ•จ์œผ๋กœ์จ ์ถ•์†Œ๋œ ํฌ๊ธฐ ๋นŒ๋“œ๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์ด ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

3) ONNX ์‚ฌ์šฉ ์‚ฌ๋ก€

ONNX๋ฅผ ์ด์šฉํ•˜์—ฌ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 1. ๋‹ค์–‘ํ•œ ML ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ถ”๋ก  ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 2. ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด ๋ฐ ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 3. Python์œผ๋กœ ํ›ˆ๋ จํ•˜๋˜ C#/C++/Java ์•ฑ์— ๋ฐฐํฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 4. ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋ธ๋กœ ์ถ”๋ก  ํ›ˆ๋ จ ๋ฐ ์ˆ˜ํ–‰์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. ONNX ์‚ฌ์šฉ ๊ณผ์ •

์œ„ ๊ทธ๋ฆผ์€, PyTorch ๋ชจ๋ธ์„ ONNX ๊ทธ๋ž˜ํ”„๋กœ export ํ•˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง„ํ–‰ ๊ณผ์ •์€ ์•„๋ž˜ ์ˆœ์„œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ
    • PyTorch ๋ชจ๋ธ๊ณผ Sample input ์„ ์ธ์ž๋กœ ํ•˜์—ฌ, torch.onnx.export ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    • PyTorch ์˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ, Trace ํ˜น์€ Script ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • Trace ์™€ Script ๋Š” ๊ทธ ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ representation ์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์ถ”ํ›„ ํฌ์ŠคํŒ…)
    • PyTorch ๋ชจ๋ธ์˜ forward propagation ์‹œ์— ํ˜ธ์ถœ๋˜๋Š”, ํ•จ์ˆ˜ ๋ฐ ์—ฐ์‚ฐ๋“ค์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋œ ๊ทธ๋ž˜ํ”„์ธ Torch IR ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • Trace ๋‚˜ Script ๋Š”, PyTorch ์˜ nn.Module ์„ ์ƒ์†ํ•˜๋Š” ๋ชจ๋ธ์˜,
      • forward ํ•จ์ˆ˜์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•œ IR(Intermediate Representation)์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ
    • ์ƒ์„ฑ๋œ trace / script (Torch IR)๋Š”, ONNX Exporter ๋ฅผ ํ†ตํ•ด์„œ ONNX IR ๋กœ ๋ณ€ํ™˜๋˜๊ณ ,
    • ์—ฌ๊ธฐ์—์„œ ํ•œ ๋ฒˆ ๋” Graph Optimization ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ
    • ์ตœ์ข…์ ์œผ๋กœ ์ƒ์„ฑ๋œ ONNX ๊ทธ๋ž˜ํ”„๋Š” .onnx ํฌ๋งท์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

  • [Blog] ONNX ๋ž€?: https://wooono.tistory.com/415
  • [Blog]PyTorch 2.0 vs ONNX vs TensorRT ๋น„๊ต: https://thecho7.tistory.com/entry/PyTorch-20-vs-ONNX-vs-TensorRT-%EB%B9%84%EA%B5%90
  • [Blog] ONNX(Open Neural Network Exchange) ์ดํ•ดํ•˜๊ธฐ -1: React Native ํ™œ์šฉ: https://adjh54.tistory.com/203 
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: Artificial Intelligence(AI) > AI: Data Pipeline' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Data] Python ์ด๋ฏธ์ง€ ์—ฌ๋ฐฑ ์ง€์šฐ๊ธฐ (numpy, mask, ...)  (0) 2024.04.30
[Data] Segmentation ๋ฐ์ดํ„ฐ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜: Run Length Encoding(RLE) - coco mask to rle์™€ rle to mask ๊ฒ€์ฆ๊นŒ์ง€  (0) 2024.02.28
[Dataset] Autonomous Driving Open Dataset: nuScenes Dataset(+ nuImages, nuPlan, Occupancy, nuReality)  (1) 2023.12.26
[Dataset] Autonomous Driving Open Dataset: KITTI Dataset (Visual Odometry/SLAM, 3D Object Detection)  (1) 2023.12.26
[Dataset] Autonomous Driving Open Dataset: Various Datasets  (0) 2023.09.09
    'Study: Artificial Intelligence(AI)/AI: Data Pipeline' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Data] Python ์ด๋ฏธ์ง€ ์—ฌ๋ฐฑ ์ง€์šฐ๊ธฐ (numpy, mask, ...)
    • [Data] Segmentation ๋ฐ์ดํ„ฐ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜: Run Length Encoding(RLE) - coco mask to rle์™€ rle to mask ๊ฒ€์ฆ๊นŒ์ง€
    • [Dataset] Autonomous Driving Open Dataset: nuScenes Dataset(+ nuImages, nuPlan, Occupancy, nuReality)
    • [Dataset] Autonomous Driving Open Dataset: KITTI Dataset (Visual Odometry/SLAM, 3D Object Detection)
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”