R&D/AI

CUDA, cuDNN, TensorRT ์— ๋Œ€ํ•ด์„œ

sunshout1 2026. 3. 28. 07:55
๋ฐ˜์‘ํ˜•

๐Ÿ› ๏ธ GPU ๊ฐ€์† ์ปดํ“จํŒ…์˜ 3๋‹จ๊ณ„ ๋ ˆ์ด์–ด: ์•„ํ‚คํ…์ฒ˜์  ์ ‘๊ทผ

๋”ฅ๋Ÿฌ๋‹ ์Šคํƒ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์ด ์„ธ ๊ฐ€์ง€๋Š” ๋‹จ์ˆœํ•œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•˜๋“œ์›จ์–ด์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด ์ตœ์ ํ™”๋กœ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ํ”„๋กœ์„ธ์Šค๋กœ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. CUDA (The Fundamental Interface)

CUDA๋Š” GPU์˜ ์ˆ˜์ฒœ ๊ฐœ ์ฝ”์–ด์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต(Abstraction Layer)์ž…๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ ์  ์‹ค์ฒด: GPGPU(General-Purpose computing on GPU)๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ๋ณ‘๋ ฌ ์ปดํ“จํŒ… ํ”Œ๋žซํผ์ด์ž ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. CPU์˜ ์ง๋ ฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Thread - Block - Grid๋ผ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์—ฐ์‚ฐ์„ ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(Host to Device ๋ณต์‚ฌ), ์ปค๋„ ์‹คํ–‰ ์ œ์–ด, ๊ทธ๋ฆฌ๊ณ  ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared Memory) ํ™œ์šฉ์„ ํ†ตํ•œ ์ง€์—ฐ ์‹œ๊ฐ„(Latency) ๊ฐ์†Œ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์ „๋ฌธ๊ฐ€์˜ ์‹œ๊ฐ: "GPU๋ผ๋Š” ๊ฑฐ๋Œ€ํ•œ ์—ฐ์‚ฐ ์žฅ์น˜๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๋กœ์šฐ๋ ˆ๋ฒจ(Low-level)์˜ ์šด์˜์ฒด์ œ ์ธํ„ฐํŽ˜์ด์Šค"๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. cuDNN (The Primitive Library for Deep Learning)

cuDNN์€ CUDA ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ์ „์šฉ ๊ฐ€์† ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(Primitives) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ ์  ์‹ค์ฒด: Convolution, Pooling, Normalization, Activation ๋“ฑ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ํ•ต์‹ฌ ์—ฐ์‚ฐ์„ ํ•˜๋“œ์›จ์–ด ํŠน์„ฑ์— ๋งž์ถฐ ํŠœ๋‹ํ•ด๋‘” ์ง‘ํ•ฉ์ฒด์ž…๋‹ˆ๋‹ค.
  • ์™œ ํ•„์š”ํ•œ๊ฐ€?: ๋‹จ์ˆœํžˆ CUDA๋กœ Convolution ์—ฐ์‚ฐ์„ ์งœ๋Š” ๊ฒƒ๊ณผ, ์—”๋น„๋””์•„ ์—”์ง€๋‹ˆ์–ด๋“ค์ด GPU์˜ L1/L2 ์บ์‹œ ๊ตฌ์กฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์„ ๊ณ ๋ คํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ๊นŽ์•„๋†“์€ cuDNN์„ ์“ฐ๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์ฒœ์ง€์ฐจ์ด์ž…๋‹ˆ๋‹ค.
  • ํ•ต์‹ฌ ๊ธฐ์ˆ : Winograd ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ FFT(Fast Fourier Transform) ๊ธฐ๋ฐ˜์˜ Convolution ์ตœ์ ํ™” ๋“ฑ์„ ํ†ตํ•ด ์—ฐ์‚ฐ ๋ณต์žก๋„๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
  • ์ „๋ฌธ๊ฐ€์˜ ์‹œ๊ฐ: "ํ”„๋ ˆ์ž„์›Œํฌ(PyTorch, TensorFlow)๊ฐ€ GPU ์„ฑ๋Šฅ์„ ์ œ๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ์ตœ์ ํ™” ์—”์ง„๋ฃธ"์ž…๋‹ˆ๋‹ค.

