Rescale ๋ฏธํŒ… ์˜ˆ์•ฝ

TensorRT-LLM: ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ ์ถ”๋ก  ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ํฌ๊ด„์  ๊ฐ€์ด๋“œ

์ธ๊ณต์ง€๋Šฅ

TensorRT-LLM: ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ ์ถ”๋ก  ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ํฌ๊ด„์  ๊ฐ€์ด๋“œ

mm
TensorRT-LLM NVIDEA ์–‘์žํ™”, ์—ฐ์‚ฐ ์œตํ•ฉ, FP8 ์ •๋ฐ€๋„ ๋ฐ ๋‹ค์ค‘ GPU ์ง€์›

๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ๊ณ„์† ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ถ”๋ก ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ทธ ์–ด๋А ๋•Œ๋ณด๋‹ค ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. NVIDIA์˜ ํ…์„œRT-LLM LLM ์ถ”๋ก ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์™€ ์ตœ์ ํ™” ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ณผ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์„ญ๋‹ˆ๋‹ค. TensorRT-LLM์€ ์–‘์žํ™”, ์ปค๋„ ํ“จ์ „, ๋น„ํ–‰ ์ค‘ ๋ฐฐ์นญ ๋ฐ ๋‹ค์ค‘ GPU ์ง€์›๊ณผ ๊ฐ™์€ ์ธ์ƒ์ ์ธ ์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐœ์ „์„ ํ†ตํ•ด ๊ธฐ์กด CPU ๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ตœ๋Œ€ 8๋ฐฐ ๋น ๋ฅธ ์ถ”๋ก  ์†๋„๋ฅผ ๋‹ฌ์„ฑํ•˜์—ฌ ํ”„๋กœ๋•์…˜์—์„œ LLM์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์„ ํ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

TensorRT-LLM์„ ์‚ฌ์šฉํ•˜์—ฌ LLM ์ถ”๋ก  ์†๋„ ํ–ฅ์ƒ

TensorRT-LLM์€ LLM ์ถ”๋ก  ์„ฑ๋Šฅ์„ ๊ทน์ ์œผ๋กœ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. NVIDIA์˜ ํ…Œ์ŠคํŠธ์— ๋”ฐ๋ฅด๋ฉด TensorRT ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 8x ๋นจ๋ฆฌ CPU ์ „์šฉ ํ”Œ๋žซํผ๊ณผ ๋น„๊ตํ•œ ์ถ”๋ก  ์†๋„. ์ด๋Š” ์ฑ—๋ด‡, ์ถ”์ฒœ ์‹œ์Šคํ…œ, ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์ž์œจ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ๋ฐœ์ „์ž…๋‹ˆ๋‹ค.

์›๋ฆฌ

TensorRT-LLM์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ค‘์— ์‹ ๊ฒฝ๋ง์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ถ”๋ก  ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.

  • ์ •๋Ÿ‰ํ™”: ๊ฐ€์ค‘์น˜์™€ ํ™œ์„ฑํ™”์˜ ์ •ํ™•๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ์ถ”๋ก  ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ ˆ์ด์–ด ๋ฐ ํ…์„œ ์œตํ•ฉ: ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๋ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๋‹จ์ผ ์ž‘์—…์œผ๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค๋„ ํŠœ๋‹: GPU ๊ณ„์‚ฐ์„ ์œ„ํ•œ ์ตœ์ ์˜ CUDA ์ปค๋„์„ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํ•˜์ดํผ์Šค์ผ€์ผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ถ€ํ„ฐ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐฐํฌ ํ”Œ๋žซํผ์—์„œ LLM ๋ชจ๋ธ์ด ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

TensorRT๋ฅผ ์‚ฌ์šฉํ•œ ์ถ”๋ก  ์„ฑ๋Šฅ ์ตœ์ ํ™”

