【SenseNova U1.5 Lite实战】开源生图卷王来了!8B 参数 单卡本地出 4K——SenseNova U1.5 Lite + ComfyUI 实战手记
前阵子老板那边找到我,说现在运营那边每天要出十几张产品海报和信息图,能不能本地化部署搞个自动化方案。
之前他们运营那边的流程是:在 ChatGPT 里写文案,切到 Midjourney 出图,再开 Figma 排版,一张图来回折腾半小时起步,而且文字和图片之间的"翻译损耗"很大——你 prompt 里写了"左上角放标题",出来的图标题可能在右下角。
我正好看到商汤 8 月 21 号开源了 SenseNova U1.5 Lite,开源地址如下:
https://github.com/OpenSenseNova/SenseNova-U1
https://huggingface.co/collections/sensenova/sensenova-u15
benchmark 上 Qwen-Image-Bench 拿了 60.18,比上一代 U1 高了快 28%。最关键的是它号称支持 3-4K 字符的超长指令遵循——你写一份"设计需求文档"级别的 prompt,它能一条不漏地执行。
这个能力如果成立,运营那边的需求就完全能实现了,反正服务器上有张显卡空着,花了一天半试了一下,中间踩了些坑,最终跑通了,效果确实超出预期。这篇文章把整个过程记下来。
一、先聊架构:8B 凭什么能打
在动手之前,简单说一下我为什么对这个模型有兴趣。
市面上开源的生图模型不少,但大多数走的还是"拼盘"路线——文本编码器处理文字,视觉编码器处理图片,中间用 LLM 做翻译,最后 VAE 解码出图。这条链路上每个模块各有各的优化目标,信息在编码解码过程中不可避免地损耗。你 prompt 里写的东西,经过这一路传递,到最终出图的时候已经丢了不少。

SenseNova U1.5 Lite 的做法不太一样。它的架构叫 NEO-unify,直接把 Visual Encoder 和 VAE 都砍了,文本和图像在同一个 token 空间里端到端流转。
官方仓库里这张架构图,把这个架构解释得很明白。
为了让"理解"和"生成"在同一个模型里不互相打架,架构引入了 Native Mixture-of-Transformers(MoT),这种统一架构的直接好处就是生成结果的一致性——图片的风格、配色、布局逻辑会和 prompt 里的描述严格对齐,不会出现"prompt 写了扁平风,出来一张立体渲染"这种事。
二、为什么用 ComfyUI
说到这,可能有人会问:跑个模型而已,直接拉仓库跑 Python 脚本不就行了,为什么非得用 ComfyUI?
先简单介绍一下 ComfyUI。它是一个开源的节点式 AI 图像编辑工具,你可以把它理解成"AI 版的 Blender 节点编辑器"。和传统不同,ComfyUI 不是给你一堆表单让你填参数,而是把每个功能抽象成一个节点——加载模型是一个节点、生成图片是一个节点、编辑图片又是一个节点。你在画布上拖拽节点、用线把它们连起来,就组成了一条工作流。

