siliconflow/onediff

SD1.5的UNet2DConditionModel 额外增加输入模块后使用nexfort接口进行编译报错

xiangcp opened this issue · 10 comments

Your current environment information

PyTorch version: 2.3.1+cu121

OneFlow version: path: ['/home/miniconda3/envs/sd/lib/python3.10/site-packages/oneflow'], version: 0.9.1.dev20240729+cu121, git_commit: f230775, cmake_build_type: Release, rdma: True, mlir: True, enterprise: False
Nexfort version: 0.1.dev260
OneDiff version: 1.2.1.dev6
OneDiffX version: unknown version

🐛 Describe the bug

相对于原始UNet2DConditionModel多了三个输入模块,down_block_add_samples,mid_block_add_sample,up_block_add_samples
image (15)
image (13)
请问下,怎么解?有没有类似的文档或者示例

nexfort 编译的 options 里面增加一个字段 "inductor.optimize_linear_epilogue": false 试一下呢

"inductor.optimize_linear_epilogue": false

TypeError: nexfort_compile() got an unexpected keyword argument 'inductor.optimize_linear_epilogue'
貌似没这个参数

nexfort_compile(your_model, options={ 'inductor.optimize_linear_epilogue': False })

nexfort_compile(your_model, options={ 'inductor.optimize_linear_epilogue': False })

我是这样输入的,pipe.unet = compile(pipe.unet, backend="nexfort",options={ 'inductor.optimize_linear_epilogue': False })
还是报错

nexfort_compile

我用你这个方法测了下,没问题,编译成功了,很牛逼,非常感谢!

nexfort_compile(your_model, options={ 'inductor.optimize_linear_epilogue': False })

再请教下,每次不同的输入尺寸的都会出发再次编译,这里怎么处理?

nexfort_compile(your_model, options={ 'inductor.optimize_linear_epilogue': False })

再请教下,每次不同的输入尺寸的都会出发再次编译,这里怎么处理?

用你常用的几种分辨率推理一下,做下预热。后面遇到类似分辨率会自动命中缓存。

nexfort_compile(your_model, options={ 'inductor.optimize_linear_epilogue': False })

我是这样输入的,pipe.unet = compile(pipe.unet, backend="nexfort",options={ 'inductor.optimize_linear_epilogue': False }) 还是报错

如果调用 compile 然后显式指定 backend=nexfort 的话,options 应该是

options = {
    "options": {
        "inductor.optimize_linear_epilogue": False,
    },
    "dynamic": True, # 如果你需要动态分辨率,就加上这个
}

我想问问你加上"inductor.optimize_linear_epilogue": False,后编译时间有没有变长很多? @xiangcp
我的话原本20分钟编完 加上以后一个小时都没出来