DeepSeek V3.1 튜토리얼: Python과 W&B Weave로 오픈 소스 LLM 활용하기
671B 파라미터를 갖춘 혁신적인 오픈 소스 언어 모델 DeepSeek V3.1을 살펴보세요. 최적의 성능을 위해 Python과 W&B로 통합하는 방법을 배워 보세요. 더 알아보기!
이 글은 AI 번역본입니다. 오역이 있다면 댓글로 알려 주세요.
Created on September 15|Last edited on September 15
Comment
이 글에서는 DeepSeek V3.1이 무엇인지, 왜 중요한지, 그리고 이 튜토리얼에서 무엇을 만들게 될지 알아봅니다. DeepSeek V3.1은 오픈 소스 언어 모델의 도약을 이끄는 모델로, 결합하여 효율적인 추론 와 비용 효율적인 학습개발자가 쉽게 활용할 수 있으면서도 높은 성능을 제공하도록 설계되었으며, 일부 비공개 모델에 필적하는 수준의 성능을 발휘합니다. 이 튜토리얼에서는 DeepSeek V3.1의 핵심 혁신을 살펴보고, Python과 함께 사용하는 방법을 단계별로 안내합니다. 또한 실험 추적을 위한 Weights & Biases (W&B)와의 통합 방법도 다룹니다. 튜토리얼을 마치면 아키텍처 이해부터 API 호출, 결과 분석까지, DeepSeek V3.1을 자신의 프로젝트에 활용하는 방법을 익히게 될 것입니다.
개요
DeepSeek V3.1이 주목받는 이유는 다음과 같습니다 대규모 규모 그리고 혁신적인 설계 대규모 언어 모델(LLM) 분야에서. 함께 6710억 개의 파라미터 Mixture-of-Experts(MoE) 아키텍처로 구성되어 있으며(여기서 only 토큰당 활성화되는 파라미터는 37B입니다), 비슷한 규모의 조밀한 모델이 요구하는 전체 비용을 들이지 않고도 최첨단 정확도를 달성합니다. 이 모델은 고품질 토큰 14.8조 개로 사전 학습됨, 다양한 언어와 코드, 폭넓은 지식 도메인을 아우르며 여러 과제에 대한 폭넓고 견고한 이해를 제공합니다. 무엇보다 중요한 것은, 이처럼 방대한 규모에도 불구하고 DeepSeek V3.1은 다음을 위해 최적화되어 있다는 점입니다 효율적인 추론, 즉 응답을 빠르게 생성할 수 있으며(초당 약 60토큰까지), 매우 긴 컨텍스트도 처리할 수 있습니다(최대 128K 토큰 컨텍스트 윈도우)에서도 막힘없이 처리합니다. 개발자와 조직 입장에서 그 의미는 분명합니다. DeepSeek V3.1은 최상위 상용 모델에 견줄 만큼 최첨단 성능을 제공하면서도, 오픈 소스 솔루션으로서 여러분의 애플리케이션과 워크플로에 자유롭게 통합할 수 있습니다.
팁 팁: 진행하면서 다음에 집중하세요 직접 해보며 배우기DeepSeek V3.1이 특별한 이유를 설명하는 데 그치지 않고, 모델을 직접 다뤄 보면서 실습도 진행합니다. 실행하고 실험해 볼 수 있는 코드 예시도 준비되어 있으니 놓치지 마세요!
✅ 이 섹션에서 달성할 목표: 지금까지 DeepSeek V3.1의 중요성과 주요 기능을 개괄적으로 살펴봤습니다. 이제 이 모델을 강력하면서도 효율적으로 만드는 기술적 혁신을 깊이 있게 알아보겠습니다.
DeepSeek V3.1의 핵심 아키텍처 혁신
이 섹션에서는 V2와 비교해 V3를 돋보이게 만드는 DeepSeek 아키텍처의 혁신적 변화들을 알아봅니다. DeepSeek V3는 성능과 효율을 끌어올리는 여러 혁신을 도입했습니다. 이제 다음 내용을 살펴보겠습니다 멀티헤드 잠재 어텐션, 정교한 MoE 아키텍처, 그리고 새로운 학습 전략이 이러한 개선에 기여합니다. 이러한 변화를 이해하면 다음과 같은 점을 더 잘 이해하게 됩니다 왜 DeepSeek V3.1이 이렇게 뛰어난 성능을 내는 이유와 그 아이디어를 여러분의 머신러닝 작업에 어떻게 적용할 수 있는지 살펴보겠습니다. 참고로 DeepSeek V3.1은 DeepSeek V3를 기반으로 구축되었기 때문에 많은 아키텍처 세부 사항은 동일합니다.
DeepSeek-V2에서 DeepSeek-V3.1로의 혁신 사항
DeepSeek-V3는 V2의 기반 위에 모델 성능과 추론 속도를 향상시키는 핵심 개선 사항을 더했습니다. 아래는 V2와 비교했을 때 V3.1에서 도입된 주요 혁신입니다:
- 멀티헤드 잠재 어텐션(MLA): 이는 기존의 멀티헤드 어텐션을 확장한 새로운 어텐션 메커니즘입니다. 각 어텐션 헤드가 원래의 토큰 공간에만 작동하는 대신, MLA는 헤드가 주의를 기울일 수 있는 잠재 특성을 도입합니다. 실무적으로 이는 계산량을 비례하여 늘리지 않고도 모델이 더 미묘한 패턴과 장기 의존성을 포착할 수 있음을 의미합니다. 효과 DeepSeek-V3.1은 잠재 표현을 통해 주의를 집중시켜 최대 128k 토큰에 이르는 매우 긴 컨텍스트를 더욱 효율적으로 처리합니다. 이 방식은 매우 긴 시퀀스에 대해 순진한 전체 어텐션을 적용하는 것과 비교해 메모리와 연산 부담을 줄여 줍니다.
- DeepSeek-MoE 아키텍처: DeepSeek V3.1은 ���용합니다 혼합 전문가 모델 전례 없이 큰 규모(총 671B 파라미터)이지만, 핵심은 각 입력 토큰마다 전체가 아닌 일부 전문가만 활성화된다는 점으로, 활성 파라미터는 약 37B 수준입니다. DeepSeek-V2에서도 MoE를 사용했지만, V3의 MoE는 더 발전했고 최적화가 잘 되어 있습니다. 모델은 다수의 “전문가” 서브네트워크로 분할되어 있으며, 게이팅 메커니즘이 각 토큰을 처리할 전문가를 선택합니다. 효과 이 아키텍처는 모델이 …을/를 갖추도록 합니다 용량 매우 큰 모델의 용량을 유지하면서도, 추론을 계속해서 효율적으로 수행하도록 연산 훨씬 더 작은 모델에 가까워집니다. 즉, 다수의 특화된 전문가를 활용해 더 높은 정확도를 달성하지만, 한 번에 소수의 전문가만 사용되므로 추론은 여전히 실행 가능합니다.
- 보조 손실 없는 로드 밸런싱: 전통적인 MoE 모델은 학습 중 토큰이 전문가들 사이에 고르게 분배되도록(특정 전문가의 과도한 사용 또는 미사용을 방지하기 위해) 보조 손실 항을 요구하는 경우가 많습니다. DeepSeek-V3.1은 이를 위한 새로운 접근법을 선도하여 보조 손실 없이 로드 밸런싱대신 개선된 게이팅 전략이나 아키텍처 조정을 활용하여 전문가 사용이 자연스럽게 균형을 이루도록 합니다. 효과 보조 손실을 제거하면 조정해야 할 하이퍼파라미터가 하나 줄어들어 학습이 단순해지고, 추가적인 목적 함수를 함께 최적화할 필요가 없어 잠재적으로 안정성도 높아집니다. V3.1의 게이팅 메커니즘은 각 전문가가 충분히 활용되도록 효과적으로 보장하며, 이는 DeepSeek-V2 실험에서 검증되었고 V3.1에서 완성되었습니다.
- 다중 토큰 예측 목표: 표준 언어 모델링 목표(한 번에 다음 토큰 하나를 예측)와 달리, DeepSeek-V3.1은 다음과 같은 방식으로 학습되었습니다 다중 토큰 예측 목표입니다. 이는 학습 과정에서 모델이 가끔 한 번에 여러 개의 미래 토큰을 예측하려고 시도했음을 의미합니다. 효과 이 학습 전략은 더 강력한 예측 모델링으로 이어집니다. 모델이 토큰 시퀀스를 더욱 일관되게 생성하고, 출력에서 부분적으로 “앞을 내다보는” 계획을 세울 수 있게 됩니다. 보너스로 추론 효율도 높일 수 있습니다. 일부 구현에서는 다중 토큰 예측으로 학습된 모델이 한 번의 포워드 패스에서 여러 토큰을 생성해 처리량을 높입니다. 설령 일반적으로 한 번에 한 토큰씩 생성하더라도, 이 학습 목표는 대체로 문맥 인���력이 더 높고 긴 출력에서 오류가 적은 모델을 만들어 줍니다.
이러한 혁신들이 결합되어 DeepSeek-V3의 성능을 크게 향상시킵니다 성능 (V2 대비 벤치마크에서 더 높은 정확도를 달성합니다) 그리고 효율성 (계산 자원을 더 효율적으로 사용합니다). 예를 들어 MoE와 MLA 덕분에 DeepSeek-V3는 매개변수 규모가 한 자릿수 이상 더 큰 조밀(dense) 모델보다 더 나은 성능을 낼 수 있습니다. 활성 토큰당 활성 매개변수 수를 최소화하면서, 다른 모델들이 처리하기 어려운 초장문 입력도 무리 없이 다룹니다.
팁 팁: 자세한 내용을 알고 싶다면 다음을 읽어 보세요 DeepSeek-V3 기술 보고서. 이러한 혁신에 대한 상세한 근거와 어블레이션 연구를 제공합니다. 이 개념을 이해하면 MoE를 활용한 확장이나 멀티 토큰 목적을 통한 더 빠른 생성처럼, 자체 모델을 최적화하는 아이디어에 영감을 얻을 수 있습니다.
✅ 여러분이 해낸 일: MLA, MoE 개선, 보조 손실 없는 학습, 멀티 토큰 예측을 포함해 DeepSeek-V3의 아키텍처가 V2와 어떻게 다른지 배웠습니다. 이러한 발전은 왜 DeepSeek V3.1이 동시에 both 강력하고 효율적인 다음으로 학습과 추론 관점에서 자세히 살펴보겠습니다.
효율적인 추론과 비용 효율적인 학습
이 섹션에서는 DeepSeek-V3.1이 예측을 빠르게 수행하고 학습 비용을 절감하여 어떻게 효율성을 달성하는지 알아봅니다. 671B 파라미터 모델을 구축하는 일은 계산 자원이 과도하게 들 것처럼 보일 수 있지만, DeepSeek 팀은 이를 감당할 수 있도록 똑똑한 기법들을 적용했습니다. 다음과 같은 방법들을 살펴보겠습니다. FP8 정밀도, 추가 손실 없이 동작하는 영리한 로드 밸런싱, 그리고 분산 학습에서의 통신 병목 감소. 이를 이해하면 대규모 모델을 실제로 학습하고 운영하는 방법을 확인할 수 있으며, 이는 어떤 대규모 모델을 학습할 때에도 그대로 적용되는 교훈입니다.
DeepSeek-V3.1이 효율성을 달성하는 방법
DeepSeek v3.1의 기반이 되는 DeepSeek-V3는 계산 대비 성능을 극대화하도록 처음부터 설계되어, 이를 가능하게 합니다 경제적 해당 규모 대비 뛰어난 성능을 보입니다. 추론과 학습 모두에서 효율성을 높이기 위해 사용하는 핵심 방법은 다음과 같습니다:
- FP8 혼합 정밀도 학습: DeepSeek-V3의 학습 파이프라인은 다음과 같은 요소를 활용합니다 8비트 부동소수점(FP8) 정밀도(최신 NVIDIA H100과 같은 GPU에서 지원). 학습의 특정 구간에서 가중치와 활성화를 8비트 형식으로 표현하면, 기존의 16비트 또는 32비트 정밀도 대비 메모리 사용량과 통신 오버헤드를 크게 줄일 수 있습니다. 영향: FP8를 사용하면 동일한 토큰 수를 처리하면서 필요한 GPU 시간(GPU-hours)을 크게 줄여 모델을 학습할 수 있습니다. 또한 숫자 표현이 더 작아져 행렬 곱 연산이 빨라지므로 계산 속도도 향상됩니다. 그 결과, 전체 학습은 대략적으로 완료되었습니다 H800 GPU 시간 280만 시간 이 정도 규모의 모델로서는 매우 인상적인 성과입니다. 참고로, 이러한 정밀도 최적화가 없었다면 필요한 연산량은 몇 배나 더 컸을 것입니다.
- 최적화된 로드 밸런싱(보조 손실 없이) 앞서 언급했듯이 DeepSeek-V3는 더 나은 게이팅 메커니즘을 도입해 일반적인 MoE 보조 손실을 제거합니다. 이는 효율에 직접 기여합니다. 모델이 용량을 낭비하거나 일부 전문가가 모든 일을 떠맡는 나쁜 국소 최적해에 갇히는 문제를 피할 수 있기 때문입니다. 영향: 이는 다음을 의미합니다 모든 전문가의 보다 일관된 활용이는 특정 전문가 하나가 병목이 되는 것을 막습니다. 실무적으로는 모델의 모든 부분이 병렬로 학습하므로 학습 수렴이 더 빨라지고, 단일 구성 요소에 일이 몰리지 않아 추론 속도도 고르게 유지됩니다.
- 통신 병목 현상 감소: 671B 규모의 모델을 학습하려면 여러 GPU(때로는 여러 노드)에 작업을 분산해야 합니다. 디바이스 간에 활성화값, 그래디언트, 파라미터를 교환하는 통신 오버헤드는 대규모 모델 학습 속도를 크게 저하시킬 수 있습니다. DeepSeek 팀은 다음과 같은 구현을 도입했습니다. 통신 효율적인 알고리즘 이를 해결하기 위해 다음과 같은 방식을 적용했습니다. 예를 들어, MoE 전문가 출력에 대해 최적화된 all-to-all 통신을 사용하고, 모델을 샤딩하여 각 GPU가 모델 가중치의 일부만 처리하도록 했을 가능성이 큽니다. 또한 다음과 같은 기능들도 언급합니다: get_packed_weights 그들의 코드베이스에서 텐서 병렬 처리를 위해 통신 단계를 효율적으로 묶으려는 노력이 확인됩니다. 영향: 이러한 최적화 덕분에 GPU는 데이터 전송 대기 대신 유용한 작업(행렬 곱셈)에 집중할 수 있습니다. 그 결과, 다수의 GPU로 학습을 확장해도 거의 선형에 가까운 효율을 유지하며, 매우 큰 규모까지 네트워크 병목에 일찍 걸리지 않고 GPU를 더 추가할수록 실제로 성능 향상을 얻을 수 있습니다.
- 고처리량 추론: 효율성은 학습에만 국한되지 않습니다. 많은 사용자가 속도를 중요하게 여기는 곳은 바로 추론(텍스트 생성)입니다. DeepSeek-V3는 텍스트를 빠르게 출력하도록 최적화되어 있습니다. 다중 토큰 학습 목표와 간소화된 아키텍처를 통해 약 초당 60토큰DeepSeek-V2 대비 약 3배 빠릅니다. 내부적으로는 더 빠른 트랜스포머 구현(예: FlashAttention 또는 기타 결합 커널)을 사용하고, 동일한 크기의 밀집 모델에 비해 토큰당 연산량을 낮게 유지하는 MoE 구조를 적용하여 이를 달성합니다. 영향: 최종 사용자 입장에서는 모델이 매우 크더라도 응답이 빠르게 돌아온다는 의미입니다. 예를 들어 몇백 토큰짜리 응답이라면 수십 초가 아니라 몇 초 만에 준비될 수 있습니다.
- 안정적이고 비용 효율적인 학습 체계: 효율성에서 자주 간과되는 한 가지 측면은 시도를 낭비하지 않기. DeepSeek-V3의 학습은 놀라울 정도로 안정적이었으며, 보고에 따르면 비가역적 손실 급등 없음 되돌리기가 필요한 학습 충돌도 없었습니다. 이러한 안정성은 세심한 하이퍼파라미터 튜닝과, 점진적인 학습률 워밍업 및 초기 단계에서 발산을 조기에 포착하는 모니터링 같은 기법에서 비롯된 것으로 보입니다. 영향: 안정적인 학습은 중단된 런과 낭비되는 연산 자원을 줄인다는 뜻입니다. 또한 모델이 한 번에 수렴했기 때문에 총 비용(2.8백만 GPU 시간)은 일회성 비용이었습니다. 이들은 또한 사전 학습을 다음과 함께 보강했습니다. 지도형 미세 조정 (SFT) 그리고 강화 학습 모델의 역량을 완전히 끌어내기 위한 단계들이었습니다. 이러한 미세 조정 단계는 사전 학습된 모델 위에서 수행되어 정렬성과 추론 능력을 한층 개선하고, 초기 학습 투자 가치가 최대한 발휘되도록 했습니다.
종합하면, 이러한 방법들은 DeepSeek-V3를 비용 효율적 프로젝트의 규모에도 불구하고 훌륭히 완수했습니다. 대규모 모델 학습에 관심 있는 분들에겐, FP8과 MoE 같은 최첨단 기법을 결합해 비용 폭증 없이 규모의 한계를 넓혀 가는 모범 사례가 됩니다. 모델 사용자에게는 더 빠른 응답 속도로 직접적인 이점이 돌아오며, 적절한 하드웨어가 있다면 예상보다 적은 자원으로 모델을 직접 실행해 볼 수도 있습니다.
팁 팁: 이러한 효율화 기법들(예: 혼합 정밀도)은 인기 있는 프레임워크에서 이미 널리 지원됩니다. 모델을 파인튜닝하거나 서비스한다면, 하프 프리시전(FP16 또는 bfloat16), 가능하다면 최신 FP8 지원까지 활용하는 것을 고려하세요. 속도가 크게 향상되고 메모리 사용량을 줄일 수 있습니다. 또한 모델 병렬화를 지원하는 라이브러리(예: DeepSpeed, ColossalAI)를 주시해 GPU 여러 대에 셰이딩해 대규모 모델을 효율적으로 활용하세요.
✅ 여러분이 해낸 일: 이제 이해하셨습니다 DeepSeek-V3가 강력함과 효율성을 동시에 달성하는 방법우리는 FP8 학습, 보조 손실 없이 수행하는 MoE 로드 밸런싱, GPU 통신 오버헤드 감소, 그리고 이러한 모든 요소가 빠른 추론으로 이어지는 과정을 다뤘습니다. 이 지식은 이렇게 거대한 모델이 실제로 어떻게 사용 가능한지에 대한 의문을 해소해 줍니다. 다음으로, DeepSeek-V3.1이 실제로 어떻게 수행합니다 다른 모델들과 비교한 뒤, 직접 사용해 보도록 하겠습니다.
DeepSeek-V3.1 평가 결과
실제 코딩 과제에서 V3.1은 큰 도약을 보입니다. GitHub 이슈를 올바르게 수정해 단위 테스트를 통과시키는 빈도를 측정하는 SWE-bench Verified에서 V3.1은 66%의 성공률을 기록했으며, V3-0324와 R1은 각각 45%에 그쳤습니다. 다국어 버전에서도 V3.1은 54.5%의 이슈를 해결해, 다른 모델들의 약 30% 수준을 거의 두 배로 앞질렀습니다. 라이브 리눅스 셸에서 과제를 성공적으로 완료할 수 있는지 평가하는 Terminal-Bench에서도 동일한 양상이 나타납니다. V3.1은 31%의 과제에서 성공했고, 다른 모델들은 각각 13%와 6%였습니다. 이러한 향상은 V3.1이 실제 도구 환경에서 코드를 실행하고 작업을 수행하는 데 훨씬 더 신뢰할 수 있음을 보여 줍니다.

