AWS Cloud

AWS ์‹ค์ „ LLM ์…€ํ”„ ํ˜ธ์ŠคํŒ…, ์ตœ์ ํ™” ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ถ

Pro.Dev 2025. 4. 7. 02:42
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์ „ LLM ์…€ํ”„ ํ˜ธ์ŠคํŒ… ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ถ

์กฐ์ง ๋˜๋Š” ๊ฐœ์ธ์ด ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ์ž์ฒด์ ์œผ๋กœ ๋ฐฐํฌ(Self-hosting)ํ•˜๊ณ  ์šด์˜ํ•  ๋•Œ ํ•„์š”ํ•œ ํ•ต์‹ฌ ์ง€์นจ์„ ์ •๋ฆฌํ•œ ์‹ค๋ฌด ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.


์œ ํŠœ๋ธŒ ์„ค๋ช… ๋งํฌ : https://youtu.be/YiCqDJFExEE

 

๐Ÿ“Œ 1. ์™œ Self-Hosting์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

์กฐ๊ฑด Self-hosting ๊ณ ๋ ค ๋Œ€์ƒ ์—ฌ๋ถ€
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค โœ… Yes
API ๋น„์šฉ์ด ๋ถ€๋‹ด๋œ๋‹ค โœ… Yes
๋ณด์•ˆ/์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค โœ… Yes
ํŠน์ • ๋„๋ฉ”์ธ ํŠนํ™” ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค โœ… Yes
๋ฒกํ„ฐ ๊ฒ€์ƒ‰/์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์šด์˜ํ•œ๋‹ค โœ… Yes

โœ… ์œ„ ํ•ญ๋ชฉ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹น๋˜๋ฉด, self-hosting์€ ํ˜„์‹ค์ ์ธ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšง 2. ๋ฐฐํฌ ์ค€๋น„: ์ธํ”„๋ผ ๊ฒฝ๊ณ„ ์ •์˜

๐Ÿ” ๋ฐฐํฌ ์ „์— ๋‹ค์Œ ์งˆ๋ฌธ์— ๋‹ตํ•ด๋ณด์„ธ์š”:

  • ์–ด๋Š ์ •๋„์˜ GPU/CPU ์ž์›์„ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • ๋ชฉํ‘œ ์ง€์—ฐ ์‹œ๊ฐ„(latency)๊ณผ ๋™์‹œ ์‚ฌ์šฉ์ž ์ˆ˜๋Š”?
  • ์–ด๋–ค ์œ ํ˜•์˜ ๋ชจ๋ธ๊ณผ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š”๊ฐ€?

โœ… ๋ชฉํ‘œ ๋ฌธ์žฅ ์˜ˆ์‹œ:

"์›” 100๋งŒ ์› ์ดํ•˜ ๋น„์šฉ์œผ๋กœ, 4์ดˆ ์ดํ•˜ ์‘๋‹ต ์†๋„๋กœ, 100๋ช… ๋™์‹œ ์‚ฌ์šฉ์ž ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค."

์ด ๋ฌธ์žฅ์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋ธ ํฌ๊ธฐ, ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”, ์„œ๋น™ ๋ฐฉ์‹ ๋“ฑ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ฆ 3. ์–‘์žํ™” ๋ชจ๋ธ ์ ๊ทน ํ™œ์šฉํ•˜๊ธฐ

์žฅ์  ์„ค๋ช…
๋ฉ”๋ชจ๋ฆฌ ์ ˆ๊ฐ 4bit ์–‘์žํ™”๋กœ ๋Œ€ํ˜• ๋ชจ๋ธ๋„ ๋‹จ์ผ GPU์— ์ ์žฌ ๊ฐ€๋Šฅ
์„ฑ๋Šฅ ์œ ์ง€ ์ •ํ™•๋„ ์†์‹ค ์—†์ด ์†๋„ ํ–ฅ์ƒ (๋…ผ๋ฌธ: The Case for 4-bit Precision)
๋น„์šฉ ์ ˆ๊ฐ ๊ฐ™์€ GPU์—์„œ ๋” ๋งŽ์€ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿ”ง ์ถ”์ฒœ ์ €์žฅ์†Œ:

  • Hugging Face: TheBloke, nousresearch, mlx-community
  • ํฌ๋งท: GGUF, GPTQ, AWQ

