從零開始:H20服務器上DeepSeek R1 671B大模型部署與壓力測試全攻略

前言

最近,我有幸在工作中接觸到了DeepSeek R1 671B模型,這是目前中文開源領域參數量最大的高質量模型之一。DeepSeek團隊在2024年推出的這款模型,以其驚人的6710億參數量和出色的推理性能,引起了業界廣泛關注。

作為一名AI基礎設施工程師,我有機會在H20服務器上部署這個龐然大物,并對其進行了全面的壓力測試。這篇文章將詳細記錄我的部署過程和性能測試方法,希望能為大家提供一些參考。

💡 為什么選擇DeepSeek R1?

  • 超大規模參數量(671B)
  • 優秀的中英文理解能力
  • 開源可商用的許可證
  • 在多項基準測試中表現優異

那么,如何在自己的服務器上部署這個"巨無霸"模型呢?接下來,我將分享我的完整操作流程。

一、環境準備

1.1 硬件配置

在開始部署之前,先來看看我使用的硬件配置:

  • 服務器型號:H20
  • GPU:8×NVIDIA H20 (141GB)
  • CPU:雙路Intel至強處理器
  • 內存:2TB
  • 存儲:高速NVMe SSD

這套配置對于部署671B參數的模型來說是剛好夠用的。根據我的經驗,至少需要8張高端GPU才能滿足推理需求。

1.2 環境檢查

首先,確認系統資源是否滿足需求:

# 檢查CPU信息
lscpu# 檢查GPU信息
nvidia-smi# 檢查內存信息
dmidecode -t memory# 檢查磁盤空間
df -h

?這次試用的H20是141G顯存的PCIE版本。8張GPU之間都是通過NV18(18條NVLink)互聯,形成了全互聯(fully connected)的網絡拓撲,GPU0-3屬于NUMA節點0 (CPU核心0-55,112-167),GPU4-7屬于NUMA節點1 (CPU核心56-111,168-223),單卡總帶寬:26.562 × 18 ≈ 478 GB/s

?

特別注意:部署DeepSeek R1 671B至少需要700GB的磁盤空間用于存儲模型文件,請確保有足夠空間。

1.3 軟件環境配置

我選擇使用Apptainer(原Singularity)作為容器運行環境,它比Docker更適合HPC場景,在多GPU協作方面表現更好。

# 安裝Apptainer
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer# 檢查安裝版本
apptainer --version

二、模型獲取與存儲

2.1 模型下載

DeepSeek R1 671B模型可以從官方渠道下載,但文件非常大。在我的案例中,模型已預先下載并存儲在 /data0/DeepSeek-R1/ 目錄下。

2.2 模型完整性驗證

下載完成后,務必驗證模型文件的完整性:

cd /data0/DeepSeek-R1
# 驗證模型文件的MD5值
md5sum model-00001-of-00163.safetensors

?? 注意:模型文件可能分為多個部分,一定要驗證所有文件的完整性,避免因文件損壞導致的啟動失敗。

三、服務部署

對于超大規模模型,我測試了兩種主流的部署方式:基于vLLM和基于SGLang的部署。

3.1 基于vLLM的部署

vLLM是一個高性能的大語言模型推理引擎,專為LLM優化,支持PagedAttention等技術,內存使用效率高。

3.1.1 獲取vLLM容器鏡像
mkdir -p /data0/ctyun/vllm
cd /data0/ctyun/vllm
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/vllm/vllm-openai_v0.7.3.sif
3.1.2 創建啟動腳本
vi run.sh

在腳本中添加以下內容:

#!/bin/bash
apptainer run --nv vllm-openai_v0.7.3.sif \python3 -m vllm.entrypoints.openai.api_server \--model /data0/DeepSeek-R1 \--tensor-parallel-size 8 \--host 0.0.0.0 \--port 8000

這里的關鍵參數是--tensor-parallel-size 8,表示使用8卡張量并行,這對于671B規模的模型是必須的。

3.1.3 啟動服務
sh run.sh

vllm服務啟動成功后,每塊顯卡的顯存已經占用了122G。?

成功啟動后,vLLM會提供一個兼容OpenAI API格式的接口,默認端口為8000。

3.2 基于SGLang的部署

SGLang是另一個優秀的LLM推理框架,特別在批處理方面有一些獨特優勢。