3. TensorRT (The Inference Optimizer & Runtime)

TensorRT๋Š” ํ•™์Šต์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•™์Šต๋œ ๋ชจ๋ธ์„ ํŠน์ • GPU ํ•˜๋“œ์›จ์–ด์—์„œ ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ SDK์ž…๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ ์  ์‹ค์ฒด: ํ•™์Šต๋œ ๋ชจ๋ธ(ONNX, TensorFlow ๋“ฑ)์„ ์ž…๋ ฅ๋ฐ›์•„ ํƒ€๊ฒŸ GPU์— ์ตœ์ ํ™”๋œ 'Engine' ํŒŒ์ผ๋กœ ์ง๋ ฌํ™”(Serialization)ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•:
    1. Layer & Tensor Fusion: ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์ณ ๋ฉ”๋ชจ๋ฆฌ IO๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค (์˜ˆ: Conv+Bias+ReLU๋ฅผ ํ•˜๋‚˜์˜ ์ปค๋„๋กœ ํ†ตํ•ฉ).
    2. Precision Calibration: FP32 ๋ชจ๋ธ์„ ์„ฑ๋Šฅ ์†์‹ค์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ FP16์ด๋‚˜ INT8๋กœ ์–‘์žํ™”(Quantization)ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋ช‡ ๋ฐฐ๋กœ ๋†’์ž…๋‹ˆ๋‹ค.
    3. Kernel Auto-tuning: ํ•ด๋‹น GPU ์•„ํ‚คํ…์ฒ˜(Ampere, Hopper ๋“ฑ)์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ „๋ฌธ๊ฐ€์˜ ์‹œ๊ฐ: "์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋“ฏ, ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•˜๋“œ์›จ์–ด ๋งž์ถคํ˜•์œผ๋กœ ์žฌ์„ค๊ณ„ํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์ถ”๋ก  ์—”์ง„"์ž…๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ ๊ด€์ 

๋‹จ๊ณ„ ๊ตฌ์„ฑ ์š”์†Œ ์ฃผ์š” ์—ญํ•  ์‚ฐ์ถœ๋ฌผ/๊ฒฐ๊ณผ
๊ธฐ๋ฐ˜ CUDA ํ•˜๋“œ์›จ์–ด ์ œ์–ด ๋ฐ ๋ณ‘๋ ฌ ์—ฐ์‚ฐ ํ• ๋‹น GPU ์—ฐ์‚ฐ ๊ฐ€์šฉ ์ƒํƒœ
๊ฐœ๋ฐœ/ํ•™์Šต cuDNN ํ‘œ์ค€ ๋”ฅ๋Ÿฌ๋‹ ์—ฐ์‚ฐ์˜ ๊ฐ€์†ํ™” ๊ฐ€์†ํ™”๋œ Training ์„ฑ๋Šฅ
๋ฐฐํฌ/์„œ๋น„์Šค TensorRT ๋ชจ๋ธ ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™” ๋ฐ ์–‘์žํ™” ์ €์ง€์—ฐ(Low Latency) ์ถ”๋ก  ์—”์ง„

๊ฒฐ๋ก ์ ์œผ๋กœ, ํ•™์Šต(Training) ํ™˜๊ฒฝ์—์„œ๋Š” CUDA์™€ cuDNN ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ์„ ๋งž์ถ”๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋ฉฐ, ์‹ค์ œ ์„œ๋น„์Šค(Inference) ๋‹จ๊ณ„์—์„œ๋Š” TensorRT๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput)์„ ์–ผ๋งˆ๋‚˜ ๋Œ์–ด์˜ฌ๋ฆฌ๋А๋ƒ๊ฐ€ ์—”์ง€๋‹ˆ์–ด์˜ ์—ญ๋Ÿ‰์ด ๋ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•