DeepSeek 너 요즘 핫해?

04.02.2025.장병익 매니저
#DeepSeek
#LLM
#AI
#GPU
Report

개요

최근 괴물 같은 성능을 가진 DeepSeek LLM시리즈의 DeepSeek-R1가 OpenSource로 출시되어 화제가 되었습니다.

DeepSeek-R1는 OpenAI에서 ChatGPT-4o 보다 최근에 나온
OpenAI-o1-1217 모델의 성능과 과 비슷한 성능을 가진 모델로 평가되었습니다.

OpenAI-o1 모델은 기존 ChatGPT-4o 모델보다 추론성능을 향상 시킨 모델 입니다.

그리고 모델을 학습시킨 비용이 OpenAI-o1-1217보다 낮은 비용으로 효율성 측면에서 엄청난 성과가 있어 화제가 되었습니다.


평가 데이터셋

  • AIME 2024 : 미국 수학 경시대회 문제
  • Codeforces : 온라인 코딩테스트 플랫폼 LLM의 코드
  • GPQA Diamon : 프로그램 코드
  • MATH-500 : 500개의 수학 문제
  • MMLU : 의학, 법률, 수학, 역사 등 57개 주제의 지식
  • SWE-bench Verified : 실제 소프트웨어 엔지니어링 작업

출처 : https://huggingface.co/deepseek-ai/DeepSeek-R1

DeepSeek-R1

DeekSeek은 LLM 모델의 시리즈 이름 입니다. 이번에 소개 할 DeepSeek-R1, 뿐만 아니라, DeepSeek-R1-zero, DeepSeek-V3-Base등 다양한 LLM 모델을 가진 시리즈 입니다.
DeekSeek-R1 이전에 DeepSeek-R1-zero라는 모델을 먼저 만들었습니다.
DeepSeek-R1-Zero는 아래 예제와 같은 언어혼용 문제와 가독성 문제가 있어서 개선을 한 모델이
DeekSeek-R1 입니다.

언어 혼용 문제 예시

  • 영어가 섞여 나오는 경우 "평alelism"
  • 중국어가 섞여 나오는 경우 "크기를进一步 줄이거나"

DeepSeek-R1 학습 개요


출처 : https://medium.com/@shravankoninti/deepseek-r1-the-game-changer-reasoning-model-98acaa35ec71

DeepSeek-R1의 4가지의 학습

  1. Cold Start : 소량의 CoT 데이터로 이전 방식(D1-R1-Zero)의 초기 불안정했던 부분을 줄였습니다.

  2. Reasoning Oriented RL GRPO : GRPO 알고리즘으로 강화학습을 진행했고 언어혼용을 줄이기 위해 언어 일관성 관련 학습을 추가했습니다.

  3. Rejection Sampling and Supervised Fine-Tuning : 2번 작업에서 실패한 작업 추론 데이터와 비추론 데이터를 학습 시켰고 단순 질의(“Hello”) 같은 부분은 <think></think> 부분을 제외한 답변을 하도록 설정했습니다.

  4. Reinforcement Learning for all Scenarios :

    번역, 문장의 자연스러움등 사람 친화적으로 답변을 하도록 모델을 강화학습 시켰습니다.


DeepSeek-R1 학습 방법

1.Cold Start

Cold Start는 소량의 CoT 데이터를 “SFT” 하는 방법으로
초기 R1-Zero에서 학습시킬때 문제되었던 학습 초기에 발생하는 파라미터 값들이
불안정한 부분을 방지하는 방법으로 사용되었습니다.

학습에 사용 된 CoT Data 내용구성

  • DeepSeek-R1-Zero의 출력을 읽기 쉬운 형식으로 수집한 데이터
  • 긴 사고과정(CoT)을 예시로 사용한 퓨샷 프롬프팅 방식의 데이터
  • 수집된 결과들을 사람이 직접 정제하고 개선한 데이터
  • 모델에게 성찰과 검증이 포함된 상세한 답변을 생성하도록 직접 요청한 데이터

Supervised Fine Tuning (SFT)