NVIDIA์˜ CUDA ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ TensorRT๋Š” NVIDIA GPU์—์„œ ์ถ”๋ก ์„ ์œ„ํ•œ ๊ณ ๋„๋กœ ํŠนํ™”๋œ ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์–‘์žํ™”, ์ปค๋„ ํŠœ๋‹, ํ…์„œ ์—ฐ์‚ฐ ์œตํ•ฉ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•จ์œผ๋กœ์จ TensorRT๋Š” LLM์ด ์ตœ์†Œ ์ง€์—ฐ ์‹œ๊ฐ„์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ธฐ์ˆ  ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ •๋Ÿ‰ํ™”: ์ด๋ฅผ ํ†ตํ•ด ๋†’์€ ์ •ํ™•๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ชจ๋ธ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜์น˜์  ์ •๋ฐ€๋„๋ฅผ ๋‚ฎ์ถ”์–ด ์ถ”๋ก  ์†๋„๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…์„œ ํ“จ์ „: ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์„ ๋‹จ์ผ CUDA ์ปค๋„๋กœ ์œตํ•ฉํ•จ์œผ๋กœ์จ TensorRT๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • ์ปค๋„ ์ž๋™ ํŠœ๋‹: TensorRT๋Š” ๊ฐ ์ž‘์—…์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ปค๋„์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ฃผ์–ด์ง„ GPU์— ๋Œ€ํ•œ ์ถ”๋ก ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด TensorRT-LLM์ด ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ, ์ถ”์ฒœ ์—”์ง„, ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค ๋ถ„์„๊ณผ ๊ฐ™์€ ๋”ฅ๋Ÿฌ๋‹ ์ž‘์—…์— ๋Œ€ํ•œ ์ถ”๋ก  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TensorRT๋กœ AI ์›Œํฌ๋กœ๋“œ ๊ฐ€์†ํ™”

TensorRT๋Š” ์ •๋ฐ€ ์ตœ์ ํ™”์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜์—ฌ ๋”ฅ ๋Ÿฌ๋‹ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ฐ€์†ํ™”ํ•ฉ๋‹ˆ๋‹ค. INT8 ๊ทธ๋ฆฌ๊ณ  FP16. ์ด๋Ÿฌํ•œ ๊ฐ์†Œ๋œ ์ •๋ฐ€๋„ ํ˜•์‹์€ ์ •ํ™•๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํ›จ์”ฌ ๋” ๋น ๋ฅธ ์ถ”๋ก ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ธ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

INT8 ๊ทธ๋ฆฌ๊ณ  FP16 ์ตœ์ ํ™”๋Š” ํŠนํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

  • ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ: ๊ฐ์ฒด ๊ฐ์ง€์™€ ๊ฐ™์€ AI ๊ธฐ๋ฐ˜ ๋น„๋””์˜ค ์ฒ˜๋ฆฌ ์ž‘์—…์€ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”์ฒœ ์‹œ์Šคํ…œ: TensorRT๋Š” ๋Œ€๋Ÿ‰์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ถ”๋ก ์„ ๊ฐ€์†ํ™”ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ์‹ค์‹œ๊ฐ„ ๊ฐœ์ธํ™”๋ฅผ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์—ฐ ์–ธ์–ด ์ฒ˜๋ฆฌ (NLP): TensorRT๋Š” ํ…์ŠคํŠธ ์ƒ์„ฑ, ๋ฒˆ์—ญ, ์š”์•ฝ๊ณผ ๊ฐ™์€ NLP ์ž‘์—…์˜ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

NVIDIA Triton์œผ๋กœ ๋ฐฐํฌ, ์‹คํ–‰ ๋ฐ ํ™•์žฅ

๋ชจ๋ธ์ด TensorRT-LLM์œผ๋กœ ์ตœ์ ํ™”๋˜๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋ฐฐํฌ, ์‹คํ–‰ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NVIDIA Triton ์ถ”๋ก  ์„œ๋ฒ„. Triton์€ ๋™์  ๋ฐฐ์นญ, ๋ชจ๋ธ ์•™์ƒ๋ธ” ๋ฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ AI ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์œ ์—ฐํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋™์‹œ ๋ชจ๋ธ ์‹คํ–‰: ์—ฌ๋Ÿฌ ๋ชจ๋ธ์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜์—ฌ GPU ํ™œ์šฉ๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์  ๋ฐฐ์นญ: ์—ฌ๋Ÿฌ ์ถ”๋ก  ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆฌ๋ฐ ์˜ค๋””์˜ค/๋น„๋””์˜ค ์ž…๋ ฅ: ๋ผ์ด๋ธŒ ๋น„๋””์˜ค ๋ถ„์„์ด๋‚˜ ์Œ์„ฑ-ํ…์ŠคํŠธ ์„œ๋น„์Šค์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด Triton์€ TensorRT-LLM ์ตœ์ ํ™”๋œ ๋ชจ๋ธ์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๋ฐ ๊ท€์ค‘ํ•œ ๋„๊ตฌ๊ฐ€ ๋˜์–ด ๋†’์€ ํ™•์žฅ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

