Nunchaku FLUX.1-dev部署案例:Jetson AGX Orin边缘设备轻量化部署尝试

1. 引言

如果你手头有一台Jetson AGX Orin这样的边缘计算设备,想在上面跑一个强大的文生图模型,可能会觉得有点“奢侈”——毕竟这类模型通常对显存和算力要求不低。但最近,Nunchaku团队推出的FLUX.1-dev模型,特别是它的量化版本,让这件事变得可行了。

Nunchaku FLUX.1-dev是基于Black Forest Labs的FLUX.1模型进行优化和压缩的版本,主打的就是“轻量化”和“高效率”。它通过先进的量化技术,在保持不错生成质量的前提下,大幅降低了模型对硬件资源的需求。这对于想在资源受限的边缘设备上部署AI能力的开发者来说,是个挺有意思的尝试。

本文将带你一步步在Jetson AGX Orin上,通过ComfyUI部署和运行Nunchaku FLUX.1-dev模型,完成一次从文字到图片的生成。整个过程我会尽量讲得详细,把可能遇到的坑也提前指出来,希望能帮你少走弯路。

2. 环境与设备准备

在开始之前,我们先明确一下这次尝试的“战场”和需要准备的“弹药”。

2.1 硬件平台:Jetson AGX Orin

我使用的设备是NVIDIA Jetson AGX Orin 64GB版本。它的核心配置如下:

  • GPU:Ampere架构,2048个CUDA核心,64个Tensor核心
  • 内存:64GB LPDDR5(与GPU共享)
  • 存储:64GB eMMC 5.1
  • 算力:INT8算力约275 TOPS

为什么选它? Jetson AGX Orin是NVIDIA面向边缘AI和机器人推出的高性能计算平台。虽然它的绝对算力比不上桌面级的RTX 4090,但其功耗控制、体积和面向边缘场景的优化,让它成为在设备端部署AI模型的理想选择。这次我们就是要测试,在这种“移动工作站”级别的设备上,能否流畅运行一个经过量化的文生图大模型。

2.2 软件环境准备

Jetson设备默认搭载的是JetPack系统,基于Ubuntu。我们需要确保一些基础软件就位。

1. 系统与Python 确保你的系统已经更新到最新版本,并且安装了Python 3.10或更高版本。Jetson Orin的JetPack 5.x/6.x通常自带Python 3.10。

# 检查Python版本
python3 --version

# 更新系统包(可选,但建议)
sudo apt update && sudo apt upgrade -y

2. 安装必要的工具 我们需要Git来拉取代码,以及一些编译依赖。

# 安装Git(如果尚未安装)
sudo apt install git -y

# 安装一些常用的开发工具和依赖
sudo apt install build-essential cmake pkg-config libopenblas-dev liblapack-dev libatlas-base-dev -y

3. 安装PyTorch for Jetson 这是最关键的一步。PyTorch需要安装NVIDIA为Jetson平台专门优化的版本,不能直接用pip install torch。

访问NVIDIA的官方论坛或Jetson Zoo,找到对应你JetPack版本的PyTorch wheel文件进行安装。例如,对于JetPack 6.0:

# 示例命令,具体URL请根据你的JetPack版本查找
wget https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-2.3.0a0+8fcfc5d7e.nv24.06-cp310-cp310-linux_aarch64.whl
pip3 install torch-2.3.0a0+8fcfc5d7e.nv24.06-cp310-cp310-linux_aarch64.whl

安装后,务必验证CUDA是否可用:

import torch
print(torch.__version__)
print(torch.cuda.is_available()) # 应该返回True
print(torch.cuda.get_device_name(0)) # 应该显示Jetson AGX Orin

4. 安装模型下载工具 我们将使用huggingface_hub命令行工具来下载模型,它比在Python脚本中下载更稳定。

pip3 install --upgrade huggingface_hub

环境准备好后,我们就可以进入正题了。

3. 部署ComfyUI与Nunchaku插件

ComfyUI是一个基于节点的工作流式AI图像生成工具,以其灵活性和对复杂工作流的支持而闻名。我们将以它为载体来运行Nunchaku FLUX.1-dev模型。

3.1 安装ComfyUI

由于我们是在Jetson这样的ARM架构设备上操作,一些预编译的包可能不兼容,因此选择从源码安装更稳妥。

# 1. 克隆ComfyUI仓库
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

# 2. 安装Python依赖
# 注意:Jetson上安装某些包可能较慢,耐心等待
pip3 install -r requirements.txt

# 针对Jetson,可能还需要单独安装一些有问题的包
# 例如,torchvision可能需要从源码编译或寻找对应版本的wheel
# 可以尝试:
pip3 install --upgrade numpy pillow scipy

3.2 安装Nunchaku插件

Nunchaku插件是运行FLUX.1-dev模型所必需的。我们将其安装到ComfyUI的custom_nodes目录下。

# 进入custom_nodes目录
cd custom_nodes

# 克隆Nunchaku插件仓库
git clone https://github.com/mit-han-lab/ComfyUI-nunchaku nunchaku_nodes

# 返回ComfyUI根目录
cd ..

安装Nunchaku后端依赖 从插件v0.3.2版本开始,安装变得简单。插件目录下会有一个install_wheel.json文件,ComfyUI在启动时会自动识别并提示安装后端wheel包。我们也可以手动触发。

确保你在ComfyUI根目录,然后启动ComfyUI一次(稍后可以Ctrl+C停止):

python3 main.py --listen

在浏览器中打开http://<你的Jetson IP>:8188,如果看到界面,说明ComfyUI基础功能正常。首次加载时,如果检测到nunchaku_nodes插件,可能会在后台自动安装依赖。你也可以通过ComfyUI Manager(如果已安装)来管理节点和依赖。

手动安装后端(备选) 如果自动安装不成功,可以尝试查看nunchaku_nodes目录下的README或requirements.txt,手动安装所需包。不过,在Jetson的ARM架构上,直接pip安装某些复杂依赖(如带CUDA扩展的)可能会失败,可能需要寻找替代方案或从源码编译。

4. 下载与配置Nunchaku FLUX.1-dev模型

模型文件是核心。我们需要下载基础FLUX模型组件和Nunchaku优化后的主模型。

4.1 创建模型目录结构

首先,在ComfyUI根目录下,确保模型存放的目录存在。

# 在ComfyUI根目录下执行
mkdir -p models/text_encoders
mkdir -p models/vae
mkdir -p models/unet
mkdir -p models/loras

4.2 下载基础FLUX模型组件

FLUX.1-dev模型依赖两个文本编码器和一个VAE(变分自编码器)。我们使用hf命令下载。

1. 下载文本编码器

# 下载CLIP-L文本编码器
hf download comfyanonymous/flux_text_encoders clip_l.safetensors --local-dir models/text_encoders

# 下载T5-XXL文本编码器 (FP16版本以节省空间)
hf download comfyanonymous/flux_text_encoders t5xxl_fp16.safetensors --local-dir models/text_encoders

2. 下载VAE模型

hf download black-forest-labs/FLUX.1-schnell ae.safetensors --local-dir models/vae

Jetson下载提示:这些模型文件都比较大(特别是T5-XXL,约4.5GB),Jetson的网络和存储IO可能成为瓶颈。请确保网络稳定,并预留足够的磁盘空间(总共需要约10GB用于基础组件)。如果下载中断,可以使用hf命令的--resume参数继续下载。

4.3 下载Nunchaku FLUX.1-dev主模型(关键步骤)

这是经过量化的核心模型。对于Jetson AGX Orin(非Blackwell架构),我们选择INT4量化版本,它在精度和显存占用之间取得了较好的平衡。

# 下载INT4量化版本的Nunchaku FLUX.1-dev模型
hf download nunchaku-tech/nunchaku-flux.1-dev svdq-int4_r32-flux.1-dev.safetensors --local-dir models/unet/

这个文件大约4-5GB。下载完成后,你的models/unet/目录下应该有一个名为svdq-int4_r32-flux.1-dev.safetensors的文件。

为什么选择INT4?

  • FP16/FP8:虽然精度高,但模型体积大(FP16约33GB),显存占用高,Jetson的64GB共享内存虽然够,但会严重影响系统和其他应用的运行。
  • INT4:通过4位整数量化,模型体积和显存占用大幅降低(约4-5GB),推理速度也有提升,是边缘设备的理想选择。虽然理论上会损失一些精度,但Nunchaku的量化技术做得不错,实际生成效果依然可接受。

4.4 (可选)下载LoRA模型

LoRA(Low-Rank Adaptation)是一种微调技术的小模型,可以叠加在主模型上,改变生成风格或增强某些能力。Nunchaku推荐使用FLUX.1-Turbo-Alpha LoRA来加速生成。

# 假设你已经知道LoRA模型在Hugging Face上的具体路径
# 例如,将LoRA模型下载到loras目录
# hf download <作者>/<仓库> <模型文件.safetensors> --local-dir models/loras
# 请替换为实际的LoRA模型信息

注意:在Jetson上,为了节省资源和简化流程,初次尝试可以暂时跳过LoRA,先确保主模型能跑通。

4.5 导入工作流

Nunchaku插件提供了预定义的工作流文件(JSON格式),让我们无需从零开始连接节点。

# 在ComfyUI根目录下,创建工作流存放目录
mkdir -p user/default/example_workflows

