brunch

You can make anything
by writing

C.S.Lewis

by Jinho Yoo Feb 01. 2025

DeepSeek에 관한 정리

화제가 되고 있는 DeepSeek에 대한 자료들을 모아정리 했습니다

이 글을 작성하는 이유

설 연휴에 갑자기 중국발 DeepSeek이라는 모델이 나타내서 뉴스에도 계속 오르내리는 것을 보고 놀랐습니다. 고성능 GPU 수입이 안되는 상황인데 어떻게 저들이 이런 일을 했을까부터, 우리는 왜 저런 것을 하지 못했을까 하는 생각도 들었습니다. 마침 여러 전문가분들이 세세한 자료를 정리해서 발표해주시는 덕에 개요나 의미는 다루지 않아도 될거 같습니다. 이것은 제가 바라보는 관점의 자료들을 모아 정리한 것이니 참고 바랍니다.


DeepSeek란?

DeepSeek은 중국의 AI 기업 DeepSeek이 개발한 대규모 언어 모델입니다. DeepSeek-V3를 기반으로 하며, 특히 수학적 추론과 코딩 능력에서 탁월한 성능을 보여주고 있습니다. 벤치마크 결과는 DeepSeek 페이지에 나와 있지만 저는 다소 ‘비판적’으로 봤으면 합니다. (벤치마크라는게 워낙에 Case by case라서요)   

OpenAI의 o1과 동등한 수준의 추론 능력을 보유한 최초의 오픈소스 모델

AIME 2024에서 79.8% Pass@1 달성, OpenAI-o1-1217을 능가

코드포스에서 2,029 Elo 레이팅 획득, 상위 96.3% 수준의 성능


내부 구조

MoE 아키텍쳐(참고)

MoE(Mixture of Experts)는 하나의 모델이 모든 것을 다 하는게 아니라 각 ‘전문’분야를 담당하는 보조 모델들을 준비하고 이들이 협력해서 문제를 해결하는 방식을 말합니다. 이를 위해 두가지 주요 요소가 있습니다.   

Experts - 각 FFNN(Feed Forward Neural Network)계층에는 하위 집합을 선택할 수 있는 '전문가' 집합이 있습니다. 이러한 '전문가'는 일반적으로 FFNN 그 자체입니다.

Router or gate network - 어떤 토큰을 어떤 전문가에게 보낼지 결정합니다.


각 MoE의 전문가들은 LLM의 Layer에거 아래 그림처럼 맵핑이 됩니다.  


각 전문가들은 아래 그림처럼 각 분야 별로 다루는데, 이게 ‘개발자’, ‘심리학자’가 아니라 ‘담당 분야’별로 나뉩니다. (기호 해석, 동사, 접속사, 형용사등) 조금 더 자세하게 다루면 각 ‘전문가’들은 각자 ‘담당하는’ 토큰들이 있는 것입니다.  


특정 토큰을 아래와 같이 Router가 어디로 보내게 될지를 정하게 됩니다. 이것이 핵심입니다.


이렇게 하면, 어떤 일을 할 때 마다 모든 모델이 다 올라오지 않아도 됩니다. 특정 일을 담당하는 전문가 층만 올려서 처리하면 되니 메모리 사용량이 줄어들 수 있습니다.


그래서 최종적인 아키텍쳐는 아래 그림과 같이 나옵니다. 자세한 내용은 참고자료를 통해 확인해주시면 됩니다.  


DeepSeek는 MoE를 어떻게 했나?

DeepSeekMoE의 Expert 분할 방식에 대한 설명을 보면, 여기서 "Expert"는 물리학자, 개발자 같은 실제 직업적인 전문가 역할을 하는 것이 아니라, 신경망 내부에서 특정한 종류의 데이터를 처리하도록 학습되는 개별적인 서브 네트워크를 뜻한다.


