DeepSeek本地部署/SGLang/单节点/多节点

DeepSeek本地部署

简介

我们采用SGLang框架进行DeepSeek模型的本地部署,基于物理设备限制,这里我们以DeepSeek-R1-Distill-Qwen-7B为例,更多配置可以参考官方服务支持,满血版本也可参考下述流程,最小设备支持为8*H20

环境配置

系统显卡CUDApytorchpython
Ubuntu 20.04A10*112.42.5.13.10

单机部署

基础环境默认大家安装成功,以下仅作检查

# 查看驱动
nvidia-smi
# 查看cuda版本
nvcc -V

在这里插入图片描述
在这里插入图片描述

# 在anconda官网查看对应安装包并复制对应链接地址
https://repo.anaconda.com/archive/

# 云服务器下载安装包
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh

在这里插入图片描述
在这里插入图片描述

# 给安装包赋予权限(对应文件在执行上一步命令时的文件夹下)
chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh

# 安装anaconda(安装过程一路选择yes即可,在安装路径配置时,选择默认路径即可)
./Anaconda3-2024.10-1-Linux-x86_64.sh

# 安装完毕后重启终端,一般会激活conda的base环境,如未激活,请使用下述命令
conda init

# 查看是否安装成功
conda -V

在这里插入图片描述在这里插入图片描述

# 创建虚拟环境(Python≥3.10 and <3.13)
conda create -n SGLang python=3.10 -y
conda activate SGLang

# 安装torch及其套件
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124

# 安装SGLang推理架构
pip install --upgrade pip
pip install sgl-kernel --force-reinstall --no-deps
pip install "sglang[all]" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 通过git lfs+modelscope加速下载模型
apt install git git-lfs
git lfs clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git

# 可选(由于模型下载时间较长,为避免因终端连接中断导致下载失败,建议后台挂起操作)
apt install screen
screen -S SGLang

在这里插入图片描述

# 启动服务
python3 -m sglang.launch_server --model-path /root/DeepSeek-R1-Distill-Qwen-7B --port 30000 --mem-fraction-static 0.9 --tp 1 --trust-remote-code --host 0.0.0.0

# 可选(如遇见transformers库报错,请尝试降低版本,下述版本确认可用)
pip install transformers==4.48.3

在这里插入图片描述
在这里插入图片描述

推理测试

# 在本地发起请求而非云服务器终端,需在启动命令中加入--host 0.0.0.0,同时需确认对应IP有数据入口权限
# OpenAI接口代码
import openai
client = openai.Client(
    base_url="http://<Master IP>:<port>/v1", api_key="EMPTY")
# 将上述base_url修改为具体配置即可,master IP为公网IP地址,port为启动命令中的--port参数

# Chat completion
response = client.chat.completions.create(
    model="default",
    messages=[
        {"role": "system", "content": "You are a helpful AI assistant"},
        {"role": "user", "content": "你是谁"},
    ],
    temperature=0.6,
    max_tokens=1024,
)
print(response.choices[0].message)

在这里插入图片描述
将localhost:port替换为对应IP以及端口即可

curl -X POST http://localhost:port/v1/chat/completions \
 -H "Content-Type: application/json" \
 -d '{
    "model": "default",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful AI assistant"
        },
        {
            "role": "user",
            "content": "你是谁"
        }
    ],
    "temperature": 0.6,
    "max_tokens": 1024
}'

在这里插入图片描述

性能选项

参数名称参数介绍实际测试
–tp启用多 GPU 张量并行,常规并行方式设置为实际的卡数即可
–dp启用多 GPU 数据并行,需要内存充足,可以提升吞吐量单节点单卡不适用
–mem-fraction-static控制 KV 缓存池的内存使用量,默认为0.9如服务期间遇内存不足错误,可尝试调小该参数
–chunked-prefill-size控制分块预填充大小如如在为长提示进行预填充时遇内存不足错误,可尝试调小该参数
–enable-torch-compilePyTorch 2.0的一个主要功能,对模型进行提前编译优化,提升小批量并行速度A10单节点失败,满血可以
–torch-compile-max-bstorch.compile 优化的最大批处理大小,一般与–enable-torch-compile同时使用,在小批量时优化效果最佳,推荐为1-8A10单节点失败,满血可以