๐Ÿ” 4. GPU ํ™œ์šฉ๋ฅ ์„ ๋†’์ด๋Š” ๋ฐฐ์น˜ ์ „๋žต

โŒ ํ•˜์ง€ ๋ง ๊ฒƒ:

  • ์š”์ฒญ๋งˆ๋‹ค 1ํšŒ ์‹คํ–‰ (No Batching)
  • ์ •์  ๋ฐฐ์น˜๋งŒ ์‚ฌ์šฉ (Spiky Utilization)

โœ… ์ถ”์ฒœ ์ „๋žต: Continuous Batching

  • ํ† ํฐ ๋‹จ์œ„๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ GPU๋ฅผ ๊ณ„์† ํ™œ์šฉ
  • vLLM ๋“ฑ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›

โš™๏ธ 5. ์›Œํฌ๋กœ๋“œ ์ตœ์ ํ™” ๊ธฐ์ˆ 

๊ธฐ์ˆ  ์„ค๋ช… ํšจ๊ณผ
Prefix Caching ๊ณต์œ ๋˜๋Š” ๊ธด ํ”„๋กฌํ”„ํŠธ ์บ์‹œ ์žฌ์‚ฌ์šฉ ์‘๋‹ต ์†๋„ ์ตœ๋Œ€ 7๋ฐฐ ํ–ฅ์ƒ
SSD (Speculative Decoding) ๋ฐ˜๋ณต๋˜๋Š” ์ถœ๋ ฅ ํŒจํ„ด ์บ์‹ฑ JSON ์ถ”์ถœ ๋“ฑ์—์„œ 2.5๋ฐฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ

๋‚ด ์›Œํฌ๋กœ๋“œ๋ฅผ ์•„๋Š” ๊ฒƒ์€ API ์ œ๊ณต์ž๊ฐ€ ์ ˆ๋Œ€ ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์—†๋Š” ์žฅ์ ์ž…๋‹ˆ๋‹ค.


๐Ÿง  6. ๋ชจ๋ธ ์„ ํƒ ์ „๋žต

  • LLM์€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ผ๋ถ€์ผ ๋ฟ
  • ๊ฒ€์ƒ‰(Retrieval) ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๋ฉด ์ž‘์€ ๋ชจ๋ธ๋กœ๋„ ์ถฉ๋ถ„

๐Ÿ”ง ์ถ”์ฒœ ๋ชจ๋ธ

  • ์†Œํ˜•: Gemma 2B, TinyLlama, Phi-2
  • ์ค‘ํ˜•: Llama 2 7B, Mistral, Qwen 7B
  • ๋Œ€ํ˜•: Mixtral, Llama 2 70B (์ •๋ง ํ•„์š”ํ•  ๋•Œ๋งŒ)

๐Ÿ—๏ธ 7. ์กฐ์ง ๋‚ด ์ธํ”„๋ผ ํ†ตํ•ฉ ์ „๋žต

โŒ ๋‚˜์œ ์˜ˆ:

  • ํŒ€๋งˆ๋‹ค Ollama, vLLM, HuggingFace ๋”ฐ๋กœ ์šด์˜
  • GPU ์ค‘๋ณต ์‚ฌ์šฉ, ์šด์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€

โœ… ์ข‹์€ ์˜ˆ: ์ค‘์•™ API ์‹œ์Šคํ…œ

๋‚ด๋ถ€ OpenAI API ๋˜๋Š” Bedrock์„ ๋งŒ๋“ค์–ด, ๋ชจ๋“  ํŒ€์ด ๊ณต์œ  API๋กœ ์‚ฌ์šฉ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
์ถ”๋ก  ์„œ๋ฒ„ vLLM ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ ๋ชจ๋ธ API
๋ชจ๋ธ ์ข…๋ฅ˜ ๋Œ€ํ˜• + ์ค‘ํ˜• + ์†Œํ˜• + ๋ณด์กฐ ๋ชจ๋ธ(์ž„๋ฒ ๋”ฉ ๋“ฑ)
๋‚ด๋ถ€ ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž, ML ์—”์ง€๋‹ˆ์–ด ๋“ฑ

