点击下方
卡片
,关注“
慢慢学AIGC
”
前言
本文为 DeepSeek 本地部署最佳实践系列文章的完结篇,只关注 R1 671B 满血版模型部署, 建议有条件的读者阅读 。
本文实践最低硬件配置为 8 卡 H20(序列长度受限,不建议) , 推荐 16 卡 H100 或更高配置 。
对于老卡如 A100/A800,由于不支持 FP8 精度,显存开销将翻倍,因此需要至少 4 机 32 卡 A100/A800 才能运行本文案例。
SGLang 简介
SGLang 是一个专为大型语言模型和视觉语言模型设计的高速服务框架。它通过
协同设计后端运行时与前端语言
,使开发者与模型的交互更快速、更可控。核心功能包括:
- 高效后端运行时
 
:提供高性能服务支持,具备以下特性
- RadixAttention技术
 
:实现前缀缓存,加速重复模式的推理
- 约束式跳跃解码
 
:提升特定场景生成效率
- 零开销CPU调度器
 
:优化资源管理
- 连续批处理
 
:增强吞吐量
- 分页注意力机制
 
:高效内存管理
- 张量并行
 
:多GPU扩展
- FlashInfer内核
 
:加速注意力计算
- 分块预填充
 
:降低延迟
- 多重量化支持
 
:FP8/INT4/AWQ/GPTQ 量化部署
- 灵活前端语言
 
:为LLM应用开发提供直观编程接口,支持
- 链式生成调用
 - 高级提示工程
 - 流程控制(分支/循环)
 - 多模态输入处理
 - 并行执行
 - 外部系统交互
 
- 广泛模型兼容性
 
:支持主流生成模型(Llama/Gemma/Mistral/千问/DeepSeek/LLaVA等)、嵌入模型(e5-mistral/gte/mcdse)和奖励模型(Skywork),并可轻松扩展新模型集成
- 活跃社区生态
 
:作为开源项目,SGLang 拥有活跃的开发者社区并已在工业界得到实际应用。
SGLang Github 代码仓库:
https://github.com/sgl-project/sglang
大模型推理框架众多,像 vllm、TensorRT-LLM 等,为什么我们选择 SGLang?
SGLang 团队与 DeepSeek 团队紧密协作,实现了
DeepSeek V3 FP8 模型在NVIDIA 和 AMD GPU 上的首日支持
。SGLang 通过 MLA(Multi Latent Attention)优化和 DP(数据并行)注意力机制支持,现已成为运行 DeepSeek 系列模型的
最佳开源 LLM 推理引擎
。该方案已获得 DeepSeek 官方团队推荐。
SGLang 环境搭建
首先需要保证每个 GPU 机器都已安装相同版本 Nvidia 驱动、
网卡驱动、
容器环境等,使用同一基础镜像(本文使用 nvcr.io/nvidia/pytorch:24.12-py3)。需要为每个节点额外配置 SGLang 环境:
          
conda create -n sglang python=3.10
          
conda activate sglang
          
pip install "sglang[all]>=0.4.1.post5" --find-links https://flashinfer.ai/whl/cu124/torch2.4/flashinfer
      
保证每个节点都可以访问 DeepSeek R1 671B 权重,大小 642GB。建议放在共享存储中。
在两个节点上分别运行:
          
# node 0
          
python -m sglang.launch_server --model-path DeepSeek-R1 --tp 16 --dist-init-addr [master_ip]:5000 --nnodes 2 --node-rank 0 --trust-remote-code
          
# node 1
          
python -m sglang.launch_server --model-path DeepSeek-R1 --tp 16 --dist-init-addr [master_ip]:5000 --nnodes 2 --node-rank 1 --trust-remote-code
      
需要将 [master_ip] 替换为你机器的真实 IP,一般将 node 0 设置为 master。
对于 IB/RoCE 网卡环境,启动前需要额外配置 NCCL 相关的环境变量:
          
NCCL_SOCKET_IFNAME=eth0
          
NCCL_NVLS_ENABLE=0
          
NCCL_DEBUG=INFO
          
NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3,mlx5_4,mlx5_5,mlx5_6,mlx5_7
          
NCCL_IB_QPS_PER_CONNECTION=8
          
NCCL_SOCKET_FAMILY=AF_INET
          
NCCL_IB_TIMEOUT=22
          
NCCL_IB_DISABLE=0
          
NCCL_IB_RETRY_CNT=12
      
SGLang 启动日志如下:
          