性能评估

# 下载测试数据集
git lfs clone https://www.modelscope.cn/datasets/gliang1001/ShareGPT_V3_unfiltered_cleaned_split.git

# 由于显存所剩空间不多,输入长度与输出长度在测试时分别设置为512,256,以防OOM
# 模拟并发限制,将最大并发限制为16
# 请求率为8时,显存不够崩溃了
python3 -m sglang.bench_serving --backend sglang --model /root/DeepSeek-R1-Distill-Qwen-7B --port 30000 --dataset-name random --request-rate-range 1,2,4,8 --random-input 512 --random-output 256 --random-range-ratio 1.0 --multi --dataset-path /root/ShareGPT_V3_unfiltered_cleaned_split/ShareGPT_V3_unfiltered_cleaned_split.json --max-concurrency 16

# 可选(动态观察显存变化)
watch -d -n 1 nvidia-smi

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多机部署

多机部署的前置条件与单机部署一致,各节点均需下载模型,一切就绪后,然后在各自终端执行下列命令(示例:两个 A10节点,每个节点有 1 个 GPU)

# node 1
python3 -m sglang.launch_server --model-path /root/DeepSeek-R1-Distill-Qwen-7B --tp 2 --dist-init-addr IP:PORT --nnodes 2 --node-rank 0 --trust-remote-code --host 0.0.0.0 --port 40000


# node 2
python3 -m sglang.launch_server --model-path /root/DeepSeek-R1-Distill-Qwen-7B --tp 2 --dist-init-addr IP:PORT --nnodes 2 --node-rank 1 --trust-remote-code --host 0.0.0.0 --port 40000

# 补充说明
# IP为主节点IP,PORT为指定通信的端口,需提前确认多节点之间可以通信
# 启动命令时,先启动主节点,后启动副节点
# 所有节点的--dist-init-addr均需设置为主节点IP
# 在服务启动后,发起请求时需指定为主节点IP
### 使用SGLang进行分布式集群构建以部署大模型 对于使用SGLang(假设为特定配置语言或工具,可能是Xinference环境下的配置方式)来构建分布式集群并部署大模型的过程,在现有资料中并未直接提及具体的SGLang指南。然而,基于相似的技术实践以及大型模型部署的一般流程,可以推测出一些可能适用的原则和技术要点。 #### 配置管理与自动化脚本编写 为了实现高效的分布式计算能力,通常会采用专门设计的语言或者DSL(Domain Specific Language)来进行集群管理和任务调度[^1]。如果SGLang是指向这种类型的配置描述语言,则应该具备定义节点角色、网络拓扑结构等功能,并支持通过简单的语法声明复杂的集群设置。 #### 安装必要的依赖项 在准备阶段,确保所有参与节点都已正确安装所需的软件包是非常重要的一步。这可以通过命令`pip install "xinference[all]" -i https://pypi.tuna.tsinghua.edu.cn/simple`完成整个环境中所需库文件的获取和安装工作[^2]。此步骤保证了后续能够顺利加载和支持各种大规模预训练模型及其配套组件。 #### 构建与启动集群实例 当基础环境搭建完毕之后,下一步就是利用SGLang创建实际运行的大规模机器学习应用程序所需要的基础设施。虽然具体细节取决于所使用的框架版本和其他因素,但一般而言,该过程涉及指定master/slave关系、分配资源限额等操作。此外,还需注意配置存储路径以便于持久化保存中间结果或最终输出数据集。 #### 调整参数优化性能表现 最后,在成功建立起稳定的分布式架构后,还需要针对目标应用场景微调各项超参选项,比如batch size大小、learning rate衰减速率等等。这些调整有助于提高整体系统的吞吐量和服务质量水平,从而更好地满足业务需求。 由于目前关于SGLang的具体文档较为有限,建议查阅最新的官方手册或是社区论坛寻找更详细的指导说明。同时也可以关注相关领域的最新进展动态,因为随着时间推移可能会有更多针对性的支持材料发布出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值