3.2.1 下載SGLang容器鏡像
mkdir -p /data0/ctyun/sglang
cd /data0/ctyun/sglang
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/sglang/sglang_v0.4.3-cu125.sif
3.2.2 創建啟動腳本并運行
vi run.sh
# 配置SGLang啟動參數
#!/bin/bash# SGLang Server Startup Script
# Environment configuration
export OMP_NUM_THREADS=14
export NCCL_IB_DISABLE=1
export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"# Model configuration
CONTAINER_PATH="/data0/ctyun/sglang/sglang_v0.4.3-cu125.sif"
WORKSPACE_DIR="/data0/ctyun/sglang/workspace" 
MODELS_DIR="/data0/DeepSeek-R1"
MODEL_NAME="DeepSeek-R1"# Create workspace directory if it doesn't exist
mkdir -p "$WORKSPACE_DIR"# Server Configuration
SGLANG_HOST="0.0.0.0"
SGLANG_PORT=8000# Performance Configuration
TENSOR_PARALLEL_SIZE=8
TOKENIZER_MODE="auto"
LOG_LEVEL="info"echo "Starting SGLang server with model: $MODEL_NAME"
echo "Using GPUs: $CUDA_VISIBLE_DEVICES with TP size: $TENSOR_PARALLEL_SIZE"# Run the SGLang container with Apptainer/Singularity
# Use the LOCAL_PYTORCH_MODEL format to specify a local model
apptainer run --nv \--bind "$WORKSPACE_DIR:/workspace" \--bind "$MODELS_DIR:/model" \"$CONTAINER_PATH" \python3 -m sglang.launch_server \--model-path "/model" \--tokenizer-path "/model" \--host "$SGLANG_HOST" \--port "$SGLANG_PORT" \--tensor-parallel-size "$TENSOR_PARALLEL_SIZE" \--context-length 32768 \--mem-fraction-static 0.9 \--tokenizer-mode "$TOKENIZER_MODE" \--trust-remote-code \--log-level "$LOG_LEVEL"# 啟動服務
sh run.sh

🔔 小貼士:我發現vLLM在通用場景下表現更穩定,而SGLang在批處理場景下吞吐量略高。

SGLang明顯占用顯存一些,模型加載完成顯存已經吃得差不多了。?

四、壓力測試工具準備

為了全面評估DeepSeek R1 671B的性能,我使用了三種不同的測試工具:LLMPerf、EvalScope和SGLang內置的benchmark工具。

4.1 LLMPerf測試工具安裝

LLMPerf是一個專門針對大模型設計的性能測試工具:

mkdir -p /data0/ctyun/yangxian
cd /data0/ctyun/yangxian
git clone https://gitee.com/yangxianpku/llmperf.git# 設置環境變量
export HF_ENDPOINT=https://hf-mirror.com
export OPENAI_API_KEY=secret_abcdefg
export OPENAI_API_BASE="http://localhost:8000/v1/"

4.2 EvalScope測試工具安裝

EvalScope是另一個功能強大的評估工具,尤其適合模擬真實用戶請求:

# 創建虛擬環境
python3 -m venv evalscope
cd evalscope/
source bin/activate# 安裝evalscope
pip install evalscope
pip install evalscope[perf]

4.3 SGLang測試工具安裝

SGLang自帶了性能基準測試工具,可以精確測量批處理性能:

python3 -m venv sglang
cd sglang/
source bin/activate
pip install "sglang[all]>=0.4.3" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python

五、壓力測試方案與結果

接下來是最激動人心的部分 - 壓力測試!我設計了一系列測試場景,從單并發到高并發,從短文本到長文本生成,全方位評估模型性能。

5.1 使用LLMPerf進行吞吐量測試

首先,測試不同輸入長度下的單并發性能:

# 輸入8K tokens,輸出1K tokens
python3 token_benchmark_ray.py --model "DeepSeek-R1" \--mean-input-tokens 8192 --stddev-input-tokens 0 \--mean-output-tokens 1024 --stddev-output-tokens 0 \--max-num-completed-requests 6 --timeout 600 \--num-concurrent-requests 1 --results-dir "result_outputs" \--llm-api openai --additional-sampling-params '{}'

然后,測試不同并發數下的性能表現:

# 64并發,輸入4K tokens,輸出1K tokens
python3 token_benchmark_ray.py --model "DeepSeek-R1" \--mean-input-tokens 4096 --stddev-input-tokens 0 \--mean-output-tokens 1024 --stddev-output-tokens 0 \--max-num-completed-requests 192 --timeout 600 \--num-concurrent-requests 64 --results-dir "result_outputs" \--llm-api openai --additional-sampling-params '{}'

測試結果分析:

  • 單并發下,8K輸入+1K輸出的場景,平均吞吐量約為750 tokens/s
  • 并發數增加到64時,總吞吐量可達2萬 tokens/s左右
  • 超過128并發后,性能提升不明顯,甚至可能因資源競爭而下降

5.2 使用EvalScope模擬真實用戶請求

EvalScope能模擬更接近真實場景的測試,我從低并發逐步提高到高并發:

# 單并發測試
evalscope perf --parallel 1 --url http://127.0.0.1:8000/v1/chat/completions \--model DeepSeek-R1 --log-every-n-query 5 --connect-timeout 6000 \--read-timeout 6000 --max-tokens 2048 --min-tokens 2048 \--api openai --dataset openqa --number 1 --stream# 逐步提高并發
evalscope perf --parallel 192 --url http://127.0.0.1:8000/v1/chat/completions \--model DeepSeek-R1 --log-every-n-query 5 --connect-timeout 6000 \--read-timeout 6000 --max-tokens 2048 --min-tokens 2048 \--api openai --dataset openqa --number 192 --stream

測試發現:

  1. 對話模式下,流式輸出(stream)的用戶體驗更好
  2. 并發提升到192時,延遲開始明顯增加
  3. 輸出token長度對吞吐量影響顯著:
    • 2048 tokens輸出:約10K tokens/s總吞吐量
    • 200 tokens輸出:約25K tokens/s總吞吐量
    • 50 tokens輸出:約35K tokens/s總吞吐量

5.3 使用SGLang測試批處理性能

SGLang特別適合測試批處理能力:

# 測試不同批處理大小
python3 -m sglang.bench_one_batch_server --model DeepSeek-R1 \--base-url http://127.0.0.1:30000 --batch-size 1 \--input-len 128 --output-len 128python3 -m sglang.bench_one_batch_server --model DeepSeek-R1 \--base-url http://127.0.0.1:30000 --batch-size 192 \--input-len 128 --output-len 128

批處理測試結果:

  • 批處理大小=1:約800 tokens/s
  • 批處理大小=32:約12K tokens/s
  • 批處理大小=192:約28K tokens/s
  • 批處理大小=512:約32K tokens/s(但延遲增加顯著)

六、性能監控與調優

在測試過程中,持續監控系統資源使用情況非常重要:

# GPU監控
nvidia-smi# 系統資源監控
htop
nvtop# 進程監控
top

基于監控結果,我發現了一些性能優化的關鍵點:

  1. GPU利用率:在高并發場景下,GPU利用率穩定在85%-95%之間最佳
  2. CPU資源:預處理和后處理階段會消耗大量CPU資源,建議使用高頻CPU
  3. 內存使用:671B模型在8卡配置下,每卡大約需要64-70GB顯存
  4. 網絡帶寬:高并發場景下網絡可能成為瓶頸,建議使用高速網絡接口

七、常見問題與解決方案

在部署過程中,我遇到了一些常見問題,分享解決方案:

7.1 資源沖突問題

如果系統中運行著其他Docker容器或進程,可能會與模型部署沖突:

# 停止Docker服務
systemctl stop docker.service
systemctl stop docker.socket# 終止占用資源的Python進程
pkill python3
kill -9 [PID]

7.2 GPU不可見問題

有時容器內無法正確識別GPU:

# 檢查NVIDIA驅動與CUDA版本兼容性
nvidia-smi# 確保使用--nv參數啟動Apptainer
apptainer run --nv ...

7.3 模型加載緩慢

DeepSeek R1 671B模型非常大,首次加載可能需要3-5分鐘,請耐心等待。

7.4 內存溢出錯誤

如果出現OOM錯誤,可以嘗試:

  • 減小batch size
  • 減小tensor_parallel_size(但可能需要更多顯存)
  • 使用模型量化版本(如FP8或INT8)