지도 학습이라고 불리며 모델에게 정답이 있는 데이터셋을 입력해서
문제에서 정답을 도출해내는 특징을 추출해서 학습 시키는 방법을 말합니다.
예)
나 : 고양이사진.jpg 이 사진은 고양이 입니다.
모델 : 이 사진은 고양이네 특징으로는 사진에 수염도 있는것 같고, 삼각형의 귀가 있는것 같은 특징이 고양이구나

위 예시처럼 문제와 정답을 알려주면 정답을 도출해내는 패턴들을 학습시키는 방식을 SFT라고 합니다.

Chain of Thought (CoT)

CoT(프롬프트 기법)을 활용한 질의 응답쌍으로 구성된 데이터
문제가 주어질때 문제와 정답만 주는 것 뿐만 아니라 CoT에서는 중간에 답을 도출해 내는 사고과정이 같이 포함된 프롬프트 기법입니다.

기존 일반적인 데이터셋:

"문구점에서 연필 3개를 개당 1000원에 사고, 지우개 2개를 개당 500원에 샀습니다.
총 얼마를 지불해야 할까요?"

답변:
"4000원입니다."

CoT 기법을 활용한 데이터셋:

"문구점에서 연필 3개를 개당 1000원에 사고, 지우개 2개를 개당 500원에 샀습니다.
총 얼마를 지불해야 할까요?"

사고 과정:
1. 연필 구매 비용 계산
연필 한 개는 1000원
연필 3개 = 1000원 × 3 = 3000원

2. 지우개 구매 비용 계산    
지우개 한 개는 500원    
지우개 2개 = 500원 × 2 = 1000원

3. 총 비용 계산    
전체 = 연필 비용 + 지우개 비용    
전체 = 3000원 + 1000원 = 4000원

답변:
"4000원입니다."

2. Reasoning Oriented RL GRPO

추론 위주의 데이터를 강화 학습 (RL) 시키는 부분 입니다.
기존과 달리 강화학습을 진행 할때 추가적으로 답변을 할 때 동일한 언어로 답변을 하는 경우 강화학습(RL) 의 보상을 추가로 넣어서 “언어 혼용” 하는 부분을 줄였습니다.

보상을 구성할 때 두 종류로 작성 되었습니다.

  1. Accuracy Rewards

    모델의 정확성을 판단하는 부분이며, 수학 문제 같은경우는 결정적인 결과를 요구하는 경우와, 코드 같은 경우 컴파일러를 사용하여 사전에 정의된 케이스를
    Format Rewards
    <think> </think> 사이에 CoT의 중간 사고과정을 작성하도록 보상 모델을 작성했습니다.

사전용어 : Group Relative Policy Optimization (GRPO)

GRPO는 학습 비용을 줄이는 방법 중 하나로 사용되었습니다.

GRPO의 유래는

  • 'Group': 여러 응답을 그룹으로 생성
  • 'Relative': 상대적인 비교를 통한 평가
  • 'Policy Optimization': 정책 최적화

학습에 해야하는 데이터셋 하나를 기준으로
몇가지의 다른 응답을 생성을하고 그 응답들을 개별적으로 보상을 측정합니다.
이 후 정책에 반영을 할 때 보상을 기준으로 학습을 진행합니다.

예)

  1. 응답 생성 단계:
  • 하나의 프롬프트에 대해 G개(예: 3개)의 서로 다른 응답을 생성
  • 예시 프롬프트: "1+1은 무엇인가요?"
    • 응답1: "2입니다"
    • 응답2: "1과 1을 더하면 2입니다"
    • 응답3: "답은 2입니다. 1에 1을 더했기 때문입니다"
  1. 보상 계산 단계:
  • 각 응답에 대한 보상값 계산
  • 예시:
    • 응답1: 7점
    • 응답2: 8점
    • 응답3: 9점
  • 이 보상들의 평균과 표준편차를 계산
    • 평균 = 8점
    • 표준편차 = 1
  1. 정책 학습 단계:
  • 높은 보상을 받은 응답 스타일을 더 선호하도록 학습
  • 낮은 보상을 받은 응답 스타일은 덜 선호하도록 학습
  • 이를 통해 모델은 "어떤 스타일의 응답이 더 좋은지" 학습

