【AI 集群实战】多节点 DGX Spark 集群共享大模型

📝 背景与痛点

在拥有多台高算力桌面级节点(如 NVIDIA DGX Spark)的 AI 实验室或生产环境中,我们经常面临一个存储痛点:

像 Qwen3.5-35B 这样的开源大模型动辄几十 GB。如果 8 台 DGX Spark 都去本地拉取一遍模型,不仅浪费几百 GB 的 NVMe 空间,后续更新模型(如增量微调的 LoRA 权重)也需要手动 Rsync 繁琐同步。

💡 解决方案与 GB10 统一内存优势

为了解决这个问题,我们选取一台搭载大容量 NVMe 硬盘的 DGX Spark 作为**"主镜像仓库"**,通过配置优化的 NFS (Network File System) over TCP 协议,将模型目录共享给整个内网。

🔥 DGX Spark 的终极架构红利:

得益于 GB10 芯片的 128GB 统一内存 (Unified Memory) 架构,CPU 和 Blackwell GPU 共享同一块物理内存。其他计算节点通过 NFS 将模型文件拉取到本地"系统内存"的瞬间,数据就已经直接躺在"GPU 显存"里了!全程零 PCIe 拷贝(Zero-copy),彻底打破传统架构的传输瓶颈。

核心收益:

  1. 极致省空间:全网只存一份模型,其余计算节点本地存储零占用。
  2. 秒级全网更新:主仓库更新权重,全网下一秒即可直接加载。
  3. 原生 VRAM 直达:千兆网拉取直达统一内存,省去显存搬运损耗。

🛠️ 环境准备

  • 服务端 (主镜像仓库) :Hostname 为 spark-8,模型存放路径 /home/nvidia/models
  • 客户端 (计算节点) :Hostname 为 spark-9 等。
  • 网络环境:标准千兆/万兆局域网(实测千兆网可达 118MB/s 满速)。

⚙️ 一、 服务端配置 (在 spark-8 节点执行)

1. 安装 NFS 服务端

bash 复制代码
sudo apt update && sudo apt install nfs-kernel-server -y

2. 配置共享目录与权限

必须将基础模型目录设置为 ro(只读)权限,防止误操作。

打开配置文件:

bash 复制代码
sudo nano /etc/exports

在文件末尾追加:

text 复制代码
/home/nvidia/models *(ro,async,insecure,no_root_squash)

(参数释义:ro 为只读;async 提升元数据响应;no_root_squash 信任客户端 root 映射。)

3. 重启服务使配置生效

bash 复制代码
sudo systemctl restart nfs-server
sudo exportfs -a

🚀 二、 客户端配置 (在 spark-9 等计算节点执行)

1. 安装 NFS 客户端工具

bash 复制代码
sudo apt update && sudo apt install nfs-common -y

2. 配置内网 Hosts 解析

为了避免 IP 变动导致挂载失效,打开 /etc/hosts,追加服务端的内网 IP:

text 复制代码
# 替换为真实的 spark-8 IP
192.168.x.8   spark-8-nfs

3. 配置开机自动挂载 (包含 AI 集群专属优化参数)

创建挂载点:sudo mkdir -p /mnt/shared_models

打开 fstab 文件写入配置:

bash 复制代码
sudo nano /etc/fstab

在文件末尾追加这行灵魂配置

text 复制代码
spark-8-nfs:/home/nvidia/models /mnt/shared_models nfs vers=4.2,rsize=1048576,wsize=1048576,tcp,timeo=600,retrans=2,ro,_netdev,x-systemd.automount 0 0

高阶参数解析:

  • rsize/wsize=1048576: 设定传输块大小为 1MB,大幅提升连续大文件(权重)的读取吞吐量。
  • tcp,timeo=600: 明确走 TCP 协议并增加超时容忍度,防止多机并发拉取时卡死。
  • _netdev,x-systemd.automount: 等待网络就绪后再挂载,防止重启时系统自检挂起。

4. 加载并验证挂载

bash 复制代码
sudo systemctl daemon-reload
sudo mount -a
df -h | grep shared_models

输出中看到 3.7T 容量即代表大功告成。


📊 三、 网络吞吐压测与 Python 实战

我们可以使用 dd 命令测试纯网络 I/O 速度:

bash 复制代码
# 清空缓存防止干扰
sudo sysctl -w vm.drop_caches=3
# 找一个真实的 safetensors 文件测速
dd if=/mnt/shared_models/Qwen3.5-35B/model.safetensors of=/dev/null bs=1M status=progress

(注:千兆网环境下,速度稳定在 118 MB/s 左右为绝佳状态。)

Python/PyTorch 零缝隙加载代码:

计算节点完全不需要下载,直接指向 NFS 路径即可启动!

python 复制代码
import time
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# 直接指向网络挂载目录
model_path = "/mnt/shared_models/Qwen3.5-35B-A3B-FP8"

print(f"🚀 开始从分布式存储加载模型,直达 DGX 统一内存...")
start_time = time.time()

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="auto",
    torch_dtype=torch.float16,
    trust_remote_code=True
)

print(f"✅ 模型加载成功!耗时: {time.time() - start_time:.2f} 秒")

🔥 隐藏福利 (Page Cache):在 DGX Spark 上运行一次后,只要不清理系统缓存,第二次启动代码将直接从内存读取,实现几秒钟内的"瞬间加载"!

相关推荐
Zzj_tju21 小时前
VLM 读图评测:先审计评分器,再判断读错还是算错
人工智能·深度学习·机器学习·语言模型
嘟嘟嘟952721 小时前
AI Agent 的边缘困境
人工智能·架构·agent
deepseek2321 小时前
Claude Mythos 5越界投毒拆解:穿过CAPTCHA向PyPI投毒,82%重跑有害率背后的偏见推理与监控失效
人工智能·claude·ai agent
杨航 AI21 小时前
本地双4060ti16g加macmini不断优化私有化大模型
人工智能
hey you~21 小时前
语音机器人如何配合人工完成复杂进线服务?三种协同模式与落地要点
人工智能·机器人·语音识别·智能客服·呼叫中心·转人工策略
www.0221 小时前
Codex额度用完怎么办?Windows定时自动继续VS Code Codex任务实战
人工智能·windows·vscode·自动化·openai·codex·autohotkey
星禾元亨21 小时前
生成式 AI 时代的架构演进与 GEO 优化:实体企业 AI 落地避坑指南
大数据·人工智能·架构·自动化·创业创新
差不多的周周21 小时前
《HuMoCon:人类运动理解的概念发现》论文核心部分详解
人工智能·深度学习·计算机视觉·自然语言处理
IT·陈寒21 小时前
Python的GIL问题又把我坑惨了
人工智能·大模型·api·创业·变现·简历优化
锋行天下1 天前
LangGraph 模拟简单的多模型编排
人工智能