LLM ์ถ”๋ก ์„ ์œ„ํ•œ TensorRT-LLM์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

์˜คํ”ˆ์†Œ์Šค ํŒŒ์ด์ฌ API

TensorRT-LLM์€ ๊ณ ๋„๋กœ ๋ชจ๋“ˆํ™”๋œ ์˜คํ”ˆ์†Œ์Šค ํŒŒ์ด์ฌ API, LLM ์ •์˜, ์ตœ์ ํ™” ๋ฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ CUDA ๋˜๋Š” ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์‹ฌ์ธต์ ์ธ ์ง€์‹์ด ์—†์–ด๋„ ์‚ฌ์šฉ์ž ์ •์˜ LLM์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์ „ ๊ตฌ์ถ•๋œ LLM์„ ํ•„์š”์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„ํ–‰ ์ค‘ ๋ฐฐ์น˜ ๋ฐ ํŽ˜์ด์ง•๋œ ์ฃผ์˜

TensorRT-LLM์˜ ๋›ฐ์–ด๋‚œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋น„ํ–‰ ์ค‘ ๋ฐฐ์น˜, ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜์—ฌ ํ…์ŠคํŠธ ์ƒ์„ฑ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‹œํ€€์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ GPU ํ™œ์šฉ๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋˜ํ•œ, ํŽ˜์ด์ง• ์ฃผ์˜ ๊ธด ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ† ํฐ์— ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹ , ํŽ˜์ด์ง€ ์–ดํ…์…˜์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "ํŽ˜์ด์ง€"๋กœ ๋‚˜๋ˆ„์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ํšจ์œจ์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ค‘ GPU ๋ฐ ๋‹ค์ค‘ ๋…ธ๋“œ ์ถ”๋ก 

๋” ํฐ ๋ชจ๋ธ์ด๋‚˜ ๋” ๋ณต์žกํ•œ ์ž‘์—… ๋ถ€ํ•˜์˜ ๊ฒฝ์šฐ TensorRT-LLM์€ ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ GPU ๊ทธ๋ฆฌ๊ณ  ๋‹ค์ค‘ ๋…ธ๋“œ ์ถ”๋ก . ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ธ ๊ณ„์‚ฐ์„ ์—ฌ๋Ÿฌ GPU๋‚˜ ๋…ธ๋“œ์— ๋ถ„์‚ฐํ•˜์—ฌ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ฐœ์„ ํ•˜๊ณ  ์ „์ฒด ์ถ”๋ก  ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FP8 ์ง€์›

์˜ ๋„๋ž˜์™€ ํ•จ๊ป˜ FP8 (8๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ), TensorRT-LLM์€ NVIDIA์˜ H100 GPU๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ์ด ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ตœ์ ํ™”๋œ ์ถ”๋ก ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. FP8์€ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ด๊ณ  ๊ณ„์‚ฐ์„ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๋ฉฐ, ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

TensorRT-LLM ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ

TensorRT-LLM์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋ฉด LLM ์ถ”๋ก  ๊ธฐ๋Šฅ์„ ๋” ์ž˜ ํ™œ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ์ •์˜

TensorRT-LLM์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ Python API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LLM์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API๋Š” ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ชจ๋ธ์„ ํ†ตํ•ด GPT๋‚˜ BERT์™€ ๊ฐ™์€ LLM ์•„ํ‚คํ…์ฒ˜์— ํฌํ•จ๋œ ๋ณต์žกํ•œ ๊ณ„์ธต์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด๊ฒŒ ๋ฐ”์ธ๋”ฉ

๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ „์— ๊ฐ€์ค‘์น˜(๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜)๋ฅผ ๋„คํŠธ์›Œํฌ์— ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ TensorRT ์—”์ง„ ๋‚ด์— ๋‚ด์žฅ๋˜์–ด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. TensorRT-LLM์€ ๋˜ํ•œ ์ปดํŒŒ์ผ ํ›„ ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ์ž์ฃผ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋ธ์— ์œ ์—ฐ์„ฑ์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด ๋งค์นญ ๋ฐ ํ“จ์ „

ํ“จ์ „ ์ž‘์ „ TensorRT-LLM์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ(์˜ˆ: ํ™œ์„ฑํ™” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ํ–‰๋ ฌ ๊ณฑ์…ˆ)์„ ๋‹จ์ผ CUDA ์ปค๋„๋กœ ์œตํ•ฉํ•จ์œผ๋กœ์จ TensorRT๋Š” ์—ฌ๋Ÿฌ ์ปค๋„ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ „์†ก์ด ์ค„์–ด๋“ค๊ณ  ์ถ”๋ก  ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ

TensorRT์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์Œ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธโ€”๋ฉ€ํ‹ฐํ—ค๋“œ ์–ดํ…์…˜ ๋ธ”๋ก ์ตœ์ ํ™”์™€ ๊ฐ™์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ปค๋„. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”Œ๋ž˜์‹œ ์–ดํ…์…˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ LLM ์–ดํ…์…˜ ๊ณ„์ธต์˜ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ: TensorRT-LLM ์„ฑ๋Šฅ ํ–ฅ์ƒ

TensorRT-LLM์€ ๋‹ค์–‘ํ•œ GPU์—์„œ LLM ์ถ”๋ก ์— ๋Œ€ํ•œ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‹ค์–‘ํ•œ NVIDIA GPU์—์„œ TensorRT-LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก  ์†๋„(์ดˆ๋‹น ํ† ํฐ์œผ๋กœ ์ธก์ •)๋ฅผ ๋น„๊ตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ Precision ์ž…๋ ฅ/์ถœ๋ ฅ ๊ธธ์ด H100(80GB) A100(80GB) L40SFP8
GPTJ 6B FP8 128/128 34,955 11,206 6,998
GPTJ 6B FP8 2048/128 2,800 1,354 747
LLaMA v2 7B FP8 128/128 16,985 10,725 6,121
LLaMA v3 8B FP8 128/128 16,708 12,085 8,273

์ด๋Ÿฌํ•œ ๋ฒค์น˜๋งˆํฌ๋Š” TensorRT-LLM์ด ํŠนํžˆ ๊ธด ์‹œํ€€์Šค์—์„œ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์‹ค์Šต: TensorRT-LLM ์„ค์น˜ ๋ฐ ๋นŒ๋“œ

1๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด TensorRT-LLM์€ ๋ชจ๋ธ์„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ œ์–ด๋œ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

docker build --pull \
             --target devel \
             --file docker/Dockerfile.multi \
             --tag tensorrt_llm/devel:latest .


2๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

NVIDIA GPU์— ์•ก์„ธ์Šคํ•˜์—ฌ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

docker run --rm -it \
           --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \
           --volume ${PWD}:/code/tensorrt_llm \
           --workdir /code/tensorrt_llm \
           tensorrt_llm/devel:latest

3๋‹จ๊ณ„: ์†Œ์Šค์—์„œ TensorRT-LLM ๋นŒ๋“œ

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ TensorRT-LLM์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt
pip install ./build/tensorrt_llm*.whl

์ด ์˜ต์…˜์€ Python ์ข…์†์„ฑ๊ณผ ๊ด€๋ จ๋œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์—์„œ C++ ํ†ตํ•ฉ์— ์ง‘์ค‘ํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด C++ ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cpp/build/tensorrt_llm C++ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: TensorRT-LLM C++ ๋Ÿฐํƒ€์ž„ ์—ฐ๊ฒฐ