server_args=ServerArgs(
          
model_path='DeepSeek-R1', 
          
tokenizer_path='DeepSeek-R1', 
          
tokenizer_mode='auto', 
          
load_format='auto', 
          
trust_remote_code=True, 
          
dtype='auto', 
          
kv_cache_dtype='auto', 
          
quantization=None, 
          
context_length=None, 
          
device='cuda', 
          
served_model_name='DeepSeek-R1', 
          
chat_template=None, 
          
is_embedding=False, 
          
revision=None, 
          
skip_tokenizer_init=False, 
          
return_token_ids=False, 
          
host='0.0.0.0', 
          
port=30000, 
          
mem_fraction_static=0.79, 
          
max_running_requests=None, 
          
max_total_tokens=None, 
          
chunked_prefill_size=8192, 
          
max_prefill_tokens=16384, 
          
schedule_policy='lpm', 
          
schedule_conservativeness=1.0, 
          
cpu_offload_gb=0, 
          
prefill_only_one_req=False, 
          
tp_size=16, 
          
stream_interval=1, 
          
random_seed=703813614, 
          
constrained_json_whitespace_pattern=None, 
          
watchdog_timeout=300, 
          
download_dir=None, 
          
base_gpu_id=0, 
          
log_level='info', 
          
log_level_http=None, 
          
log_requests=False, 
          
show_time_cost=False, 
          
enable_metrics=False, 
          
decode_log_interval=40, 
          
api_key=None, 
          
file_storage_pth='SGLang_storage', 
          
enable_cache_report=False, 
          
dp_size=1, 
          
load_balance_method='round_robin', 
          
ep_size=1, 
          
dist_init_addr='master-0:22579', 
          
nnodes=2, 
          
node_rank=0, 
          
json_model_override_args='{}', 
          
lora_paths=None, 
          
max_loras_per_batch=8, 
          
attention_backend='flashinfer', 
          
sampling_backend='flashinfer', 
          
grammar_backend='outlines', 
          
speculative_draft_model_path=None, 
          
speculative_algorithm=None, 
          
speculative_num_steps=5, 
          
speculative_num_draft_tokens=64, 
          
speculative_eagle_topk=8, 
          
enable_double_sparsity=False, 
          
ds_channel_config_path=None, 
          
ds_heavy_channel_num=32, 
          
ds_heavy_token_num=256, 
          
ds_heavy_channel_type='qk', 
          
ds_sparse_decode_threshold=4096, 
          
disable_radix_cache=False, 
          
disable_jump_forward=False, 
          
disable_cuda_graph=False, 
          
disable_cuda_graph_padding=False, 
          
disable_outlines_disk_cache=False, 
          
disable_custom_all_reduce=False, 
          
disable_mla=False, 
          
disable_overlap_schedule=False, 
          
enable_mixed_chunk=False, 
          
enable_dp_attention=False, 
          
enable_ep_moe=False, 
          
enable_torch_compile=False, 
          
torch_compile_max_bs=32, 
          
cuda_graph_max_bs=160, 
          
torchao_config='', 
          
enable_nan_detection=False, 
          
enable_p2p_check=False, 
          
triton_attention_reduce_in_fp32=False, 
          
triton_attention_num_kv_splits=8, 
          
num_continuous_decode_steps=1, 
          
delete_ckpt_after_loading=False)
          
……
          
INFO:     Started server process [118]
          
INFO:     Waiting for application startup.
          
INFO:     Application startup complete.
          
INFO:     Uvicorn running on http://0.0.0.0:30000 (Press CTRL+C to quit)
      
如果正确配置了 IB/RoCE 网络,在日志中会看到如下内容:
其中一个节点 GPU 显存占用情况(使用 nvidia-smi 命令):
由于开启了张量并行(TP=16),每张 GPU 上的显存开销基本相同,符合预期。
Open WebUI 接入本地部署满血版 R1
步骤和第二篇大同小异。SGLang 服务启动后,对外暴露的也是 OpenAI 兼容 API,因此可以直接通过 [服务器IP]:端口号方式访问。
下面是实际对话效果:
有了本地部署的满血版 R1,可以忘掉 ChatGPT,忘掉 Claude,忘掉“服务器繁忙”的 DeepSeek,忘掉第三方 api,忘掉蒸馏,忘掉量化,获得 token 自由。
总结
至此,DeepSeek 本地部署系列文章要画上句号了。
感觉还有点意犹未尽,用几张图来表达吧。
(凤雏卒)
参考链接
https://github.com/sgl-project/sglang/tree/main/benchmark/deepseek\_v3
扫描下方
二维码
,关注“
慢慢学AIGC
”