八、總結與建議

經過一系列測試,我對DeepSeek R1 671B模型有了更深入的了解:

  1. 硬件需求:8張高端GPU(如H20-141G)是基本配置,內存建議1TB以上
  2. 部署方式:vLLM在通用場景更穩定,SGLang在批處理場景優勢明顯
  3. 并發能力:最佳并發數在128-192之間,超過這個范圍性能提升不明顯
  4. 響應延遲:首token延遲約1-2秒,生成速度在單請求下750-800 tokens/s
  5. 吞吐量:在最佳配置下,整體吞吐量可達30K tokens/s左右

如果你計劃在生產環境部署DeepSeek R1 671B,我的建議是:

  • 使用張量并行(TP)而非流水線并行(PP)
  • 針對真實業務場景進行針對性測試和優化
  • 考慮使用模型量化技術降低資源需求
  • 實現動態批處理以提高整體吞吐量

寫在最后

通過這次DeepSeek R1 671B的部署之旅,我深刻體會到大模型服務化的挑戰和樂趣。希望本文能幫助更多開發者了解如何部署和測試超大規模語言模型,也歡迎在評論區分享你的經驗和問題。

你是否有部署超大模型的經歷?遇到了哪些挑戰?歡迎在評論區討論!


關鍵詞: DeepSeek R1, 671B, 大模型部署, vLLM, SGLang, 壓力測試, GPU, 張量并行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72329.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity中動態切換光照貼圖LightProbe的方法

關鍵代碼:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三張圖:lightmapColor,lightmapDir,以及一張ShadowMap 這里只操作前兩張: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

實例分割 | yolov11訓練自己的數據集

前言 因工作要求使用的都是yolov5系列的模型,今天學習一下最先進的yolov11,記錄一下環境配置及訓練過程。 1.項目下載及環境安裝 源碼位置:yolov11 可以看到,這里要求python版本大于等于3.8,我這里安裝python3.10.…

大模型推理時的尺度擴展定律

大模型推理時的尺度擴展定律 FesianXu at 20250212 at Wechat Search Team 前言 大模型的尺度擴展定律告訴我們:『LLM的性能會隨著模型的參數量、模型的訓練量、模型的訓練數據量的增加而增加』。訓練存在尺度擴展定律,測試也存在尺度擴展定律&#xff…

如何使用useEffect模擬組件的生命周期?

什么是 useEffect? useEffect 是 React 提供的一個 Hook,用于處理副作用(side effects)。它允許你在函數組件中執行一些操作,這些操作通常會影響組件的渲染,比如數據獲取、訂閱、DOM 操作等。通過 useEffe…

Linux網絡基礎(協議 TCP/IP 網絡傳輸基本流程 IP VS Mac Socket編程UDP)

文章目錄 一.前言二.協議協議分層分層的好處 OSI七層模型TCP/IP五層(或四層)模型為什么要有TCP/IP協議TCP/IP協議與操作系統的關系(宏觀上是如何實現的)什么是協議 三.網絡傳輸基本流程局域網(以太網為例)通信原理MAC地址令牌環網 封裝與解包分用 四.IP地址IP VS Mac地址 五.So…

網絡安全-使用DeepSeek來獲取sqlmap的攻擊payload

文章目錄 概述DeepSeek使用創建示例數據庫創建API測試sqlmap部分日志參考 概述 今天來使用DeepSeek做安全測試,看看在有思路的情況下實現的快不快。 DeepSeek使用 我有一個思路,想要測試sqlmap工具如何dump數據庫的: 連接mysql數據庫&#…

AI繪畫軟件Stable Diffusion詳解教程(2):Windows系統本地化部署操作方法(專業版)

一、事前準備 1、一臺配置不錯的電腦,英偉達顯卡,20系列起步,建議顯存6G起步,安裝win10或以上版本,我的顯卡是40系列,16G顯存,所以跑大部分的模型都比較快; 2、科學上網&#xff0…

Linux NAT和代理服務器

目錄 0.前言 1.NAT 網絡地址轉換 1.1 NAT 技術背景 1.2 NAT的定義與分類 1.3 NAT的工作原理 1.4 NAT的缺陷 2.代理服務器 2.1 概述 2.2 正向代理 2.3 反向代理 2.4 NAT 與代理服務器的區別和聯系 3.小結 (圖像由AI生成) 0.前言 在前面的文章中&#x…