# 将插件自带的工作流示例复制过来
cp custom_nodes/nunchaku_nodes/example_workflows/*.json user/default/example_workflows/

这样,在ComfyUI的网页界面中,你就可以通过“Load”按钮加载这些工作流了。我们主要使用nunchaku-flux.1-dev.json

5. 在Jetson AGX Orin上运行文生图

一切就绪,让我们启动ComfyUI并开始生成第一张图片。

5.1 启动ComfyUI服务

在ComfyUI根目录下,使用以下命令启动:

# 使用 --listen 参数允许同一网络下的其他设备访问Web界面
# 使用 --port 指定端口(默认8188)
python3 main.py --listen 0.0.0.0 --port 8188

启动成功后,你会看到类似下面的输出:

...
Starting server
To see the GUI go to: http://0.0.0.0:8188

现在,你可以在你的电脑浏览器上,输入http://<Jetson设备的IP地址>:8188,访问ComfyUI的Web界面。

5.2 加载Nunchaku FLUX.1-dev工作流

  1. 在ComfyUI界面中,点击右侧的Load按钮。
  2. 在弹出的文件浏览器中,导航到default/example_workflows目录。
  3. 选择nunchaku-flux.1-dev.json文件并加载。

加载后,你会看到一个已经连接好的节点工作流。主要节点包括:

  • NunchakuLoader:加载我们下载的INT4主模型。
  • CLIP Text Encode (Prompt)CLIP Text Encode (Negative):用于处理正向和负向提示词。
  • NunchakuSampler:采样器,控制生成过程。
  • VAEDecode:将潜变量解码为最终图像。
  • Save Image:保存生成的图片。

5.3 配置参数并生成图片

在Jetson上运行,我们需要特别注意参数设置,以适配有限的资源。

1. 检查模型加载 确保NunchakuLoader节点中,ckpt_name指向了我们下载的svdq-int4_r32-flux.1-dev.safetensors。通常加载工作流后会自动关联。

2. 设置提示词

  • 正向提示词(Prompt):在对应的CLIP Text Encode节点输入框里,用英文描述你想要的画面。例如:A cute robot cat sitting on a windowsill, sunny day, detailed fur, cartoon style, 4k, high quality
  • 负向提示词(Negative Prompt):可以输入一些你不希望出现的元素,例如:blurry, ugly, deformed, text, watermark。负向提示词不是必须的,但有时能改善效果。

3. 调整关键参数(针对Jetson优化)

  • 分辨率(Width/Height):这是影响显存占用的最大因素。对于Jetson AGX Orin,建议从512x512512x768开始尝试。不要一开始就设置1024x1024。
  • 推理步数(Steps):在NunchakuSampler节点中设置。步数越多,细节可能越好,但耗时越长。对于INT4模型,可以尝试15-25步。如果使用了FLUX.1-Turbo-Alpha LoRA,步数可以更低(如8-12步)。
  • 批次大小(Batch Size):在Jetson上,建议保持为1。批量生成对显存压力很大。
  • 采样器(Sampler)和调度器(Scheduler):可以保持工作流默认设置(如euler采样器),这些对资源影响相对较小。

4. 点击“Queue Prompt”生成 设置好所有参数后,点击右侧的Queue Prompt按钮,工作流开始执行。你可以在界面下方看到执行进度和日志。

在Jetson上运行的体验

  • 速度:生成一张512x512的图片,大约需要30秒到2分钟,具体取决于步数和提示词复杂度。这比高端桌面GPU慢很多,但在边缘设备上是可以接受的。
  • 资源占用:使用tegrastats命令监控,可以看到GPU和内存使用率会显著上升。INT4模型在512x512分辨率下,大概占用12-16GB的共享内存。系统仍有一定余量。
  • 温度:长时间连续生成可能会导致设备温度升高。Jetson AGX Orin有主动散热,一般没问题,但建议在通风良好的环境下运行。

5.4 结果查看与保存

生成完成后,图片会显示在Save Image节点对应的预览窗口中。你可以右键点击图片,选择“Save Image”保存到本地。

尝试不同的提示词,观察生成效果。INT4量化模型在细节和色彩上可能略逊于FP16原版,但对于很多应用场景来说,其生成质量已经足够令人满意。

6. 部署总结与优化建议

这次在Jetson AGX Orin上部署Nunchaku FLUX.1-dev的尝试,总体上是成功的。它证明了经过精心量化的文生图大模型,完全可以在资源受限的边缘设备上运行。

6.1 关键要点回顾

  1. 模型选择是关键:对于边缘设备,必须选择量化版本(INT4/FP8)。FP16版本在Jetson上几乎无法运行。
  2. 分辨率是显存杀手:控制生成图片的分辨率是保证稳定运行的最有效手段。从低分辨率开始测试。
  3. 工作流简化:在ComfyUI中,尽量使用优化过的工作流,避免连接过多复杂节点,减少不必要的内存开销。
  4. 耐心很重要:边缘设备的计算速度无法与服务器相比,生成图片需要更多时间,这是用便携性换性能的必然结果。

6.2 可能遇到的问题与解决思路

  • 问题:启动ComfyUI或加载工作流时崩溃/报错。
    • 思路:首先检查PyTorch是否为Jetson专用版本。然后检查模型文件是否完整下载并放在正确目录。查看ComfyUI启动日志和Web界面的错误信息,通常会有明确提示。
  • 问题:生成图片时显存不足(OOM)。
    • 思路:立即降低分辨率(如从768x768降到512x512)。减少推理步数。关闭其他占用显存的程序。确保使用的是INT4量化模型。
  • 问题:生成速度非常慢。
    • 思路:这是正常现象。可以尝试启用FLUX.1-Turbo-Alpha LoRA来减少所需步数。确保Jetson运行在最大性能模式(sudo nvpmodel -m 0sudo jetson_clocks)。
  • 问题:生成的图片质量不佳、有瑕疵。
    • 思路:INT4量化会损失精度。可以尝试:增加推理步数(20-30步);优化提示词,描述更详细;使用负向提示词排除不想要的元素;如果条件允许,尝试FP8量化版(如果显存放得下)。

6.3 应用场景展望

在Jetson这样的边缘设备上成功部署文生图模型,打开了许多有趣的应用可能性:

  • 离线内容创作:在无网络环境(如户外、移动载具)中快速生成示意图、宣传素材。
  • 嵌入式交互系统:为机器人、智能售货机、数字标牌等提供实时、本地的图像生成能力,增强人机交互。
  • 隐私敏感场景:所有数据处理都在本地完成,无需上传云端,保护用户隐私。
  • 教育与原型开发:为AI和机器人学学生、爱好者提供了一个低成本、可移动的AI图像生成实验平台。

这次部署就像一次“压力测试”,展示了边缘AI的潜力和当前的技术边界。随着模型压缩技术和硬件算力的不断进步,未来在边缘设备上运行更复杂、质量更高的AIGC模型将会越来越普遍。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