브라우징, 검색, 그리고 질의응답
정보 검색 벤치마크에서도 V3.1이 우세합니다. 웹 페이지를 탐색해 답을 추출해야 하는 BrowseComp에서 V3.1은 30%의 정답률을 기록했으며, R1은 9%에 그쳤습니다. 중문 버전에서는 V3.1이 49% 정확도를 달성해 R1의 36%를 앞질렀습니다. 난도 높은 언어 시험인 HLE에서도 V3.1은 30%로, R1의 25%보다 소폭 앞섰습니다. 여러 출처의 정보를 종합해야 하는 심층 검색 과제인 xbench-DeepSearch에서는 V3.1이 71%로, 55% 대비 큰 격차를 보였습니다. Frames(구조적 추론), SimpleQA(사실 질의응답), Seal0(도메인 특화 질의응답) 같은 벤치마크에서도 격차는 작지만 일관된 우위를 확인할 수 있습니다. 종합하면, V3.1은 R1보다 검색과 경량 질의응답에서 더 효과적입니다.

추론 효율성
토큰 사용 결과는 효율성을 부각합니다. 난도가 높은 수학 시험인 AIME 2025에서 V3.1-Think는 R1과 비슷하거나 약간 더 높은 정확도(88.4% 대 87.5%)를 기록하면서도 토큰을 약 30% 적게 사용했습니다. 다양한 분야의 대학원 수준 시험인 GPQA Diamond에서는 두 모델의 정확도가 거의 비슷하지만(80.1% 대 81.0%), V3.1은 토큰을 거의 절반만으로 이를 달성했습니다. 코드 관련 추론 능력을 평가하는 LiveCodeBench에서도 V3.1은 더 높은 정확도(74.8% 대 73.3%)를 보이며, 동시에 더 간결합니다. 이는 V3.1-Think가 장황함을 피하면서도 상세한 추론을 산출할 수 있음을 시사합니다.

전반적으로
V3-0324와 비교하면 V3.1은 명백한 세대 도약입니다. R1과 비교했을 때, 거의 모든 벤치마크에서 더 높은 정확도를 보이고 추론 중심 과제에서도 더 효율적입니다. R1이 유일하게 따라붙는 시험은 GPQA이지만, 그마저도 토큰 비용이 거의 두 배에 달합니다.
DeepSeek-V3.1 모델의 핵심 기능
이 섹션에서는 DeepSeek V3.1의 두 가지 모드(비추론 모드와 추론 모드)와 각 모드를 언제 사용해야 하는지 알아봅니다. DeepSeek V3.1은 실제로 제공합니다 둘 모델의 두 가지 변형이 있습니다. 하나는 간결한 응답에 초점을 맞춘 비추론 모드이고, 다른 하나는 보다 명시적인 추론 과정을 수행하는 추론 모드입니다. 이 섹션에서는 각 모드의 의미, 차이점, 그리고 특히 효과적인 활용 사례를 설명합니다. 이를 이해하면 작업의 특성에 맞는 모델 동작을 선택할 수 있습니다. 즉, 빠른 답변이 필요한지, 아니면 깊이 있는 단계별 해법이 필요한지에 따라 올바른 모드를 고를 수 있습니다.
비추론 모드 vs. 추론 모드
DeepSeek V3.1은 다른 많은 LLM에는 없는 개념을 도입했습니다: 두 가지 뚜렷한 작동 모드이는 API를 통해 사용할 수 있는 서로 다른 모델 변형(또는 설정)에 해당합니다.
- 비추론 모드: 이것은 표준 채팅 모드. DeepSeek V3.1을 비추론 모드로 사용할 때는 일반적인 대화형 AI처럼 동작합니다. 질문을 하거나 프롬프트를 제공하면, 곧바로 답변이나 완성된 출력을 반환합니다. 모델은 아니요 자기 사고 과정을 명시적으로 드러내지 않으며, 보통 간결하고 직설적인 최종 응답만 제공합니다. 이 모드는 다음에 최적화되어 있습니다: 속도와 단순한 작업. ChatGPT나 다른 챗봇이 응답하는 방식과 비슷합니다. 내부적으로 모델이 어떤 추론을 했는지는 보이지 않고, 최종 답만 확인할 수 있습니다. 모델은 내부적으로 복잡한 추론을 수행할 수 있지만, 중간 과정을 출력에 드러내지 않습니다. 비추론 모드는 캐주얼한 질의응답, 요약, 단순한 코딩 도움, 번역 등처럼 최종 해답이나 결과만 빠르게 원할 때 사용합니다. 가능한 한 빠르게.
- 사고 모드: 이것은 고급 추론 모드. 사고 모드에서는 DeepSeek V3.1이 느리고 단계적인 다중 단계 추론 과정을 수행하며 실제로 그 추론 과정을 드러내다 출력의 일부로(또는 특수한 API 필드로) 포함됩니다. 본질적으로 모델은 최종 답을 제시하기 전에 “생각” 과정을 출력합니다. 여기에는 브레인스토밍, 단계별 계산, 중간 결론 등이 포함될 수 있습니다. 종이에 수학 문제를 푸는 것과 비슷합니다. 풀이 과정을 적고 나서 최종 답을 쓰는 식이죠. DeepSeek의 사고 모드는 이와 유사하게 동작합니다. 이 모드는 DeepSeek의 R1 연구(사고 사슬을 개선하기 위해 강화 학습으로 훈련된 추론 모델)를 기반으로 합니다. 사용 사례: 언제든지 당신이 갖게 되는 경우 복잡한 문제 단계별 추론이 도움이 되는 경우입니다. 예를 들어, 복잡한 수학 서술형 문제를 풀거나, 논리 퍼즐을 수행하거나, 잠재적 문제가 여러 개 있는 코드를 디버깅하는 상황이 이에 해당합니다. 사고 모드는 더 면밀하고 완성도 높은 답변을 내는 경향이 있으며, 빠른 답변이 틀리거나 불완전할 수 있는 상황도 처리할 수 있습니다. 다만 그 대가로는 속도: 모델이 답에 도달하기 위해 실질적으로 더 많은 작업을 수행하고(그리고 더 많은 텍스트를 출력하기 때문에) 응답 속도가 느려지고 토큰 사용량이 늘어납니다. 일부 내부 테스트에서는 사고가 강화된 모델이 어려운 과제에서 더 정확한 답을 내지만, 시간이 더 오래 걸렸습니다(이는 추론 최적화 모델의 응답 시간이 더 길었다는 이전 관찰과 일치합니다).
차이를 보여주기 위해, 두 모드에 모두 까다로운 질문을 던진다고 상상해 봅시다: “2의 제곱근이 무리수임을 증명하거나 설명하시오.”
- 비사고 모드의 접근 방식: 간결한 설명이나 잘 알려진 증명(예: 고전적인 귀류법—p/q = √2라고 가정하는 방식 등)을 바로 출력할 수 있습니다. 모델이 이를 기억하고 있다면 정답일 수 있지만, 프롬프트가 충분히 좋지 않으면 출력에서 논리를 단계별로 명시적으로 전개하지 않기 때문에 피상적이거나 약간 결함 있는 답을 줄 수도 있습니다.
- 사고 모드의 접근 방식: 모델은 “이 문제를 함께 추론해 봅시다.”라고 시작한 뒤, 다음과 같이 증명을 단계별로 전개할 수 있습니다. “√2 = p/q 가 유리수라고 가정한다… (1단계) … 모순에 이른다 (5단계) … 따라서 √2는 무리수이다.” 마지막으로 “그러므로 √2는 무리수이다.”라고 결론지을 수 있습니다. The 최종 답변 같지만, 사고 모드에서는 전체 추론 과정을 모두 볼 수 있어 더 유익하거나 설득력 있게 느껴질 수 있습니다.
다음 사항을 유의해야 합니다 두 모드는 궁극적으로 동일한 기반 지식과 아키텍처를 사용합니다; 차이는 모델을 어떻게 프롬프트하거나 설정하느냐에 있습니다. API에서는 보통 서로 다른 모델 엔드포인트나 토글에 대응합니다:
- 예를 들어, DeepSeek이 두 가지 모델 이름을 제공한다고 해봅시다. 예를 들면 다음과 같습니다: "deepseek-v3.1-chat" (비사고 모드 기본값) 및 "deepseek-v3.1-reasoning" (사고 모드) — 또는 문서에서 암시하듯 추론 버전에는 모델 이름 “deepseek-r1”을 사용할 수도 있습니다. 필요에 따라 어떤 엔드포인트를 호출할지 선택하면 됩니다.
- API를 통해 사고 모드를 사용할 때는 응답이 종종 구조화된 필드와 함께 제공됩니다. 특히 스트리밍 API는 다음을 반환할 수 있습니다 reasoning_content 일반 모드와 함께 content. 그 reasoning_content 중간 사고 과정을 담고 있으며, 클라이언트(즉, 여러분)는 이를 표시할지 말지를 선택할 수 있습니다. 보통은 사용자에게 최종 결과만 보여줍니다. content (답변)을 기록하고 reasoning_content 자신을 위해 또는 디버깅 목적으로, 특히 모델이 답에 도달한 과정을 검증하고 싶을 때 유용합니다(민감한 애플리케이션에서 특히 효과적).
이제, 어떤 모드를 언제 사용해야 하나요?
- 사용하세요 비사고 모드 필요하다면 속도 또는 작업이 단순한 경우에 적합합니다. 예를 들어, 고객 문의에 실시간으로 답변하는 챗봇에서는 응답 속도를 빠르게 유지하기 위해 이 모드를 선호하게 됩니다. 또한 체인 오브 소트가 불필요한 텍스트 보완이나 생성 작업을 할 때는 비사고 모드를 사용하는 것이 좋습니다.
- 사용하세요 사고 모드 정확성이 중요하고 문제가 단순하지 않은 복잡한 작업에 적합합니다. 예를 들어, 프로그래밍 퍼즐을 푸는 도구를 만들거나 설명과 함께 수학을 가르치는 튜터형 AI를 구축한다면 사고 모드는 매우 유��합니다. 또한 비사고 모드에서 오답이 자주 나오는 경우에도 도움이 될 수 있습니다. 사고 모드로 전환하면 모델이 더 신중하게 추론하도록 유도해 문제를 바로잡는 데 효과적일 때가 있습니다.
경고 문제 해결: 사고 모드 모델을 실수로 사용했고 출력에 이상한 토큰이나 모델의 내부 사고(“<think>...”)가 포함되어 있다면, 해당 출력을 적절히 처리해야 할 수 있음을 기억하세요. 예를 들어, 최종 사용자에게 답변을 보여 주기 전에 추론 내용을 필터링하거나 숨길 필요가 있습니다. 반대로, 상세한 추론을 기대했는데 짧은 답만 받았다면, 올바른 모델 변형을 사용하고 있는지 또는 API 설정을 제대로 했는지 다시 확인하세요. result_format 추론을 허용하려면(일부 API는 체인 오브 소트를 포함하기 위한 특별한 파라미터가 필요합니다) 제공업체의 문서를 참고하여 사고 출력을 활성화하거나 비활성화하는 방법을 확인하세요.
팁 팁: 두 가지 모드를 다음처럼 생각하세요 도구 상자의 도구들나사는 항상 망치로 박을 필요가 없듯이, 단순한 작업에는 Thinking Mode를 과하게 사용하지 마세요(불필요하게 속도가 느려질 수 있습니다). 하지만 어려운 문제에 직면했을 때는 그 추가적인 “사고” 능력이 성공과 실패를 가르는 차이가 될 수 있습니다. 이는 AI에서 비교적 새로운 개념이므로, DeepSeek V3.1을 실험해 보면서 어떤 상황에서 어떤 모드를 써야 할지에 대한 감각이 생길 것입니다.
✅ 여러분이 해낸 일: 이제 DeepSeek V3.1의 비사고 모드 vs 사고 모드비사고 모드는 빠르고 간결한 답을 제공하는 반면, 사고 모드는 어려운 문제에 대해 단계별 추론 과정을 제공합니다. 이제 이 지식을 바탕으로 작업 유형에 따라 모델과 상호작용하는 방식을 더 잘 선택할 수 있습니다. 자, 이제 가장 흥미로운 부분으로 넘어가 봅시다: a 실습형 튜토리얼 Python에서 DeepSeek V3.1을 설정하고, 몇 가지 API 호출을 수행하며, 실험 모니터링을 위해 W&B까지 연동해 봅니다.
단계별 튜토리얼: Python으로 DeepSeek V3.1 사용하기
이 섹션에서는 단계별로 DeepSeek V3.1 API 환경을 설정하고 첫 번째 API 호출을 수행합니다. 다음 안내를 따르면 OpenAI 호환 API를 활용해 Python 코드로 DeepSeek 모델에 연결할 수 있습니다. 자격 증명을 발급받고, 필요한 라이브러리를 설치한 뒤, 첫 번째 쿼리를 실행하는 과정을 차례로 진행합니다. 또한 토큰 단위로 답변을 받아볼 수 있는 스트리밍 응답 사용법을 살펴보고, 모든 설정이 제대로 작동하는지도 확인합니다. 지금 바로 시작해서 DeepSeek로 구동되는 첫 번째 Python 스크립트를 실행해 봅시다!
설정 및 첫 번째 API 호출하기
이 하위 섹션에서는 DeepSeek V3.1 API 액세스를 설정하고, 모델에 간단한 쿼리를 전송해 보겠습니다.
1단계: DeepSeek API 키 발급받기. API로 DeepSeek V3.1을 사용하려면 OpenAI와 같은 서비스와 마찬가지로 API 키가 필요합니다. 아직 발급받지 않았다면 DeepSeek 서비스 또는 해당 제공 플랫폼에 가입하세요. 예를 들어 DeepSeek 모델은 Alibaba Cloud Model Studio를 통해 제공되며, 무료 체험 할당량이 포함된 키를 제공합니다. 가입을 마쳤다면 API 키를 발급받으세요. 일반적으로 다음과 같이 시작하는 문자열 형태입니다. sk-... (OpenAI 키와 매우 유사합니다).
- 보안 모범 사례: 공개할 가능성이 있는 스크립트에 API 키를 하드코딩하지 마세요대신 환경 변수나 구성 파일에 저장하세요. 여기서는 환경 변수에 키를 저장했다고 가정하겠습니다. DEEPSEEK_API_KEY 이 튜토리얼을 위해서.
2단계: OpenAI Python 라이브러리를 설치하세요. DeepSeek의 API는 …하도록 설계되었습니다 OpenAI API 형식과 호환됩니다, 즉 기본 URL만 올바르게 지정하면 OpenAI의 공식 Python 클라이언트를 사용해 DeepSeek의 모델을 호출할 수 있습니다. 만약 당신에게 openai 라이브러리가 설치되어 있지 않다면, pip으로 설치하세요:
pip install openai weave
이 라이브러리를 사용하면 채팅 컴플리션 요청을 쉽게 작성할 수 있습니다.
3단계: Python 스크립트나 실행 환경을 설정하세요. 필요한 모듈을 불러오고 API 키와 엔드포인트를 설정하는 것부터 시작하겠습니다. Python 실행 환경(스크립트나 노트북 어디든지)에서 다음을 수행하세요:
import weavefrom openai import OpenAIweave.init("deepseek_examples")client = OpenAI(api_key="your_deepseek_api_key", base_url="https://api.deepseek.com")
위에서 Weave와 OpenAI를 임포트한 뒤 Weave를 초기화하여, 당신이 데코레이터로 표시하는 모든 추론 호출이 @weave.op 프로젝트에 자동으로 기록됩니다. 또한 API 키와 엔드포인트로 DeepSeek 클라이언트를 생성합니다.
4단계: 메시지를 작성하고 모델을 호출하세요. 이제 채팅 프롬프트를 만들어 DeepSeek V3.1에 전송해 보겠습니다. 우리는 채팅 컴플리션 API(DeepSeek은 채팅형 모델이기 때문입니다). 예시는 다음과 같습니다:
@weave.op()def deepseek_inference(prompt: str, model: str):response = client.chat.completions.create(model=model,messages=[{"role": "system", "content": "you are a helpful assistant."},{"role": "user", "content": prompt}])reasoning = getattr(response.choices[0].message, "reasoning_content", None)final_answer = response.choices[0].message.contentreturn {"model": model, "answer": final_answer, "reasoning": reasoning}# Extract and print the assistant's replyassistant_reply = deepseek_inference("why is the sky blue?", "deepseek-chat")["answer"]print("Assistant:", assistant_reply)
여기서는 추론 함수를 정의합니다. 이 함수는 프롬프트와 모델 ID(“deepseek-chat"빠른 응답을 위해, 또는"deepseek-reasoner"사고 모드"용). 함수 내부에서는 두 개의 메시지로 구성된 대화 기록을 사용해 Chat Completions API를 호출합니다. 하나는 어시스턴트의 동작을 설정하는 시스템 프롬프트이고, 다른 하나는 실제 질문이 담긴 사용자 프롬프트입니다.
API는 최종 답변과, 모델에 추론 기능이 활성화되어 있다면 추론 추적 정보도 함께 반환합니다. 우리는 응답 객체에서 이 값들을 추출해 딕셔너리 형태로 반환합니다.
마지막으로, 간단한 질의(“why is the sky blue?")에서 사용하는"deepseek-chat모델을 호출하고 어시스턴트의 답변을 출력합니다. 이 설정은 프롬프트를 DeepSeek으로 보내고 응답을 수집한 뒤, 나중에 검토할 수 있도록 모든 내용을 Weave에 기록하는 방법을 보여줍니다.
모든 설정이 올바르게 완료됐다면, 이 코드를 실행했을 때 DeepSeek V3.1의 응답을 받을 수 있습니다. 예를 들어, 다음과 같은 결과가 표시될 수 있습니다:
### A Helpful AnalogyImagine a busy plaza with a large fountain in the middle (the Sun). If you start spraying a fine mist of water (the atmosphere) into the air around the plaza, the smaller, lighter droplets (blue light) will be scattered everywhere, misting everyone in the plaza. The larger, heavier droplets (red light) will tend to travel in a straighter line from the fountain and not get scattered as much.### Bonus: Why are Sunsets Red?This is the perfect reverse of the effect! At sunset, sunlight has to travel through a much thicker slice of the atmosphere to reach your eyes.All that efficient blue light is scattered *away* from your line of sight long before it reaches you. The longer wavelengths of light (reds and oranges) are scattered less, so they pass straight through this thick layer of atmosphere and dominate the light that finally reaches your eyes, creating those brilliant sunset colors.**In summary: The sky is blue because air molecules scatter short-wavelength blue light from the Sun much more than they scatter red light, filling our field of view with blue light coming from all directions.**reasoning: Hmm, the user is asking about the color of the sky, which is a classic science question. They probably want a clear, straightforward explanation without too much technical jargon.I should start with the basic concept of sunlight being made of different colors, then explain how Rayleigh scattering works in simple terms. The key is to emphasize why blue light scatters more and how that affects what we see.
보시다시피 어시스턴트(DeepSeek V3.1)는 자신에 대해 사실에 근거한 설명을 제공했습니다. 이를 통해 우리의 API 호출이 정상적으로 작동하며 모델이 질의를 이해하고 있음을 확인할 수 있습니다.
코드를 실행한 뒤 Weave로 이동하면 결과를 확인할 수 있습니다.

5단계: 대용량 응답에 스트리밍 사용하기(선택 사항) 매우 개방형이거나 긴 질문을 할 때는 긴 답변을 예상하게 됩니다. 활성화하면 스트리밍 전체 답변이 끝날 때까지 기다리지 않고, 생성되는 대로 일부 결과부터 받아볼 수 있게 해 줍니다. OpenAI 호환 API에서는 이를 다음을 통해 지원합니다. stream=True이제 스트리밍을 사용하도록 호출을 수정하고, 응답을 생성되는 대로 순차적으로 출력해 보겠습니다.
import weavefrom openai import OpenAI# weave.init("deepseek_examples")client = OpenAI(api_key="your_deepseek_api_key", base_url="https://api.deepseek.com")@weave.op()def deepseek_inference(prompt: str, model: str, stream: bool = False):if stream:answer = ""s = client.chat.completions.create(model=model,messages=[{"role": "system", "content": "you are a helpful assistant."},{"role": "user", "content": prompt}],stream=True)print("=== streaming start ===")for chunk in s:delta = chunk.choices[0].deltaif delta.content:answer += delta.contentprint(delta.content, end="", flush=True)print("\n=== streaming done ===")# reasoning not available in streaming modereturn {"model": model, "answer": answer, "reasoning": None}else:response = client.chat.completions.create(model=model,messages=[{"role": "system", "content": "you are a helpful assistant."},{"role": "user", "content": prompt}])reasoning = getattr(response.choices[0].message, "reasoning_content", None)final_answer = response.choices[0].message.contentreturn {"model": model, "answer": final_answer, "reasoning": reasoning}if __name__ == "__main__":r1 = deepseek_inference("why is the sky blue?", "deepseek-reasoner", stream=True)print("\n=== deepseek-reasoner finished ===")print("answer:", r1["answer"])print("reasoning:", r1["reasoning"])r2 = deepseek_inference("why is the sky blue?", "deepseek-chat", stream=True)print("\n=== deepseek-chat finished ===")print("answer:", r2["answer"])print("reasoning:", r2["reasoning"])
우리는 설정합니다 stream=True 요청에서. 단일 response 객체를 사용하면 제너레이터를 얻습니다 (stream_response)로 청크를 생성합니다. 각 청크에는 메시지의 일부가 들어 있으며 (in the .delta['content']). 이러한 청크를 순회하며 도착하는 대로 출력합니다. The end="" 그리고 flush=True 동일한 줄에 끊김 없이 출력해, 마치 어시스턴트가 답변을 “타이핑”하는 것처럼 보이도록 하십시오.
스트리밍을 활성화하면 콘솔에서 답변이 토큰 단위(또는 구절 단위)로 차례차례 나타나는 것을 볼 수 있습니다. 예를 들어 “DeepSeek V3.1 is an advanced open-source language model...”처럼 한 번에 모두 출력되지 않고 점진적으로 출력될 수 있습니다. 이는 매우 긴 답변을 다룰 때나 애플리케이션에서 사용자에게 중간 진행 상황을 보여주고 싶을 때 특히 유용합니다.
팁 팁: 스트리밍 은 사용자에게 직접 노출되는 애플리케이션에서 응답 속도가 중요한 경우 권장됩니다. 전체 답변 생성 시간이 같더라도 부분 출력을 먼저 보여 주면 사용 경험이 개선될 수 있습니다. 단, 청크를 올바르게 처리해야 합니다. 우리는 콘텐츠를 이어 붙이는 방식으로 처리했습니다. 또한 스트리밍 시에는 전체 내용을 한 번에 얻을 수 없다는 점에 유의하십시오. response 사용 정보와 함께 끝까지. 토큰을 세어야 한다면 누적해 가며 계산하세요.
팁 팁: 그 model API 호출에서 name 값은 매우 중요합니다. “model not found”와 같은 오류가 발생하면, 사용해야 하는 정확한 문자열을 다시 확인하세요.
경고 문제 해결:
- 만약 당신이 인증 오류 (예: “Invalid API key” 등)과 같은 오류가 발생하면, openai.api_key 올바른 키로 설정되어 있고 키가 유효한지(만료되었거나 할당량을 초과하지 않았는지) 확인하세요. 일부 플랫폼은 지역별 키를 사용하므로, 제공자가 요구하는 올바른 지역 또는 엔드포인트를 사용하고 있는지 반드시 확인하세요.
- 만약 당신이 연결 오류 또는 시간 초과, 방화벽 문제이거나 요청 속도 제한에 도달했기 때문일 수 있습니다. 인터넷 연결을 확인하고, 프롬프트 크기 문제인지 확인하기 위해 더 작은 프롬프트로 시도해 보세요. 또한 DeepSeek의 엔드포인트는 특정 네트워크 접근을 요구할 수 있으며(예: Alibaba Cloud 엔드포인트는 일부 지역에서 더 느릴 수 있음) 이를 확인해야 합니다.
- 만약 해당 응답이 비어 있거나 중간에 끊긴 것처럼 보입니다, 몇 가지 문제가 있을 수 있습니다. (1) 프롬프트가 사용 정책을 위반했을 수 있습니다(일부 엔드포인트는 특정 콘텐츠를 필터링합니다. 다만 DeepSeek처럼 오픈 모델의 경우, 제공자가 별도 필터를 두지 않았다면 가능성은 낮습니다). (2) 모델이 어떻게 응답해야 할지 모를 수 있습니다(다만 우리가 한 것처럼 모델 자체에 대해 묻는 질문은 보통 문제 없습니다). (3) 스트리밍을 사용하는 경우, 완료 처리를 제대로 하지 않았을 수 있습니다. 스트리밍 후에는 항상 개행을 출력해 최종화하고, 종료 사유가 포함된 청크가 있는지 확인하세요(OPENAI 스트리밍에서는 마지막 청크에 종료 사유가 포함되는 경우가 많습니다). finish_reason: "stop"
- 출력이 보이지만 예상하지 못한 추론 흔적(예: 숨겨진 토큰이나 내부 사고 과정)이 포함되어 있다면, “thinking” 모델을 호출했지만 다음을 처리하지 않았을 가능성이 있습니다 reasoning_content이런 경우 출력에 체인 오브 소트처럼 보이는 내용(특수 토큰으로 구분되었거나 일반 텍스트 형태)이 ��함된 것을 확인할 수 있습니다. 이를 해결하려면 비-싱킹 모델로 전환하거나, 최종 출력에서 추론 내용을 분리해 무시하도록 코드를 조정하세요.
✅ 여러분이 해낸 일: Python에서 DeepSeek V3.1 API 호출을 설정하고 완료 응답을 성공적으로 받았습니다! 이제 채팅 프롬프트를 보내고, 어시스턴트의 답변을 가져오며, 실시간 토큰 출력을 위한 스트리밍까지 활성화하는 방법을 익혔습니다. 즉, 이제 DeepSeek을 Python 애플리케이션이나 실험에 통합할 수 있는 수준에 도달했습니다. 다음 단계에서는 다양한 작업과 모드 등 DeepSeek을 사용하는 다른 방법을 살펴보고, W&B 도구를 활용해 DeepSeek 실험에서 최대의 가치를 끌어내는 방법을 알아보겠습니다.
대안적 사용 사례와 도구
이 섹션에서는 DeepSeek V3.1을 다양한 방식으로 적용하는 방법을 살펴보고, 실험 추적과 모델 최적화를 위해 Weights & Biases (W&B)를 활용하는 방법을 학습합니다. 이제 기본 API 호출이 동작하니, 한 단계 더 나아가 DeepSeek V3.1으로 무엇을 할 수 있을지 생각해 봅시다. 몇 가지 설득력 있는 활용 사례를 살펴본 뒤, W&B의 도구—특히 W&B Weave 그리고 W&B 모델 — 결과를 추적하고, 모델 변형을 비교하며, 결과를 시각화해 워크플로를 한 단계 끌어올릴 수 있습니다. 이번 섹션은 엄격한 단계별 코드 튜토리얼보다는 가이드 투어에 가깝지만, 예제 코드 조각과 이러한 도구를 통합하는 방법에 대한 명확한 안내를 제공합니다.
DeepSeek V3.1 활용 사례:DeepSeek V3.1은 방대한 지식 기반과 뛰어난 추론 능력을 바탕으로 다양한 용도로 활용할 수 있는 범용 언어 모델입니다. 다음은 활용 예시입니다:
1. 고급 언어 이해 및 생성: 다양한 데이터로 학습된 덕분에 DeepSeek은 다음과 같은 작업에 활용할 수 있습니다 요약 긴 문서의 처리(매우 긴 입력도 처리 가능) 번역 언어 간, 질문에 답변하기 과학, 역사 등 복잡한 주제에서도 맥락을 반영한 상세한 결과를 자주 제공합니다.
2. 복잡한 추론과 문제 해결: Thinking Mode 기능을 통해 DeepSeek은 다음과 같은 작업에서 뛰어난 성능을 보입니다 수학적 문제 해결, 논리 추리 퍼즐, 또는 멀티홉 질의응답 (여러 출처나 단계를 결합해야 하는 경우) 문제를 세분화하고 단계별로 해법을 시도할 수 있습니다.
3. 코드 생성과 디버깅: 이 모델은 코드 관련 작업에서 강력한 성능을 보여줍니다. Python, Java 등의 언어로 코드 스니펫을 작성하도록 프롬프트를 주거나, 코드를 설명하고 수정하도록 요청할 수 있습니다. 예를 들어, 코드 일부를 제공하고 최적화 제안을 요청하면, 모델이 (특히 Thinking Mode에서) 코드를 단계적으로 분석하고 개선안을 제시할 수 있습니다.
4. 장문 콘텐츠 제작: 128K 토큰 컨텍스트를 통해 DeepSeek은 매우 방대한 텍스트를 처리할 수 있습니다. 즉, 전체 책을 입력해 분석이나 후속 작성을 요청할 수 있습니다. 또한 컨텍스트 길이 제한에 걸리지 않고 장시간 대화를 이어갈 수 있습니다. 이는 방대한 법률 계약서 분석, 대규모 로그나 녹취록 요약, 많은 참고 텍스트를 프롬프트에 담아 수행하는 연구 같은 활용 사례에 특히 적합합니다.
5. 다국어 애플리케이션: 영어를 넘어 다양한 언어(특히 DeepSeek의 출신 배경을 고려하면 중국어, 그 외 여러 언어)로 작동하는 AI가 필요하다면 DeepSeek V3.1은 매우 유력한 선택입니다. 여러 언어로 대화하는 챗봇을 만들거나, 뉘앙스까지 설명해 주는 번역기를 구축할 수 있습니다.
이러한 모든 활용 사례에서 다음과 같은 작업이 유용할 때가 많습니다 측정 모델이 어떻게 성능을 내는지—예를 들어, 정확한가요? 충분히 빠른가요? 설정이나 모드에 따라 어떤 차이가 나나요? 바로 여기에서 Weights & Biases 큰 도움이 될 수 있습니다.
DeepSeek 실험에 W&B 사용하기:Weights & Biases는 실험 추적, 데이터 시각화, 모델 관리를 위한 도구를 제공합니다. DeepSeek을 사용할 때 특히 잘 맞는 W&B의 두 가지 기능은 다음과 같습니다:
- W&B Weave: Weave는 W&B의 대화형 대시보드이자 분석 도구입니다. 모델 출력과 지표 등 결과를 Weave로 스트리밍하고, 이를 시각화하는 맞춤 대시보드를 만들 수 있습니다. 예를 들어 프롬프트 길이별 응답 시간을 보여주는 패널을 만들거나, Non-thinking 모드와 Thinking 모드의 답변을 나란히 비교하는 표를 구성할 수 있습니다. Weave는 결과를 다양한 관점에서 분할·집계하여 인사이트를 얻는 데 매우 유용합니다.
- W&B 모델:" Models 기능은 모델 레지스트리와 같습니다. 모델에 버전을 부여하고 메타데이터와 함께 모델(또는 모델에 대한 참조)을 저장할 수 있습니다. DeepSeek V3.1 자체는 대규모 공개 모델이므로 W&B에 업로드하지는 않겠지만, 더 작게 디스틸된 버전을 미세 조정하거나 상호작용 체크포인트를 관리할 수 있습니다.
이 도구들을 사용하는 방법을 예로 들어 살펴보겠습니다: 여러 작업에서 Non-thinking 모드와 Thinking 모드를 비교하기. 평가하려는 질문이나 작업 목록이 있다고 가정해 봅시다. 어떤 것은 단순하고, 어떤 것은 복잡합니다. 각 모드가 얼마나 잘 수행하는지 확인하고, 소요 시간과 사용된 토큰도 측정하고자 합니다. 이를 위해 다음과 ���이 진행할 수 있습니다:
1단계: W&B 추적 설정하기. 스크립트나 노트북의 시작 부분에서 W&B 런을 초기화하세요.
import weaveweave.init(project="deepseek_v3_eval", name="mode_comparison_run")
이렇게 하면 W&B 프로젝트에 새 런이 생성되어 로그가 기록됩니다.
2단계: 평가용 데이터셋을 정의하고 이를 순회하세요. 시연을 위해 이렇게 가정해 봅시다:
questions = [{"prompt": "What is 5 + 7?", "mode": "non-thinking"},{"prompt": "Explain the significance of the number zero in mathematics.", "mode": "non-thinking"},{"prompt": "Explain step by step how to solve 5 + 7, and then give the answer.", "mode": "thinking"},{"prompt": "Explain the significance of the number zero in mathematics.", "mode": "thinking"}]
이 목록에서는 비사고 모드에서 제시된 두 가지 기본 과제(간단한 덧셈과 개념적 질문)와, 동일하거나 유사한 과제를 사고 모드로 제시한 예를 포함하고 있습니다. 사고 모드의 경우, 모델이 보다 상세한 단계별 설명을 제시할 것으로 기대할 수 있습니다. 실제로는 서로 다른 모델 엔드포인트 호출 로직을 분리하는 편이 일반적이지만, 여기서는 개념적으로만 주석을 달아 설명합니다.
3단계: Weave Evaluations로 모델 비교하기
이 간단한 예시에서는 실제로 정답 여부를 평가하지 않겠습니다. 대신 사고 모드와 비사고 모드의 출력만 수집하고 비교하려 합니다. 이를 위해 항상 True를 반환하는 아주 단순한 스코어러를 정의합니다. 이렇게 하면 평가 프레임워크가 각 예측과 그 메타데이터를 계속 기록하되, 실제 지표를 적용하지는 않습니다.
실무에서는 이 더미 스코어러를 실제로 의미 있는 것으로 교체합니다. 예를 들어 사실 기반 과제에는 정확 일치 스코어링, 요약에는 BLEU/ROUGE, 또는 추론 품질을 평가하는 또 다른 LLM 기반 판정을 사용할 수 있습니다. 이렇게 하면 사고 모드가 복잡한 과제에서 정말로 더 나은지 비교할 수 있습니다. 전체 코드는 다음과 같습니다:
import asyncioimport weavefrom openai import AsyncOpenAIweave.init("thinking-vs-nonthinking")# DeepSeek clientclient = AsyncOpenAI(api_key="your_deepseek_api_key", base_url="https://api.deepseek.com")# datasetquestions = [{"id": "0", "prompt": "What is 5 + 7?", "mode": "non-thinking"},{"id": "1", "prompt": "Explain the significance of the number zero in mathematics.", "mode": "non-thinking"},{"id": "2", "prompt": "Explain step by step how to solve 5 + 7, and then give the answer.", "mode": "thinking"},{"id": "3", "prompt": "Explain the significance of the number zero in mathematics.", "mode": "thinking"},]# model wrapperclass DeepSeekModel(weave.Model):model_name: str@weave.op()async def predict(self, prompt: str) -> dict:resp = await client.chat.completions.create(model=self.model_name,messages=[{"role": "system", "content": "you are a helpful assistant."},{"role": "user", "content": prompt},],)answer = resp.choices[0].message.contentreasoning = getattr(resp.choices[0].message, "reasoning_content", None)return {"answer": answer, "reasoning": reasoning}# trivial scorer@weave.op()def always_true(prompt: str, mode: str, output: dict) -> dict:return {"correct": True}# pick models: one thinking, one non-thinkingnonthinking_model = DeepSeekModel(model_name="deepseek-chat")thinking_model = DeepSeekModel(model_name="deepseek-reasoner")# run eval with bothevaluation = weave.Evaluation(name="thinking-vs-nonthinking-eval",dataset=questions,scorers=[always_true],)print("=== Non-thinking eval ===")print(asyncio.run(evaluation.evaluate(nonthinking_model)))print("=== Thinking eval ===")print(asyncio.run(evaluation.evaluate(thinking_model)))
이렇게 하면 모든 결과가 W&B Weave로 업로드됩니다. W&B 런 페이지에서 보기 좋은 비교 뷰로 응답을 확인할 수 있습니다!
4단계: Weave로 분석하기. 데이터가 기록되면 Weave를 활용해 플롯을 만들거나 비교를 수행할 수 있습니다. 예를 들어:
- 막대 차트를 그릴 수도 있습니다 TimeTaken 동일한 프롬프트에 대해 비사고 모드와 사고 모드를 비교합니다(사고 모드는 더 오래 걸릴 수 있음).
- 또는 토큰 사용량 차이를 보여줄 수도 있습니다.
- 또는 표를 확인하여 정성적으로 비교할 수도 있습니다 Response 콘텐츠를 나란히 배치하기.

팁 팁: 시각화하고 반복하세요. 모든 것을 W&B에 로깅하는 강점은 패턴을 식별할 수 있다는 점입니다. 예를 들어, 특정 유형의 질문에서는 Thinking 모드가 정확도를 크게 향상시키지만 다른 경우에는 과한 선택일 수 있다는 사실을 발견할 수 있습니다. 그러면 질문 유형에 따라 모드를 전환하도록 애플리케이션을 조정할 수 있습니다(예를 들어, 질문이 복잡한지 자동으로 감지). 또는 응답이 너무 느린 것으로 보이면, 다음을 줄이는 것을 시도해 볼 수 있습니다. max_tokens 또는 중요도가 낮은 질의에는 더 작은 디스틸드 모델을 사용하도록 조정할 수도 있습니다. 추적이 없다면 이런 결정은 추측에 불과하지만, 추적이 있다면 이를 뒷받침할 데이터가 생깁니다.
W&B Weave와 DeepSeek V3.1을 함께 사용하면 본질적으로 당신은 피드백 루프 직접 해보세요: 모델을 실행 → 결과 확인 → 시각화/개선 → 다시 실행. 이는 모델을 파인튜닝하거나 프롬프트 전략을 평가할 때 특히 유용합니다.
✅ 여러분이 해낸 일: Q&A부터 코딩 보조까지 다양한 시나리오에서 DeepSeek V3.1을 활용하는 방법을 살펴보았습니다. 더 중요한 것은, 여러분이 어떻게 하는지 배웠다는 점입니다. W&B 도구를 통합하기 모델의 성능을 추적하고 분석하기 위해서입니다. 우리는 DeepSeek의 두 가지 모드를 비교할 수 있는 개념적 프레임워크를 구축하고, 출력 로그 수집, 처리 시간 측정, 토큰 사용량을 Weights & Biases(W&B)에 기록하는 방법을 논의했습니다. 이제 여러분은 단순히 모델을 무작정 호출하는 것이 아니라, 더 효과적으로 활용하기 위한 인사이트와 데이터를 수집하고 있습니다. 스스로를 칭찬하세요. 여러분은 기초를 넘어 최첨단 모델을 보다 고급스럽고 견고하게 활용하는 단계에 도달했습니다!
결론
이 섹션에서는 핵심 내용을 다시 정리하고, 앞으로의 발전 방향을 살펴보겠습니다. 여기까지 오시느라 정말 수고하셨습니다! 지금까지 다뤘던 DeepSeek V3.1의 핵심 내용을 정리하고, 앞으로의 방향에 대해 간단히 살펴보겠습니다.
요약 및 향후 방향
이 튜토리얼 전반에 걸쳐, 우리는 먼저 …을 이해하는 것부터 시작했습니다 DeepSeek V3.1이란 무엇인지 – 대규모 확장성과 효율적인 설계를 겸비한 최첨단 오픈소스 LLM입니다. 우리는 그 모델의 아키텍처 혁신예를 들어 Multi-Head Latent Attention과 보조 손실 없이 구성된 초대형 MoE 설정 등으로, 추론 비용을 크게 줄이면서도 최고 수준의 성능(예: GPT-4급)에 근접한 결과를 제공합니다. 이러한 혁신이 어떻게 이어져서 효율적인 추론과 학습FP8 정밀도와 효율적인 병렬화를 활용해 671B 모델을 안정적으로 학습하고 빠르게 사용할 수 있도록 했습니다.
모델의 두 가지 변형에 대해 학습했습니다: 비사고 모드 vs 사고 모드. 이는 DeepSeek V3.1을 차별화하는 개념으로, 하나의 시스템 안에 “빠른 직관 모드”와 “느린 추론 모드”를 동시에 제공한다는 점입니다. 각 모드를 언제, 어떻게 사용할지 아는 것은 효과적인 AI 애플리케이션을 구축하는 데 큰 차이를 만듭니다.
실용적인 측면에서 우리는 DeepSeek V3.1를 호출하기 위한 Python 환경 설정. API 키를 발급받고 OpenAI 호환 API를 설정한 뒤, 모델에 첫 요청을 보냈습니다. 통합이 얼마나 간단한지 확인했으며(대부분의 작업은 openai 라이브러리가 처리했습니다), 모델로부터 실제 응답을 받아 정상 동작을 확인했습니다. 또한 긴 답변을 매끄럽게 처리할 수 있도록 스트리밍도 활성화했습니다.
거기서 멈추지 않고 계속해서 고급 활용 방법 실제 활용 사례와, 특히 Weights & Biases를 사용하는 방법에 대해 논의하며 추적하고 개선하기 DeepSeek과의 상호작용입니다. 데이터를 로깅하고 W&B Weave를 사용하면 모드 간 성능 차이, 응답 시간 등 다양한 지표를 체계적으로 분석할 수 있습니다. 이를 통해 임시 테스트 중심의 사용 방식이 견고하고 데이터 기반의 워크플로로 전환됩니다.
이제, 살펴보면 미래로그렇다면 DeepSeek과 그 이후에는 무엇을 기대하거나 희망할 수 있을까요?
- 지속적인 고도화: DeepSeek V3.1 자체도 소규모 업데이트나 개선 사항을 받을 수 있습니다(예: V3.2). 특히 라이선스 측면(모델의 사용 권한을 더 명확히 해 주는 방향)과, 경우에 따라 모델 안전성이나 얼라인먼트 측면에서 그럴 가능성이 큽니다.
- DeepSeek V4?" 더 크거나 더 발전된 모델이 곧 등장할지 궁금해하는 것은 자연스러운 일입니다. 어쩌면 DeepSeek V4가 파라미터 규모를 한층 더 확장하거나 추론 능력을 더욱 깊이 통합해 “생각 모드”와 일반 동작의 경계가 흐려질 수도 있습니다. 향후 모델들은 효율성에도 초점을 맞출 가능성이 있으며, 예를 들어 지식 증류 같은 기법을 활용해 V3.1의 성능을 더 작은, 배포가 쉬운 패키지에 담아낼 수도 있습니다.
- 커뮤니티와 생태계: 오픈 모델인 만큼, 앞으로의 발전은 커뮤니티에서 크게 이루어질 수 있습니다. 우리는 다음과 같은 모습을 볼 수도 있습니다 파인튜닝 버전 특정 도메인에 맞춘 DeepSeek V3.1의 파인튜닝 버전(예를 들어 생의학용 또는 법률 비서용 버전)도 기대할 수 있습니다. 이는 베이스 모델을 기반으로 특화된 과업에 맞게 적응시키는 방식입니다. 이미 LLaMA와 Qwen을 기반으로 한 DeepSeek-R1 증류 모델에서 그 조짐을 확인한 바 있습니다.
독자이자 실무자인 여러분의 여정은 여기서 끝나지 않습니다. 이제 다음을 수행할 수 있는 지식과 도구를 갖추었습니다:
- 프로젝트에서 DeepSeek V3.1 사용하기, 그 강점을 적극 활용하세요.
- 실험하고 반복하세요 W&B와 함께 사용하면 프롬프트를 미세 조정하거나 사용 사례에 가장 적합한 설정을 결정하는 데 도움이 됩니다.
- 호기심을 잃지 말고 계속 배우세요AI 분야는 매우 빠르게 발전합니다. DeepSeek V3.1은 오늘 기준 최첨단이지만, 내일이면 새로운 논문, 새로운 모델, 새로운 기법이 등장할 것입니다. 여러분이 배운 많은 기법들(예: 프롬프트 엔지니어링, 출력 분석, 체인 오브 소트 활용, 실험 추적)은 앞으로 무엇이 나오더라도 그대로 이전하여 활용할 수 있습니다.
여러분이 다음을 실천하시길 권합니다 DeepSeek V3.1로 무언가 만들어 보기 – 길고 복잡한 대화를 처리하는 스마트 챗봇이든, 난이도 높은 퍼즐을 해결하는 어시스턴트든, 코드를 분석하는 데 도움을 주는 도구든 무엇이든 만들어 보세요. 결과를 커뮤니티와 공유하고, 개발 과정을 더 매끄럽고 통찰력 있게 만들어 줄 Weights & Biases 같은 도구도 꼭 활용하세요.
튜토리얼을 끝까지 따라와 주셔서 감사합니다.
출처
Add a comment