准备模型
你需要 Python 3.12 或更高版本、uv,以及支持 CUDA 和 BF16 的 NVIDIA GPU。
在 PhyAI 仓库根目录运行:
MOSS_CHECKPOINT 设为已有目录,跳过下载命令。
请使用完整的 checkpoint,包括 tokenizer 和各组件的配置文件。
在设置了该变量的终端中启动模型。先用 nvidia-smi 查看可用 GPU,再调整示例中的 CUDA_VISIBLE_DEVICES。
一键启动 server 和 UI
使用launch 在同一个终端启动两个进程:
--port 修改 UI 端口,通过 --server-port 修改本地 gRPC 端口,后者默认 50063。
--cpu-offload 在需要时将文本编码器和 VAE 移到 GPU。启用 CUDA Graph 时,transformer 会常驻 GPU,
因此仍需为 transformer 和当前使用的组件留出显存。
--torch-compile 编译 transformer 中的部分运算;首次启动或请求可能需要等待编译和图捕获完成。
预热 CUDA Graph bucket
CUDA Graph 默认开启。可以在接收请求前预热常用尺寸:--graph-bucket HEIGHT WIDTH TEXT_TOKENS 的前两个参数是图片高、宽,单位为像素,必须是 16 的倍数。
文本容量向上归一化到 64、128、256、512、1024、2048、4096,例如 100 会使用 128。
重复添加参数可预热多个 bucket。每个归一化后的不同 bucket 至少预留两个缓存条目,用于默认 guidance 分支,因此这两个 bucket 至少需要四个缓存条目。
每个模型副本的默认缓存容量为 4。
相同图片尺寸和计算路径下,不同实际文本长度可以复用同一个容量的图,例如 18、31、64 token 共用一个图。
如果已有更大的 bucket,且相对请求首选 bucket 增加的计算行数不超过 25%,也会直接复用。
图按单个样本捕获,可以跨不同 batch 组成复用;attention 中的 padding 与有效 token 隔离。
这些参数指定启动时预热哪些图,不限制请求尺寸。其他请求会尝试复用已有图,必要时按需捕获。
缓存淘汰较旧的条目,并保护当前请求正在使用的图;如果所有条目都在使用,剩余形状直接执行,不捕获新图。
关闭 CUDA Graph 时,添加 --no-cuda-graph 并去掉 --graph-bucket。
多卡 serving
每张 GPU 启动一个模型副本,处理并发请求:--devices 使用 CUDA_VISIBLE_DEVICES 范围内的逻辑编号。
上面的命令启动两个独立模型副本,各自维护图缓存。每个请求在一张 GPU 上执行,增加副本可提高请求并发数。
launch 默认将 UI 并发数设为副本数。
UI 连接已有 server
在设置了MOSS_CHECKPOINT 的终端中启动 server:
--concurrency 2。
命令行生成图片
.cache/moss_image.png 查看结果。输出图片的高、宽必须为正数且是 16 的倍数。
默认设置为 50 步、guidance scale 3、seed 42、空 negative prompt,负分支跳过索引为 22 的层(索引从 0 开始)。
可以通过 --negative-prompt 指定负面提示词。生成脚本也支持上面的图配置参数。
查看完整参数:

