当前位置: 首页 > news >正文

DeepSeek 分布式部署,配置

一、通用基础配置(所有节点必须先执行)

Master 和 Worker 的底层环境需完全一致,避免因依赖 / 版本差异导致通信失败,这是分布式部署的前提。

1. 网络互通配置(关闭防火墙 + 固定 IP)

所有节点需处于同一局域网,且能互相 Ping 通:

# 1. 关闭防火墙(Ubuntu示例,CentOS用firewalld)
sudo ufw disable
sudo systemctl stop ufw
sudo systemctl disable ufw# 2. 验证网络互通(所有节点互相Ping,以Master ping Worker为例)
# Master节点执行
ping 192.168.1.101 -c 3  #  ping Worker1,需显示“0% packet loss”
ping 192.168.1.102 -c 3  #  ping Worker2# 3. 固定IP(可选,避免DHCP导致IP变化)
# 编辑网卡配置文件(Ubuntu 22.04为例,网卡名用ip addr查看,如eth0)
sudo nano /etc/netplan/01-network-manager-all.yaml
# 写入以下内容(替换IP、网关、DNS为实际值)
network:version: 2renderer: NetworkManagerethernets:eth0:dhcp4: noaddresses: [192.168.1.100/24]  # Master填100,Worker1填101,Worker2填102gateway4: 192.168.1.1nameservers:addresses: [8.8.8.8, 114.114.114.114]
# 应用配置
sudo netplan apply
2. 环境一致性配置(Python / 依赖 / CUDA)

所有节点的 Python、PyTorch、DeepSpeed 版本必须完全一致,推荐用 Conda 统一环境:

# 1. 安装Conda(所有节点执行)
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-Linux-x86_64.sh
bash Miniconda3-py310_23.10.0-1-Linux-x86_64.sh -b -p ~/miniconda3
source ~/miniconda3/bin/activate# 2. 创建并激活相同虚拟环境(所有节点执行,名称/版本必须一致)
conda create -n deepseek-dist python=3.10 -y
conda activate deepseek-dist# 3. 安装相同版本的依赖(所有节点执行,版本号不可改)
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
pip install deepspeed==0.12.6 transformers==4.35.2 datasets==2.14.6 accelerate==0.24.1 tokenizers==0.14.1 trl==0.7.4# 4. 验证环境一致性(所有节点执行,输出需完全相同)
python -c "import torch; print(torch.__version__)"  # 应输出2.1.0+cu121
deepspeed --version  # 应输出DeepSpeed 0.12.6
nvidia-smi  # 确认CUDA版本≥12.1,GPU驱动≥530.30.02

二、Master 节点专属配置(核心控制节点)

Master 节点需承担 “分发任务、同步梯度、管理日志” 的角色,需配置SSH 免密、节点列表、控制参数

1. SSH 免密登录配置(Master 能无密码访问所有 Worker)

分布式训练需 Master 通过 SSH 远程控制 Worker,必须配置免密:

# 1. Master节点生成SSH密钥(一路回车,不设密码)
ssh-keygen -t rsa# 2. 将Master的公钥分发到所有Worker节点(包括自身,避免本地调用报错)
ssh-copy-id root@192.168.1.100  # 分发到Master自身
ssh-copy-id root@192.168.1.101  # 分发到Worker1(需输入Worker1的root密码)
ssh-copy-id root@192.168.1.102  # 分发到Worker2(需输入Worker2的root密码)# 3. 验证免密登录(Master节点执行,无需输密码即成功)
ssh root@192.168.1.101 "echo Worker1 connected"
ssh root@192.168.1.102 "echo Worker2 connected"
2. 编写节点列表文件(hostfile)

Master 需通过hostfile明确所有节点的 IP 和 GPU 数量,DeepSpeed 会自动根据此文件分配资源:

# Master节点创建ds_config.json(路径:~/deepseek/ds_config.json)
nano ~/deepseek/ds_config.json
# 写入以下配置(7B模型通用,33B模型需改stage=3)
{"train_batch_size": 48,          // 总批次=3节点×2卡×8=48(根据显存调整)"gradient_accumulation_steps": 4, // 梯度累积(减少通信频率)"optimizer": {"type": "AdamW","params": { "lr": 2e-5, "weight_decay": 0.01 }},"fp16": { "enabled": true },     // FP16混合精度(降低显存占用)"zero_optimization": {"stage": 2,                    // ZeRO Stage2(优化梯度/ optimizer状态)"contiguous_gradients": true,  // 连续梯度(减少内存碎片)"overlap_comm": true           // 通信与计算重叠(提升效率)},"communication_data_type": "float16", // 通信数据类型(减少带宽)"wall_clock_breakdown": false
}
4. 同步关键文件到所有 Worker

Master 的hostfileds_config.json、训练脚本train.py需同步到所有 Worker 的相同路径,确保 Worker 能读取配置:

# Master节点执行,同步文件到Worker1
scp ~/deepseek/hostfile root@192.168.1.101:~/deepseek/
scp ~/deepseek/ds_config.json root@192.168.1.101:~/deepseek/
scp ~/deepseek/train.py root@192.168.1.101:~/deepseek/# 同步文件到Worker2
scp ~/deepseek/hostfile root@192.168.1.102:~/deepseek/
scp ~/deepseek/ds_config.json root@192.168.1.102:~/deepseek/
scp ~/deepseek/train.py root@192.168.1.102:~/deepseek/

三、Worker 节点专属配置(执行计算节点)

Worker 节点无需主动配置控制参数,只需确保能被 Master 访问、环境一致、文件同步,核心是 “被动响应 Master 的任务指令”。

1. 验证 Master 公钥已同步

Worker 节点需确认 Master 的公钥已添加到自身的授权列表,避免 SSH 连接失败:

# Worker1/Worker2节点执行,查看授权列表
cat ~/.ssh/authorized_keys
# 输出应包含Master节点的SSH公钥(以ssh-rsa开头,结尾是Master的用户名@主机名)
2. 验证关键文件已同步