C++ ํ”„๋กœ์ ํŠธ์— TensorRT-LLM์„ ํ†ตํ•ฉํ•  ๋•Œ ํ”„๋กœ์ ํŠธ์˜ ํฌํ•จ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. cpp/include ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์•ˆ์ •์ ์ด๊ณ  ์ง€์›๋˜๋Š” API ํ—ค๋”๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. TensorRT-LLM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” C++ ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ์˜ CMake ๊ตฌ์„ฑ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)

์ด ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ C++ ํ”„๋กœ์ ํŠธ์—์„œ TensorRT-LLM ์ตœ์ ํ™”์˜ ์ด์ ์„ ํ™œ์šฉํ•˜์—ฌ ์ €์ˆ˜์ค€ ๋˜๋Š” ๊ณ ์„ฑ๋Šฅ ํ™˜๊ฒฝ์—์„œ๋„ ํšจ์œจ์ ์ธ ์ถ”๋ก ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ TensorRT-LLM ๊ธฐ๋Šฅ

TensorRT-LLM์€ ๋‹จ์ˆœํ•œ ์ตœ์ ํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋Œ€๊ทœ๋ชจ LLM ๋ฐฐํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๋น„ํ–‰ ์ค‘ ๋ฐฐ์น˜

๊ธฐ์กด ๋ฐฐ์นญ ๋ฐฉ์‹์€ ๋ฐฐ์น˜๊ฐ€ ์™„์ „ํžˆ ์ˆ˜์ง‘๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํ–‰ ์ค‘ ๋ฐฐ์น˜ ๋ฐฐ์น˜ ๋‚ด์—์„œ ์™„๋ฃŒ๋œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๋ก ์„ ๋™์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ์š”์ฒญ์„ ์ˆ˜์ง‘ํ•˜์—ฌ ์ด๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์œ ํœด ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  GPU ํ™œ์šฉ๋„๋ฅผ ๋†’์—ฌ ์ „์ฒด ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์‘๋‹ต ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ์ฑ—๋ด‡์ด๋‚˜ ์Œ์„ฑ ๋น„์„œ ๋“ฑ์˜ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ํŽ˜์ด์ง• ์ฃผ์˜

ํŽ˜์ด์ง• ์ฃผ์˜ ๋Œ€๊ทœ๋ชจ ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์‹œํ€€์Šค์˜ ๋ชจ๋“  ํ† ํฐ์— ๋Œ€ํ•ด ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋Œ€์‹ (๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Œ), Paged Attention์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ธ์ด ํ‚ค-๊ฐ’ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์˜ "ํŽ˜์ด์ง€"๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŽ˜์ด์ง€๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Paged Attention์€ ๋Œ€์šฉ๋Ÿ‰ ์‹œํ€€์Šค ๊ธธ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋Š” ๋ฐ ์ค‘์š”ํ•˜๋ฉฐ, ํŠนํžˆ GPT ๋ฐ LLaMA์™€ ๊ฐ™์€ ์ƒ์„ฑ ๋ชจ๋ธ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

3. ์‚ฌ์šฉ์ž ์ •์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ

TensorRT-LLM์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์ถค ํ”Œ๋Ÿฌ๊ทธ์ธํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ‘œ์ค€ TensorRT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ํŠน์ • ์ตœ์ ํ™”๋‚˜ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ปค๋„์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”Œ๋ž˜์‹œ ์–ดํ…์…˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Transformer ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์—์„œ ๋ฉ€ํ‹ฐํ—ค๋“œ ์–ดํ…์…˜ ๋ ˆ์ด์–ด๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ž˜ ์•Œ๋ ค์ง„ ์ปค์Šคํ…€ ์ปค๋„์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” LLM์˜ ๊ฐ€์žฅ ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ ์–ดํ…์…˜ ๊ณ„์‚ฐ์—์„œ ์ƒ๋‹นํ•œ ์†๋„ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ TensorRT-LLM ๋ชจ๋ธ์— ํ†ตํ•ฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ CUDA ์ปค๋„์„ ์ž‘์„ฑํ•˜์—ฌ TensorRT์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ชจ๋ธ ์‹คํ–‰ ์ค‘์— ํ˜ธ์ถœ๋˜์–ด ๋งž์ถคํ˜• ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4. NVIDIA H8์˜ FP100 ์ •๋ฐ€๋„

