最近拿到一台 DGX Spark第一件事就是装 ComfyUI。原本以为这种整合度很高的 AI 小工作站装开源工具时应该很省事实际折腾下来发现容易走弯路的地方不在硬件跑不起来而在软件栈没对齐。这篇记录我把 ComfyUI 从空机装到能正常出图的全过程包括环境准备、依赖安装、模型目录规划、启动参数调优和几个典型坑。适合手上有 DGX Spark 这类设备的同学也适合在普通 Linux 服务器上部署 ComfyUI 的人参考。1. 装机前的思路拆解先理解这台设备的特殊之处1.1 先搞清楚这是一台什么样的机器在敲命令之前我先花了不少时间确认这台设备的状态。DGX Spark 这类设备不是给普通桌面玩家准备的它最大的特点就是内存和显存共用一套物理内存因此在“显存不够”这件事上它比普通显卡机器要宽松很多。但另一方面它内部集成的 GPU 架构和驱动栈与普通游戏卡不同装开源 AI 项目时最典型的失败原因就是驱动、CUDA、深度学习框架三者版本不匹配。设备出厂时通常已经有一套经过验证的系统环境包括厂商定制的驱动和一部分常用工具。很多人一上来就手动装新驱动、改环境变量反而容易把基础搞乱。我的建议是先尽量沿用出厂环境只有在 ComfyUI 真正跑不动时才去动驱动。机器到手后我第一个看的命令是 GPU 状态检查命令也就是nvidia-smi目的是确认基础驱动是否已经在工作。如果输出正常后面装环境就能省掉很多麻烦。补充一点在 DGX Spark 上跑 ComfyUI虽然显存不再是传统意义上的瓶颈但内存带宽仍然会影响大模型的加载和采样速度。所以后面所有关于模型缓存、目录规划的建议本质上都是在优化内存访问路径。1.2 ComfyUI 不是普通应用依赖逻辑要提前理解ComfyUI 的安装方式和其他 AI 绘图工具不太一样。它没有官方一键安装的作品更没有专门的安装向导。主流的做法是把整个开源仓库 clone 到本地再用 Python 虚拟环境安装依赖文件里的包。这个流程本身不复杂复杂的是它的运行依赖。ComfyUI 的底层必须调用一个能识别 GPU 的深度学习框架而不是 CPU 版本。如果你安装时不小心装成 CPU 版本表面上也能启动但加载任何模型都会慢到无法接受甚至一拉进度条就卡住。所以整个安装流程的核心问题只有一个让 Python 环境里的深度学习框架能够正确调用这台机器的 GPU。后面所有步骤不管是创建虚拟环境、选择安装源还是验证torch.cuda.is_available()本质上都是围绕这件事展开。另外还需要注意ComfyUI 定制的依赖文件里包含很多小工具包这些包互相之间可能存在版本要求。直接用全局 Python 很容易出现“装好了这个又破坏了另一个”的局面。这也是我坚持用虚拟环境的原因。1.3 列出安装需要的环境清单动手前我习惯把需要准备的东西列成一张清单。下面的表格可以直接照抄结合自己的设备情况核对。项目建议值用途系统环境干净的 Linux 发行版或出厂系统提供驱动与基础库GPU 驱动保持出厂版本不要随意升级确保计算框架可见Python3.10 或 3.11虚拟环境基础磁盘空间至少预留 50GBComfyUI 本体和模型网络能访问开源代码托管平台与下载源clone 仓库、装依赖模型文件准备一个基础模型放入 checkpoints验证全链路出图列表里最容易忽视的是磁盘空间。ComfyUI 本体可能只有几百 MB但模型文件通常是好几个 GB一个完整的工作流如果带上多个控制网络和风格模型占用很容易超过 20GB。如果机器系统盘不大最好提前规划一个独立的数据目录或者用一块外置硬盘专门放模型。这一步不做后面模型下载很快就可能把盘塞满。至于网络访问只要保证能正常访问开源平台和下载源即可。如果你所在网络有严格限制下载包时大概率会卡在超时上这时候可以优先使用镜像站或离线包方案但这属于另一个话题。2. 环境配置与依赖安装把基础打好2.1 检查系统与 GPU 状态进入终端后我先执行了三个命令sudo nvidia-smi python3 --version cat /etc/os-releasesudo nvidia-smi输出里通常能看到驱动版本、GPU 名称、当前占用情况。如果提示找不到命令大概率是驱动没有正确安装这时候需要先安装驱动。不同发行版的安装方式不一样建议优先使用系统自带的驱动管理工具不要从第三方下载 runfile 安装否则后续升级内核时很容易出现驱动不匹配。python3 --version用于确认 Python 版本。ComfyUI 对新版本 Python 的适配有时会慢半拍如果系统默认是 3.12 或更新我会通过ls /usr/bin/python3*看看有没有 3.11 可用。cat /etc/os-release则是了解当前发行版后面如果要用包管理器装一些系统库这一步就重要了。需要特别提醒的是如果你看到nvidia-smi输出正常但后面 Python 深度学习框架还是识别不到 GPU问题往往不是驱动而是后端的“计算接口”版本没对上。这时候不要急着重装驱动先回到 2.3 节的安装源选择重新排查。2.2 创建独立的 Python 虚拟环境我强烈建议不要直接在系统 Python 里装 ComfyUI 的依赖。系统环境会积累很多不相关的包而 ComfyUI 的依赖版本要求往往比较细装的时候很容易因为一个旧包的存在产生冲突。虚拟环境把项目隔离在一个独立目录里之后不管是重装还是删除都不会影响系统整体稳定。使用 Python 自带的 venv 模块就够了不需要额外装工具。cd ~ python3 -m venv comfyui-env source comfyui-env/bin/activate这条命令会在当前用户的 home 目录下创建一个名为comfyui-env的虚拟环境目录。激活后终端提示符前面会出现(comfyui-env)并且接下来的pip install都会装到这个环境里而不是全局环境。这里有一个小细节如果你的系统默认 Python 版本高于 3.11而你想用 3.11 创建环境可以写成python3.11 -m venv comfyui-env。逻辑是一样的只是指定了解释器路径。虚拟环境创建完成后我还习惯性执行一次pip install --upgrade pip。因为有些旧版本的 pip 在解析依赖时会漏掉某些新版本包的元数据导致安装时报奇怪的错误。先升级 pip 能减少这种情况。2.3 安装与驱动匹配的 GPU 版深度学习框架进入虚拟环境后最重要的一条命令是安装深度学习框架。我没有直接执行pip install torch因为这样做可能装到 CPU 版或者装到一个默认版本导致后续启动时无法识别 GPU。正确的做法是根据前面的驱动版本选择一个带 CUDA 支持的安装源。pip install torch torchvision torchaudio --index-url 深度学习框架官方对应CUDA版本的whl源这里的深度学习框架官方对应CUDA版本的whl源需要替换成实际地址。具体选择方法是在官方页面查看支持 CUDA 的版本列表比如常见的有基于 CUDA 12 或 CUDA 11.8 的版本。如果驱动版本足够新一般选更高的 CUDA 版本没有太大问题。但如果拿不准我建议选稍低一档驱动向下兼容性通常更好能少踩一些坑。安装完成后运行这样一段验证代码非常重要python -c import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))输出第一行是True第二行能看到设备名称说明深度学习环境已经正确对齐。如果第一行是False先别急着继续装 ComfyUI。此时问题基本集中在安装源选错了或安装过程中有旧版 torch 残留。先解决这个不然后续排查会非常困难。2.4 依赖安装顺序的补充说明ComfyUI 的requirements.txt中包含的依赖数量不算少但大部分是常用的图像处理库比如 Pillow、NumPy、safetensors 等。如果按照一般顺序pip install -r requirements.txt这些包会被一次装完。过程一般很顺利但如果遇到个别包编译失败我习惯先单独安装可能缺失的系统依赖比如图像格式库和编译工具。这里要注意一个被很多人忽略的点不要在同一个虚拟环境里反复安装不同版本的深度学习框架。我之前见过有人因为启动报错反复执行pip install torch某个版本最终把环境改得乱七八糟。建议的做法是确定一个能用的版本记录在文本文件里后续如果需要重装直接按记录还原。深度学习环境的坑很多都是“手贱”折腾出来的。环境基础打完后你可以在虚拟环境里启动 Python 并导入 torch 确认没有问题。接下来就可以进入 ComfyUI 本体的安装了。3. 下载并配置 ComfyUI核心安装过程3.1 获取项目源码环境的底子打好之后进入安装本体。第一步是拿到 ComfyUI 源码。我在工作目录里执行git clone ComfyUI官方仓库地址 cd ComfyUI仓库地址很容易在开源平台上找到搜索 ComfyUI 即可。如果你对命令行不熟也可以直接用浏览器把源码压缩包下载下来再传到机器上但那样后续更新会比较麻烦。所以我更推荐用 git后续拉取新版本只需在项目目录里执行git pull省掉重新下载的麻烦。克隆完成后进入文件夹确认里面存在main.py、requirements.txt等关键文件。如果只有一些说明文件很可能拿错了仓库。ComfyUI 的源码结构比较清晰main.py是启动入口custom_nodes是自定义节点目录models目录用来放各种模型文件。整个项目第一次看起来有点复杂但真正需要关心的其实只有这几个模块。3.2 安装项目依赖在 ComfyUI 项目根目录下执行pip install -r requirements.txt这一步会把运行需要的依赖全部装进当前虚拟环境。由于前面已经装好了 GPU 版深度学习框架这里安装的依赖不会重复覆盖它。如果你在安装过程中看到类似“已经存在”的提示不用紧张pip 会跳过已经满足条件的包。如果出错了建议看最后一两行报错信息而不是把整个安装过程重新跑一遍。装完依赖后我通常不会立刻启动而是先准备模型目录。因为首次启动如果没有模型界面上会空空如也你没法验证任何工作流。准备模型目录看似简单但关系到后面下载模型时是否放对位置。放错位置是最常见的低级错误排查起来却特别浪费时间。3.3 规划模型目录ComfyUI 默认在项目根目录下使用一个models文件夹。里面不同子目录存放不同类型的模型。打开 ComfyUI 的模型目录你会发现常见的子目录基本固定。我一般会提前手工建立下面这些mkdir -p models/checkpoints models/loras models/vae models/controlnet models/embeddingscheckpoints放完整的模型文件也就是出图最核心的大模型。loras放风格化的小模型可以在工作流中叠加。vae放单独的 VAE 文件负责图像解码。controlnet放条件控制模型比如控制轮廓、姿态等。embeddings放文本嵌入用于特定提示词风格调节。如果你的模型存放位置和 ComfyUI 不在同一个目录也不需要复制过去。用软链接把外部目录链接到 models 子目录即可。比如模型存放在/data/models/checkpoints那么可以执行ln -s /data/models/checkpoints /你的ComfyUI路径/models/checkpoints这样做的好处是系统盘不会被大文件占满而且当你以后升级或重装 ComfyUI 时模型仍然留在数据盘上不需要重新下载。3.4 首次启动与访问验证模型目录准备完后放一个基础模型进去。基础模型可以从模型托管平台下载下载后放在models/checkpoints目录下。然后启动 ComfyUIpython main.py --listen 0.0.0.0 --port 8188启动日志中会出现服务地址通常是http://127.0.0.1:8188。本机打开这个地址就可以看到工作台界面。如果你是从局域网内另一台电脑访问就要把地址替换成 DGX Spark 的实际 IP。--listen 0.0.0.0参数是允许所有网络接口接入不加这个参数时服务只会对本机可见远程访问会失败。--port 8188是默认端口如果这个端口被别的服务占用可以改成比如 8288 或者其他空闲端口访问时也要跟着改。首次启动时浏览器会先加载前端资源。如果页面能正常显示节点列表和空画布说明服务本身已经起来了。接下来可以拖入一个最简单的加载模型节点选好模型尝试跑一次完整出图。只有实际出图了安装才算是真正完成。4. 关键优化让 ComfyUI 跑得更顺畅4.1 启动参数与显存策略默认启动对大多数场景够用但如果你希望生成速度更高、体验更顺畅可以了解几个启动参数。ComfyUI 会根据设备当前可用性能自动调整加载策略但自动判断并不一定完美。--gpu-only参数让所有模型都优先放在计算侧--lowvram则把模型分批加载适合可用显存较小的设备--highvram尽量把更多模型常驻在显存里减少重复加载。对于 DGX Spark 这种统一内存架构的设备我会优先尝试--gpu-only。因为多轮生成时模型如果反复在 GPU 侧和内存侧搬运速度会明显下降。启动命令大概是python main.py --listen 0.0.0.0 --port 8188 --gpu-only如果后来遇到内存不足的报错再把--gpu-only去掉或者改成--lowvram。这类参数没有绝对正确答案设备不同、工作流不同最优设置也不一样。多试几次你就能找到适合自己工作负载的组合。另外在运行过程中可以用sudo nvidia-smi实时查看设备占用率和内存占用。如果发现某个节点的计算接近满载说明瓶颈在那里如果内存占用很高但计算率不高则可能是数据搬运占了主要时间可以考虑调整模型放置策略。4.2 模型缓存与第一次加载速度很多人在首次加载模型时会等很久才出现进度。这通常不是设备性能问题而是模型文件本身较大需要读取、解析并送入计算单元。如果模型放在机械硬盘或者缓慢的网络盘上加载速度会非常难看。所以我建议把常用模型放在 SSD 上这也是为什么前面强调软链接时尽量指向高速存储。ComfyUI 自己会对模型做缓存同一个模型在同一个进程内反复加载时不会重新读盘。这个机制不用额外配置对多张连续出图的场景帮助很大。但长时间运行时内存占用会逐渐升高偶尔出现奇怪的加载失败。遇到这种情况我先会重启服务。重启之后内存释放很多“疑难杂症”会自然消失。不要一遇到问题就重装环境很多问题只是运行状态变脏了。4.3 远程访问与安全策略如果要把这台设备当作团队共享的生成服务器可以让服务常驻运行并允许局域网访问。不过默认的 ComfyUI 服务没有任何鉴权意味着局域网里任何人都能打开页面并调用模型。为了让接口不被随意调用我建议在启动命令里加一个访问令牌python main.py --listen 0.0.0.0 --port 8188 --gpu-only --api-token 你的随机字符串加了令牌后浏览器访问时需要输入正确令牌才能打开界面。这样至少能挡住随意访问的人。如果一定要跨公网访问建议通过已有安全网关或内网穿透类工具来暴露服务不要在公网上直接裸奔。生成服务没有鉴权就暴露公网风险非常大这一点一定要重视。4.4 自定义节点管理ComfyUI 的核心能力很大一部分来自自定义节点。官方原生界面已经支持很多功能但如果你想用更丰富的控制网络、批量工作流等就需要安装节点插件。我强烈建议装一个社区通用的自定义节点管理器。具体做法是进入custom_nodes目录把管理器项目 clone 下来然后重启服务。启动后界面右侧通常会出现一个 “Manager” 菜单。里面可以搜索、安装、更新节点也可以一键修复部分依赖问题。这个管理器几乎成了 ComfyUI 生态的标配没装它很多操作只能手动去改文件。我踩过的经验是不要一次安装一大堆没见过的节点。很多节点之间存在重复功能还会互相抢依赖。装多了之后启动时插件冲突会让界面卡很久定位问题也很痛苦。我习惯一次只装真正需要的节点装完立刻重启测试确认后再继续装下一个。千万不要图省事批量安装。5. 常见问题与排查实录5.1 依赖冲突导致无法启动表现是执行python main.py后立即出现ModuleNotFoundError或ImportError。遇到这种报错先确认你确实在虚拟环境里用which python看当前解释器路径。如果指向的是/usr/bin/python说明虚拟环境没有激活你需要先执行source ~/comfyui-env/bin/activate。再执行pip check检查依赖关系。如果提示某个包版本冲突按提示修复即可。从长期看依赖冲突大多是因为同一个环境里装了多个项目或者安装过程中覆盖了重要的依赖。保证虚拟环境独立能避免绝大多数这类问题。5.2 GPU 侧内存不足虽然设备的内存总量看起来很大但生成工作流时如果一次性加载多个大模型还是可能出现内存不足的报错。这时候第一步是缩小 batch size或者降低图片分辨率。第二步可以关掉部分冗余节点尤其是多个控制网络叠加的工作流非常吃内存。第三步可以考虑用半精度格式的模型替代全精度模型能节省将近一半的内存占用。如果这些操作都做完还是报内存不足还有一个风险模型可能被重复加载。某些插件会缓存多个模型实例长时间运行后设备内存逐渐变高。此时重启服务最直接进程结束后系统会自动释放之前占用的内存再启动时工作流重新加载就能恢复正常。5.3 前端页面一直转圈或白屏如果服务日志正常但浏览器打不开页面优先检查端口监听。用sudo ss -lntp | grep 8188查看端口是否监听。如果监听地址是127.0.0.1:8188说明启动时没有加--listen需要补上参数后重启。如果你想通过局域网 IP 访问还要检查防火墙是否放行 8188 端口。很多人在公共云环境或公司内网部署时会遇到安全组或防火墙拦截这类问题排查起来不难但经常被忽略。5.4 模型加载后出图全黑或全灰这个问题通常不是安装错误而是模型自身的问题。很常见的原因是模型缺少 VAE。很多基础模型下载后需要单独放置 VAE 文件或者在加载模型节点里手动指定一个 VAE。另外也可能是下载的模型文件不完整你可以对比详情页给出的文件大小确认下载完整。还有一个原因是提示词里使用了负向 embedding但模型目录没有对应的 embedding 文件导致采样过程出错。排查时建议先用最基础的无插件工作流加载一个你信任的模型确认能出图再逐步增加插件和参数。5.5 快速定位问题的通用套路在 ComfyUI 的日志中错误信息通常会直接打印在终端里。很多问题只需要看最后一段报错就能找到原因。如果日志没有明确提示检查三点模型路径是否被正确识别、依赖是否完整、端口是否被占用。按照这个顺序排查大部分问题都能在 5 分钟内解决。我这些年折腾 AI 项目的经验是问题定位不要靠猜而是要把“现象”和“日志”联系起来。很多时候你看着像是配置问题其实只是模型放错了目录看着像是依赖问题其实只是忘了激活虚拟环境。最有效的排查方式是先缩小范围再动手改。6. 进阶使用与操作经验6.1 把工作流保存成文件并复用当你在界面上搭好一个满意的生成流程后应该尽快把工作流保存成 JSON 文件。ComfyUI 的工作流本质上就是一组节点图的配置信息保存下来后下次直接拖入浏览器就可以继续编辑。我通常会在项目目录外建一个workflows文件夹把所有常用工作流存放在一起。这样即使 ComfyUI 升级导致设置变化也不会丢失自己积累的配置。如果你希望把工作流通过接口对外输出ComfyUI 也支持 API 模式。可以启动时加上参数开启结合请求脚本做批量化生成。这部分内容展开会很长但思路很简单把界面里搭好的工作流导出然后用编程方式调用同一个接口。6.2 提供简单的服务化管理如果想让 ComfyUI 开机自动运行最好的方式不是把python main.py放在.bashrc里而是写一个系统服务脚本。先写一个启动脚本start-comfyui.sh内容大致如下#!/bin/bash source ~/comfyui-env/bin/activate cd ~/ComfyUI exec python main.py --listen 0.0.0.0 --port 8188 --gpu-only然后在服务管理器中注册它设置开机自启。这样就算设备重启只要服务正常拉起局域网里的工作台就能继续访问。对我这种把设备放在角落长期跑任务的人来说这一步把“手动启动服务”的日常操作给省掉了。6.3 个人习惯与最后提醒安装到最后说两点习惯。第一尽量使用虚拟环境目录和模型目录分离的结构ComfyUI 本体升级和模型管理就不会互相影响。第二凡是涉及生成图片的内容都需要自己把好合规关不要生成违规或擦边的内容。工具本身是中立的怎么使用完全取决于使用者。最后分享一个我反复踩过的小坑固件或驱动升级后之前能正常启动的 ComfyUI 突然报 GPU 不可用其实大部分情况只需要在这个虚拟环境里重装一遍深度学习框架就能恢复不需要重装 ComfyUI。保持环境的“依赖记录可复现”比一劳永逸更实际。装一台设备不难难得是后面每次更新环境时都能保持稳定。