Worker 节点需确认 Master 同步的hostfileds_config.jsontrain.py已在相同路径(如~/deepseek/

# Worker1/Worker2节点执行,查看文件是否存在
ls ~/deepseek/
# 应输出:hostfile  ds_config.json  train.py
3. 禁用 Worker 的不必要服务(可选)

为避免 Worker 节点资源被占用,可关闭无关服务(如图形界面、自动更新):

# Worker1/Worker2节点执行,关闭图形界面(服务器无需GUI)
sudo systemctl set-default multi-user.target
sudo systemctl stop gdm3  # Ubuntu桌面环境服务# 关闭自动更新(避免更新打断训练)
sudo systemctl stop apt-daily.service
sudo systemctl disable apt-daily.service

四、启动分布式任务(Master 节点执行,Worker 自动响应)

所有配置完成后,仅需在 Master 节点执行启动命令,Worker 节点会被 Master 自动唤醒并执行任务,无需手动操作。

1. 激活虚拟环境
# Master节点执行,激活之前创建的环境
source ~/miniconda3/bin/activate
conda activate deepseek-dist
2. 启动命令(关键参数绑定 Master 角色
# 进入训练脚本目录
cd ~/deepseek/# 启动分布式训练(仅Master执行,Worker自动同步)
deepspeed --hostfile ./hostfile \--master_addr 192.168.1.100 \  # 绑定Master的IP(必须是Master自身IP)--master_port 29500 \          # Master的通信端口(未被占用即可,如29500-29510)train.py  # 训练脚本(需与Worker节点路径一致)
  • 参数解读
    • --hostfile:Master 通过此文件找到所有 Worker 节点,无需手动指定 Worker IP。
    • --master_addr/--master_port:Worker 节点会通过这两个参数连接到 Master,确认 “谁是主节点”。
    • 执行后,Master 会打印 “DeepSpeed info”,显示 “Number of nodes: 3”“Number of GPUs: 6”,说明角色绑定成功;Worker 节点会自动加载模型并开始计算(通过nvidia-smi可看到 GPU 显存占用上升)。

五、角色区分核心总结

通过以上配置,即可明确区分 Master 和 Worker 的角色,实现 DeepSeek 的分布式部署。核心原则是 “Master 管控制,Worker 管计算”,所有差异配置均围绕 “Master 能找到并控制 Worker” 展开。


文章转载自:

http://OOkNHj9q.dmnqh.cn
http://JWoD5tBM.dmnqh.cn
http://auLHqBba.dmnqh.cn
http://HCU2FUUe.dmnqh.cn
http://AV6OvvoI.dmnqh.cn
http://Q4spVK1F.dmnqh.cn
http://gvCldsUW.dmnqh.cn
http://I7noZSi0.dmnqh.cn
http://X24S4n6i.dmnqh.cn
http://PnKp3MHN.dmnqh.cn
http://rjdD8IVe.dmnqh.cn
http://pSyNLyfL.dmnqh.cn
http://1QcohHhH.dmnqh.cn
http://kq7lcRz2.dmnqh.cn
http://bwLt574i.dmnqh.cn
http://dPHyWD0k.dmnqh.cn
http://q7WT3e3m.dmnqh.cn
http://NlyxhKUX.dmnqh.cn
http://mRzMVux9.dmnqh.cn
http://1OBNbQHf.dmnqh.cn
http://oWIEdgBc.dmnqh.cn
http://WKdJngCW.dmnqh.cn
http://P6Uy6JnV.dmnqh.cn
http://wh5AFFdH.dmnqh.cn
http://BpwLBX3N.dmnqh.cn
http://5QjyjwrJ.dmnqh.cn
http://dFkIRMQZ.dmnqh.cn
http://NyNqFQtO.dmnqh.cn
http://sYjC0Zyt.dmnqh.cn
http://Nl6aQrcN.dmnqh.cn
http://www.dtcms.com/a/387904.html

相关文章:

  • 蓝凌EKP产品:AI 高效汇总意见,加速决策落地​
  • 在三台GPU服务器上部署分布式deepseek
  • Cpptraj 终极指南:从入门到精通
  • Project Treble和HAL架构
  • 【Linux网路编程】传输层协议-----TCP协议
  • dict电子词典
  • pulsar Error receiving messages.Consumer already closed at
  • 计算机视觉(opencv)实战二十五——摄像头动态轮廓识别
  • 简单易懂的Kafka例子
  • 针对tomcat [/usr/lib64:/lib64:/lib:/usr/lib]上找不到基于APR的Apache Tomcat本机库的处理方法
  • 【js】js实现日期转大写:
  • 番茄时钟小程序版本更新记录(v1.0)
  • css消除图片下的白边
  • 我是如何在electron里安装shadcn ui框架的
  • 【图像理解进阶】如何对猫猫的图片进行细粒度分类?
  • JSCPC/GDCPC 2025 J.Puzzle Competition(解谜游戏)
  • SpringMVC 系列博客(三):进阶功能与 SSM 整合实战
  • 电商网站反爬虫机制详解及应对策略
  • 没了CDN与PCDN,网络会怎样?
  • C++中std::vector Vs std::deque VS std::list对比详解
  • RecyclerView实现流式布局
  • 【连载5】C# MVC 异常处理避坑指南:异步操作与静态资源错误解决方案
  • 当控制器无法上网时,如何利用windows笔记本与控制器共享网络?
  • 企业数字化视角下的项目管理软件市场全景分析(2025版)
  • Python异步编程:asyncio.create_task() 用法解析
  • java面试Day1 | redis缓存穿透、击穿、雪崩、持久化、双写一致性、数据过期策略、数据淘汰策略、分布式锁、redis集群
  • Jenkins运维之路(容器项目的优化)
  • 【精品资料鉴赏】363页智慧旅游大数据平台项目建设设计方案
  • 软考 系统架构设计师系列知识点之杂项集萃(149)
  • MyBatis 中注解操作与 XML 映射文件操作的对比