์™€ FP8 ์ •๋ฐ€๋„TensorRT-LLM์€ NVIDIA์˜ ์ตœ์‹  ํ•˜๋“œ์›จ์–ด ํ˜์‹ ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. H100 ํ˜ธํผ ์•„ํ‚คํ…์ฒ˜. FP8์€ ๊ฐ€์ค‘์น˜์™€ ํ™œ์„ฑํ™”๋ฅผ 8๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜์—ฌ LLM์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์—ฌ ์ •ํ™•๋„๋ฅผ ํฌ๊ฒŒ ํฌ์ƒํ•˜์ง€ ์•Š๊ณ ๋„ ๋” ๋น ๋ฅธ ๊ณ„์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. TensorRT-LLM์€ ์ž๋™์œผ๋กœ ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•˜์—ฌ ์ตœ์ ํ™”๋œ FP8 ์ปค๋„์„ ํ™œ์šฉํ•˜์—ฌ ์ถ”๋ก  ์‹œ๊ฐ„์„ ๋”์šฑ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด TensorRT-LLM์€ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ๊ณผ ์—๋„ˆ์ง€ ํšจ์œจ์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ์— ์ด์ƒ์ ์ธ ์„ ํƒ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ: Triton Inference Server๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TensorRT-LLM ๋ฐฐํฌ

์ƒ์‚ฐ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ NVIDIA์˜ ํŠธ๋ฆฌํ†ค ์ถ”๋ก  ์„œ๋ฒ„ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” Triton์„ ์‚ฌ์šฉํ•˜์—ฌ TensorRT-LLM ์ตœ์ ํ™” ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ๋ชจ๋ธ ์ €์žฅ์†Œ ์„ค์ •

TensorRT-LLM ๋ชจ๋ธ ํŒŒ์ผ์„ ์ €์žฅํ•  Triton์šฉ ๋ชจ๋ธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, GPT2 ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•œ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

mkdir -p model_repository/gpt2/1
cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/

2๋‹จ๊ณ„: Triton ๊ตฌ์„ฑ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

๊ฐ™์€์—์„œ model_repository/gpt2/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ ์ด๋ฆ„์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. config.pbtxt Triton์— ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. TensorRT-LLM์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

name: "gpt2"
platform: "tensorrt_llm"
max_batch_size: 8

input [
  {
    name: "input_ids"
    data_type: TYPE_INT32
    dims: [-1]
  }
]

output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [-1, -1]
  }
]

3๋‹จ๊ณ„: Triton ์„œ๋ฒ„ ์‹คํ–‰

๋‹ค์Œ Docker ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์ €์žฅ์†Œ๋กœ Triton์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

docker run --rm --gpus all \
    -v $(pwd)/model_repository:/models \
    nvcr.io/nvidia/tritonserver:23.05-py3 \
    tritonserver --model-repository=/models

4๋‹จ๊ณ„: Triton์— ์ถ”๋ก  ์š”์ฒญ ๋ณด๋‚ด๊ธฐ

Triton ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉด HTTP ๋˜๋Š” gRPC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก  ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, curl ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด:

curl -X POST http://localhost:8000/v2/models/gpt2/infer -d '{
  "inputs": [
    {"name": "input_ids", "shape": [1, 128], "datatype": "INT32", "data": [[101, 234, 1243]]}
  ]
}'

Triton์€ TensorRT-LLM ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋กœ์ง“์„ ์ถœ๋ ฅ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

TensorRT-LLM์„ ์‚ฌ์šฉํ•œ LLM ์ถ”๋ก  ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

TensorRT-LLM์˜ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋ธ ์ตœ์ ํ™” ๋ฐ ๋ฐฐํฌ ๊ณผ์ •์—์„œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ํŒ์ž…๋‹ˆ๋‹ค.

1. ์ตœ์ ํ™” ์ „ ๋ชจ๋ธ ํ”„๋กœํŒŒ์ผ๋ง