DeepSeekMoE의 Expert 분할 방식   

     Fine-Grained Expert Segmentation (세분화된 전문가 분할)            기존 MoE 모델들은 전문가(Expert)를 8~16개 정도 두고, 특정 토큰이 특정 Expert로 라우팅되도록 함.       하지만 이렇게 하면 하나의 Expert가 너무 다양한 토큰을 처리해야 해서 "Expert 특수화"가 어렵다는 문제가 발생.       DeepSeekMoE는 하나의 큰 Expert를 여러 개의 작은 Expert로 쪼개는 방식으로, 더 세밀하게 특정 지식을 학습하도록 유도함.       즉, 하나의 전문가가 물리학, 수학, 개발 등 다양한 지식을 포함하는 것이 아니라, 보다 세분화된 특정 영역의 지식을 집중적으로 학습하도록 유도.  


     Shared Expert Isolation (공유 전문가 격리)            기존 MoE 모델에서는 서로 다른 전문가들이 같은 일반적인 지식을 학습하는 경향이 있어, 지식 중복(knowledge redundancy) 문제가 발생함.       이를 해결하기 위해 일부 Expert를 "공유 전문가 (Shared Expert)"로 두고, 항상 활성화되도록 하여 공통적으로 필요한 지식을 이들이 담당하도록 함.       나머지 전문가들은 보다 특수한 역할을 담당하도록 유도.  


정리하면?   

DeepSeekMoE의 Expert는 실제 전문가(물리학자, 개발자 등)를 직접적으로 모델링하는 것이 아니라, 내부적인 뉴럴 네트워크 구조의 일부로, 특정 종류의 입력 데이터를 처리하도록 학습되는 역할을 담당해.

Expert들이 다양한 분야의 전문가처럼 동작하는 것이 아니라, 특정 지식의 조합을 보다 효율적으로 학습하고 처리하는 역할을 한다고 보면 된다.

기존 MoE 모델보다 더욱 "세밀한 전문화 (fine-grained specialization)"를 이루도록 설계되었으며, 이를 위해 Expert를 더 작게 나누고, 공통 지식을 담당할 Shared Expert를 도입하는 방식을 사용.


어떤식으로 학습했나?

이 부분이 제일 많이 오해되는 부분입니다. 최종적으로 OpenAI보다 적은 비용으로 학습을 했다라고 DeepSeek은 주장을 하지만, 이 단계를 보시면 정말 그런지 의심이 드실겁니다. (참고)


1단계: SFT data로 긴 추론(Long chains of reasoning) 데이터 학습


그런데 여기서 DeepSeek-R1 이전에 DeepSeek-V3라는 모델이 있었습니다. 우리가 아는 모델은 R1인데 이것의 기반이 되는 모델이 있었던 거죠. 이것을 먼저 아래와 같이 학습했습니다.  

기존에 SFT(Supervised Fine Tuning) data외에 60만 개에 달하는 긴 연쇄 추론(Long chain of thought) 예제를 이용했습니다.  이 정도 규모에서는 사람이 직접 라벨을 붙이기가 매우 어렵고 비용도 많이 듭니다. 그렇기 때문에 이러한 예시를 만드는 과정이 두 번째로 특별한 점입니다. 이때 GPRO라는 방식을 이용한 것입니니다. (이에 대해서는 참고문헌을 확인 바랍니다.)


2단계: 중간 수준의 추론 LLM (추론이 아닌 작업에서는 더 나빠서 ‘중간 수준’이라고 함 ).


이 단계에서 추론할 데이터를 만들어야 하는데, 이 때 R1-Zero라는 모델을 이용해서 만들었습니다. (품질이 안좋았다는 이야기가 그래서 나옵니다.)  


'중간 수준의 추론 모델'은 어떻게 탄생했을까요? 여기에는 재미있는 이야기가 있습니다! 먼저, 강화학습이라는 마법 같은 도구를 사용했습니다. R1이 등장하기 전에 만들어진 이 '이름 없는 모델'은 마치 수학 문제를 푸는 전문가처럼 추론에만 집중했습니다.


이 모델은 곧 설명할  R1-Zero라는 또 다른 모델에게서 영감을 받았는데요, 특별한 점이 있습니다. 보통 AI 모델을 학습시키려면 엄청난 양의 데이터가 필요한데, 이 모델은 아주 적은 양의 데이터로도 놀라운 추론 능력을 보여줬습니다! 마치 소수의 문제만 풀어보고도 수학의 달인이 된 것처럼요.


이렇게 만들어진 '이름 없는 모델'은 나중에 더 똑똑한 AI를 만드는 데 큰 도움을 줬습니다. 단순히 추론만 잘하는 것이 아니라, 일상적인 대화도 잘하고 다양한 작업도 수행할 수 있는 진정한 만능 AI를 만드는 데 디딤돌이 되었습니다. (무명용사 만세!)


3단계 대규모 강화 학습으로 Reasoning 모델 생성

이제 무명용사를 똑똑하게 만들 차례입니다.  


3.1 대규모 Reasoning-Oriented  강화학습 (R1-Zero)

이 ‘무명용사’를 만들기 위해서 실험기가 있었습니다. 바로 DeepSeek R1-Zero입니다. 이것이 특별한건 ‘Reasoningaks 만 정말 잘한다’라는 점입니다. 이건 어떻게 만들었을까요? 바로 사전학습(Pre-training)으로 시작해서 RL을 해서 (SFT생략) OpenAI o1만큼 Reasoning을 잘하게 되었습니다.  


이는 전통적인 “모델 성능을 높이려면 대규모 레이블 데이터가 반드시 필요”라는 패러다임과 대조적입니다.  이는 두 가지를 시사합니다:   


최신 base model(DeepSeek-V3-Base)이 이미 특정 수준 이상의 품질과 역량을 확보했다는 점(이 base model은 14.8조 개의 고품질 토큰으로 학습되었다고 참고자료에 써져있습니다. 그런데 이게 사실일까요?).

Reasoning 문제는 일반적인 채팅·글쓰기 요청과 달리, 자동으로 검증하거나 레이블링이 가능하다는 점. (코딩하기, 수식증명등)


예를 들어, Python code를 생성한다면, 실제 Linter로 검증하고 Python interpreter가 이를 돌려서 결과가 다 나오는지 검증합니다. 그리고 다른 LLM을 사용해서 Unit test생성하고 통과여부를 확인합니다. (이 때 외부 LLM을 쓴다는 점을 생각하면 이게 불가능했던 다른 모델들에 비하면 큰 도움입니다.) 그리고 실행시간이 짧은 것에 높은 점수를 줍니다.


이런 방식이 이런 결과를 보여주게 됩니다.  



그런데 R1-Zero(초호기의 한계인가?) Reasoning은 잘하지만 몇가지 문제점이 있습니다. 예를 들어 낮은 가독성과 언어혼합 문제가 있었다고 합니다. 그래서 이 초호기의 경험을 가지고 다음버전에서는 RL만 하지 않고 다음의 과정을 추가했습니다.   

SFT 데이터 포인트 생성을 위해 임시(interim) reasoning 모델을 만드는 것

R1 모델을 학습하여 reasoning뿐 아니라 non-reasoning 문제에서도 성능을 높이도록(다른 타입의 verifier 사용)



3.2. 임시 Reasonging 모델을 사용하여 SFT reasoning데이터를 생성 (Cold start data)

위에서 얻은  초호기(?)의 교훈을 가지고  ‘무명용사’에는 이런 과정을 추가했습니다.  수천 개 규모의 reasoning 문제 예시(일부는 R1-Zero에서 생성·필터링됨)에 대해 supervised fine-tuning(SFT) 단계를 거치는 것을 말합니다. 논문에서는 이를 ‘Cold start’라고 합니다.


이 때 만든 데이터들은 긴 CoT가 포함된 few-shot prompting을 사용하거나, 모델에 reflection과 verification을 거쳐 상세 답변을 직접 생성토록 하거나, DeepSeek-R1-Zero의 output을 읽기 쉬운 형식으로 모으고, 사람 annotator들이 후처리를 통해 결과를 다듬는 방법 등을 활용해서 만들었다고 합니다. (아직 사람이 필요한 것인가!!)  


그렇다면 이미 이런 데이터가 있는데도 왜 RL 프로세스가 필요할까요? 그 이유는 제대로 된 학습을 하기에는 이렇게 만드는 데이터가 작기 때문입니다. 적은 데이터로 지도 학습후 RL로 더 조련하는 것이니다. (이렇게 데이터가 적다면  RL을 이용하는 것이 괜찮은 접근으로 앞으로 채택될 거 같습니다.)  



3.3 일반적인 RL training

이제 이렇게 똑똑해진 ‘무명용사’가 만든 SFT data들을 일반적인 RL training을 통해서 Reasoning, Non-Reasoning까지 잘 할 수 있도록 해줍니다.  



한눈에 보기  

복습차원에서 전체 그림을 다시 보여드립니다.  

아키텍쳐

이것 역시 Decoder only model입니다. 총 61개인데 처음 3개는 dense하고 나머지는 MoE layer들이라고 합니다. (자세한 것은 번역된 자료를 참조 바랍니다.)  



학습 비용과 모델 크기

DeepSeek R1의 비용에 대해서 논란이 많습니다. 정리해보면 아래와 같다고 합니다.   

전체 파라미터: 671B (MoE 구조로 실제 활성화되는 파라미터는 37B)

학습 비용: 2,788,000 H800 GPU 시간, 약 $5,576,000 소요


문제는 위의 흐름대로 보시면 중간중간에 여러 LLM등의 도움을 다시 받은 것도 있고 사람의 도움을 받은 것도 있습니다. 그래서 저 비용이 정말 저것만이냐 라고 하면 저는 좀 회의적입니다. 다만 RL의 재발견으로서는 의미가 있다고 보입니다. 그러니 nVidia주식은 가지고 계시면 되겠습니다. (응?)


사용하기

지식증류(Distillation)된 모델 쓰기

위에 나와 있는 것대로 617B의 모델을 그냥 노트북에서 올려서 쓸 수는 없습니다. 그래서 저것은 그대로 두고 이를 ‘양자화’를 통해서 적은 사이즈의 메모리에 올릴 수 있게 하거나 아니면 이 모델을 다른 작은 모델이 ‘배워서’ 일을 할 수 있게 합니다. 이것을 ‘증류(Distillation)’라고 합니다.


Qweb기반 DeepSeek의 증류 과정은 두 가지 흥미로운 방향으로 진행되었습니다. 먼저 Qwen을 기반으로 한 작은 모델들(1.5B부터 32B까지)을 만들었는데, 이는 마치 거인의 지식을 아이들에게 나누어주는 것과 같습니다. Qwen-2.5 시리즈를 기반으로 시작해서, 상위 40%의 레이어는 그대로 두고(이는 마치 선생님의 상위 지식을 그대로 보존하는 것과 같죠), 나머지 부분에서는 CE와 KL 손실을 적절히 조절해가며 학습을 진행했습니다. 게다가 8비트 양자화를 통해 학습 비용도 40%나 줄일 수 있었죠. Ollama에서 보면 최대 1.5b까지 줄인 방식을 확인할 수 있습니다.


Llama 기반 모델(8B, 70B)로의 증류는 더 큰 도전이었습니다. 마치 다른 언어를 쓰는 학생에게 가르치는 것처럼, 토크나이저의 차이(32k vs 128k)라는 언어의 장벽이 있었거든요. 이를 해결하기 위해 임베딩 레이어를 새로 초기화하고 어텐션 맵을 정렬하는 특별한 방법을 사용했습니다. 마지막으로 Rotary Position Embedding을 보정하고 Grouped-Query Attention의 병목 현상을 해소하는 것으로 성능을 한층 더 끌어올렸습니다.  

허깅페이스에 DeepSeek 페이지에 이미 증류된 모델이 올라와 있습니다


Cloud에 서빙중인것 사용하기

AWS에서 이미 Amazon Bedrock을 통해서 서빙하고 있습니다. Perplexity에서도 사용 가능합니다. DeepSeek 사이트에서 직접만 안쓰심 됩니다.


오류 발견시 알려주세요

참고로 밑에 참고자료쪽에 있는 그림을 많이 가져왔습니다. 미리 양해를 구합니다. 그리고 설명에 오류가 있다면 댓글로 남겨주시면 수정하도록 하겠습니다.



참고

https://newsletter.languagemodels.co/p/the-illustrated-deepseek-r1

https://substack.com/home/post/p-148217245

https://huggingface.co/blog/putting_rl_back_in_rlhf_with_rloo

https://tulip-phalange-a1e.notion.site/DeepSeek-R1-189c32470be2801c94b6e5648735447d

https://youtu.be/wLsar2m68U0

https://github.com/deepseek-ai/DeepSeek-MoE/blob/main/DeepSeekMoE.pdf 




질문 답변

1. nVidia팔아야 합니까? => 사세요

2. OpenAI망합니까? => 부잣집 걱정은 하는거 아니랬죠?

3. 개인정보 털리나요?=> DeepSeek 사이트에 가입해서 쓰지 않고 AWS에 있는 거나 직접 증류된 버전 올려서 쓰세요. 그게 안전합니다. 그런데 뭐 털릴거 있으세요?


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari