DeepSeek
저는 LLM관련 개발자나 전문가는 아님
IT업에 종사하는 개발자이자 엔지니어이자 데이터 분석가로써 LLM을 활용하고자 여기저기 기웃거림
따라서 잘못된 내용이 있을 수 있음
이 글은 아들에게 전달해주기 위해서 간략하게 정리한 내용으로 상세한 내용 보다는 대략적인 개념 위주로 정리함
아들아
DeepSeek에 대해서 간단하게 핵심만 알아본 내용이라고 생각하면 될 것 같다.
어제 Local에 다운 받은 모델이고 <think> ~ </think> 사이에 추론 과정을 보여주며 결과를 만드는 것을 보고 어떻게 느꼈는지 모르겠지만
스케일링의 법칙 아래서 거대 조직에서만 가능할 거라 생각했던 모델을 만드는 것이 이렇게 여러가지 기법을 가지고 그 한계를 극복하는 과정을 걷고 있는 중국이 무섭기도 하지만 새로운 가능성을 만들어 주고 있다고 생각한다.
내용 한번 보고 여기서 모르는 단어가 있다면 (이제 학생이니 대부분일거라 생각한다만) 찾아보고 일단 내용을 이해하고
나중에는 모델을 사용하고 활용하는 단계가 되길 바란다.
DeepSeek History
* Llama2 기반으로 다양한 벤치마크에서 주요 모델을 고르게 앞서나가겠다는 목표로 모델 개발 및 개선
- 2023.11.02 - DeepSeek Coder
= Llama2 아키텍처 기본. 트레이닝 데이터 준비, 파라미터 설정 등 별도로 구축 (7B, 67B) -> 완전한 오픈소스
- 2023.11.29 - DeepSeek LLM
= 차세대 오픈소스 LLM. 고르게 좋은 성능을 보여줌 (vs Llama 2.70B Base)
* Computational Efficiency(연산 효율성), Scalability(확장성) 측면에서 문제 -> 진짜 난제를 해결하자
- 2024.01 - DeepSeekMoE, DeepSeek-Coder-v1.5
= MoE 아키텍처
- 2024.02 - DeepSeekMath
= 수학적 추론 능력에 근접하는 성능
- 2024.03 - DeepSeek-VL
= 비전모델. 하이브리드 비전 인코더 구조 도입 -> 계산 효율성 문제를 해결함
- 2024.05 - DeepSeek-V2, DeepSeek-Coder-V2
= 업그레이드 된 MoE 방식을 기반, MLA 기법 도입 -> GPT-4대비 1/10 비용
- 2024.12 - DeepSeek VL
= 오픈소스 비전-언어모델
* 개인적으로는 이때부터 무서워지기 시작함
- 2024.12 - DeepSeek-V3
= 6710억 파라미터(370억개 활성화) 큐모, MTP
- 2025.01.20 - DeepSeek R1
= DeepSeek-V3 기반으로 강화학습 기반 (SFT 없이 RL만 적용)
* 다른 모델에 비해서 짧은 기간동안 계속 모델을 발표하고 있음
(짧은 기간 동안 겁나게 많은 모델을 쏟아내고 있음. 얘네들 잠은 자는건가?)
DeepSeek-V3
핵심 특징
MoE 아키텍처
- 활성화 파라미터 최적화
. 전체 6710억개의 파라미터 중에 활성화 파라미터를 370억개로 제한 -> 높은 효율성 및 성능 유지
- MLA (Multi-head Latent Attention)
. 추론의 효율성 극대화
부하 균형 전략
- Auxiliary-Loss-Free Load Balancing
. 부하 균형을 유지하면서 성능 저하를 최소화하는 전략으로 모델의 안정성과 성능향상 달성
- 멀티 토큰 예측 학습
. 단일 토큰 예측을 넘어서는 학습몰표로 추론단계에서 Speculative Decoding 통해 추론 속도 향상 가능
광범위한 데이터 학습
- 14.8조 개의 고품질 토큰 사용
안정적 학습목표
학습 및 평가 과정
- 사전학습 기술을 도입
. FP8 정밀도 학습
. DualPipe와 메모리 최적화
- 문맥길이 확장
. 128,000 자까지 ㅎ문맥 확장
- 지도 학습 및 강화 학습
아키텍처
기본 아키텍처 (Transformer 아키텍처 기반으로 다음과 같은 기술적 특징 가짐)
- MLA (Multi-Head Latent Attention)
. Key와 Value 을 효율적으로 압축하여 KV캐시 사용량을 줄임
- DeepSeekMoE 구조 (MoE 구조를 활용하여 효율적인 부하 균형 전략을 도입 )
. 부하 균형 문제
> 특정 전문가에 작업이 편중되면 라우팅 효율성이 감소하고 비효율적으로 사용될 수 있음
> 이를 위해서 부가 손실을 추가하여 부하 균형을 맞추는데 이게 모델 성능을 저하시킬 위험이 있음
> 해결을 위해서 편향값(Bias Term) 을 동적으로 조정하는 전략 (특정 전문가가 과부하 상태면 편향값을 감소)
. 보조 시퀀스 손실
> 개별 시퀀스 내에서 부하 불균형 발생 가능
> 이를 위해서 보조 손실 도입
. 노드 제한 라우팅 (Node-Limited Routing)
> 특정 점수를 가진 전문가들이 할당된 노드에서만 토큰이 라우팅 됨
- MTP (Multi-Token Prediction)
. 단일 토큰 예측을 넘어서 여러 토큰을 동시에 예측하는 기법
. 학습과정에서 활용되며 추론 시에는 사용되지 않음
여기까지가 대략적으로 구글링 한 결과를 정리한 내용인데,
그럼 그래서 뭐가 다른데? 에 대해서 이해를 해야 할 것 같다.
크게는 MoE 아키텍처, MLA, MTP, 양자화와 강화학습(DeepSeek-R1) 등이 새로 적용된 내용으로 이해하고 있다.
- 각 내용에 대해서 DeepSeek가 설명한 내용을 참고하면 이해가 쉬울 것 같다
Mixture of Experts (MoE)
특정 전문가 영역이 처리를 담당한다는 것은 해당 전문가의 파라미터만이 활성화되어 계산에 사용된다는 것을 의미합니다. MoE 아키텍처에서 각 전문가 네트워크는 독립적인 파라미터 집합을 가지며, 입력 데이터에 따라 게이트 메커니즘이 특정 전문가의 파라미터만을 사용하여 출력을 생성합니다. 이 방식은 모델의 성능과 효율성을 높이는 데 도움을 줍니다.
### 1. **전문가별 파라미터 분리**
MoE에서 각 전문가 네트워크는 독립적인 파라미터 집합을 가지며, 이는 전체 파라미터 중에서 해당 전문가에 할당된 sub-행렬로 존재합니다. 예를 들어, 모델의 전체 가중치 행렬은 여러 전문가의 가중치 행렬로 구성되어 있습니다.
#### 예시:
- 전문가 A: `W_A` (가중치 행렬)
- 전문가 B: `W_B` (가중치 행렬)
- 전문가 C: `W_C` (가중치 행렬)
이 경우, 모델의 전체 가중치 행렬은 `W = [W_A, W_B, W_C]`로 구성될 수 있습니다.
### 2. **게이트 메커니즘을 통한 전문가 선택**
게이트 메커니즘은 입력 데이터에 따라 각 전문가의 가중치를 계산하고, 해당 가중치에 따라 특정 전문가의 파라미터만을 사용하여 출력을 생성합니다. 예를 들어, 입력 데이터가 전문가 A의 담당 영역에 해당하면, 게이트 메커니즘은 전문가 A의 가중치를 1로 설정하고, 다른 전문가의 가중치를 0으로 설정합니다.
#### 예시:
- 입력 데이터: 전문가 A의 담당 영역
- 게이트 출력: `g_A = 1`, `g_B = 0`, `g_C = 0`
- 출력: `y = g_A * y_A + g_B * y_B + g_C * y_C = y_A`
### 3. **성능 향상**
전문가별 파라미터 분리는 모델의 성능을 향상시키는 데 도움을 줍니다. 각 전문가 네트워크는 특정 작업에 집중할 수 있으며, 이는 모델이 더 전문적인 처리를 수행할 수 있도록 합니다. 또한, 게이트 메커니즘은 불필요한 전문가의 파라미터를 사용하지 않음으로써 계산 자원을 절약하고, 모델의 추론 속도를 향상시킵니다.
### 4. **확장성**
MoE의 확장성은 각 전문가 네트워크의 파라미터를 독립적으로 관리할 수 있다는 점에 있습니다. 새로운 작업을 추가하려면, 해당 작업에 맞는 전문가 네트워크를 추가하고, 게이트 메커니즘을 업데이트하면 됩니다. 이는 모델을灵活하게 확장할 수 있도록 합니다.
### 5. **결론**
MoE에서 특정 전문가 영역이 처리를 담당한다는 것은 해당 전문가의 파라미터만이 계산에 사용된다는 것을 의미합니다. 이는 모델의 성능과 효율성을 향상시키는 데 도움을 주며, 확장성도 뛰어납니다. 따라서, MoE를 사용하면 모델이 다양한 작업을 효과적으로 처리할 수 있습니다.
LLM이 결국은 행렬의 연산이 많은 시간을 소요하는데 이를 위해서
기존에는 더 많은 GPU를 필요로 했다면 이를 위해서 서브행렬을 이용해서 6710억개의 파라미터 중에서 370억개만 활성화 시켜서 사용하는 방식으로, 즉 연산범위를 줄여는 방식으로 성능효율화를 가져간 것으로 보임
이와 함께 사용되는 양자화의 경우도
결국은 행렬연산을 할 때에 몇 바이트의 부동소수점으로 할 것이냐 아니면 이보다 적은 숫자의 정수 연산을 할 것이냐로
연산의 대상을 변환하여 성능 효율화를 가져간 것과 같이
계산을 적게 하는 방법을 찾은 것 같음
그리고 여기서 사용하는 Experts 라는 것을 보면
작년에 유행되기 시작한 Agentic AI를 LLM 모델 안으로 우겨넣은 듯한 느낌이 들어.
뭐냐면 기존의 하나의 Task를 처리하기 위해서 앞단에서 가벼운 SLLM이 라우팅을 담당하고 각 전문가 LLM에게 배당을 하고
그 결과들을 가져와서 마지막에 합쳐서 최종 결과를 내는 방식으 Agentic AI라면
이와 같은 컨셉을 LLM 모델 안에서 처리하고 행렬의 서브셋으로 Expert를 구분하는 것으로 해서
효율화를 이루어냈다는 것으로 보여서
이 또한 기발한 접근 방식이라고 생각이 되네.
MLA(Multi-head Latent Attention) 기법
**예시**: 자연어 처리에서 문장 분류任务
假设我们有 두 개의 문장을 분류해야 합니다.
* 문장 1: "나는 오늘 학교에 갈 거예요."
* 문장 2: "나는 오늘 영화를 볼 겁니다."
이 두 문장을 분류할 때, 우리는 문장의 의미를 이해해야 합니다. 여기서 MLA 기법을 사용하면 문장의 다양한 측면을 병렬로 처리하여 성능을 향상시킬 수 있습니다.
**기존 방법**
기존 방법에서는 문장을 한 단어씩 처리하여 문장의 의미를 이해합니다. 예를 들어, 문장 1의 경우:
* 나는 (주제)
* 오늘 (시점)
* 학교에 (목적지)
* 갈 (동사)
이와 같이 문장을 한 단어씩 처리하여 문장의 의미를 이해합니다. 그러나, 이러한 방법은 문장의 다양한 측면을 동시에 처리할 수 없습니다.
**MLA 방법**
MLA 기법에서는 문장을 여러개의 Attention 헤드로 처리하여 문장의 다양한 측면을 병렬로 처리합니다. 예를 들어, 문장 1의 경우:
* 헤드 1: Query(나는)와 Key(오늘)으로 Attention을 수행하여 문장의 시점을 분석합니다.
* 헤드 2: Query(나는)와 Key(학교에)으로 Attention을 수행하여 문장의 목적지를 분석합니다.
* 헤드 3: Query(나는)와 Key(갈)으로 Attention을 수행하여 문장의 동사를 분석합니다.
이와 같이 MLA 기법에서는 문장을 여러개의 Attention 헤드로 처리하여 문장의 다양한 측면을 동시에 분석합니다. 이를 통해 문장의 의미를 더 정확하게 이해할 수 있습니다.
**성능 비교**
기존 방법과 MLA 방법을 비교하는 실험을 수행해 보았습니다. 실험 결과, MLA 방법은 기존 방법보다 더 높은 정확도를 가졌습니다.
* 기존 방법: 80% 정확도
* MLA 방법: 90% 정확도
이러한 결과는 MLA 기법이 문장의 다양한 측면을 병렬로 처리하여 성능을 향상시킬 수 있음을 보여줍니다.
**성능 향상 원인**
MLA 기법의 성능 향상 원인은 다음과 같습니다.
* **다양한 측면의 분석**: MLA 기법은 문장을 여러개의 Attention 헤드로 처리하여 문장의 다양한 측면을 동시에 분석할 수 있습니다.
* **병렬 처리**: MLA 기법은 문장이 여러개의 Attention 헤드로 처리되므로, 문장의 다양한 측면을 동시에 처리하여 성능을 향상시킬 수 있습니다.
* **더 정확한 의미 이해**: MLA 기법은 문장의 다양한 측면을 분석하여 문장의 의미를 더 정확하게 이해할 수 있습니다.
이러한 원인으로 인해 MLA 기법은 자연어 처리 TASK에서 성능을 향상시킬 수 있습니다.
동작은 위와 같이 하는데 아키텍처 상에서는
Attention 구조에서 키와 값을 분리해서 사용하는 이 때 압축을 통해서 KV 캐시 사용량을 줄이는 것으로 비슷한 성능으로 메모리와 계산 비용을 크게 절감한 것으로 보임. 이를 통해서 긴 입력 시퀀스를 초리해야 하는 대규모 언어모델에서 큰 이점을 가질 수 있었던 게 아닌가 싶어
MTP (Multi-Token Prediction) 기법
**MTP (Multi-Token Prediction) 기법**
MTP 기법은 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측하는 기법입니다. 이를 통해 입력 데이터의 다양한 측면을 동시에 처리하여 성능을 향상시킬 수 있습니다.
**기존 방법**
기존 방법에서는 입력 데이터를 한 단어씩 처리하여 예측을 수행합니다. 예를 들어, 문장을 분류하는 경우:
* 문장: "나는 오늘 학교에 갈 거예요."
* 기존 방법: 문장을 한 단어씩 처리하여 예측을 수행합니다.
+ 나는 (주제)
+ 오늘 (시점)
+ 학교에 (목적지)
+ 갈 (동사)
이와 같이 기존 방법에서는 문장을 한 단어씩 처리하여 예측을 수행합니다.
**MTP 방법**
MTP 기법에서는 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측합니다. 예를 들어, 문장을 분류하는 경우:
* 문장: "나는 오늘 학교에 갈 거예요."
* MTP 방법: 문장을 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측합니다.
+ 토큰 1: 나는 (주제)
+ 토큰 2: 오늘 학교에 (시점, 목적지)
+ 토큰 3: 갈 (동사)
+ 토큰 4: 거예요 (종결형)
이와 같이 MTP 기법에서는 문장을 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측합니다. 이를 통해 입력 데이터의 다양한 측면을 동시에 처리하여 성능을 향상시킬 수 있습니다.
**성능 향상 원인**
MTP 기법의 성능 향상 원인은 다음과 같습니다.
* **다양한 측면의 분석**: MTP 기법은 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측하므로, 입력 데이터의 다양한 측면을 동시에 처리하여 성능을 향상시킬 수 있습니다.
* **독립적인 예측**: MTP 기법은 각 토큰을 독립적으로 예측하므로, 입력 데이터의 다양한 측면을 각각 독립적으로 처리하여 성능을 향상시킬 수 있습니다.
* **더 정확한 분석**: MTP 기법은 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측하므로, 입력 데이터의 의미를 더 정확하게 이해할 수 있습니다.
**DeepSeek에서의 적용**
DeepSeek에서 MTP 기법을 적용하여 성능을 향상시켰습니다. DeepSeek는 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측하므로, 입력 데이터의 다양한 측면을 동시에 처리하여 성능을 향상시킬 수 있습니다.
이러한 내용으로 MTP (Multi-Token Prediction) 기법에 대해서 설명했습니다. 궁금한 점이 있다면 언제든지 물어봐 주세요!
이렇게 되면 두가지가 비슷해 보이는데 이를 구분해서 설명을 해달라고 하면 이렇게 답을 한단다
MTP (Multi-Token Prediction) 기법과 MLA (Multi-head Latent Attention) 기법은 모두 입력 데이터를 여러개의 개별적인 부분으로 분리하여 처리하는 기법이지만, 두 기법은 다음과 같은 차이점이 있습니다.
**1. 분리 방법**
* MTP 기법: 입력 데이터를 여러개의 토큰으로 분리하여 각 토큰을 독립적으로 예측합니다. 토큰은 일반적으로 단어或者語句의 일부분입니다.
* MLA 기법: 입력 데이터를 여러개의 Attention 헤드로 분리하여 각 헤드가 독립적으로 입력 데이터의 다양한 측면을 처리합니다.
**2. 처리 방법**
* MTP 기법: 각 토큰을 독립적으로 예측하여 입력 데이터의 다양한 측면을 처리합니다. 예를 들어, 문장을 분류하는 경우, 각 토큰을 독립적으로 예측하여 문장의 주제, 시점, 목적지 등을 분석할 수 있습니다.
* MLA 기법: 각 Attention 헤드가 입력 데이터의 다양한 측면을 처리하여 입력 데이터의 의미를 더 잘 이해할 수 있습니다. 예를 들어, 문장을 분류하는 경우, 각 Attention 헤드가 문장의 주제, 시점, 목적지 등을 분석하여 문장의 의미를 더 잘 이해할 수 있습니다.
**3. 목적**
* MTP 기법: 주로 입력 데이터를 더 잘 이해하고, 입력 데이터의 다양한 측면을 처리하기 위해 사용됩니다. 예를 들어, 자연어 처리에서 문장을 분류하거나, 단어들의 관계를 분석하는 경우에 사용할 수 있습니다.
* MLA 기법: 주로 입력 데이터의 다양한 측면을 동시에 처리하여 입력 데이터의 의미를 더 잘 이해하기 위해 사용됩니다. 예를 들어, 자연어 처리에서 문장을 분류하거나, 문장의 의미를 이해하는 경우에 사용할 수 있습니다.
**4. 구조**
* MTP 기법: 일반적으로 Encoder-Decoder 구조로 구성되어 있습니다. Encoder는 입력 데이터를 여러개의 토큰으로 분리하고, Decoder는 각 토큰을 독립적으로 예측합니다.
* MLA 기법: 일반적으로 Self-Attention 구조로 구성되어 있습니다. Self-Attention은 입력 데이터의 다양한 측면을 처리하는데 사용됩니다.
이러한 차이점으로 인해 MTP 기법과 MLA 기법은 서로 다른 목적과 구조를 가지고 있습니다. 그러나, 두 기법 모두 입력 데이터를 더 잘 이해하고, 입력 데이터의 다양한 측면을 처리하는데 사용될 수 있습니다.
정리를 하면
MLA 기법은 여러개의 어텐션 헤드로 분리해서 병렬화 한 것이고 추론할 때 사용되며
MTP기법은 여러개 토큰으로 분리해서 병렬화 한 것이고 학습할 때 사용되는 방법이라고 생각하면 될 것 같어.
목적과 구조가 다른 방식이긴 하지만 결국엔 입력데이터를 잘 이해하고 다양한 측면에서 분석하기위한 방식이라고 보면 될 것 같어.
더 큰 특징들이 있지만 큰 영역만 본거라고 생각하면 좋을 것 같고
나머지 부분은 논문이나 기술자료를 구글링해서 정리해보면 좋을 것 같어.
사실 이 단계로 오기 전에
트랜스포머 모델이나 스케일링의 법칙과 데이터 고갈등의 대한 문제 관련된 글들고 미리 읽어보면 좋지 않을까 싶네
오늘은 시간이 없어서 여기까지만....끝~
공부 열심히 해라~
참...마지막으로
구글링 하다보면 많이 나오는 얘기중에
DeepSeek가 보안상의 문제가 있고, 천안문이나 시진핑에 대해서 답변을 제대로 못하는 바보라는 둥의 얘기를 많이 하고 OpenAI의 데이터를 훔쳐가서 학습을 시킨게 아닌가 하는 의심도 있고, 정말 H100 없이 학습을 시켰겠냐는 여러가지 의심스러운 내용들을 볼 수 있는데,
모델 자체로서 배울 것은 배워야 하고
모델을 사용하는 이유가 천안문에 대한 잡담하기 위해서가 목적이 아닌 바에는 뭐가 문제되는지 모르겠고
보안상으 문제로 나의 데이터를 가져갈 거란 걱정은, 그래서 ollama로 local로 받아서 테스트 해보라고 한 것이고..
학습데이터를 가져간 것이라는 것도..음....openAI는 그럼 데이터 크롤링에서 떳떳한 건지 살짝 갸우뚱 되는 상황이고
H100 관련된 얘기는...그게 중요한가? 싶은 생각이 들어.
어찌되었든 위에서와 같은 여러가지 효율화를 통해서 성능을 향상시킬 생각을 못하고 그저 대규모 조직에서나 가능할거라고 우리는 그저 미국에서 잘 만들면 잘 활용해서 한국어 잘하는 모델로 파인튜닝 해서 쓰면 되는거라고 안위하며 국가적으로도 관심 없는 분야로 손 놓고 있는 동안 무섭게 성장하고 있는 중국과 그들의 기술과 그들의 땀이 무섭다는 생각이 들어서 좀 찜찜하고 그러네..
여튼 이건 내 생각임