์–‘์žํ™”๋‚˜ ์ปค๋„ ํ“จ์ „๊ณผ ๊ฐ™์€ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— NVIDIA์˜ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ(Nsight Systems ๋˜๋Š” TensorRT Profiler ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์‹คํ–‰์˜ ํ˜„์žฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ์„ ํ•  ํŠน์ • ์˜์—ญ์„ ํƒ€๊ฒŸํŒ…ํ•˜์—ฌ ๋” ํšจ๊ณผ์ ์ธ ์ตœ์ ํ™”๋ฅผ ์ด๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํ˜ผํ•ฉ ์ •๋ฐ€๋„ ์‚ฌ์šฉ

TensorRT-LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์ตœ์ ํ™”ํ•  ๋•Œ ํ˜ผํ•ฉ ์ •๋ฐ€๋„ (FP16๊ณผ FP32์˜ ์กฐํ•ฉ)์€ ์ •ํ™•๋„์˜ ํฐ ์†์‹ค ์—†์ด ์ƒ๋‹นํ•œ ์†๋„ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์†๋„์™€ ์ •ํ™•๋„์˜ ์ตœ์ƒ์˜ ๊ท ํ˜•์„ ์œ„ํ•ด, ํŠนํžˆ H8 GPU์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ FP100์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

3. ๋Œ€๊ทœ๋ชจ ์‹œํ€€์Šค์— ๋Œ€ํ•œ ํŽ˜์ด์ง€ ์–ดํ…์…˜ ํ™œ์šฉ

๋ฌธ์„œ ์š”์•ฝ์ด๋‚˜ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋Œ€ํ™”์™€ ๊ฐ™์ด ๊ธด ์ž…๋ ฅ ์‹œํ€€์Šค๊ฐ€ โ€‹โ€‹ํ•„์š”ํ•œ ์ž‘์—…์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋‹ค์Œ์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ํŽ˜์ด์ง• ์ฃผ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ค๊ณ  ์ถ”๋ก  ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค.

4. ๋‹ค์ค‘ GPU ์„ค์ •์„ ์œ„ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฏธ์„ธ ์กฐ์ •

์—ฌ๋Ÿฌ GPU ๋˜๋Š” ๋…ธ๋“œ์— LLM์„ ๋ฐฐํฌํ•  ๋•Œ ์„ค์ •์„ ๋ฏธ์„ธ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํ…์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ดํ”„๋ผ์ธ ๋ณ‘๋ ฌ์„ฑ ํŠน์ • ์ž‘์—… ๋ถ€ํ•˜์— ๋งž๊ฒŒ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“œ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋ฉด GPU์— ๊ฑธ์ณ ๊ณ„์‚ฐ ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐํ•˜์—ฌ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” TensorRT-LLM ์„ค์ •, Python API๋กœ ๋ชจ๋ธ ์ตœ์ ํ™”, Triton Inference Server์— ๋ฐฐํฌ, ํšจ์œจ์ ์ธ ์ถ”๋ก ์„ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ ์šฉ์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. TensorRT-LLM์„ ์‚ฌ์šฉํ•˜๋ฉด AI ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๊ณ , ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ LLM ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹์„ ์ฐธ์กฐํ•˜์„ธ์š”. TensorRT-LLM ์„ค๋ช…์„œ ๊ทธ๋ฆฌ๊ณ  Triton Inference Server ์„ค๋ช…์„œ.

์ €๋Š” ์ง€๋‚œ 50๋…„ ๋™์•ˆ ๊ธฐ๊ณ„ ํ•™์Šต๊ณผ ๋”ฅ ๋Ÿฌ๋‹์˜ ๋งคํ˜น์ ์ธ ์„ธ๊ณ„์— ๋ชฐ๋‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ์—ด์ •๊ณผ ์ „๋ฌธ โ€‹โ€‹์ง€์‹์€ ํŠนํžˆ AI/ML์— ์ค‘์ ์„ ๋‘” XNUMX๊ฐœ ์ด์ƒ์˜ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋„๋ก ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ๊ณ„์†๋˜๋Š” ํ˜ธ๊ธฐ์‹ฌ์€ ๋˜ํ•œ ๋‚ด๊ฐ€ ๋” ํƒ๊ตฌํ•˜๊ณ  ์‹ถ์€ ๋ถ„์•ผ์ธ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋กœ ๋‚˜๋ฅผ ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค.