서론
오랜만에 블로그에 복귀하면서, 요즘 인기를 끌었던 DeepSeek를 로컬 환경에서 다양하게 사용해 보았습니다. 기존에 한글 사용에 있어 Distill 모델들의 성능이 애매하다는 점 때문에, 이번에는 R1 모델에 눈을 돌리게 되었습니다. (참고로 Distill 모델들의 한국어 테스트 결과는 따로 정리해서 올리겠습니다.) 다만, R1 모델은 671B와 같이 매우 큰 파라미터 수로 인해 단순히 사용하기 어려운 점이 있었습니다. 일반적인 4bit, 8bit 양자화로도 크기가 부담스러웠는데, 그러던 중 unsloth의 1.58B 모델을 알게 되어 이를 활용하게 되었습니다.
작업 환경
기존의 R1 모델은 거대한 파라미터 수로 인해 여러 제한이 있었으나, unsloth에서 제공하는 1.58B 모델은 보다 실용적인 사이즈와 성능의 균형을 보여줍니다. 다만 실사용 성능이 나오려면 H100 2장(160GB)이 있어야 한답니다... 저는 V100 4장 총 128GB환경에서 구동을 진행했으며 이는 일부 레이어를 CPU에 오프로드 시켜야함을 의미합니다.
적용된 기술
동적 양자화(Dynamic Quantization) 방식
DeepSeek R1 모델은 원래 671B 파라미터를 가진 거대한 모델로, 단순하게 모든 레이어를 낮은 비트수(예: 4bit, 8bit)로 양자화하면 모델이 제대로 동작하지 않고 무한 루프나 엉뚱한 결과를 출력하는 문제가 발생합니다. 이를 해결하기 위해 unsloth 팀은 동적 양자화(dynamic quantization) 기법을 도입했습니다. 이 방식은 모델의 각 레이어별 특성을 고려해 선택적으로 다른 비트 수를 적용하는 방법입니다.
주요 특징
- 선택적 양자화:
- 전체 모델을 동일한 낮은 비트수로 양자화하면 문제가 발생하기 때문에, 중요도가 높은 레이어(특히 초기 몇 개의 down_proj 레이어)는 높은 정밀도(4bit 또는 6bit)로 유지합니다.
- 반면, 전체 가중치의 약 88%를 차지하는 MoE(Mixture of Experts) 레이어는 낮은 비트(예: 1.58bit)로 양자화하여 모델 크기를 크게 줄입니다.
- 이 과정에서 중요도 행렬(importance matrix)를 활용해 각 레이어의 중요도를 평가하고, 그 결과에 따라 양자화 비트를 조절합니다.
- 다양한 양자화 버전 제공:
동적 양자화 방식으로 생성된 여러 버전의 모델이 있으며, 각 버전은 모델 크기와 성능에 따라 아래와 같이 구분됩니다.- 1.58-bit (IQ1_S): 131GB, “Fair” 품질
- 1.73-bit (IQ1_M): 158GB, “Good” 품질
- 2.22-bit (IQ2_XXS): 183GB, “Better” 품질
- 2.51-bit (Q2_K_XL): 212GB, “Best” 품질
- 성능 및 효율성:
- 동적 양자화 기법을 적용하면 원래 720GB 규모의 모델을 최대 80%까지 축소할 수 있으면서도, 추론 성능은 매우 우수하게 유지됩니다.
- 예를 들어, 1.58-bit 버전은 140 tokens/s 정도의 처리 속도를 보여주며, 비동적(naively) 양자화한 모델에서는 발생하는 반복 오류나 잘못된 결과를 방지할 수 있습니다.
동적 양자화의 장점
- 모델 크기 감소:
양자화를 통해 원래의 720GB 모델을 131GB로 줄여, 하드웨어 자원이 제한된 환경에서도 모델을 실행할 수 있도록 합니다. - 출력 품질 유지:
중요한 레이어는 높은 정밀도를 유지하여, 단순한 양자화 방식에서 나타나는 문제(예: 무한 반복, 오류 출력)를 효과적으로 방지합니다. - 유연한 적용:
여러 버전의 양자화된 모델을 제공함으로써, 사용자의 하드웨어 환경과 원하는 성능 수준에 맞춰 적절한 모델을 선택할 수 있습니다.
이와 같이 동적 양자화 방식은 DeepSeek R1의 효율적인 경량화와 동시에 높은 추론 품질을 보장하는 핵심 기술로, 향후 다양한 응용 분야에 유용하게 활용될 것으로 기대됩니다.
설치 및 실행 방법
1. CUDA Toolkit 설치(없을 시)
DeepSeek R1 모델을 사용하기 위해서는 CUDA Toolkit이 필요합니다. 아래 링크를 통해 CUDA Toolkit 12.1의 최신 업데이트를 확인하고 다운로드할 수 있습니다. 만약 해당 환경이 있는지 없는지 모르겠다면 기본 환경 설정 및 설치 단계를 진행하다가 CUDA관련 오류가 나오면 그때 설정하셔도 됩니다.
2. 기본 환경 설정 및 설치
다음 명령어들을 터미널에 입력하여 필수 패키지와 llama.cpp 레포지토리를 설치합니다.
apt-get update
apt-get install build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggerganov/llama.cpp
cmake llama.cpp -B llama.cpp/build \
-DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp
이 과정에서 필요한 라이브러리와 CUDA 연동 옵션을 통해 효율적인 실행 환경을 구성할 수 있습니다.
3. 실행 예시
예를 들어, Tesla V100-PCIE-32GB를 4대 사용하여 총 128GB의 GPU RAM 환경에서 다음과 같이 실행할 수 있습니다.
./llama.cpp/llama-cli \
--model DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
--cache-type-k q4_0 \
--threads 40 \
--prio 2 \
--temp 0.6 \
--ctx-size 8192 \
--seed 3407 \
--n-gpu-layers 42 \
-no-cnv \
--prompt "<|User|>한국에 대해서 설명해줘<|Assistant|>"
위의 실행 코드는 DeepSeek R1 모델을 활용하여 특정 프롬프트에 대한 응답을 생성하는 예시입니다. 각 옵션은 모델의 효율적인 실행과 성능 최적화를 위해 제공되었으며, 환경에 맞게 적절히 조정할 수 있습니다.
저는 총 레이어 수 61개 중 42개만 GPU에 오프로드 하였습니다. 이로 인해 추후 발생하는 한국어 테스트에 상당한 영향을 미칩니다. 가장 좋은 상황은 H100 두장을 사용하여 모든 레이어를 GPU에 오프로드 시키는 상태입니다.
한국어 테스트 정보
한국에 대해서 설명해줘<think>
Alright, the user asked me to explain about Korea. I need to provide a clear and comprehensive overview. First, I'll start by clarifying that Korea usually refers to South Korea, officially the Republic of Korea. It's located on the Korean Peninsula in East Asia. I should mention its capital, Seoul, which is a major global city.
Next, I'll cover the geography. South Korea has a diverse landscape with mountains, coastlines, and Jeju Island. The climate is temperate with four distinct seasons. Then, I'll move on to history, mentioning the Joseon Dynasty, Japanese occupation, and the Korean War leading to the division into North and South.
Economically, South Korea is a powerhouse with conglomerates like Samsung and Hyundai. Culturally, it's known for K-pop, Korean dramas, cuisine like kimchi, and traditions like Seollal. I'll also touch on language, education, and current issues like North Korea relations.
I should ensure the information is up-to-date and covers all key aspects without being too technical. Maybe add a note about North Korea if the user is interested in that. Keep the tone friendly and informative.
</think>
한국은 동아시아에 위치한 국가로, 공식적으로는 대한민국(Republic of Korea)이라고 불립니다. 한국은 한반도의 남쪽 부분에 위치하고 있으며, 북쪽에는 조선민주주의인민공화국(북한)과 접경하고 있습니다. 한국은 1948년에 독립한 이후 빠른 경제 성장과 민주주의 발전을 이루어낸 국가로 유명합니다.
### 주요 정보:
1. **수도**: 서울(Seoul)
- 인구 약 1,000만 명의 메가시티로, 정치, 경제, 문화의 중심지입니다.
- 세계적인 IT 산업과 K-pop, 패션 등 글로벌 문화의 중심지로도 유명합니다.
2. **지리와 기후**:
- 한반도의 남쪽에 위치해 있으며, 동쪽으로는 일본과 바다를 사이에 두고 접하고 있습니다.
- 산악 지형이 많으며, 제주도 등 아름다운 자연 경관을 가지고 있습니다.
- 계절이 뚜렷한 온대 기후로, 겨울은 추우며 여름은 덥고 습합니다.
3. **역사**:
- 오랜 역사를 가진 국가로, 고대 삼국 시대, 조선 왕조 등을 거쳤습니다.
- 1910년부터 1945년까지 일본의 식민지 시기를 겪은 후, 광복으로 독립했습니다.
- 1950년부터 1953년까지 한국 전쟁을 겪은 후, 남북으로 분단되었습니다.
4. **경제**:
- 세계 10대 경제 대국 중 하나로, 첨단 기술(삼성, 현자 등), 자동차(현대), 반도체 산업이 강합니다.
- 세계 최대 수출국 중 하나로, 수출 의존적 경제 구조입니다.
5. **문화**:
- K-pop(방탄소년단, 블랙핑크 등), 한국 드라마, 영화(오징어 게임 등)가 전 세계적으로 인기를 얻고 있습니다.
- 김치, 불고기, 비빔밥 등 한국 전통 음식이 유명하며, 유네스코 식문화 유산으로 지정된 문화입니다.
- 설날, 추석 등 전통 명절을 가족과 함께 보내는 문화가 있습니다.
6. **언어**:
- 한국어를 사용하며, 한글이라는 독특한 문자 체계를 가지고 있습니다.
7. **교육**:
- 교육에 대한 열의가 높아, 대학 진학률이 높으며, 교육 경쟁력이 강합니다.
8. **현대 사회**:
- 기술 혁신과 창의성을 바탕으로 글로벌 브랜드를 키워나가고 있습니다.
- 북한과의 관계, 역사 문제, 외교적 문제 등 복잡한 과제도 안고 있습니다.
한국은 전통과 현대가 조화를 이루는 국가로, 경제적 성공과 문화적 영향력을 동시에 추구하는 독특한 국가입니다. 더 궁금한 점이 있다면 언제든 질문해주세요! 😊 [end of text]
llama_perf_sampler_print: sampling time = 153.65 ms / 974 runs ( 0.16 ms per token, 6339.08 tokens per second)
llama_perf_context_print: load time = 346931.61 ms
llama_perf_context_print: prompt eval time = 54374.24 ms / 12 tokens ( 4531.19 ms per token, 0.22 tokens per second)
llama_perf_context_print: eval time = 9425122.38 ms / 961 runs ( 9807.62 ms per token, 0.10 tokens per second)
llama_perf_context_print: total time = 9480252.40 ms / 973 tokens
하나의 답변("한국에 대해서 설명해줘")을 생성하는 데 총 2시간 38분 0.25초가 소요되었습니다. 답변의 퀄리티는 우수하지만, 실제 사용 환경에서는 속도가 크게 부족하여 실용적이지 않은 수준입니다.
보시는 바와 같이, 공식 문서에 따르면, GPU에 모든 레이어를 offload한 상태(즉, 모든 층이 GPU 메모리에 올라간 상태)에서는 H100 2장을 사용하여 초당 140 토큰의 추론 속도를 기대할 수 있습니다. 이는 현재 테스트 결과 대비 약 1400배 빠른 속도라고 할 수 있습니다.
참고 링크
이상으로 DeepSeek R1 모델의 사용 방법과 설치, 실행, 테스트 결과에 대해 정리해 보았습니다. 추가적인 질문이나 세부 내용에 대한 요청이 있다면 언제든지 댓글로 남겨주세요!
'NLP' 카테고리의 다른 글
MCP 직접 제작하기 (LangChain MCP Adapters) (0) | 2025.04.15 |
---|---|
MCP(Model Context Protocol)에 대하여~ (0) | 2025.03.31 |
QwQ 모델 think 과정과 Exaone의 한국어 합친다면? (0) | 2025.03.16 |
Llama2(라마2) 소개 및 설치 (0) | 2023.07.24 |
LangChain&GPT4All 로컬 CPU 환경에 구현 (0) | 2023.07.24 |