我之前在一台AMD Ryzen AI Max+ 395的准系统主机上折腾了一周,把Ubuntu Server 24.04 + ComfyUI跑通,中间踩了不少坑,也把一些关键参数摸清楚了。这台机器比较特殊,它不像普通台式机那样有独立显卡,而是把所有算力都塞进了这颗APU里,CPU、GPU、NPU三合一,统一内存寻址。很多人一听"核显跑AI"就觉得没戏,实际测下来,只要驱动和软件栈选对,它跑SDXL、Flux这类生图模型的体验完全能追上中端独显,而且大显存优势非常明显。
这篇东西适合谁看?手里有Ryzen AI Max+ 395机器(包括NUC、迷你主机、笔记本)的朋友,或者单纯想在无独立显卡的AMD平台上跑ComfyUI的折腾党。我会把从系统安装、ROCm驱动、PyTorch ROCm版本选择、ComfyUI部署到模型下载、性能调优的完整链路讲清楚,尤其是那些官网文档不写、问答社区里翻半天才找得到的坑,我都会列出来。
1. 硬件方案与选型思路
1.1 AMD Ryzen AI Max+ 395 这颗芯片到底强在哪
AMD Ryzen AI Max+ 395是Strix Halo系列的旗舰型号,它的核心亮点不是CPU部分(Zen 5架构,16核32线程),而是那颗规模庞大的RDNA 3.5核显——40个计算单元(CU),2560个流处理器。这是什么概念?接近移动端RTX 4060的流处理器规模,但关键区别在于:它没有独立显存,而是和CPU共享内存。
这意味着两件事。第一,你可以给GPU划分很大的"显存",比如在BIOS里给核显分配64GB甚至96GB,跑SDXL、Flux这种吃显存的模型时完全不用像6GB、8GB独显那样担心爆显存。第二,数据不需要经过PCIe总线拷贝,CPU和GPU之间通过统一内存架构直接访问,省掉了来回传输的开销。实际跑图时,这个特性对长提示词、大分辨率出图特别友好。
这颗芯片还内置了XDNA 2架构的NPU,理论算力50 TOPS。不过目前ComfyUI的主流工作流还没有完全吃透NPU,PyTorch也没法直接调用NPU跑生图,所以NPU这块暂时当它不存在,主力还是靠GPU部分。但Windows上有些推理软件已经能用NPU加速了,等后面生态跟上,这颗芯片的潜力还能再挖。
1.2 为什么选 Ubuntu Server 24.04 而不是桌面版或其他发行版
标题里点名Ubuntu Server 24.04,这个选择是有讲究的。
AMD的ROCm软件栈对Ubuntu的支持最好,官方直接把Ubuntu 22.04和24.04列为支持系统,驱动仓库、预编译包都是现成的。用其他发行版不是不行,但你可能得自己编译ROCm内核模块,那酸爽,试过一次就不想试第二次了。
那为什么不用桌面版呢?两个原因。一是服务器版没有GNOME桌面这类负载,内存占用更低,把资源都留给推理任务;二是我这台机器是长期跑任务用的,远程SSH管理比接显示器方便得多。ComfyUI本身是B/S架构,网页操作为主,完全不需要服务器端有桌面环境,所以Ubuntu Server 24.04反而是最合适的选择。
选24.04还有个重要原因:内核版本是6.8,对RDNA 3.5核显的支持比20.04、22.04的旧内核好太多,新显卡直接用旧内核很容易出现固件加载失败、GPU识别不到的问题。
1.3 为什么是 ComfyUI 而不是 WebUI(A1111)或 SD.Next
如果只是想在AMD平台上"能出图",Stable Diffusion WebUI也能用,但长期用下来我强烈推荐ComfyUI,原因有三。
第一,ComfyUI的节点式架构对显存管理更精细。你可以通过拉节点的方式精确控制高分辨率修复(Hires Fix)的放大倍率、VAE解码时机,甚至在低显存场景下手动安排模型卸载顺序。WebUI更偏"一键填参",底层细节控制相对弱。
第二,ComfyUI对AMD/NVIDIA之外的平台适配更灵活。PyTorch官方出的ROCm版本PyTorch能用,ComfyUI直接支持ROCm后端,而WebUI的某些插件在ROCm环境下经常出兼容性问题。
第三,ComfyUI出图效率更高。官方一直在做推理引擎优化,同样的模型、同样的参数,ComfyUI通常比WebUI快20%左右,而且启动时模型加载也更轻量。
当然,ComfyUI的节点界面学习曲线比WebUI陡,新手看着满屏的连接线可能发怵。但这篇文章走的就是完整部署路线,我会把关键节点结构讲清楚,照着搭就能跑。
2. 系统安装与 ROCm 驱动部署
2.1 基础系统安装与 BIOS 设置
Ubuntu Server 24.04的安装流程本身不复杂,但有几个地方必须提前处理,不然后面全是坑。
第一件要做的是进BIOS,把核显显存(UMA Frame Buffer Size)调大。不同主板BIOS叫法不一样,有的叫UMA Frame Buffer Size,有的叫IGPU VRAM Size,默认通常是512MB或1GB,建议直接拉满。Max+ 395支持最高96GB划分,如果你内存是128GB,可以分96GB给GPU,留32GB给系统。如果内存是64GB,建议分48GB给GPU。这个参数决定了后续PyTorch能"看到"多大显存,非常关键。
第二件是开Above 4G Decoding和Resizable BAR(如果有选项的话)。这两个功能主要是让PCIe设备能访问更大的地址空间,对核显同样有影响。
第三件是关闭IOMMU(如果有的话)。ROCm在某些平台上和IOMMU有冲突,表现为运行时驱动崩溃。不过如果你BIOS里没有这个选项,那就不管它,后面讲问题排查时会再说。
系统装好后,先执行一次完整的系统更新,把内核和固件升到最新版本:
sudo apt update && sudo apt upgrade -y sudo reboot2.2 安装 ROCm 的正确姿势
AMD现在的ROCm安装方式比前几年简单多了,官方提供了一个amdgpu-install脚本,做的是全自动依赖安装。但要注意,别直接装最新版,而是装6.3或更高版本,因为RDNA 3.5架构的完整支持在ROCm 6.3才趋于稳定。
先添加AMD官方的软件源:
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/noble/amdgpu-install_6.3.60300-1_all.deb sudo apt install ./amdgpu-install_6.3.60300-1_all.deb然后安装ROCm:
sudo amdgpu-install --usecase=rocm这里说明一下,--usecase=rocm只装ROCm运行时和开发套件,不带OpenCL和HIP编译环境。如果你后面还想用一些依赖OpenCL的软件(比如某些视频处理工具),可以加--usecase=rocm,opencl。但我个人建议能少装就少装,软件包越少,依赖冲突的概率越小。
装完驱动后重启,用rocm-smi命令验证GPU是否识别:
rocm-smi如果能列出类似gfx1151的设备信息,说明驱动层面已经OK了。如果提示找不到设备,先检查BIOS的显存设置,再检查内核里amdgpu模块有没有加载:
lsmod | grep amdgpu2.3 与显卡驱动相关的几个坑
坑1:装完ROCm后系统直重启进不去桌面。如果你装的是带桌面的Ubuntu,amdgpu-install会把默认图形栈替换成AMD的专有栈,某些N卡残留驱动会导致冲突。解决方案是纯Server版装ROCm,一点事没有。
坑2:rocm-smi能显示GPU,但PyTorch识别不了。这种情况通常不是驱动问题,而是PyTorch的ROCm版本太老,或者缺hip-runtime包。装完ROCm后再补装一下运行时库:
sudo apt install rocm-hip-libraries hip-runtime-amd坑3:虚拟化环境(比如PVE、ESXi)里直通GPU给虚拟机,ROCm装不上。如果是在虚拟化平台里跑,记得给虚拟机开启Hyper-V的GPU-P虚拟化或者直通整个PCIe设备,仅透传核显需要主板和Hypervisor都支持SR-IOV,这块后续单独开篇讲,本文按物理机部署为准。
3. Python 环境与 PyTorch ROCm 版本安装
3.1 版本匹配是重中之重
ComfyUI本质上是一个Python应用,核心计算全靠PyTorch。所以Python版本、PyTorch版本、ROCm版本这三者必须匹配,否则后面肯定报错。
我实测的稳定组合是:
| 组件 | 版本 |
|---|---|
| Ubuntu Server | 24.04 LTS |
| Python | 3.11(系统自带3.12,建议用venv) |
| ROCm | 6.3 |
| PyTorch | 2.4.1+rocm6.2 |
| ComfyUI | 最新main分支 |
这里有个细节:我用的ROCm是6.3,但PyTorch官方预编译包目前最高到rocm6.2,这没冲突,因为PyTorch的ROCm后端只要找到系统里的HIP/ROCm库能用就行,一般兼容。
3.2 安装 Python 虚拟环境
强烈建议用venv或conda隔离环境,别直接用系统Python,否则后面装包容易污染系统环境,出问题还不好排查。
Ubuntu Server 24.04自带Python 3.12,但ComfyUI部分依赖对3.12支持还不算特别好,建议装一个Python 3.11:
sudo apt install python3.11 python3.11-venv python3.11-dev然后创建虚拟环境:
mkdir -p ~/comfyui-env && cd ~/comfyui-env python3.11 -m venv venv source venv/bin/activate3.3 安装 ROCm 版 PyTorch
PyTorch官方提供了ROCm版本的预编译包,安装方式很简单:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.2安装完验证一下GPU能不能被识别:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"这里有个容易误解的点:PyTorch里判断GPU用的是torch.cuda.is_available(),这个函数在ROCm后端里同样返回True,但实际上是HIP设备,不是NVIDIA CUDA设备。看到输出True就说明PyTorch已经正确调用了ROCm后端。如果输出False,大概率是HIP没装好或者LD_LIBRARY_PATH没指向ROCm的lib目录:
export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH建议把这行加到~/.bashrc里,不然每次开终端都要手动设置。
装完PyTorch马上测试一下矩阵运算是否真的在GPU上跑:
import torch x = torch.randn(1024, 1024, device='cuda') y = torch.matmul(x, x) print(y.sum().item())能出结果就说明计算图正常在GPU上执行了。这一步测试非常关键,很多环境看着装好了,一跑真实模型全是NaN或者段错误,问题就出在这个环节。
4. ComfyUI 部署与模型配置
4.1 下载与安装 ComfyUI
ComfyUI的部署就是从GitHub拉代码,然后装依赖:
cd ~ git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI pip install -r requirements.txt装依赖时建议用--timeout参数,顺便指定国内镜像源(如果需要):
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple装完后不要急着启动,先看看目录结构。ComfyUI的模型目录分得很细:
ComfyUI/ ├── models/ │ ├── checkpoints/ # 主模型(SD1.5、SDXL、Flux等) │ ├── loras/ # Lora模型 │ ├── vae/ # VAE模型 │ ├── controlnet/ # ControlNet模型 │ ├── upscale_models/ # 放大模型 │ └── embeddings/ # Textual Inversion嵌入 ├── custom_nodes/ # 自定义插件 ├── input/ # 输入图片 └── output/ # 输出图片4.2 模型文件的来源与管理
生图模型是整个环节里最核心的部分。先说结论:推荐基于SDXL系列的模型,在Max+ 395上有较好的性能平衡;Flux系列画质更高,但显存吃紧时速度会下降。
常见下载渠道:
- Hugging Face:模型文件全、下载稳定,推荐用
huggingface-cli下载,支持断点续传 - CivitAI:社区模型丰富,各类画风模型都在这里发布,但国内访问有时不稳定
下载模型时注意看文件格式:
| 格式 | 说明 |
|---|---|
.safetensors | 推荐,没有Python代码注入风险 |
.ckpt | 老式格式,已经逐渐被safetensors取代 |
.bin | 极少见,可能是未转换的权重 |
下好后把主模型放到models/checkpoints目录。注意文件名别带空格和中文,ComfyUI有时对非ASCII路径处理不好。
这里分享一个实用技巧:CivitAI上有很多模型页面写着"SDXL"或"SD 1.5",选模型前先看它兼容哪个基础模型,别混用。SDXL模型放进ComfyUI后,工作流里Loader节点会自动识别文件,不需要额外配置。
4.3 启动参数与 Web 访问
默认情况下ComfyUI只监听127.0.0.1:8188,这在服务器上显然不够,我们需要让它在局域网可访问:
python main.py --listen 0.0.0.0 --port 8188 --disable-auto-launch参数说明:
--listen 0.0.0.0:监听所有网卡,允许远程Web访问--port 8188:默认端口,可以改成其他值--disable-auto-launch:服务器没浏览器,禁止启动时自动打开浏览器
如果你有多个GPU并且想指定某一张,用--cuda-device 0来指定。
启动后浏览器访问http://服务器IP:8188,就能看到ComfyUI的节点编辑界面。
4.4 首次跑图:最小可用工作流
我第一次在无头服务器上打开ComfyUI时,默认面板全是英文,一片空白,卡了一阵才反应过来:ComfyUI不像WebUI那样自带模板,所有工作流都得自己搭节点。
好在有个偷懒的办法:在ComfyUI界面的Workflow菜单里,默认会自带一个最基础的"Load Checkpoint + KSampler + Empty Latent Image + VAE Decode + Save Image"模板。如果界面是空白,可以通过侧边栏的"Templates"加载一个基础文生图模板。
最小工作流的节点连接关系如下:
- Load Checkpoint:加载主模型(checkpoint文件)
- CLIP Text Encode(Prompt):输入正向提示词
- CLIP Text Encode(Negative):输入负向提示词
- Empty Latent Image:设置出图尺寸
- KSampler:核心采样器,设置种子、步数、CFG和采样器类型
- VAE Decode:把潜空间图像解码成像素图像
- Save Image:保存图像到
output目录
从Load Checkpoint节点拖出来的输出有三个:MODEL、CLIP、VAE。把MODEL连接到KSampler的model输入,CLIP分别连接到两个Text Encode节点的clip输入,VAE连接到VAE Decode节点的vae输入。KSampler的latent_image输入来自Empty Latent Image的输出,输出端的LATENT接到VAE Decode的samples输入,VAE Decode输出的IMAGE接到Save Image的images输入。
连接完点一下“Queue Prompt”,等着出图就行。
4.5 自动化运行的补充脚本
如果想让ComfyUI以后开机自启或常驻后台,可以用systemd服务来管理。在/etc/systemd/system/comfyui.service里写入:
[Unit] Description=ComfyUI Service After=network.target [Service] User=你的用户名 WorkingDirectory=/home/你的用户名/ComfyUI ExecStart=/home/你的用户名/comfyui-env/venv/bin/python main.py --listen 0.0.0.0 --port 8188 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target然后依次执行:
sudo systemctl daemon-reload sudo systemctl enable --now comfyui这样ComfyUI会作为一个服务常驻,断线重连、崩溃自启都自动处理了,SSH断开也不影响。
5. 性能调优与资源管理
5.1 虚拟内存与交换分区设置
生图模型动辄好几个GB,如果同时加载多个模型,物理内存不够就会杀进程。建议划分至少32GB的swap分区(SSD或NVMe上)。
Ubuntu Server 24.04如果安装时没手动分swap,可以用swap文件方式补上:
sudo fallocate -l 32G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab这里有一个重点:swap不能替代显存,但能防止内存溢出导致ComfyUI崩溃。PyTorch在统一内存架构下,GPU内存不够时会尝试借助系统内存兜底,swap文件则能把这个兜底空间进一步扩大到磁盘上。
5.2 GPU 与 CPU 的均衡调度
Max+ 395这颗APU的GPU和CPU共享TDP热功耗。如果你把BIOS里TDP限制在120W(默认),GPU跑满时CPU能分到的功耗很少,ComfyUI运行时CPU也要参与数据处理,这就容易形成瓶颈。建议在BIOS里把TDP解锁到最高档(有些准系统可以到120W+)。
另外一个调优项是ROCm的环境变量——HSA_OVERRIDE_GFX_VERSION。理论上Max+ 395的GFX ID在ROCm 6.3里不需要覆盖,但如果你用了特殊的内核参数或虚拟化层导致识别异常,可以试一下强制覆盖:
export HSA_OVERRIDE_GFX_VERSION=11.0.0这一条在官方论坛里被很多人用来解决RDNA 3.5在旧ROCm版本下跑不了的问题。如果你ROCm 6.3正常就千万别设,设了反而可能出问题。
5.3 多模型加载与会话保持
ComfyUI每次切换模型时都会重新加载,SDXL模型约6.9GB,Flux fp8版本约11GB,加载耗时大概几十秒。如果你想加快切换速度,可以启用ComfyUI的模型缓存功能,在main.py启动参数里加:
--cache-classic或者直接安装ComfyUI-Manager插件,里面有一个"Model Management"功能,可以控制模型驻留内存的数量。
5.4 蒸馏模型与社区工作流
写完基本部署教程后,我强烈建议所有人把ComfyUI-Manager装上,它就是ComfyUI的插件市场:
cd ~/ComfyUI/custom_nodes git clone https://github.com/ltdrdata/ComfyUI-Manager.git pip install -r ComfyUI-Manager/requirements.txt重启后Web界面右侧会出现一个Manager按钮,可以直接在网页里搜索安装插件、更新节点、管理模型。
社区里已经有很多现成的高质量工作流,比如秋叶文档站整理的那些文生图、图生图、ControlNet工作流,以及各类热门模型的官方示例。使用模板比从零搭节点对新手友好多了。
6. 常见问题与排查技巧实录
6.1 ComfyUI 报 failed to execute 错误
网上搜ComfyUI Top热词排名很高的"failed to execute",这个错很经典。它其实是节点执行失败的通用提示,真正的错误原因一般在网页开发者工具(F12)的Console里,或者ComfyUI的日志输出中。
我遇到的failed to execute通常有这几种原因:
- 显存不足:模型加载不进去,日志里能看到
CUDA out of memory。解决方法是减小Empty Latent Image的分辨率,或者用--lowvram模式启动 - 模型文件损坏:下载不完全,加载时报
EOFError或Unexpected end of file,重新下载对应模型即可 - 节点配置错误:比如KSampler的
seed输入接到了负值、cfg设成了负数,ComfyUI不会主动检查这些逻辑问题
6.2 显存无法被 PyTorch 识别
在Max+ 395上如果PyTorch不识别GPU,按照这个顺序排查:
- 确认BIOS的UMA Frame Buffer Size设置是否生效,进系统后执行
rocm-smi看显存大小 - 确认
/opt/rocm/lib在LD_LIBRARY_PATH中 - 确认PyTorch版本是rocm6.2或更高,老版本不支持gfx1151
- 卸载所有旧版驱动后重装一次
6.3 内存不足导致的 systemd 服务被杀死
如果ComfyUI服务反复重启,用journalctl -u comfyui查看日志,常见错误是Killed。这说明OOM Killer把进程杀了。解决方案:加大swap、减少模型驻留数量、降低Batch Size。也可以给systemd服务加内存限制:
MemoryMax=90G这个限制根据你物理内存大小调整,给系统保留足够空间即可。
6.4 无头环境中 VAE 输出为黑图
有时候节点执行正常,但输出的图片是纯黑色或模糊色块。最常见的原因是VAE精度问题:SDXL的VAE是fp16的,某些情况下解码结果会有色偏。这类问题通常是启动参数里没有指定--force-fp32导致的。如果你追求精确输出,可以在启动命令加一行:
python main.py --listen 0.0.0.0 --force-fp32代价是推理速度下降10%~15%,但色彩不再有随机性。个人建议先用fp16跑,如果出图正常就别动。
6.5 AMD 驱动更新后需要清理残留
如果你中途升级过一次amdgpu-install,旧版包体容易和新版驱动互相干扰,导致内核模块加载失败。最好的做法是彻底卸载后重装:
sudo amdgpu-install --uninstall sudo apt autoremove sudo reboot然后重新执行一遍驱动安装步骤。这比在旧驱动上打补丁省心得多。
7. 实测性能数据与个人总结
我的测试平台是:Ryzen AI Max+ 395,64GB内存(BIOS分了48GB给GPU),Ubuntu Server 24.04,ROCm 6.3,PyTorch 2.4.1+rocm6.2,ComfyUI最新版。
实测跑SDXL 1.0基础模型,512x512分辨率,20步采样,用时大约在7到9秒之间;1024x1024分辨率,20步采样,大约30到40秒。Flux schnell fp8版本,512x512分辨率,4步采样,大约20秒左右。因为统一内存架构,模型加载速度比同规格独显快不少,6.9GB的SDXL模型大概只需要几秒钟就能加载完。这个性能表现对比同价位的独立显卡(比如RTX 4060),SDXL出图速度上略慢一点,但胜在显存上限高、整套主机功耗低,综合体验属于"能战"级别。
最终这台的长期用法,我是放在家里当一个小型AI绘图服务器,手机、平板随时通过Web界面调用。后面我想继续折腾的方向有两个:一是试试把NPU接进来做前置加速,二是研究一下多用户排队出图的工作流优化。等有新进展我再写一篇补充文章。
最后送各位一句实在话:AMD这套平台跑AI生图,驱动和软件栈的正确选择比硬件本身更重要。严格照着本文这套软件组合来安装,基本能稳定运行;千万别为了追新去装Beta版驱动和每日构建版PyTorch,一天三个报错警告会让心态直接爆炸。