今年的 IFA,柏林展馆里最热闹的地方不是那排 8K 电视墙,而是 NVIDIA 展区一台安安静静放在桌面上的小主机。现场工作人员被问得最多的一个问题不是“它的参数是多少”,而是“我们公司的数据不能出内网,这套东西能不能全部在本地跑完”。这个问题背后,正是过去一年里“本地 AI”热度持续升温的真实写照。NVIDIA 在 IFA 2026 上给的答案,也很直接:用 DGX Spark 把 Apache Spark 数据处理、NVIDIA NIM 推理服务和本地模型部署整套链路全部揉进一台桌面级设备里,让 AI 从“云端才能跑”变成“桌面上就能跑”。这篇文章就从这台设备和它背后的生态说起,结合我实际部署中的经验和踩过的坑,聊聊本地 AI 到底该怎么落地。
1. IFA 2026 现场:所有人都在问“能不能不连网跑大模型”
1.1 本地 AI 需求爆发的三个信号
以前我们聊 AI,默认前提就是“得联网”。大模型在云端,数据传上去,结果拿回来。但这两年风向变了,而且变得非常明显。我在展台和几个工程师聊下来,大家的需求基本可以归成三类。
第一类是数据安全与合规。制造业、医疗、金融这几个行业尤其明显,客户的数据别说传上公有云,连离开内网都不允许。以前这类客户只能干瞪眼看别人用大模型,现在他们希望能有一套完全本地化的方案:数据在本地清洗、本地训练、本地推理。第二类是云成本压力。GPU 云实例的价格一直不便宜,而且业务一旦跑起来,推理请求是 7x24 小时的,长此以往账单非常可观。很多团队算过账之后发现,与其每年付几年租金,不如一次性采购一台能放在办公室里的 AI 工作站。第三类是延迟和稳定性。做 AI Agent(智能代理)的人体会最深,Agent 在和用户交互时,每一次工具调用、每一轮推理都需要低延迟响应,网络一抖动整个流程就卡住。本地推理虽然不能完全消除延迟,但至少没有了公网的不可控因素。
1.2 NVIDIA 展台的演示逻辑变了
今年的展台上,NVIDIA 的演示逻辑和往届明显不一样。以前更多是秀参数、秀模型排行榜,这次他们直接搭了一个“本地数据闭环”的演示场景。我印象最深的是一台 DGX Spark 同时跑着三件事:一个 RAG 知识库问答系统,一个视觉识别任务,还有一个基于 Apache Spark 的日志数据处理作业。整个过程全程断网运行,工作人员还特意把网线拔掉给大家看效果。
这种演示方式的转变其实很能说明问题。AI 要真正进入企业生产环境,不能永远活在云端 Demo 里。过去本地部署大模型是极客玩家的玩具,需要自己折腾 CUDA、驱动、内存优化,现在 NVIDIA 想做的事情,是把这套东西变成像服务器一样“插上电就能用”的基础设施。DGX Spark 就是这种思路下的产物。
1.3 “Spark 迸发”这个说法到底指什么
标题里的“Spark 迸发”,我理解有两层含义。表面上看,“Spark”指的是 DGX Spark 这个产品名;更深一层,它其实指向 Apache Spark 这个大数据生态。NVIDIA 这次特别强调了 DGX Spark 对 Apache Spark 的集成和加速,这可不是简单的“蹭个名字”。
在数据工程领域,Apache Spark 几乎是离线数据处理的事实标准。过去我们的工作流是:Spark 在 CPU 集群上做数据清洗和聚合,然后把结果导出,再调用远程的大模型 API 做分析。这个过程又慢又割裂。DGX Spark 的思路则是把数据处理和模型推理放在同一台机器上,数据不用到处拷贝,Spark 作业可以直接用 GPU 加速,数据准备好之后立刻喂给本地模型。数据处理和 AI 推理的这层“窗户纸”,算是被 NVIDIA 捅破了。这也是我觉得“迸发”这个词用得挺妙的原因:本地 AI 真正的爆发点,恰恰是当它和数据处理生态融合在一起的时候。
2. DGX Spark 拆解:GB10、128GB 统一内存与 2000 亿参数的本地容量
2.1 一台真正的桌面级 AI 工作站
先聊聊硬件。DGX Spark 的核心是 GB10 Grace Blackwell 超级芯片,它把 Grace CPU 和 Blackwell GPU 整合在一个封装里,整体功耗控制在普通插座就能带的水平,但 AI 算力标称接近 1000 TOPS(FP4 精度)。这种精度规格非常适合大模型的推理场景。
最让我关注的是 128GB 的统一内存。这颗芯片的 CPU 和 GPU 共享同一块内存池,模型权重、KV Cache、中间激活值都不需要像传统架构那样在“显存-内存”之间来回搬运。官方说的是支持本地运行 2000 亿参数级别的模型,比如那些开源社区的千亿级 MoE 模型,在消费级显卡上根本塞不进去,但在这台机器上是能跑起来的。它还预留了网络扩展能力,两台设备可以互联组成更大规模的推理集群,这个后面讲选型的时候再展开。
2.2 统一内存为什么是本地 AI 的关键
很多人不理解统一内存的价值,我打个比方。传统计算机体系里,CPU 有自己的内存,GPU 有自己的显存,数据要先从硬盘到内存,再从内存拷贝到显存,遇到超大模型还得考虑显存放不放得下,放不下就得分片、调度、交换。这就像仓库和生产车间分离,每次生产都要先把原料运过去,运输过程又慢又费能源。
统一内存相当于把仓库和生产车间合并了。CPU 和 GPU 都能直接访问同一块内存,模型加载时间大幅缩短,长上下文场景下的 KV Cache 也基本不用愁。当然,统一内存的带宽和独立显存相比还是有差距的,不适合那种极度追求吞吐的高并发场景,但它的容量优势太明显了,对大模型推理来说,容量往往比带宽更先成为瓶颈。这就像一辆货车虽然时速不如跑车,但能装更多货,对于运大件货物这件事,货车才是正确的选择。
2.3 算力账:长期推理和微调,云上还是本地?
现场很多人问价格,但我觉得单纯比“一台机器多少钱”没有意义,应该算总账。我们做一个简单的对比,假设一个团队需要长期运行一个 70B 级别的模型服务,每天推理请求量很大,一个月如果租云上高端 GPU 实例,账单通常是大几千甚至上万。一年下来就是十万级别。如果这个团队还要做微调、反复实验,费用还要翻番。
DGX Spark 这类设备的意义在于:一次性采购成本远低于一年的云账单,而且数据不需要出内网,也没有多租户排队的问题,团队成员可以随时调试。它不适合什么场景?短期弹性需求、超大规模集群训练、突发性极强的负载,这些还是用云更划算。但只要是“长期、持续、涉及敏感数据”的 AI 工作负载,本地化的设备几乎一定能在一年到一年半之内回本。这笔账算清楚之后,很多团队会发现:不是不需要本地算力,而是以前没有合适的本地算力设备可选。
3. 和 Apache Spark 绑在一起,才是 NVIDIA 真正的后手
3.1 DGX Spark 里的 Spark 不只是产品名
为什么我会强调 Apache Spark 的集成是“后手”?因为大模型部署只是解决“模型在哪里跑”的问题,而企业在实际生产中更痛的问题是“数据在哪里处理”。很多企业的数据工程链路已经高度依赖 Spark 生态:PySpark、Spark SQL、DataFrame API,积累了大量的历史作业。如果本地 AI 平台不能兼容这套生态,工程师就不得不在两套技术栈之间反复横跳。
NVIDIA 的做法很务实,它把 GPU 加速能力接入了开源 Spark 生态,Scheduler 可以感知 GPU 资源,Spark 作业能够把 ETL 阶段的计算卸载到 GPU 上。数据在本地处理完,直接再由本地推理服务消费,整个链路完全在 DGX Spark 内部闭环。这套组合拳的本质,是把大数据处理和 AI 推理两个团队的工作流合并成了一条流水线。对于已经有 Spark 使用经验的团队来说,迁移成本很低,这是它真正的竞争优势。
3.2 一个真实的数据管道:日志清洗 + 模型研判
我举个实际例子,大家更容易理解。假设我们现在有大量系统日志,需要每天分析其中出现的异常错误码,并且给出初步的故障研判建议。传统做法是:用 Spark 跑 ETL,统计出错频率最高的错误码,然后人工去查文档、写报告。
在 DGX Spark 架构下,流程可以变成这样:Spark 定时读取日志 -> 过滤出 ERROR 级别条目 -> 聚合成错误码和频率统计 -> 把高频错误码列表直接发给本地模型 -> 模型根据错误码上下文输出研判结论 -> 结果写回数仓。全程数据不外传,而且因为推理服务就在本机,延迟低到几乎可以实时处理,即使几千个错误码排队分析,也能在几分钟内跑完。我在后面的实战章节会给出一份可以跑的示例代码。
3.3 国产环境下的 Spark 适配现实
国内这边的落地有一个绕不开的现实:很多政企和大型国企的底层环境不是开箱即用的标准 Hadoop 发行版,而是要和国产数据库、国产操作系统做适配。比如有人就在做达梦数据库和 Apache Spark 的适配集成,让 Spark 作业可以直接读写达梦的数据表。
这类需求在以前很让人头疼,因为适配工作量通常不在模型本身,而在数据源这一层。但换一个角度看,本地 AI 设备的出现反而降低了适配难度:当数据不需要上传到外部平台、所有处理都在本地完成时,数据源适配变成了纯粹的工程问题,不再涉及跨网络的传输链路。NVIDIA 这次强调 Spark 生态,其实也是看准了企业客户“本地化、内网化”的普遍诉求。
4. 本地部署绕不开的中间层:驱动、CUDA 和 NIM 容器
4.1 Ubuntu 22.04 上安装与卸载 NVIDIA 驱动的正确姿势
不管前面这些理念讲得多好,真到了部署阶段,第一个拦路虎永远是驱动。我自己的开发环境是 Ubuntu 22.04,下面这套流程是我反复验证过的,先卸载可能存在的旧驱动,再装新驱动。
如果你是从头装,最简单的方式是通过 apt 装官方驱动:
sudo apt update sudo apt install nvidia-driver-550 sudo reboot但很多人的机器之前已经装过各种版本,装新驱动时报错“an nvidia kernel module 'nvidia-uvm' appears to be already loaded in your kernel”这类信息,就是典型的旧驱动没清干净。正确的清理姿势是先卸载再装:
# 停止所有使用 GPU 的服务,然后卸载 sudo nvidia-uninstall sudo apt purge nvidia-* sudo apt autoremove # 清理残留的内核模块 lsmod | grep nvidia sudo rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia清理完再重新安装驱动就比较顺利了。验证是否安装成功,直接执行nvidia-smi,能正常输出 GPU 信息表就算成功。如果执行 nvidia-smi 提示找不到命令,大概率是驱动没装上,或者 PATH 环境变量的问题,可以用/usr/bin/nvidia-smi确认。
4.2 NIM 把开源模型封装成了标准 API
驱动装完了,接下来是推理服务。直接裸跑开源模型的体验其实很差,权重格式要转、量化参数要调、并发要自己管,一套下来没几天搞不定。NVIDIA NIM 解决的正是这个问题。它把模型、推理引擎、运行时依赖全部打包进一个容器,对外提供 OpenAI 兼容的 API,业务代码可以用最熟悉的方式调用。
部署 NIM 的基本流程是:注册 NGC 账号拿到 API Key,然后用 Docker 拉取对应模型的 NIM 容器。比如启动一个大语言模型:
export NGC_API_KEY=你的NGC密钥 docker run -d --gpus all \ --name nim-llama \ -p 8000:8000 \ -e NGC_API_KEY \ nvcr.io/nim/meta/llama3-8b-instruct:latest启动之后,你的服务地址就是http://127.0.0.1:8000/v1。这和我们之前调用云端 OpenAI 接口没什么区别,只是地址从公网变成了本机。现在很多基于 Agent 的开源框架(比如某些机器人控制框架、自动化工作流工具)都支持配置自定义的模型服务地址,把 Base URL 指向 NIM 的 8000 端口,就能把“云端大模型”替换成“本地大模型”。这个思路对所有做 AI Agent 的开发者来说都是一条非常顺滑的迁移路径。
4.3 那个总被问到的 DXC 缓存目录
还有一个小问题被反复问到:Windows 或者应用目录下有一个C:\Users\<用户名>\AppData\Local\NVIDIA\DXCache,占了好几个 GB,能不能删?这个是 NVIDIA 驱动的着色器缓存目录,记录了应用程序编译过的 DX 着色器,目的是让游戏和应用在二次启动时不用重新编译。删掉它不会出问题,但下次启动应用时会重新编译一次,显得慢一些。如果你的磁盘空间紧张,可以放心清理;如果不紧张,留着也没坏处。这类问题看着不起眼,但在部署环境的时候,经常有人因为磁盘满了排查半天,先把这个目录清掉往往能解决一部分空间告警。
5. 性能卡脖子排查:Spark on YARN 的 CPU、内存和 GPU 不可见问题
5.1 每个容器只给 1 个 vCPU,谁的锅?
本地 AI 设备上跑数据管道,最典型也最让人抓狂的报错,就是 Spark on YARN 每个容器只分配 1 个 vCPU,任务排队排到天荒地老。这个问题的根源,绝大部分是资源参数配置不匹配。
YARN 的调度器分配资源时,遵循的是“最小分配单元”规则。如果你的yarn.scheduler.minimum-allocation-vcores设置得很高,而spark.executor.cores设置得很小,最终申请会被迫向上取整;反过来,如果节点总核数没有正确上报给 YARN,每个容器能拿到的核数自然就少得可怜。排查链路是这样:先看yarn.nodemanager.resource.cpu-vcores,它的值应该等于节点物理核数;再检查spark.executor.cores,这个值决定了每个执行器要几个核;最后确认spark.executor.memory和spark.executor.cores不会因为不匹配而互相限制。
一个相对稳妥的配置示例:
spark-submit \ --master yarn \ --deploy-mode cluster \ --executor-cores 4 \ --executor-memory 8g \ --num-executors 4 \ --driver-memory 4g同时在 YARN 配置文件中确保:
<property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>32</value> </property> <property> <name>yarn.scheduler.minimum-allocation-vcores</name> <value>1</value> </property> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>32</value> </property>大多数“只能用一个 CPU”的问题,改完这两处配置再重启 YARN 就好了。别急着怀疑代码,先把资源管理器的账算清楚。
5.2 Spark 内存模型里最容易被忽略的两个参数
如果说 vCPU 的问题是“跑不快”,那内存问题就是“直接挂掉”。Spark 的内存模型里,有两个参数非常容易踩坑。
第一个是spark.executor.memory,这是 JVM 堆内内存,Spark 的算子计算、Shuffle、缓存都在这部分内存里进行;第二个是spark.executor.memoryOverhead,这是堆外内存,用来给 JVM 之外的进程开销(比如 Python 进程、网络缓冲区、Native 库)预留空间。很多人只设置了前者,忘了后者,结果在跑 PySpark 时容器被 YARN 杀掉,错误信息往往很隐晦,站在运维视角根本看不出来。
更细一层,堆内内存又分为执行内存和存储内存,由spark.memory.fraction(默认约 0.6)控制,剩下部分是留给用户代码的。而执行内存和存储内存之间的比例由spark.memory.storageFraction决定。如果数据集很大,缓存占用过多,执行内存不够,就会频繁 GC。我比较推荐的习惯是先给足 memoryOverhead(PySpark 作业尤其重要,通常至少 2g-4g),再调整执行和存储的比例,而不是一上来就盲目调大堆内内存。
5.3 Docker 里执行 nvidia-smi 报错怎么办
还有一个高发问题:宿主机上nvidia-smi一切正常,但进入 Docker 容器后执行nvidia-smi却报“could not select device driver with capabilities: gpu”。这个问题的原因不是驱动坏了,而是 Docker 默认运行时不知道如何把 GPU 设备映射进容器。
解决方法是安装 NVIDIA Container Toolkit:
sudo apt install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker然后在启动容器时显式声明使用 GPU:
docker run --gpus all -it nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi如果能看到 GPU 信息,说明运行时配置成功。NIM 容器、PySpark 的 GPU 调度、还有各种本地 AI 框架,凡是遇到“容器里看不到 GPU”,第一步都先检查这一项。这个问题在第一次部署时几乎是必踩的,提前知道能省半天时间。
6. 从 Jetson Orin 到 DGX Spark:本地 AI 硬件的选型梯度
6.1 不同硬件档位的真实定位
还有一个热点问题:本地 AI 到底该买什么设备?这个问题的答案完全取决于你的应用场景,不存在“最强”的硬件,只有“最合适”的硬件。
普通 PC 加消费级显卡(比如 RTX 4060 到 4090 这个区间)适合入门,跑 7B 到 14B 的模型没问题,显存 16GB 以上能勉强跑量化过的 70B 模型,但速度会比较感人。再往上就是专业的本地 AI 工作站(DGX Spark 这一类),适合几十人团队共享、数据管道和推理一体化的场景。再往下,还有 Jetson Orin 这样的边缘设备,功耗只有几十瓦,适合部署在机器人、边缘盒子和生产现场,做端侧推理。
手机上其实也能本地部署 AI,但通常只能跑 3B 以下的小模型,配合端侧的 STT/TTS 做语音助手、离线翻译这种任务。热词里有人搜“手机本地部署 AI”,我的建议是:先把模型和框架(比如 MNN、ExecuTorch)跑通,再考虑实际体验。手机本地 AI 的价值不在跑大模型,而在于低延迟和离线可用,比如在小智 AI 这类语音助手里集成本地 STT/TTS,让语音交互不依赖网络。
6.2 Jetson Orin NX 刷机踩坑记录
很多人在 Jetson 系列上刷机翻过车,我也一样。Orin NX 模组的刷机流程是:下载 JetPack、连接设备、进入 Recovery 模式、用 SDK Manager 或命令行工具烧写。我踩过的坑主要有三个。
第一个是供电不足。Orin NX 的载板对电源要求比较苛刻,刷机过程中一旦电流不稳,USB 连接就可能中断,烧写直接失败。用官方电源或者电流足够的稳压电源,别图省事用劣质适配器。第二个是 Recovery 模式进入失败。正确做法是先按住模组上的 Recovery 按键,再上电,然后通过 USB-C 连接主机。很多人顺序搞反了,导致设备根本没进入烧写状态。第三个是 SDK Manager 下载中断。JetPack 组件很大,网络波动就可能失败,好在 SDK Manager 支持断点续传,但有时候它会卡在某个组件不动,这时候关掉重开一次,路径尽量用默认的,别改到中文目录。
刷完第一件事是装上 jetson-stats 查看运行状态,确认散热和功耗策略是否合理:
sudo pip install jetson-stats sudo jtop6.3 按应用场景怎么选,给一张参考表
我把常见的本地 AI 场景和推荐硬件整理成一张表,方便对照:
| 应用场景 | 推荐硬件 | 理由 |
|---|---|---|
| 个人学习、跑 7B-14B 模型 | 普通 PC + RTX 4060/4070 | 成本低,生态成熟 |
| 本地 AI 绘画、图文创作 | RTX 4090 或更高显存显卡 | 图像模型对显存带宽敏感 |
| 团队共享的 RAG/知识库 | DGX Spark 级别 | 128GB 统一内存,可跑 200B 模型 |
| 边缘设备实时推理 | Jetson Orin NX / AGX Orin | 功耗低,适合生产现场 |
| 本地 AI 短剧内容生成 | DGX Spark 或大显存工作站 | 视频模型需要大内存,本地批量生成不依赖 API |
| 手机端离线语音助手 | 中高端手机 + 端侧小模型 | 3B 以下模型即可,主打低延迟 |
特别说一句“本地 AI 短剧”这个场景,制作过程中涉及剧本生成、分镜设计、画面生成、配音等多个环节。剧本和分镜文本用 14B 左右的模型就够;画面和视频生成是真正吃资源的部分,SD 系列的图像类任务需要大显存,视频类模型既需要算力又需要内存,DGX Spark 的 128GB 统一内存在这类场景下对比消费级显卡有明显优势。
7. 实战:把 Spark 数据管道和一个本地 AI 代理串起来
7.1 架构和设计思路
前面讲了那么多底层原理,最后来一个可以直接参考的实战链路。目标很明确:用 Spark 处理一批日志,把高频错误码提取出来,然后调用本地 NIM 服务让模型给出故障研判,最后结果落盘。
整个架构非常简单:Spark 负责“数据准备”,NIM 负责“智能分析”,两者通过 HTTP 在本机通信。为什么不直接用 Python 读文件再调模型?因为日志量一旦大了,单机处理效率不够,Spark 的优势在于分布式数据清理、聚合、去重,而且后续如果数据量继续增长,同一份代码可以从单机平滑扩展到集群。把数据管道和模型放在同一台物理设备上,省去了导出数据集再上传的环节,端到端延迟可以控制在很低的水平。
7.2 手写一个可运行的 PySpark 示例
假设日志文件是 CSV 格式,字段包括时间戳、级别、错误码、详情。第一步用 Spark 统计高频错误码:
from pyspark.sql import SparkSession import requests import pandas as pd spark = SparkSession.builder \ .appName("local_ai_inference_demo") \ .getOrCreate() logs = spark.read.csv("logs/", header=True, inferSchema=True) logs.createOrReplaceTempView("logs") error_stats = spark.sql(""" SELECT error_code, count(*) AS cnt FROM logs WHERE level = 'ERROR' GROUP BY error_code ORDER BY cnt DESC LIMIT 50 """)第二步,把统计结果转成列表,调用本地 NIM 服务做研判。这里的关键是本地模型接口和 OpenAI Chat Completions 完全兼容,所以可以直接用 requests 调用:
def analyze_with_local_model(error_code, count): prompt = ( f"系统日志中出现错误码 {error_code},出现次数 {count} 次。" "请根据错误码特征给出可能的故障原因和排查建议,要求简洁。" ) resp = requests.post( "http://127.0.0.1:8000/v1/chat/completions", json={ "model": "llama3-8b-instruct", "messages": [ {"role": "system", "content": "你是资深运维工程师。"}, {"role": "user", "content": prompt} ], "temperature": 0.3 }, timeout=30 ) return resp.json()["choices"][0]["message"]["content"] error_pd = error_stats.toPandas() error_pd["suggestion"] = error_pd.apply( lambda row: analyze_with_local_model(row["error_code"], row["cnt"]), axis=1 ) error_pd.to_csv("analysis_result.csv", index=False)注意一个工程细节:上面的写法是串行调用模型接口,错误码数量少时完全没问题,但如果要处理成千上万个错误码,建议把模型服务做成批处理接口,或者用 Spark 的 pandas UDF 配合并发请求。实践中,本地推理服务的吞吐量才是瓶颈,Spark 端的处理速度反而很快。
7.3 实测中的资源瓶颈与调优
这套链路我在调试过程中遇到两个比较典型的问题,分享出来帮大家少走弯路。
第一个是容器内存不足。Spark Executor 的 JVM 加上 Python 子进程,内存很容易就冲破 YARN 容器限制,触发 OOM Kill。解决办法是把spark.executor.memoryOverhead调大,我用的是 4g,同时减小spark.executor.cores,让每个节点上的 Executor 数量别太多。
第二个是模型并发能力不足。NIM 容器默认的并发配置偏保守,当 Spark 端并发请求上来后,会出现排队等待。这时候你会看到 GPU 利用率不高,但请求响应时间却很长。解决办法是调整 NIM 服务的最大并发数参数,或者直接启动多个 NIM 副本,让它们分别监听不同端口,然后在业务侧做简单的轮询策略。
调优完以后,我建议默认打开 nvidia-smi 的实时监控,观察显存和 GPU 利用率。正常状态下,模型推理阶段 GPU 利用率应该在 90% 以上;如果看到 GPU 利用率很低而 CPU 跑满,说明你的数据管道才是瓶颈,优化重点不在模型侧,而在 Spark 的分区和并行度设置上。这套“先看监控、再定位瓶颈、最后改参数”的思路,比盲目调参靠谱得多。
最后再分享一点我的个人感受。本地 AI 这个事,过去最难的不是模型本身,而是模型之外那一大堆环境问题:驱动、容器、资源调度、选型。NVIDIA 今年在 IFA 上的这一套组合,本质上是在把这些杂活标准化。但作为从业者,我的建议一直是:别急着花钱上高性能设备,先用一台普通 PC,把 Spark 数据管道、NIM 服务、Agent 框架这套软件链路完整跑通,真正理解了数据流转和资源消耗的规律之后,再决定要不要升级到 DGX Spark 这个档次。软件链路的价值永远大于硬件参数的堆砌,把这条路走通之后,硬件升级只是换个更大的容器而已。