AbdulElahGwaith's picture
Upload folder using huggingface_hub
a9bd396 verified

DeepSeek-V3[[deepseek-v3]]

๊ฐœ์š”[[overview]]

DeepSeek-V3 ๋ชจ๋ธ์€ DeepSeek-V3 ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ์—์„œ DeepSeek-AI ํŒ€์— ์˜ํ•ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋…ผ๋ฌธ์˜ ์ดˆ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด 671B๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ† ํฐ๋‹น 37B๊ฐœ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋Š” ๊ฐ•๋ ฅํ•œ Mixture-of-Experts(MoE) ์–ธ์–ด ๋ชจ๋ธ์ธ DeepSeek-V3๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ถ”๋ก ๊ณผ ๋น„์šฉ ํšจ์œจ์ ์ธ ํ›ˆ๋ จ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด, DeepSeek-V3๋Š” DeepSeek-V2์—์„œ ์ฒ ์ €ํžˆ ๊ฒ€์ฆ๋œ Multi-head Latent Attention(MLA) ๋ฐ DeepSeekMoE ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์•„๊ฐ€ DeepSeek-V3๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•œ ๋ณด์กฐ ์†์‹ค ์—†๋Š” ์ „๋žต์„ ๊ฐœ์ฒ™ํ•˜๊ณ , ๋” ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋‹ค์ค‘ ํ† ํฐ ์˜ˆ์ธก ํ›ˆ๋ จ ๋ชฉํ‘œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ๋Š” 14.8์กฐ ๊ฐœ์˜ ๋‹ค์–‘ํ•˜๊ณ  ๊ณ ํ’ˆ์งˆ์˜ ํ† ํฐ์œผ๋กœ DeepSeek-V3๋ฅผ ์‚ฌ์ „ ํ›ˆ๋ จํ–ˆ์œผ๋ฉฐ, ๊ทธ ์ž ์žฌ๋ ฅ์„ ์™„์ „ํžˆ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋„ ํŒŒ์ธํŠœ๋‹ ๋ฐ ๊ฐ•ํ™” ํ•™์Šต ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ์ข…ํ•ฉ์ ์ธ ํ‰๊ฐ€ ๊ฒฐ๊ณผ, DeepSeek-V3๋Š” ๋‹ค๋ฅธ ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋ธ๋“ค์„ ๋Šฅ๊ฐ€ํ•˜๋ฉฐ ์„ ๋„์ ์ธ ๋น„๊ณต๊ฐœ ์†Œ์Šค ๋ชจ๋ธ๋“ค๊ณผ ํ•„์ ํ•˜๋Š” ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ–ˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  DeepSeek-V3์˜ ์ „์ฒด ํ›ˆ๋ จ์—๋Š” 278.8๋งŒ H800 GPU ์‹œ๊ฐ„๋งŒ์ด ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ›ˆ๋ จ ๊ณผ์ •์ด ๋งค์šฐ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํ›ˆ๋ จ ๊ณผ์ • ๋™์•ˆ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์†์‹ค ๊ธ‰์ฆ์„ ๊ฒฝํ—˜ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ๋Š” https://github.com/deepseek-ai/DeepSeek-V3 ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ๊ณ„ ๋ฐ ๊ธฐ์—ฌ ์š”์ฒญ![[limitations-and-call-for-contribution!]]

์ €ํฌ๋Š” ์ด ์ฝ”๋“œ๋ฅผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์ด ๋‹ค์Œ ์‚ฌํ•ญ๋“ค์„ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ๊ตฌํ˜„์€ "๊ธฐ๋ณธ์ ์ธ" ์–ดํ…์…˜ ๊ณ„์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ Multi-head Latent Attention (MLA) ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ๊ตฌํ˜„์€ ์ „๋ฌธ๊ฐ€๋“ค์„ ์ˆœํšŒํ•˜๋Š” ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ต์ฒด๋˜์–ด์•ผ ํ•˜๊ธฐ์— integrations/tensor_parallel์˜ get_packed_weights๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” ROPE์— EleutherAI์˜ ์ˆ˜์‹์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์›๋ณธ ์ˆ˜์‹์„ ์ ์šฉํ•˜๋ฉด ๋” ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค! (๋‹จ, ๊ธฐ์กด API๋Š” ๊ทธ๋Œ€๋กœ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)
  • generation config ๋˜๋Š” config shape์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋˜๋Š” ๋ฌธ์ œ๋กœ ์ธํ•ด ์ •์  ์บ์‹œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ํŒ[[usage-tips]]