사전 용어 : Reinforcement Learning (RL)

시행 착오를 통해 학습하는 방법 마치, 강아지를 훈련시키는 것처럼, 좋은 행동에는 보상을 주고 나쁜 행동에는 불이익을 주는 방법입니다.

강화학습에는 4가지의 구성을 가지고 있습니다.
상태(State), 행동(Action), 보상(Reward), 정책(Policy)

상태 : 모델이 해결해야하는 질문
행동 : 모델이 질문에 대한 제시한 답
보상 : 모델이 행동에 대한 답의 결과를 평가하고 보상지급
정책 모델이 보상으로 인해서 기존에 알고 있던 행동을 도출해낸 사고값을 수정

예)
State : 2+2=?
Action : "5"
Reward : -1

State : 2+2=?
Action : "4"
Reward : 1

Policy : 알고 있던 값은 5였는데 4일때 보상을 주네 다음 부터는 2+2는 4로 입력해야겠다.

3. Rejection Sampling and Supervised Fine-Tuning

2번에서 추론위주의 강화학습에 실패한 데이터를 600K로 요약하고 비추론 데이터 200K를 SFT 진행했습니다.

또 단순 질의처럼 추론이 필요없는 경우에는 CoT 데이터를 제외해서 답변을 하도록 조정했습니다.
추론이 필요 없는경우 DeepSeek-R1에서 <think></think> 부분을 제외하고 출력이 됩니다.

4. Reinforcement Learning for all Scenarios

복잡하고 미묘한 상황에서 인간의 선호도를 반영하기 위해 보상 모델 사용
생성 과정에서 발생할 수 있는 잠재적 위험, 편향, 유해 콘텐츠를 식별하고 완화


DeepSeek Distill

위의 과정중에서 3번 과정인 Rejection Sampling and Supervised Fine-Tuning에서 나온 추론 데이터 600K 비추론 데이터 200K 총 800K SFT 데이터를 이용해서 기존 OpenSource로 사용할 수 있는 Qwen, Llama를 베이스모델로 DeepSeek-R1 모델을 Distill 작업을 통해 DeepSeek-R1-Distill-{Qwen/Llama}-{*B} 모델을 출시 했습니다.

사전 용어 : Model Distillation (Distill)

미리 잘 학습 되어있는 큰 모델의 지식을 실제로 사용하고자 하는 작은 모델에게 전달하는것

DeepSeek-R1-Distill LLM 구축

text-generation-webui를 이용해서 DeekSeek-Distill-Llama3.3-70B, DeepSeek-Distill-Qwen2.5-32B 모델의 양자화 버전과 DeekSeek-Distill-Qwen2.5-32B 공식 모델을 구축하게 되었습니다.

사용한 컴퓨터 GPU 자원

  • RTX TITAN 24GB X 3 = Total vRAM 72GB

구축 방법

  1. git clone 으로 아래의 주소에 코드를 로컬에 다운로드 받습니다.

github : https://github.com/oobabooga/text-generation-webui

  1. 폴더 안에 을 이용해서 huggingface에서 모델을 다운로드 합니다.
    - Llama 70B AWQ : python download-model.py casperhansen/deepseek-r1-distill-llama-70b-awq
    - QWen 32B AWQ : python download-model.py inarikami/DeepSeek-R1-Distill-Qwen-32B-AWQ
    - QWen 32B : python download-model.py deepseek-ai/DeepSeek-R1-Distill-Qwen-32B

  2. 모델 실행

CUDA_VISIBLE_DEVICES=0,1,2 python server.py --listen --listen-host 0.0.0.0 --listen-port 7860 --model deepseek-ai_DeepSeek-R1-Distill-Qwen-32B --gpu-memory 24 24 24 --api
  • 모델명에 ‘/’ 는 ‘_’로 변경해서 –model 에 입력해야 합니다.
  • –gpu-memory : GPU에 얼마만큼의 vRAM을 할당할지 조율 하는 부분입니다.
    • 예 : –gpu-memory 24 24 24 : 24GB만큼 3개
  • --listen-host : 네트워크 IP 지정
  • --listen-port : 웹 UI 접속용 포트 지정
  • –api : API 서비스(5000) 오픈

