onediff
onediff copied to clipboard
关于加速后生成图像质量变差的问题
Describe the bug
使用 onediff 加速之后,生成图像质量变差。请问有什么解决的办法吗?详细对比如下:
加速前生成图像
加速后生成图像
生成变差的区域(红色圈中的地方)
可以提供下复现问题的代码么,这个需要能复现才好办
可以设置环境变量ONEFLOW_CONV_ALLOW_HALF_PRECISION_ACCUMULATION=0和ONEFLOW_MATMUL_ALLOW_HALF_PRECISION_ACCUMULATION=0再试试,设置之后对于conv和linear,onediff会采用更高精度的计算方式
可以设置环境变量ONEFLOW_CONV_ALLOW_HALF_PRECISION_ACCUMULATION=0和ONEFLOW_MATMUL_ALLOW_HALF_PRECISION_ACCUMULATION=0再试试,设置之后对于conv和linear,onediff会采用更高精度的计算方式
但这样设置之后,后影响推理速度吗?
可以设置环境变量ONEFLOW_CONV_ALLOW_HALF_PRECISION_ACCUMULATION=0和ONEFLOW_MATMUL_ALLOW_HALF_PRECISION_ACCUMULATION=0再试试,设置之后对于conv和linear,onediff会采用更高精度的计算方式
但这样设置之后,后影响推理速度吗?
预估影响 5% 的性能,可以试下,看能否解决问题。
可以设置环境变量ONEFLOW_CONV_ALLOW_HALF_PRECISION_ACCUMULATION=0和ONEFLOW_MATMUL_ALLOW_HALF_PRECISION_ACCUMULATION=0再试试,设置之后对于conv和linear,onediff会采用更高精度的计算方式
但这样设置之后,后影响推理速度吗?
预估影响 5% 的性能,可以试下,看能否解决问题。
试了你说的这种方案,得到了改善,但还会有一些差异。这个还有进一步的提升方案吗?
没有添加环境变量的结果:
添加环境变量之后的结果:
确实改善了,现在哪里还有差异呢
确实改善了,现在哪里还有差异呢
现在就剩下颜色上的差异了,可以把我上传的 “加速前生成图像”图像和 “添加环境变量之后的结果”图像 下载到本地,切换着看下,就能发现差异了。
质量评估:https://github.com/siliconflow/OneDiffGenMetrics
另外因为 torch 不同版本的 conv 也会带来写差异,比如 conv kernel cuda v8 api
pytorch的cudnn_convolution计算函数从v7(调用cudnnConvolutionForward,与oneflow一致)更新到了v8(调用cudnnBackendExecute),默认为v8版本
设置TORCH_CUDNN_V8_API_DISABLED=1后pytorch和oneflow的计算结果一致
(https://github.com/Oneflow-Inc/OneTeam/issues/2198)
conv kernel diff: oneflow vs torch cuda v8 api
👌,感谢回复
另外因为 torch 不同版本的 conv 也会带来写差异,比如 conv kernel cuda v8 api
pytorch的cudnn_convolution计算函数从v7(调用cudnnConvolutionForward,与oneflow一致)更新到了v8(调用cudnnBackendExecute),默认为v8版本
设置TORCH_CUDNN_V8_API_DISABLED=1后pytorch和oneflow的计算结果一致
(https://github.com/Oneflow-Inc/OneTeam/issues/2198)
辛苦再给看下这个问题 https://github.com/siliconflow/onediff/issues/762
求问为什么使用onediff生图效果很模糊
求问为什么使用onediff生图效果很模糊
能否提供可以复现的代码以及 prompt(可用于对比)?
求问为什么使用onediff生图效果很模糊
能否提供可以复现的代码以及 prompt(可用于对比)? @lixiang007666 from compel import Compel, ReturnedEmbeddingsType import time from onediffx import compile_pipe, save_pipe, load_pipe from onediffx.deep_cache import StableDiffusionXLPipeline from compel import Compel, ReturnedEmbeddingsType base_model_path = "playground-v2.5-1024px-aesthetic" base_model_name = base_model_path.split("/")[-1]
pipe = StableDiffusionXLPipeline.from_pretrained( base_model_path, torch_dtype=torch.float16, variant="fp16", ).to("cuda")
compel = Compel( tokenizer=[pipe.tokenizer, pipe.tokenizer_2], text_encoder=[pipe.text_encoder, pipe.text_encoder_2], returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, requires_pooled=[False, True], truncate_long_prompts=False, )
pipe = compile_pipe(pipe) if os.path.exists(f"cached_pipe_{base_model_name}"): load_pipe(pipe, f"cached_pipe_{base_model_name}") else: prompt = "A photo of a cat. Focus light and create sharp, defined edges." # Warmup for i in range(1): deepcache_output = pipe( prompt, cache_interval=3, cache_layer_id=0, cache_block_id=0, output_type="pil", ).images[0]
if not os.path.exists(f"cached_pipe_{base_model_name}"): save_pipe(pipe, dir=f"cached_pipe_{base_model_name}") logger.info("Pipeline compiled successfully.")
images = pipe( prompt=prompt, negative_prompt=negative_prompt, height=height, width=width, num_images_per_prompt=num_images_per_prompt, num_inference_steps=30, guidance_scale=3, cache_interval=3, cache_layer_id=0, cache_block_id=0, ).images
另外,我试了SDXL Base出现了模糊,但是使用playground-v2.5-1024px-aesthetic不会出现模糊。 使用的版本是2.2.0+cu118
另外,我尝试了SDXL Base出现了模糊,但是使用playground-v2.5-1024px-aesthetic不会出现模糊。 使用的版本是2.2.0+cu118
@strint 您好,方便的话能把pytorch版本、cuda版本等关键配置信息分享一下吗? 我们希望至少能跑通SDXL Base
另外,我尝试了SDXL Base出现了模糊,但是使用playground-v2.5-1024px-aesthetic不会出现模糊。 使用的版本是2.2.0+cu118
@strint 您好,方便的话能把pytorch版本、cuda版本等关键配置信息分享一下吗? 我们希望至少能跑通SDXL Base
你用的 prompt 和种子是什么,我们看能否复现你这个问题。如果有代码更好
torch.version '2.1.1' CUDA Version: 12.2
@csdY123
deepcache是有损的,可能导致模糊的问题,请去掉下面这些参数关掉deepcache关掉再试。
cache_interval=3,
cache_layer_id=0,
cache_block_id=0,
torch.version '2.1.1' CUDA Version: 12.2
@strint
非常感谢!!!另外,请问deepcache是使用了int8推理吗
有损的,可能导致模糊的问题,请去掉下面这些参数关掉
非常感谢,deepcache是使用了int8推理吗
另外,我尝试了SDXL Base出现了模糊,但是使用playground-v2.5-1024px-aesthetic不会出现模糊。 使用的版本是2.2.0+cu118
@strint 您好,方便的话能把pytorch版本、cuda版本等关键配置信息分享一下吗? 我们希望至少能跑通SDXL Base
你用的 prompt 和种子是什么,我们看能否复现你这个问题。如果有代码更好
prompt="silhouette style manga style "A cluttered garage with a worn-out couch where a muscular college student, identified as Dante, is seated, strumming an untuned bass guitar. His expression is focused yet frustrated. The side door of the garage is slightly ajar. He seems to have missed noticing a departing figure - suggested by a retreating back view of a character just outside the side door." . vibrant, high-energy, detailed, iconic, Japanese comic style . colorful, high contrast, minimalistic, stark, dramatic
"
种子是随机的,没记录,但是都挺模糊;
该prompt效果是:
代码上面已经提到
torch.version '2.1.1' CUDA Version: 12.2 @strint
非常感谢!!!另外,请问deepcache是使用了int8推理吗
社区版默认是没有开 int8 推理的。int8 推理属于企业版的功能,只对少量模型做了 int8 量化。
有损的,可能导致模糊的问题,请去掉下面这些参数关掉
非常感谢,deepcache是使用了int8推理吗
deepcache会跳步