๐ŸŽฏ โ€œ์„œ๋น™์€ ์–ด๋ ต๋‹ค. ํ•œ ๋ฒˆ๋งŒ ์ž˜ ํ•˜๊ณ  ๋ชจ๋‘๊ฐ€ ๊ณต์œ ํ•˜์ž.โ€


๐Ÿ” vLLM์ด๋ž€?

vLLM = "Very Fast LLM"
์˜คํ”ˆ์†Œ์Šค๋กœ ๊ฐœ๋ฐœ๋œ LLM ์ถ”๋ก  ์ตœ์ ํ™” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
Meta, Google, Microsoft ๊ฐ™์€ ๋Œ€๊ธฐ์—…๋“ค๋„ ์ฐธ๊ณ ํ•  ์ •๋„๋กœ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ ์™œ vLLM์ด ์ค‘์š”ํ•œ๊ฐ€์š”?

vLLM์€ ๊ธฐ์กด Hugging Face transformers๋‚˜ Text Generation Inference๋ณด๋‹ค๋„ ํ›จ์”ฌ ๋” ๋น ๋ฅธ ์ถ”๋ก  ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โœ… ํ•ต์‹ฌ ํŠน์ง•:

๊ธฐ๋Šฅ์„ค๋ช…
Continuous Batching ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ํ† ํฐ ๋‹จ์œ„๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐฐ์น˜ โ†’ GPU ์‚ฌ์šฉ๋ฅ  ๊ทน๋Œ€ํ™”
PagedAttention ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•ด์„œ ์‚ฌ์šฉ โ†’ ํฐ ๋ชจ๋ธ๋„ ํšจ์œจ์ ์œผ๋กœ ๋Œ๋ฆผ
Prefix Caching ์ง€์› RAG์ฒ˜๋Ÿผ ๋™์ผํ•œ ๋งฅ๋ฝ์„ ๋ฐ˜๋ณต ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์—์„œ ์„ฑ๋Šฅ ๋Œ€ํญ ํ–ฅ์ƒ
OpenAI API์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค chat/completions ์—”๋“œํฌ์ธํŠธ ๊ทธ๋Œ€๋กœ ์ง€์› (GPT์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
๋‹ค์–‘ํ•œ ๋ชจ๋ธ ์ง€์› LLaMA, Mistral, Falcon, Baichuan ๋“ฑ Hugging Face ๋ชจ๋ธ ๋Œ€๋ถ€๋ถ„ ํ˜ธํ™˜
๋น ๋ฅธ ์ถ”๋ก  ์†๋„ GPU ํ•œ ์žฅ์œผ๋กœ๋„ ์ˆ˜์‹ญ ๋ช…์˜ ๋™์‹œ ์‚ฌ์šฉ์ž ์‘๋‹ต ๊ฐ€๋Šฅ

๐Ÿ’ก ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

# vLLM ์„ค์น˜
 
pip install vllm
 
# ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„œ๋ฒ„ ์‹คํ–‰
 
python3 -m vllm.entrypoints.openai.api_server \ --model mistralai/Mistral-7B-Instruct-v0.2 \ --quantization awq

 

์ด์ œ http://localhost:8000/v1/chat/completions ์œผ๋กœ OpenAI์ฒ˜๋Ÿผ API ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Š ์„ฑ๋Šฅ ์˜ˆ์‹œ (์‹ค์ œ ๋ฒค์น˜๋งˆํฌ)

ํ•ญ๋ชฉ๊ธฐ์กด ๋ฐฉ์‹ (HuggingFace)vLLM
์ถ”๋ก  ์†๋„ ๋Š๋ฆผ (100ms/token ์ด์ƒ) ๋น ๋ฆ„ (10~20ms/token)
GPU ํ™œ์šฉ๋ฅ  ๋‚ฎ์Œ (~30%) ๋†’์Œ (70~90%)
๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ œํ•œ์  ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ๋™์‹œ ์š”์ฒญ ๊ฐ€๋Šฅ

โœจ vLLM ์ถ”์ฒœ ์ƒํ™ฉ

  • ๊ณ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์›น ์„œ๋น„์Šค ๊ธฐ๋ฐ˜ ์ฑ—๋ด‡ ์šด์˜
  • RAG ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ์งˆ์˜์‘๋‹ต ์‹œ์Šคํ…œ
  • GPU๊ฐ€ ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋ชจ๋ธ์„ ๋Œ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • OpenAI API์ฒ˜๋Ÿผ chat/completion REST API ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

๐Ÿšซ ์ฐธ๊ณ ๋กœ ์ด๋Ÿฐ ๊ฑด ์ง์ ‘ ์•ˆ ํ•ด์ค๋‹ˆ๋‹ค

  • **๋ชจ๋ธ ํ•™์Šต(training)**์€ ์ง€์›ํ•˜์ง€ ์•Š์Œ โ†’ ์ถ”๋ก (inference)๋งŒ!
  • ์™„์ „ํ•œ AI ํŒŒ์ดํ”„๋ผ์ธ ํ”„๋ ˆ์ž„์›Œํฌ(X) โ†’ ์ถ”๋ก  ์„œ๋ฒ„ ์ „์šฉ(O)

 

โœ… vLLM์—์„œ ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ์„ ์„œ๋น™ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด

vLLM์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Hugging Face Transformers ํ˜•์‹์˜ ๋ชจ๋ธ์„ ์„œ๋น™ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ธํŠœ๋‹ ํ›„์— vLLM์œผ๋กœ ์„œ๋น™ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

1. โœ… ๋ชจ๋ธ ํฌ๋งท: transformers compatible (.bin, safetensors, gguf๋Š” X)

  • vLLM์€ transformers ํ˜•์‹์˜ config.json, pytorch_model.bin ๋“ฑ์˜ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ํŒŒ์ธํŠœ๋‹์„ PEFT, LoRA, QLoRA ๋“ฑ์œผ๋กœ ํ–ˆ๋‹ค๋ฉด โ†’ ์ตœ์ข… ๋ณ‘ํ•ฉ(merge) ํ›„ ์„œ๋น™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. โœ… LoRA๋ฅผ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•จ (merge)

  • vLLM์€ ํ˜„์žฌ LoRA adapter๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•ด์„œ inferenceํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, LoRA๋‚˜ QLoRA๋กœ ํŒŒ์ธํŠœ๋‹ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฒ ์ด์Šค ๋ชจ๋ธ๊ณผ ๋ณ‘ํ•ฉํ•œ ๋ชจ๋ธ์„ export ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
# ์˜ˆ์‹œ: peft + transformers ํ™˜๊ฒฝ์—์„œ ๋ณ‘ํ•ฉ
from peft import PeftModel
from transformers import AutoModelForCausalLM

base_model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
ft_model = PeftModel.from_pretrained(base_model, "./lora-checkpoint")
ft_model = ft_model.merge_and_unload()
ft_model.save_pretrained("./merged-model")

โœ… vLLM์œผ๋กœ ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

 
 
python3 -m vllm.entrypoints.openai.api_server \
  --model ./merged-model \
  --dtype float16 \
  --gpu-memory-utilization 0.90 \
  --max-model-len 4096

 

POST http://localhost:8000/v1/chat/completions
Authorization: Bearer ...
Content-Type: application/json

 


๐Ÿ” ์š”์•ฝ: ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ vLLM ์„œ๋น™ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•ญ๋ชฉ์„ค๋ช…ํ•„์š” ์—ฌ๋ถ€
๋ชจ๋ธ์ด Transformers ํ˜ธํ™˜ ํฌ๋งท์ธ๊ฐ€? HuggingFace ํ˜•์‹ (config.json, tokenizer ํฌํ•จ) โœ… ํ•„์ˆ˜
LoRA/QLoRA ์‚ฌ์šฉ ์‹œ ๋ณ‘ํ•ฉํ–ˆ๋Š”๊ฐ€? .merge_and_unload() ํ•„์ˆ˜ โœ… ํ•„์ˆ˜
GPU ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”ํ–ˆ๋Š”๊ฐ€? quantization or dtype ์„ค์ • โš™๏ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ
ํ† ํฌ๋‚˜์ด์ € ํฌํ•จํ–ˆ๋Š”๊ฐ€? tokenizer.json, vocab ํŒŒ์ผ ๋“ฑ โœ… ํ•„์ˆ˜

๐Ÿณ ์ค‘์š” : vLLM ๋„์ปค ํ…œํ”Œ๋ฆฟ + ECS ๋ฐฐํฌ ์˜ˆ์ œ

**๋ฐฐํฌ ๋‹จ๊ณ„**:
   - **1๋‹จ๊ณ„**: Dockerfile ์ž‘์„ฑ
     ```dockerfile
     FROM nvidia/cuda:12.1.0-devel-ubuntu22.04
     
     RUN apt-get update && apt-get install -y python3 python3-pip
     RUN pip3 install vllm transformers accelerate
     
     # ๋ชจ๋ธ ID ์„ค์ • (์˜ˆ: Llama-2-7b-chat)
     ENV MODEL_ID="meta-llama/Llama-2-7b-chat-hf"
     ENV QUANTIZATION="awq"  # ์–‘์žํ™” ๋ฐฉ์‹ ์„ ํƒ (bitsandbytes, awq, gptq ๋“ฑ)
     
     COPY start.sh /start.sh
     RUN chmod +x /start.sh
     
     ENTRYPOINT ["/start.sh"]
     ```

   - **2๋‹จ๊ณ„**: start.sh ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ
     ```bash
     #!/bin/bash
     
     python3 -m vllm.entrypoints.openai.api_server \
       --model $MODEL_ID \
       --quantization $QUANTIZATION \
       --gpu-memory-utilization 0.9 \
       --tensor-parallel-size $GPU_COUNT \
       --enable-prefix-caching
     ```

   - **3๋‹จ๊ณ„**: AWS ์ธํ”„๋ผ ์„ค์ •
     - ๋ชจ๋ธ ํฌ๊ธฐ์— ๋งž๋Š” GPU ์ธ์Šคํ„ด์Šค ๊ณจ๋ผ์ฃผ์„ธ์š”. g4dn์€ ์ž‘์€ ๋ชจ๋ธ, g5๋‚˜ p3/p4๋Š” ํฐ ๋ชจ๋ธ์— ์ข‹์•„์š”
     - ๋ณด์•ˆ ๊ทธ๋ฃน์ด๋ž‘ IAM ์—ญํ• ๋„ ์žŠ์ง€ ๋ง๊ณ  ์„ค์ •ํ•ด์ฃผ์‹œ๊ณ ์š”
     - ๋งŒ๋“  Docker ์ด๋ฏธ์ง€๋ฅผ ECR์— ํ‘ธ์‹œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค

   - **4๋‹จ๊ณ„**: ECS๋‚˜ EKS์— ๋ฐฐํฌํ•˜๊ธฐ
     - ECS๋Š” Fargate ๋ง๊ณ  EC2 ๋ฐฉ์‹์œผ๋กœ ํ•ด์•ผ ํ•ด์š” (GPU ์จ์•ผ ํ•˜๋‹ˆ๊นŒ์š”)
     - ๋ฐฐํฌํ•  ๋•Œ GPU ๋“œ๋ผ์ด๋ฒ„๋ž‘ Docker GPU ์ง€์› ํ™•์ธํ•˜๋Š” ๊ฑฐ ์žŠ์ง€ ๋งˆ์„ธ์š”
     - CloudWatch๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด์„œ ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •ํ•ด์ฃผ๋ฉด ์ข‹์•„์š”

 

 

๐Ÿ“ฆ Dockerfile ์˜ˆ์‹œ

FROM nvidia/cuda:12.1.1-runtime-ubuntu22.04

RUN apt update && apt install -y git python3 python3-pip
RUN pip install vllm transformers accelerate

# ๋ชจ๋ธ์€ ์‚ฌ์ „์— ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ํ•„์š”
COPY ./merged-model /models/merged-model

CMD ["python3", "-m", "vllm.entrypoints.openai.api_server", "--model", "/models/merged-model"]

๐Ÿณ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ๋กœ์ปฌ ์‹คํ–‰

docker build -t my-vllm-image .
docker run --gpus all -p 8000:8000 my-vllm-image

โ˜๏ธ AWS ECS (Fargate GPU) ๋ฐฐํฌ ์š”์•ฝ

     - ๋ชจ๋ธ ํฌ๊ธฐ์— ๋งž๋Š” GPU ์ธ์Šคํ„ด์Šค ๊ณจ๋ผ์ฃผ์„ธ์š”. g4dn์€ ์ž‘์€ ๋ชจ๋ธ, g5๋‚˜ p3/p4๋Š” ํฐ ๋ชจ๋ธ์— ์ข‹์•„์š”
     - ๋ณด์•ˆ ๊ทธ๋ฃน์ด๋ž‘ IAM ์—ญํ• ๋„ ์žŠ์ง€ ๋ง๊ณ  ์„ค์ •ํ•ด์ฃผ์‹œ๊ณ ์š”
     - ๋งŒ๋“  Docker ์ด๋ฏธ์ง€๋ฅผ ECR์— ํ‘ธ์‹œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค

 

  1. ECR์— Docker ์ด๋ฏธ์ง€ ํ‘ธ์‹œ
  2. ECS ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ (GPU ์ธ์Šคํ„ด์Šค ํฌํ•จ)
  3. Task Definition ์ƒ์„ฑ (GPU ์„ค์ • + ํฌํŠธ 8000)
  4. ์„œ๋น„์Šค ์ƒ์„ฑ + Load Balancer ์—ฐ๊ฒฐ
  5. ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ HTTPS ์ ์šฉ (Route53 + ACM)
CloudWatch๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด์„œ ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •ํ•ด์ฃผ๋ฉด ์ข‹์•„์š”

โœ… ์™„๋ฃŒ ํ›„์—๋Š” http://{your-domain}/v1/chat/completions ํ˜•ํƒœ๋กœ OpenAI API ํ˜ธํ™˜ ๊ฐ€๋Šฅ


๐Ÿงฉ ๋ถ€๋ก: ์‹ค๋ฌด ์ ์šฉ์„ ์œ„ํ•œ ํˆดํ‚ท

๋ชฉ์  ๋„๊ตฌ
์„œ๋น™ ์—”์ง„ vLLM, Text Generation Inference, TGI
๋กœ๋”ฉ/ํ”„๋กฌํ”„ํŠธ ๋„๊ตฌ LangChain, LLM Client, Outlines, LMFE
๋ฒกํ„ฐ DB Weaviate, Qdrant, FAISS, Pinecone
๋ชจ๋ธ ์ €์žฅ์†Œ Hugging Face, Open LLM Leaderboard, Civitai

โœ… ์š”์•ฝ: ์…€ํ”„ ํ˜ธ์ŠคํŒ… ์‹ค์ „ ์ „๋žต 6๊ฐ€์ง€

  1. ๋ฐฐํฌ ๊ฒฝ๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์—ญ์„ค๊ณ„ํ•˜๋ผ
  2. ์–‘์žํ™” ๋ชจ๋ธ์„ ์ ๊ทน ํ™œ์šฉํ•˜๋ผ
  3. ๋ฐฐ์น˜ ์ „๋žต์„ ์ •๊ตํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋ผ
  4. ์›Œํฌ๋กœ๋“œ ๊ธฐ๋ฐ˜ ์บ์‹ฑ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๋ผ
  5. ๋ชจ๋ธ์€ ์ž‘๊ณ  ํšจ์œจ์ ์œผ๋กœ ์„ ํƒํ•˜๋ผ
  6. ์กฐ์ง ์ธํ”„๋ผ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์ค‘์•™ API๋ฅผ ์ œ๊ณตํ•˜๋ผ

์ด ๊ฐ€์ด๋“œ๋Š” ์‹ค๋ฌด ์ ์šฉ์„ ์œ„ํ•œ ์ถœ๋ฐœ์ ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๊ณ , ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ตœ์ ํ™”๋œ ๊ตฌ์„ฑ์„ ์‹คํ—˜ํ•ด๋ณด์„ธ์š”. ํ•„์š”์‹œ ๋„์ปค ๋ฐฐํฌ ์˜ˆ์‹œ, API ์„œ๋ฒ„ ๊ตฌ์„ฑ ์˜ˆ์‹œ๋„ ์ œ๊ณต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

'AWS Cloud' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

AWS ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™œ์šฉ  (0) 2024.12.10
AWS Lambda Scheduler serverless.yml  (0) 2020.04.08
AWS Parameter Store ์™€ Serverless Framework  (0) 2020.04.08
Serverless Setting  (0) 2020.04.08