์ด ๋ชจ๋ธ์€ ํšจ์œจ์ ์ธ ์ถ”๋ก ๊ณผ ๋น„์šฉ ํšจ์œจ์ ์ธ ํ›ˆ๋ จ์„ ์œ„ํ•ด Multi-head Latent Attention (MLA) ๋ฐ DeepSeekMoE ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•œ ๋ณด์กฐ ์†์‹ค์ด ์—†๋Š” ์ „๋žต๊ณผ ๋‹ค์ค‘ ํ† ํฐ ์˜ˆ์ธก ํ›ˆ๋ จ ๋ชฉํ‘œ๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ 14.8์กฐ ๊ฐœ์˜ ํ† ํฐ์œผ๋กœ ์‚ฌ์ „ ํ›ˆ๋ จ๋˜๊ณ  ์ง€๋„ ํŒŒ์ธํŠœ๋‹ ๋ฐ ๊ฐ•ํ™” ํ•™์Šต ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ ํ›„ ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ž‘์—…์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FP8๋กœ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 8๊ฐœ์˜ H100์œผ๋กœ ๊ตฌ์„ฑ๋œ 2๊ฐœ ๋…ธ๋“œ๋ฉด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

# `run_deepseek_v1.py`
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
torch.manual_seed(30)

tokenizer = AutoTokenizer.from_pretrained("deepseek-r1")

chat = [
  {"role": "user", "content": "์•ˆ๋…•ํ•˜์„ธ์š”, ์–ด๋–ป๊ฒŒ ์ง€๋‚ด์„ธ์š”?"},
  {"role": "assistant", "content": "์ €๋Š” ์ž˜ ์ง€๋‚ด์š”. ์˜ค๋Š˜ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?"},
  {"role": "user", "content": "์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์–ด์š”!"},
]