这种设计最大的好处是所见即所得 + 可复用。一条工作流跑通了,保存为 JSON 文件,发给别人 Load 就能用,不需要对方理解底层代码。而且所有节点的参数、连接关系都是可视化的,团队协作和交接比 Python 脚本友好得多。
回到我们的场景,运营那边的需求不是一张图,而是一条链路——先把一句话 brief 改写成详细的设计指令,再 T2I 出底图,再局部编辑调细节,最后多图排版。整个工作流保存为 JSON 文件,发给运营同事 Load 就能跑。对于想把 AI 出图嵌入业务流程的团队来说,这比写 Python 脚本实用得多。
而且比较方便的是,商汤官方仓库的 apps/comfyui/example_workflows/ 目录下已经提供了 5 个现成的示例工作流:基础 T2I、图像编辑、图文交织、信息图序列、以及 API 调用模式。装好节点包之后直接 Load 就能跑,不用从零开始拖节点。
好,工具和模型都了解清楚了,接下来就是动手环节。
三、部署过程
架构和工具都选好了,接下来就是动手部署。在开始实践之前,先理一下整体思路:整个部署流程分四步走——选卡、下权重、构建 Docker 镜像、启动容器,下面按顺序来讲。
第一步:选一张合适的卡
首先要解决的是硬件问题。nvidia-smi 看一下哪张卡空闲:
我们服务器上有 8 张 A100,单卡是40GB, 跑 bf16 full 模式刚好够,稳妥起见,我们这里采用双卡启动,显存池拉到 80GB,跑 4K 分辨率也不慌。
大家显存不够的话也可以选择 bf16 balanced或者GGUF Q4 + balanced,4090 都能跑,适合个人尝鲜。
第二步:下载模型权重
卡选好了,下一步是把模型权重下载到本地。
我这里推荐大家使用8 路文件级并发 ModelScope + API token,国内环境最稳,每个 shard 起一个独立进程:
export MODELSCOPE_API_TOKEN="ms-XXXX-..."
for i in 00001 00002 00003 00004 00005 00006 00007 00008; do
nohup python3 -c "
from modelscope import snapshot_download
snapshot_download('SenseNova/SenseNova-U1.5-8B-MoT',
cache_dir='/media/tmp/models',
allow_file_pattern=['model-${i}-of-00008.safetensors'])" \
> /tmp/dl_${i}.log 2>&1 &
done
wait
ModelScope 加 token 后 8 路并发能聚合到 13 MB/s,40GB 大约 1 小时下完。如果有网络环境的话也可以选择 Hugging Face,下好后如下:

第三步:构建 Docker 镜像
权重就位之后,接下来要搭运行环境。我选的是 Docker 容器化部署,好处是环境隔离干净、方便复现。这里,官方也提供了 Docker 镜像,一行命令即可完成部署:
docker pull lightx2v/lightllm_lightx2v:20260407
第四步:启动容器并配置模型路径
镜像构建好了,最后一步就是启动容器、把模型挂载进去,运行以下指令即可(注意这里我用的是双卡,单卡的话直接使用device=0,然后其余参数要替换为自己放模型权重和ComfyUI的位置)
docker run -d --rm --gpus '"device=0,1"' --ipc=host --network host \
-v /media/tmp/ComfyUI:/workspace/ComfyUI \
-v /media/tmp/models:/workspace/models \
-v /media/tmp/outputs:/workspace/outputs \
-v .../SenseNova-U1.5-8B-MoT:/workspace/ComfyUI/models/sensenova/SenseNova-U1.5-8B-MoT \
-v .../SenseNova-U1.5-8B-MoT-LoRAs:/workspace/ComfyUI/models/loras/SenseNova-U1.5-8B-MoT-LoRA-8step \
--name sensenova-comfyui sensenova-u15-comfyui:latest
启动之后还有两个小问题要注意。
首先是模型路径。ComfyUI 社区习惯把模型放 models/diffusion_models/,但 SenseNova 节点不走这个路径,它调的是 folder_paths.get_folder_paths("sensenova")。得在 extra_model_paths.yaml 里注册:
custom_paths:
sensenova: /workspace/ComfyUI/models/sensenova
其次是 symlink 不生效。我一开始图省事在容器内用 ln -s 建软链,结果节点扫不到模型。Python 3.10 的 Path.rglob() 不跟随 symlink,而节点恰好是用 rglob 扫描的。老老实实用 docker run -v bind mount 真实路径就行。
最后验证一下:
curl -s http://localhost:8188/object_info | python3 -c "
import json, sys
nodes = json.load(sys.stdin)
sense = [n for n in nodes if 'sense' in n.lower() or 'U1' in n]
print(f'共 {len(nodes)} 个节点,其中 SenseNova 节点 {len(sense)} 个')"
看到 SenseNova 节点 13 个 就说明部署成功了。

防火墙记得开 ufw allow 8188/tcp,然后浏览器打开 http://<服务器IP>:8188就可以进入ComfyUI 界面了:

四、实测:从单张信息图到智能体链路
部署完了,开始出图。这部分是我最想分享的,因为 SenseNova U1.5 Lite 的能力确实和我之前用过的生图模型不太一样。
4.1 第一个测试:Prompt 出信息图
我建议第一个跑的是官方的sensenova_u1_t2i_info.json,这是这个模型最有说服力的能力展示,就两个节点:ModelLoader 和 TextToImage。Load 进去点运行就行。
我用的 prompt 大致是这样的:
这是一张"周末居家咖啡指南"的手绘风格信息图,整体氛围温馨慵懒,像一张贴在咖啡馆墙上的手写海报。画面长宽比为16:9。
背景是浅米色(#F5F0E8)的牛皮纸纹理,边缘有轻微的磨损和卷曲效果,像一张被翻过很多次的旧卡片。整体色调温暖——以咖啡棕(#6B4226)为主色,奶油白(#FFF8F0)为底,焦糖橙(#D4854A)作为点缀色,薄荷绿(#7BAE8E)用于小图标。
画面正上方居中,用手写体粗字写着大标题"☕ 周末居家咖啡指南",标题下方用咖啡棕色手写小字写着"从一杯手冲开始你的慢时光"。标题左右两侧各有一片手绘的咖啡叶子装饰,叶子用薄荷绿色线框勾勒。
画面主体分为左、中、右三个区块。
左侧区块标题是"手冲四步法",用咖啡棕色手写粗体。下方竖排四个步骤,每个步骤左侧有一个薄荷绿色圆形编号,右侧是说明文字和简笔画小图标:
① 研磨 — "中细研磨,像白砂糖的粗细" 旁边画一个手摇磨豆机的简笔画
② 温杯 — "92°C热水,先用少量水润湿滤纸" 旁边画一个冒着热气的杯子
③ 注水 — "从中心向外画圈,总量240ml,分三次注入" 旁边画一个手冲壶往下注水
④ 等待 — "总萃取时间2分30秒,不要急" 旁边画一个小沙漏
四个步骤之间用虚线箭头从上往下连接。
中间区块是最大的,标题是"三款豆子怎么选",用咖啡棕色手写粗体。下方横排三张小卡片,每张卡片宽度相等:
第一张卡片:顶部画一颗浅棕色咖啡豆简笔画,卡片标题"埃塞俄比亚 耶加雪菲",下方写着"风味:柑橘、茉莉花、蜂蜜",底部一个标签写着"果酸明亮 ★★★★★"
第二张卡片:顶部画一颗深棕色咖啡豆简笔画,卡片标题"哥伦比亚 慧兰",下方写着"风味:焦糖、坚果、巧克力",底部标签"均衡醇厚 ★★★★"
第三张卡片:顶部画一颗中棕色咖啡豆简笔画,卡片标题"云南 保山",下方写着"风味:红糖、桂圆、木质",底部标签"国产之光 ★★★★"
每张卡片用极浅的咖啡色细边框包裹,卡片之间留有空隙。
右侧区块标题是"小贴士",用焦糖橙色手写粗体。下方竖排三条tips,每条前面有一个焦糖橙色的小灯泡图标:
"水温别超过96°C,会过苦"
"粉水比1:15是万能公式"
"喝完记得清洗器具,咖啡渍会越积越苦"
三条tip下方画一个简笔画的猫咪趴在咖啡杯旁边的场景,猫咪用薄荷绿色线框勾勒,表情慵懒。
画面最底部居中用咖啡棕色手写小字写着"生活不需要太多仪式感,一杯好咖啡就够了 · 2026"。
绝对不能出现以下内容:任何真实人脸照片、任何3D立体渲染效果、任何荧光色或高饱和度颜色、任何赛博朋克或科技风格元素。所有插画必须是手绘简笔画线框风格,线条有轻微的手抖感,像用铅笔在纸上画的。
精确到每个区块的位置、颜色、字体、图标风格,还有"绝对不能出现什么"的排除约束。参数:num_steps=8,cfg_scale=4.0,timestep_shift=3.0,resolution=2720x1536。

生成结果如上,说实话结果让我有点意外。左中右三栏对齐,所有文字零错误,色板严格匹配 prompt 里指定的 hex 值,图标风格统一,风格也一丝不苟地执行了。
我之前用 Midjourney 和 GPT 做类似的事情,超过 500 词的 prompt 就开始丢指令,超过800字,文字和风格就很容易崩掉,而这个SenseNova U1.5 Lite能力意味着你可以把 prompt 当设计需求文档来写,模型能像设计师一样按需求执行。
这里再分享一些我做的信息图:


4.2 图像编辑:原生支持 mask 和多图参考
信息图跑通了,接下来我想试试它的另一个核心能力——图像编辑。官方的示例工作流是 image_editing.json。说实话,测完这一项之后我觉得这是整个模型最有商用价值的部分。

它原生支持四种编辑方式:mask(指定区域重绘)、bbox(边界框控制)、视觉标记(在图上画框告诉模型"改这里")、多图参考(最多 10 张有序参考图)。
和 SDXL + ControlNet 比,最大的区别是"原生"两个字。不需要额外装一堆插件,不需要对齐不同模型的 latent space,一个 SenseNovaU1LocalImageEdit 节点拖进去就行了。
4.3 图文交织:让模型讲故事
前面测的都是单张图。但 SenseNova U1.5 Lite 还有一个很有意思的能力——图文交织(Interleave)。简单说就是模型可以一次性生成多页图文混排内容:每一页是一张插画配一段叙述文字,页与页之间风格统一、叙事连贯。
这里我用的是官方的示例工作流是 interleave.json。这个能力用来做绘本、教程、旅行日记特别合适。
这里我写了一个原创绘本故事来测试,主题是"噜噜的四季花园日记"。prompt 如下:
请生成一个4页的图文绘本故事,主题是"水豚噜噜的四季花园日记"。
画风:水彩手绘风,色调温暖明亮,线条柔和有纸张质感,像儿童绘本插画。
主角是一只圆滚滚的水豚,名字叫噜噜,一脸佛系,头上顶着一个橘子。
第一页(春天):
画面:噜噜蹲在一片刚翻过的泥土旁边,身边放着一个小铲子和几包花种。背景是一棵刚发芽的樱花树,花瓣随风飘落。阳光从云层缝隙里洒下来,色调嫩绿+浅粉。
文字:"三月,我在院子角落翻了一小块地。邻居老张说这土太瘦,种不活什么。我不信。反正我也不着急。"
第二页(夏天):
画面:花园里开满了向日葵和牵牛花,噜噜半个身子泡在一个小木盆里,头上顶着那片荷叶,眯着眼晒太阳。一只蜻蜓停在它的鼻尖上。色调金黄+翠绿,阳光充沛。
文字:"七月,向日葵长得比我还高。我找到一个小木盆,灌满水,刚好够泡澡。蜻蜓也来了,它大概觉得我是这块地里最圆的那颗石头。"
第三页(秋天):
画面:花园里的植物开始变色,噜噜坐在一堆落叶中间,面前摆着几个南瓜和几朵菊花,嘴里叼着一根狗尾巴草。远处有一棵柿子树挂满红果。色调橙红+暖棕。
文字:"十月,院子里多了好多颜色。我数了一下,光是黄色就有七八种。南瓜比我脸还大,我决定先跟它合个影再吃。"
第四页(冬天):
画面:花园覆了一层薄雪,噜噜坐在窗台上透过玻璃往外看,身上裹着一条小毯子。窗台上放着一杯冒着热气的茶。窗外能看到枯萎的花枝上挂着红色小灯笼装饰。色调冷蓝+暖橙(窗内灯光)。
文字:"十二月,花园睡着了。我在窗台上给它留了一盏灯,顺便把那条毯子分了一半给窗台上的多肉。等春天来了,我要再多种一排薄荷。"

生成的是一个 4 页图文故事。每页都是一张独立的插画,配上叙述性文字,图与图之间风格高度统一——在四页里始终保持同样的外观,只是季节在变,性格始终是那种不紧不慢的佛系劲儿。
五、性能和参数
功能跑通了,接下来聊点实际的: SenseNova U1.5 Lite到底多快、多吃资源。对于想评估是否落地的团队来说,这部分可能比前面那些 demo 更有参考价值。我直接上本次实测的数据:
| 阶段 | 耗时 |
|---|---|
| 权重下载(40GB,8 路并发) | ~1 小时【视网络情况不同】 |
| Docker 镜像构建 | ~50 分钟 |
| 模型加载到 GPU | ~30 秒 |
| T2I 8 步 2720×1536 | ~30 秒 |
| T2I 50 步 2048×2048 | ~3 分钟 |
GPU 运行状态:

模型常驻显存 32GB 左右,推理过程中间变量大约需要 8GB。40GB 卡跑 bf16 full 是个紧平衡,建议使用单卡80GB,或者双卡40GB*2启动。
参数方面分享两个经验:
think_mode 建议复杂任务打开。 它会让模型先做一轮 Chain-of-Thought 推理,再做 flow-matching 生成。多区块布局、长文字渲染这类任务效果提升明显。简单的 T2I 可以不开,开了会慢一些。
编辑任务用双约束 prompt。 同时告诉模型"改什么"和"保留什么"。比如 “Change the background to sunset while preserving the subject’s pose and clothing”。只说"改什么"不说"保留什么",模型有时候会把不该改的也改了。
| 场景 | num_steps | cfg_scale | timestep_shift | 分辨率 |
|---|---|---|---|---|
| 信息图/海报 | 50 | 4.0 | 3.0 | 2048² |
| 8 步加速 | 8 | 1.0 | 3.0 | 2K |
| 图像编辑 | 50 | 4.0 | 3.0 | 和输入图一致 |
部署和出图过程中碰到的问题我这里也集中列一下,方便大家排查:
| 症状 | 原因和解法 |
|---|---|
| Tokenizer 报错 / 模型加载静默失败 | 检查一下模型权重文件是否加载完全 |
libcudart.so.13 not found |
torchaudio 版本不匹配,显式装 cu128 版本 |
| 节点找不到模型 | 模型要放 models/sensenova/,yaml 里注册 folder type |
| 节点扫描不到模型目录 | Python 3.10 的 rglob 不跟 symlink,用 bind mount |
| GUI 工作流 API 提交 500 | GUI 格式和 API 格式不一样,需要转换脚本 |
| Interleave 报 NoneType | 必须给输入图,GUI 有兜底但 API 没有 |
六、总结
回到开头运营那边的问题。跑完整个流程之后,我用 SenseNova U1.5 Lite + ComfyUI 搭了一条完整的出图链路:一句话 brief → T2I 出图 → edit节点调细节 → 多图排版,这里涉及公司业务所以工作流暂时就不分享了,其实就是把前面我们测试的那几个工作流串起来:
这里把我整理过后的工作流和dockerfile上传到这个仓库里:https://github.com/Heavenhjs/sensenova-u15-deploy,你们应该一看就能明白。
最后整条链路保存为一个 ComfyUI JSON 工作流,发给运营同事 Load 就能跑。
运营最大的感受是"意图传递"的损耗少了很多。之前用拼接方案,每次都要做一层"翻译"——把脑子里的想法写成文字 prompt,再把 prompt 塞给生图模型,中间丢了多少信息自己都不知道。SenseNova 的原生统一架构天然减少了这种损耗,prompt 里写的东西,出来的图真的能一条不漏地执行。
然后是一致性的惊喜。同一套品牌海报,前一张扁平风后一张写实渲染,放一起怎么看怎么别扭——这在之前是常态。用 Prompt Builder + T2I 的链路,风格和布局的一致性稳定得多。这下,我们运营都开始用这个做产品海报/营销物料的批量生成、信息图和报告配图了,不得不说SenseNova U1.5 Lite 确实有一套。
需要注意的: 40GB 显存是硬门槛(没 40GB 卡就只能走 balanced 或量化);英文 prompt 的效果略逊于中文(我的做法是:技术描述用英文、约束条件用中文,中英混合编写)。
如果你也在折腾类似的事情,建议直接上手试。有 40GB 卡的话一个下午就能跑通,剩下的自己判断。
为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐

所有评论(0)