4060Laptop大战A100?AI绘画硬件性能分析

关于评论区里说的比较多的点,统一回答一下:
目录:
1、xformers,paddle和pytorch
2、模型配置
3、systeminfo插件的benchmark
1、关于xformers,paddle和pytorch:
因为这次的A100和V100都是白嫖的BML Codelab的服务器,在BML Codelab上只能使用paddle框架,因此测试是用paddlenlp ppdiffusers写的。
当然,利用paddle也是可以训练pytorch模型的,修改保存参数部分的代码即可,我这里有一个帮各位观众改好的LoRA训练AI Studio项目,见:https://aistudio.baidu.com/aistudio/projectdetail/6129764?sUid=348157&shared=1&ts=1684341949005
ppdiffusers的文档中,建议在显存足够时不打开xformers,使用xformers会降低显存消耗的同时降低运行速度,为了保证全部任务都能最最快运行,这里所有的运行脚本都没有打开xformers,可以参考右侧这个链接中对enable_xformers_memory_efficient_attentio这个arg的解释(https://github.com/PaddlePaddle/PaddleNLP/tree/develop/ppdiffusers/examples/dreambooth)
但是在huggingface diffusers的官方文档中,无论显存状态如何均建议开启xformers,可以参考这个链接:https://huggingface.co/docs/diffusers/optimization/xformers。
个人怀疑造成这样区别的原因是两个框架对xformers的实现有区别。考虑到huggingface diffusers文档中Memory Efficient Attention部分的示例特意手动调整型精度到fp16(参考:https://huggingface.co/docs/diffusers/optimization/fp16#memory-efficient-attention),个人怀疑huggingface的xformer实现是部分依赖fp16的精度的。
另一方面,阅读xformers的论文(https://arxiv.org/pdf/2205.14135.pdf),查看附录B1可以看到Memory-efficient forward pass的工作方式,分析式2和Recall中的Attention计算方式,不难发现xformers的加速前提是Q、K和V要足够大,这样才能把读取整个Q、K、V需要的时间给节省出来。从这个角度来说,paddle文档中说xformers会导致速度减缓,huggingface文档中说xformers能提升速度,其实都是对的,还是要看具体的场景。
我这里重新进行了实验,4060laptop在使用xformers之后,在fp16的任务中确实均有不同程度的速度下降,但下降幅度轻微,不到1秒,所以我难以判断是否是误差值,但足以说明4060laptop在本测试用到的任务当中使用xformers不会有多少加速,和许多观众朋友的体感不同更多的来源于模型的设置不同。
另一方面,使用torch+diffusers重新测试,和paddle+ppdiffusers的生成时间误差在一秒之内,基本上也可以排除ppdiffusers在已有的fp16成绩上是有负优化的了。
2、关于模型设置:
模型使用的feature_extractor、scheduler、textecoder、tokenizer等等配置与huggingface上模型项目的默认设置相同,例如Anthing的具体配置在https://huggingface.co/admruul/anything-v3.0/blob/main/model_index.json可以看到。测试使用的模型都是diffusers格式的,所以和很多人常用的pt、safetensors格式是不一样的。
推理时,全部使用ppdiffusers的默认设置,所以各任务的默认step数是不一样的,更多的细节请查看视频简介的Benchmark脚本。
3、关于systeminfo插件的benchmark:
这个视频的测试内容没办法用systeminfo插件跑测试,主要是因为这次测试有 7 个项目,涵盖了 6 种推理任务和 1 种训练任务,而systeminfo的benchmark脚本只进行纯文生图任务,有关这一点请参考该插件的benchmark脚本代码,里面还完整地写了benchmark所使用的参数信息:https://github.com/vladmandic/sd-extension-system-info/blob/main/scripts/benchmark.py。