
拿到 DGX Spark 之后我做的第一件事不是急着部署大模型而是把机器学习环境完整地梳理了一遍。这台设备对 AI 开发者来说确实很有吸引力它是一台面向桌面的 NVIDIA AI 超级计算机体积不大却能承担模型微调、推理和本地大模型实验。但它的系统架构和普通工作站不太一样环境配置不能直接把网上常见的“Ubuntu 安装 CUDA pip 装 PyTorch”照搬过来否则很容易在驱动、平台架构和容器 runtime 上卡住。这篇文章就围绕DGX Spark 机器学习环境配置展开从开箱检查、远程开发、驱动与 CUDA 现状、Conda 环境、NGC 容器到最终跑通一个 PyTorch 训练脚本尽量把关键步骤和容易踩的坑写清楚。无论你是第一次接触 DGX Spark还是已经从 x86 工作站迁移过来都能在这篇文章里找到一套相对完整的配置路径。1. DGX Spark 是什么为什么环境配置要单独做1.1 什么是 DGX SparkDGX Spark 是 NVIDIA 面向 AI 开发者和研究人员推出的一类桌面级 AI 计算平台。它使用 NVIDIA Grace Blackwell 平台把 CPU、GPU 和统一内存集成在一个紧凑的机身里。从定位上看它适合跑本地大模型推理、模型微调、多模态实验以及 AI 编程辅助工具而不是一台普通“装 Windows 玩游戏”的电脑。这台机器的底层基于 Arm 架构这和大多数开发者常用的 x86 服务器、Windows PC 有本质区别。因此很多在 x86 Ubuntu 上能直接运行的二进制安装包、Docker 镜像、conda 包在 DGX Spark 上必须选择 arm64/aarch64 对应版本否则会出现“装上了但跑不了”或者“被系统当成 CPU 版”的情况。1.2 机器学习环境配置的挑战传统机器学习环境配置主要是“驱动 CUDA cuDNN Python 包”四件套。到了 DGX Spark 上这套流程有几处明显差异系统通常预装 NVIDIA 定制的 Linux 系统和原生 Ubuntu 有一定区别不建议随意更换系统。所有二进制软件都需要符合 aarch64 架构包括 Python 解释器、PyTorch、OpenCV、TensorFlow 等。GPU 驱动和 CUDA 的适配版本由 NVIDIA 统一维护手动换驱动风险较高。深度学习框架的官方预编译包更新节奏很快直接 pip install 可能拿不到针对当前平台优化的版本。所以配置 DGX Spark 机器学习环境的思路应该是先保证系统层干净再尽量使用 NVIDIA 官方验证过的容器运行机器学习框架把环境隔离和可复现性放在首位。2. 环境准备从开箱到远程开发2.1 开箱检查与系统启动刚拿到 DGX Spark 时不要急着连显示器装软件先按下面顺序确认设备状态接好电源确认电源指示灯正常。连接网线至少保证能访问外网因为安装依赖、拉取容器镜像都需要网络。准备一套 USB 键盘鼠标和显示器或者直接在局域网内通过 SSH 登录。首次开机会进入系统初始化流程需要创建管理员用户、设置密码、配置网络。系统启动后建议先在本地终端确认硬件是否正常uname -m lscpu | grep Architecture free -h lsblk在 DGX Spark 上uname -m通常显示aarch64这说明系统是 Arm 架构。后续所有软件源和安装包都要优先选择 aarch64 版本。2.2 配置 SSH 远程登录实际开发中我习惯不用键盘鼠标操作 DGX Spark而是通过 SSH 从笔记本远程登录。一方面可以用 IDE 远程写代码另一方面可以把这台 AI 设备当作一台“计算服务器”使用把桌面环境占用降到最低。在 DGX Spark 上启用 SSH 服务sudo systemctl enable --now ssh ip addr show | grep inet记下设备 IP 后在本地电脑上执行ssh username192.168.1.100如果 SSH 连接失败先检查局域网防火墙、系统是否安装openssh-server以及当前用户是否允许远程登录。2.3 准备 VS Code Remote-SSH远程开发的常见组合是 VS Code Remote-SSH。你只需要在本地 VS Code 安装 “Remote - SSH” 扩展然后配置 SSH 主机信息。配置文件位置在本地~/.ssh/config可以参考下面这段Host dgx-spark HostName 192.168.1.100 User username ForwardAgent yes配置完成后VS Code 左侧会出现远程资源管理器选择对应主机连接即可。连接成功后可以直接在远程设备上打开/workspace目录使用终端、调试器、Git 等能力。这样DGX Spark 的机器学习环境配置和项目开发都能在一套工具链里完成不需要在设备上额外装图形化 IDE。3. 系统级机器学习运行环境3.1 确认 GPU 驱动和 CUDA 状态在配置任何深度学习框架之前先确认 GPU 驱动是否已经正常工作。DGX Spark 出厂系统通常已经包含 NVIDIA 驱动和 CUDA 相关组件但环境可能因升级或还原而发生变化。在终端中运行nvidia-smi如果驱动正常你会看到 GPU 型号、显存/统一内存状态、驱动版本和 CUDA 版本。如果提示command not found先检查驱动路径export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH但这里要注意DGX Spark 的 GPU 驱动和 CUDA 工具链通常由 NVIDIA 统一维护不建议用户手动下载安装桌面显卡驱动。驱动一旦装错轻则 GPU 无法识别重则需要重刷系统。遇到驱动异常优先查看官方文档或恢复出厂配置。3.2 为什么不建议直接改系统 CUDA很多教程会教用户去 NVIDIA 官网下载 CUDA Toolkit然后安装到宿主机。这个方法在普通 x86 Ubuntu 上可行但在 DGX Spark 上有几个风险官方驱动可能是与定制内核配合的版本手动安装可能导致内核模块不匹配。Arm 平台上的 CUDA 版本和 x86 平台不完全一致不是每个版本都支持当前硬件。深度学习框架通常需要特定范围的 CUDA 版本宿主机全局修改会影响后续项目。因此我更推荐的做法是保留系统自带的驱动和 CUDA 工具链不动使用 NGC 容器来运行深度学习项目。这样训练框架和项目依赖都隔离在容器里宿主机环境始终干净稳定。3.3 升级固件和驱动如果遇到性能异常、频繁崩溃或者 GPU 不识别可能是固件或驱动需要更新。NVIDIA 通常会提供系统镜像或升级工具建议通过官方渠道升级不要在第三方网站下载“优化版”驱动。升级前确认sudo apt update sudo apt upgrade更新完成后重启设备再次用nvidia-smi确认 GPU 状态。如果系统升级后 CUDA 版本变化要看后续框架容器是否兼容优先使用与之匹配的 NGC 容器标签。4. 用 Conda 搭建 Python 机器学习环境4.1 安装 Miniforge在 DGX Spark 上管理 Python 环境我推荐使用 Miniforge而不是 Anaconda 官方安装包。Miniforge 默认使用 conda-forge 源对 aarch64 架构支持更友好安装也更轻量。在设备上安装 Miniforgewget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh bash Miniforge3-Linux-aarch64.sh -b -p $HOME/miniforge3 ~/miniforge3/bin/conda init安装完成后重新登录终端conda命令就能直接使用。conda --version如果提示找不到命令检查 shell 配置文件例如~/.bashrc中是否已经添加了 Miniforge 初始化脚本。4.2 创建并激活虚拟环境为了方便不同项目隔离依赖我会为常用的机器学习任务创建一个独立环境conda create -n ml python3.10 -y conda activate ml进入环境后先安装数据处理和可视化相关的基础依赖pip install numpy pandas matplotlib jupyter scikit-learn这里需要注意的是在 DGX Spark 上不要直接使用conda install pytorch安装深度学习框架除非你明确确认当前 conda 源提供的是针对 aarch64 NVIDIA GPU 的版本。深度学习框架更推荐使用官方 NGC 容器运行或者使用 NVIDIA 为当前平台发布的 wheel。可以先在本地的 conda 环境中完成数据分析和模型脚本编写真正执行训练时再切换到容器内。4.3 配合 VS Code 选择解释器项目代码写完后VS Code 需要选择正确的 Python 解释器。点击 VS Code 右下角的 Python 版本号或者通过命令面板执行Python: Select Interpreter选择路径中包含miniforge3/envs/ml/bin/python的解释器。选择正确后终端里执行which python python --version确认当前环境是ml环境这样在 VS Code 中运行脚本、Jupyter Notebook 时依赖包不会指向系统默认 Python。5. 用 NGC 容器获得开箱即用的 PyTorch 环境5.1 容器方案的优势DGX Spark 最省心的环境配置方式就是使用 NVIDIA NGC 容器。NGC 是 NVIDIA 提供的容器镜像平台里面有专门为深度学习和高性能计算优化过的 PyTorch、TensorFlow、CUDA、cuDNN、NCCL 等组件。使用容器有几个明显好处宿主机不需要手动安装 PyTorch避免平台不兼容。镜像里的 CUDA 和深度学习框架已经经过 NVIDIA 验证。项目环境可以固化换一台 DGX Spark 也能复现。所以后面的实战案例会统一采用容器方式这也是目前 DGX Spark 机器学习环境配置的主流做法。5.2 安装 Docker 与 NVIDIA Container ToolkitDGX Spark 出厂系统一般预装了 Docker 和 NVIDIA Container Toolkit。先检查是否可用docker info | grep -i runtime如果docker不存在先安装 Docker。以 Ubuntu 系系统为例sudo apt update sudo apt install -y docker.io docker-compose-plugin sudo systemctl enable --now docker接着检查 NVIDIA Container Toolkitnvidia-ctk runtime configure --runtimedocker sudo systemctl restart docker这条命令的作用是让 Docker 使用 NVIDIA Container Runtime从而让容器能够访问 GPU。如果nvidia-ctk不存在说明工具包未安装需要根据 NVIDIA 官方文档补齐对应工具包。5.3 拉取并运行 PyTorch 容器确认 runtime 之后拉取一个 PyTorch 容器镜像。NVIDIA 会定期发布新版本标签格式通常是nvcr.io/nvidia/pytorch:版本-py3。下面以某个标签为例具体版本以 NGC 页面为准docker pull nvcr.io/nvidia/pytorch:25.03-py3拉取完成后运行容器并挂载工作目录docker run --gpus all -it --rm \ -v ~/workspace:/workspace \ nvcr.io/nvidia/pytorch:25.03-py3 bash挂载目录的作用是让容器和宿主机共享代码和数据。你可以在宿主机~/workspace下写代码容器内访问/workspace看到同样的文件。进入容器后先验证 PyTorch 是否可以使用 GPUpython -c import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))如果输出True和 GPU 名称说明容器环境已经能够调用 DGX Spark 的 GPU接下来就可以正常训练模型了。6. 完整实战在 DGX Spark 上训练一个图像分类模型6.1 项目结构与数据为了直观验证 DGX Spark 机器学习环境是否配置成功这段实战会在容器里训练一个简单的 CIFAR-10 图像分类模型。CIFAR-10 是经典的图像分类数据集包含 10 个类别每张图片是 32×32 的彩色图像适合用来做环境验证。项目目录结构如下~/workspace/ ├── train.py ├── data/ └── outputs/先创建目录mkdir -p ~/workspace/outputs cd ~/workspace训练脚本会从网络自动下载数据第一次运行需要保持网络畅通。6.2 编写训练脚本在~/workspace/train.py中写入下面的代码。这里用一个简单的卷积神经网络完成图像分类目的是验证“环境能跑通”而不是追求最高精度。# 文件路径~/workspace/train.py import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import DataLoader class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 nn.Conv2d(3, 32, kernel_size3, padding1) self.conv2 nn.Conv2d(32, 64, kernel_size3, padding1) self.pool nn.MaxPool2d(2, 2) self.fc1 nn.Linear(64 * 8 * 8, 256) self.fc2 nn.Linear(256, 10) def forward(self, x): x self.pool(torch.relu(self.conv1(x))) x self.pool(torch.relu(self.conv2(x))) x x.view(x.size(0), -1) x torch.relu(self.fc1(x)) x self.fc2(x) return x def main(): device torch.device(cuda if torch.cuda.is_available() else cpu) print(fUsing device: {device}) transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize( (0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616) ) ]) train_set torchvision.datasets.CIFAR10( root/workspace/data, trainTrue, downloadTrue, transformtransform ) test_set torchvision.datasets.CIFAR10( root/workspace/data, trainFalse, downloadTrue, transformtransform ) train_loader DataLoader( train_set, batch_size64, shuffleTrue, num_workers4 ) test_loader DataLoader( test_set, batch_size64, shuffleFalse, num_workers4 ) model SimpleCNN().to(device) criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr1e-3) for epoch in range(5): model.train() running_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) epoch_loss running_loss / len(train_set) print(fEpoch {epoch 1}/{5} loss: {epoch_loss:.4f}) model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in test_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() print(fTest Accuracy: {100 * correct / total:.2f}%) torch.save(model.state_dict(), /workspace/outputs/simple_cnn_cifar10.pth) print(Model saved.) if __name__ __main__: main()这段脚本的职责很清晰检查当前设备是 GPU 还是 CPU。下载并加载 CIFAR-10 数据集。定义并训练一个简单的 CNN 模型。在测试集上输出准确率。保存模型权重到/workspace/outputs。6.3 在容器中运行训练启动容器并进入容器docker run --gpus all -it --rm \ -v ~/workspace:/workspace \ nvcr.io/nvidia/pytorch:25.03-py3 bash进入容器后执行cd /workspace python train.py第一次运行会先下载数据集下载完成后开始训练。训练过程中会打印每个 epoch 的 loss最后输出测试集准确率和模型保存路径。6.4 结果说明正常情况下你会看到类似下面的输出Using device: cuda Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz ... Epoch 1/5 loss: 1.6842 Epoch 2/5 loss: 1.2721 Epoch 3/5 loss: 1.0210 Epoch 4/5 loss: 0.8424 Epoch 5/5 loss: 0.7119 Test Accuracy: 74.63% Model saved.因为模型结构简单、训练轮数少准确率在 70% 到 75% 之间属于正常范围。关键是只要出现Using device: cuda说明容器已经成功调用了 DGX Spark 的 GPU机器学习环境就是可用的。7. 常见问题与排查思路7.1 常见报错与解决方向问题现象常见原因解决思路nvidia-smi提示 command not found驱动未在 PATH 中或驱动未安装检查/usr/local/cuda/bin确认系统驱动状态容器内torch.cuda.is_available()返回 False容器未使用 GPU runtime运行容器时加上--gpus all重启 Docker安装 PyTorch 后下载了 CPU 版本平台架构或软件源不匹配优先使用 NGC 容器避免直接 pip 安装训练时显存/内存不足batch size 设置过大或并发任务太多调低 batch size减少 num_workersconda 创建环境极慢软件源未配置国内镜像或网络不畅检查网络或配置 conda-forge 镜像Docker 无法拉取镜像网络、DNS、镜像仓库配置问题检查网络连通性使用官方镜像源7.2 关键排查顺序如果环境还是跑不通建议按下面的顺序排查nvidia-smi是否正常。如果这里已经报错后续所有深度学习任务都会失败。docker info是否正常。确认 Docker 服务在运行当前用户有权限。docker run --gpus all能否启动。这是验证 GPU 容器 runtime 的最小命令。容器内torch.cuda.is_available()是否为 True。最后再跑业务训练脚本排除代码层面的问题。这个顺序可以避免把“环境问题”和“代码问题”混在一起。8. 最佳实践与工程建议8.1 优先使用容器固化环境DGX Spark 上最值得养成的习惯是“宿主机尽量少装东西项目依赖尽量容器化”。每次训练项目建议写一个Dockerfile把 Python 依赖、环境变量和启动命令都固化进去。这样不仅换机方便后续排错也能把“环境问题”和“代码问题”快速分开。一个简单的依赖固化思路是在项目目录中维护requirements.txt或environment.yml然后在容器中执行pip install -r requirements.txt8.2 统一数据与输出目录建议把训练数据放到独立目录例如/workspace/data把模型输出放到/workspace/outputs。这样做有三个好处容器内和宿主机通过挂载目录共享文件。重装系统或迁移设备时数据不会随容器丢失。写备份脚本时只需要关注一个主目录。8.3 关注设备散热与运行时长DGX Spark 虽然是桌面级设备但长时间跑训练时依然会产生较多热量。尽量把它放在通风环境不要堆在密闭机柜里。训练大模型时建议通过nvidia-smi周期性观察功耗、温度和内存使用情况。watch -n 5 nvidia-smi如果温度持续过高适当降低训练负载或者测试时使用更小的 batch size。8.4 多机扩展要谨慎如果你有两台 DGX Spark希望做张量并行或者70B级别模型的推理和训练不要一开始就追求多机集群。先把单机的 NGC 容器、PyTorch 训练、NCCL 通信跑通再尝试多机互联。多机并行涉及到高速网络、NCCL 环境变量、分布式数据并行等复杂配置建议在单机验证稳定后再参考官方分布式训练文档逐步扩展。8.5 安全与权限管理不要长期使用 root 用户跑训练。创建专用用户并通过 Docker 用户组管理容器权限。宿主机上的 SSH 密钥要妥善保护避免把私钥提交到 Git 仓库。如果需要开放远程访问只开放必要的端口并设置强密码或使用密钥认证。9. 总结与下一步DGX Spark 的机器学习环境配置核心并不是“在系统上装一个万能 PyTorch”而是建立一套稳定、可复现、容易排错的开发闭环。本文从系统确认、远程开发、Conda 环境、NGC 容器到一个可运行的 CIFAR-10 训练脚本走通了一条完整的配置路径。接下来的学习建议是先用nvidia-smi确认设备状态再通过 NGC 容器跑一次上面的训练脚本然后把你的真实项目依赖写进 Dockerfile。当你的环境已经变成“一条命令可以重建”的状态后再去研究模型微调、张量并行、多机部署这些进阶方向会顺畅很多。希望这份配置指南能让你少踩一些环境坑把更多时间留在模型和业务本身。