model = AutoModelForCausalLM.from_pretrained("deepseek-r1", device_map="auto", torch_dtype=torch.bfloat16)
inputs = tokenizer.apply_chat_template(chat, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
import time
start = time.time()
outputs = model.generate(inputs, max_new_tokens=50)
print(tokenizer.batch_decode(outputs))
print(time.time()-start)

์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<๏ฝœAssistant๏ฝœ><think>
์ข‹์•„์š”, ์‚ฌ์šฉ์ž๋Š” ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์–ด ํ•˜๋Š”๊ตฐ์š”. ์ด๊ฒŒ ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์€ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ํŠนํžˆ ํŠน์ • ์ž…๋ ฅ ํ˜•์‹์ด ํ•„์š”ํ•œ ๋ชจ๋ธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ OpenAI ๊ฐ™์€ API์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ญํ• (์‚ฌ์šฉ์ž, ์–ด์‹œ์Šคํ„ดํŠธ, ์‹œ์Šคํ…œ)๊ณผ ํ•จ๊ป˜ ํ˜•์‹ํ™”๋˜๋Š” ๋ฐฉ์‹์„ ๋งํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ์ž๋Š” ์˜ˆ์‹œ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋Œ€ํ™”๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ฃ . ์‚ฌ์šฉ์ž๊ฐ€ "์•ˆ๋…•ํ•˜์„ธ์š”, ์ž˜ ์ง€๋‚ด์„ธ์š”?"๋ผ๊ณ  ๋งํ•˜๊ณ  ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ "๋„ค, ์ž˜ ์ง€๋‚ด์š”. ์˜ค๋Š˜ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?"๋ผ๊ณ  ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๊ณ  ์ด์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์‹œ์—๋Š” ๋Œ€ํ™” ๊ธฐ๋ก๊ณผ ์ƒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Hugging Face์˜ Transformers์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” Jinja2 ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์€ ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒฐํ•ฉํ•œ ๋‹ค์Œ, ์ ์ ˆํ•œ ํƒœ๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž์™€ ์–ด์‹œ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, {% for message in messages %}๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  <|user|>, <|assistant|>์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

๋˜ํ•œ, ์ ์ ˆํ•œ ํ…œํ”Œ๋ฆฟํŒ…์€ ๋ชจ๋ธ์ด ๋Œ€ํ™” ํ๋ฆ„์„ ์ดํ•ดํ•˜๋„๋ก ๋ณด์žฅํ•˜๋ฉฐ, ์ด๋Š” ์ผ๊ด€๋œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ์ง€์— ๋Œ€ํ•œ ๋ฉ”๋ชจ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ปจํ…์ŠคํŠธ ์œ ์ง€ ๋ฐ ์—ญํ• ๋ณ„ ์ฒ˜๋ฆฌ์˜ ์ค‘์š”์„ฑ์„ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๋ชจ๋“  ๊ฒƒ์„ ์ข…ํ•ฉํ•˜๋ฉด, ์‘๋‹ต์—๋Š” ์˜ˆ์‹œ ๋ฉ”์‹œ์ง€ ๋ฐฐ์—ด, ์ ์šฉ๋œ ํ…œํ”Œ๋ฆฟ, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ํ˜•์‹ํ™”๋œ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฆฌ ํ‘œ์‹œ์ž๋กœ ๊บพ์‡ ๊ด„ํ˜ธ๋‚˜ ํŠน์ˆ˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๊ฒƒ์ด ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ฑฐ๋‚˜ ํŒŒ์ธํŠœ๋‹ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค๋Š” ์ ๋„ ์–ธ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ™•์‹คํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌ์กฐํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
</think>

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

---

### **1๋‹จ๊ณ„: ์›๋ณธ ๋Œ€ํ™” ๊ธฐ๋ก**
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€ํ™”๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:
- **์‚ฌ์šฉ์ž**: "์•ˆ๋…•ํ•˜์„ธ์š”, ์–ด๋–ป๊ฒŒ ์ง€๋‚ด์„ธ์š”?"
- **์–ด์‹œ์Šคํ„ดํŠธ**: "์ €๋Š” ์ž˜ ์ง€๋‚ด์š”. ์˜ค๋Š˜ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?"
- **์‚ฌ์šฉ์ž**: "์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์–ด์š”!"

---

### **2๋‹จ๊ณ„: ๊ตฌ์กฐํ™”๋œ ๋ฉ”์‹œ์ง€**
Hugging Face Transformers๋‚˜ OpenAI ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋Œ€ํ™”๊ฐ€ ์ข…์ข… `role`๊ณผ `content`๋ฅผ ๊ฐ€์ง„ ๋”•์…”๋„ˆ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋กœ ํ˜•์‹ํ™”๋ฉ๋‹ˆ๋‹ค.
```python
messages = [
    {"role": "user", "content": "์•ˆ๋…•ํ•˜์„ธ์š”, ์–ด๋–ป๊ฒŒ ์ง€๋‚ด์„ธ์š”?"},
    {"role": "assistant", "content": "์ €๋Š” ์ž˜ ์ง€๋‚ด์š”. ์˜ค๋Š˜ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?"},
    {"role": "user", "content": "์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์–ด์š”!"},
]
```

---

### **3๋‹จ๊ณ„: ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ ์ ์šฉ**
**์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ**์€ ์ด ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ๋งž๋Š” ๋‹จ์ผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, (Hugging Face์—์„œ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š”) Jinja ์Šคํƒ€์ผ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

```jinja
{% for message in messages %}
    {% if message['role'] == 'user' %}
        <|user|>{{ message['content'] }}<|end|>
    {% elif message['role'] == 'assistant' %}
        <|assistant|>{{ message['content'] }}<|end|>
    {% endif %}
{% endfor %}
<|assistant|>
```

---

### **4๋‹จ๊ณ„: ์ตœ์ข… ํ…œํ”Œ๋ฆฟ ๊ฒฐ๊ณผ๋ฌผ**
์œ„ ํ…œํ”Œ๋ฆฟ์„ ์ €ํฌ `messages` ๋ฆฌ์ŠคํŠธ์— ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:
```text
<|user|>์•ˆ๋…•ํ•˜์„ธ์š”, ์–ด๋–ป๊ฒŒ ์ง€๋‚ด์„ธ์š”?<|end|>
<|assistant|>์ €๋Š” ์ž˜ ์ง€๋‚ด์š”. ์˜ค๋Š˜ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?<|end|>
<|user|>์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์–ด์š”!<|end|>
<|assistant|>
```

์ด๋Š” ๋ชจ๋ธ์—๊ฒŒ ๋‹ค์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค:
1. ๋Œ€ํ™” ๊ธฐ๋ก (์‚ฌ์šฉ์ž/์–ด์‹œ์Šคํ„ดํŠธ ํ„ด).
2. ๋ชจ๋ธ์ด ์‘๋‹ต์„ ์ƒ์„ฑํ•  ์ฐจ๋ก€ (`<|assistant|>`๊ฐ€ ๋์— ์žˆ์Œ).

---

### **์ฃผ์š” ์ฐธ๊ณ ์‚ฌํ•ญ**:
- **์—ญํ•  ๋ถ„๋ฆฌ**: `<|user|>`์™€ `<|assistant|>` ๊ฐ™์€ ํƒœ๊ทธ๋Š” ๋ชจ๋ธ์ด ํ™”์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
- **ํŠน์ˆ˜ ํ† ํฐ**: ๋ชจ๋ธ์€ ์ข…์ข… ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด `<|end|>`์™€ ๊ฐ™์€ ๊ณ ์œ ํ•œ ํ† ํฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- **์œ ์—ฐ์„ฑ**: ํ…œํ”Œ๋ฆฟ์€ ๋ชจ๋ธ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค (์˜ˆ: OpenAI๋Š” ํƒœ๊ทธ ๋Œ€์‹  `{"role": "user", "content": "..."}` ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

---

### **์ด๊ฒƒ์ด ์™œ ์ค‘์š”ํ•œ๊ฐ€**:
- **์ผ๊ด€์„ฑ**: ๋ชจ๋ธ์ด ๋Œ€ํ™” ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
- **์ปจํ…์ŠคํŠธ ๋ณด์กด**: ๋‹ค์ค‘ ํ„ด ๋Œ€ํ™”์˜ ํ๋ฆ„์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
- **์ •๋ ฌ**: ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ชจ๋ธ์ด ํ›ˆ๋ จ๋œ ํ˜•์‹๊ณผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.

๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฑฐ๋‚˜ ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: OpenAI, Llama, Mistral)์˜ ๊ตฌํ˜„์„ ๋ณด๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? ์•Œ๋ ค์ฃผ์„ธ์š”! ๐Ÿ˜Š<๏ฝœend of sentence๏ฝœ>

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜์„ธ์š”

torchrun --nproc_per_node=8 --nnodes=2 --node_rank=0|1 --rdzv-id an_id --rdzv-backend c10d --rdzv-endpoint master_addr:master_port run_deepseek_r1.py

๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€

[rank0]: ncclInternalError: Internal check failed.
[rank0]: Last error:
[rank0]: Bootstrap : no socket interface found

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, NCCL์ด ๋กœ๋“œ๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

DeepseekV3Config[[deepseekv3config]]

[[autodoc]] DeepseekV3Config

DeepseekV3Model[[deepseekv3model]]

[[autodoc]] DeepseekV3Model - forward

DeepseekV3ForCausalLM[[deepseekv3forcausallm]]

[[autodoc]] DeepseekV3ForCausalLM - forward