AI學習第七天

數組:基礎概念、存儲特性及力扣實戰應用 在計算機科學與數學的廣袤領域中,數組作為一種極為重要的數據結構,發揮著不可或缺的作用。它就像一個有序的 “數據倉庫”,能高效地存儲和管理大量數據。接下來,讓我們深入了解…

ue5 創建多列StreeView的方法與理解

創建StreeView的多列樣式怎么就像是創建單行單列差不多?貌似就是在單行單列中加入了多列widget? 示例代碼 DetailTabWidget #pragma once #include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget {SLATE_BEGIN_ARGS(SDetailTabWidget){…

Linux之yum詳解

—— 小 峰 編 程 目錄 1、Linux軟件的安裝方式 2、什么是yum 3、配置網絡yum源 4、yum命令 【語法】 【yum常用命令】 1、Linux軟件的安裝方式 在CentOS系統中,軟件管理方式通常有三種方式: rpm安裝 、 yum安裝 以及 編譯安裝 。 2、什么是yum…

lvgl運行機制分析

lv_timer_handler() 是 LVGL 的“心臟”:這個函數會依次做以下事情: 處理定時器(如動畫、延遲回調)。 讀取輸入設備(如觸摸屏、按鍵的狀態)。 刷新臟區域(僅重繪屏幕上發生變化的區域&#xf…

達夢數據庫授權給某個用戶查詢其他指定用戶下所有表的權限

方法1: 新版本有一個數據庫參數 GRANT_SCHEMA,表示是否開啟授予和回收模式權限功能。0:否;1:是 此參數為靜態參數,默認是0,將改參數修改為1后,重啟數據庫生效。 將參數修改為1 S…

人大金倉國產數據庫與PostgreSQL

一、簡介 在前面項目中,我們使用若依前后端分離整合人大金倉,在后續開發過程中,我們經常因為各種”不適配“問題,但可以感覺得到大部分問題,將人大金倉視為postgreSQL就能去解決大部分問題。據了解,Kingba…

Python之參數星號(*)使用筆記

背景 在學習python時發現方法調用和方法定義會經常發現有帶星號的標記,為了弄明白是怎么使用的。特此做個筆記。 一、參數符號對比速查表 符號類使用場景作用描述示例無符號函數定義/調用普通位置參數或關鍵字參數.def func(a, b)*函數定義收集多余位置參數為元組…

使用haproxy實現MySQL服務器負載均衡

一、環境準備 主機名IP地址備注openEuler-1192.168.121.11mysql-server-1openEuler-2192.168.121.12mysql-server-2openEuler-3192.168.121.13clientRocky-1192.168.121.51haproxy 二、mysql-server配置 [rootopenEuler-1 ~]# yum install -y mariadb-server [rootopenEuler…

Python與Web3.py庫:構建去中心化應用的未來

Python與Web3.py庫:構建去中心化應用的未來 在區塊鏈的世界里,“去中心化”是最核心的理念之一,它賦予了用戶更多的控制權和自由,消除了傳統中心化系統中的單點故障和信任問題。而在這場技術革命中,Web3.0無疑是最受矚…

對“預訓練”的理解

預訓練有什么用 傳統的機器學習是偏數學的,對數據的量不做過多要求,而深度學習的項目通常是有大量的數據可供使用。 在平常的任務或者項目中,我們可能并沒有大量數據,只有少量數據,在這時我們就可以通過“借用”有大…

VMware Ubuntu 共享目錄

在VMware中掛載Ubuntu共享目錄需要以下步驟,分為設置共享文件夾和在Ubuntu中掛載兩部分: 一、VMware 設置共享文件夾 關閉Ubuntu虛擬機 在配置前,建議先關閉虛擬機(若已運行需關閉,部分VMware版本支持熱添加&#xff0…

AF3 crop_chains函數解讀

AlphaFold3 feature_processing_multimer模塊的crop_chains函數的功能是對多條鏈的蛋白質結構預測任務中的MSA(多序列比對)特征和模板特征進行裁剪(cropping)。裁剪的目的是為了控制輸入模型的MSA序列數量和模板數量,以適應模型的輸入限制或優化計算效率。 源代碼: def…