DeepSeek-Distill-Qwen-32B 구축 - (공식 모델)

모델을 올릴때는 vRAM이 66GB 정도 소요되었습니다.

hugginface 모델 주소 : https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B

DeepSeek-Distill-Qwen-32B-AWQ 구축 - (양자화 모델)

모델을 올릴때는 vRAM이 20GB ~ 21GB 정도 소요되었습니다.

hugginface 모델 주소 : https://huggingface.co/inarikami/DeepSeek-R1-Distill-Qwen-32B-AWQ

DeepSeek-Distill-Llama-70B-AWQ 구축 - (양자화 모델)

모델을 올릴때는 vRAM이 41GB 정도 소요되었습니다.

hugginface 모델 주소 : https://huggingface.co/casperhansen/deepseek-r1-distill-llama-70b-awq

text-generation-webui의 주의 할점

채팅을 진행할때 모델은 진행 했던 대화내용을 모델에 올려서 이전 내용을 참고해서 답변을 줍니다. 이전 내용에 데이터가 커지면 커질 수록 vRAM이 사용량이 넘칠 수 있으니 채팅을 자주 새롭게 열어 주어야합니다.

기존에 온도 자체가 1.0으로 되어있는 경우 답변의 정확도가 떨어질 수 있으니
간단한 테스트에서는 0.7로 맞추는걸 추천드립니다.

변경은 왼쪽 메뉴바에서 Parameter 이동 후 temperature 0.7로 맞추고 Preset 오른쪽에 디스크 모양의 저장 버튼으로 적용 할 수 있습니다.

DeepSeek-Distill-Qwen-32B-AWQ 테스트

DeepSeek Distill 모델들을 Qwen-32B, Llama3.3 70B를 사용해본 후기로는 답변은 원하는 대로 답변을 하지만
한국어와 일본어 혹은 중국어가 섞여 나오는 언어 혼용 문제는 아직까지는 남아 있었습니다.

huggingface Token 문제를 해결해달라는 Prompt 입력 후 출력 모습

DeepSeek R1 언어 혼용을 줄이기 위한 Prompt 작성

System Prompt는 영어와 한국어 버전 중 한국어 버전으로 System Prompt로 작성한 내용이 조금 더 언어 혼용을 줄이는데 효과적이 었습니다. 위의 사진 처럼 일본어가 섞여 나오는 현상을 아래의 System Prompt를 통해서 없앴습니다.

고유명사같은 경우는 아직도 섞여 나오지만 번역에서 해석을 해보면 의미적으로는 문제는 없었습니다.

System Prompt

당신은 한국어 전문 번역가입니다. 다음 규칙들을 엄격히 준수해주세요:

문자 체계 규칙:

모든 텍스트는 반드시 한글로만 표기하세요

다음 문자는 절대 사용하지 마세요:

한자 (简体字, 繁體字, 漢字)

일본어 (ひらがな, カタカナ, 漢字)

특수 문자 (除外: 기본 문장부호와 영숫자)

변환 규칙:

한자어 → 한글
예시) 時間 → 시간, 學校 → 학교

일본어 → 한글
예시) 電話 → 전화, おはよう → 오하요우

외래어 → 한글
예시) パソコン → 파소콘, コンピュータ → 컴퓨터

고유명사 처리:

모든 고유명사는 한글로 표기

필요시 괄호 안에 원어 발음을 한글로 표기

예시) 도쿄(とうきょう), 오사카(おおさか)

출력 검증:

응답 전 모든 텍스트가 다음으로만 구성되었는지 확인:

한글

영문

숫자

기본 문장부호 (마침표, 쉼표, 괄호 등)

한자나 일본어 문자가 발견되면 즉시 한글로 변환