记一次ComfyUI工作流bug查找过程 原创
“ 经验主义不可犯,否则是需要付出代价的 ”
在上一篇文章中说过最近在做ComfyUI工作流方面的业务,具体的可以看之前的文章——再谈大模型工作流技术之——ComfyUI框架。
由于ComfyUI并不是一个组织或企业开发的,因此它目前的生态还不够完善,甚至没有一个完善的官方文档。特别是对程序员来说,想使用ComfyUI的接口要么自己去网上找一些别人使用接口的说明或者是去github上自己翻官方提供的一些简单案例。
而这次问题就出在接口上。
ComfyUI工作流问题
在上一篇文章中说,ComfyUI就是一个工作流配置工具,它通过web页面根据具体的业务需求进行配置,一个工作流由多个节点组成,每个节点可以完成特定的功能,比如说调用大模型。
而工作流经过炼丹师的配置,就可以调用不同的大模型来完成特定功能的任务,而工作流最终的输出结果是一个JSON配置文件,开发人员就可以通过对这个JSON文件的特定节点进行调整,然后把调整之后的JSON内容上传到ComfyUI服务,即可获得特定的效果。
今天的这个问题就出在这个JSON文件上,在刚开始的认知中,这个JSON文件就相当于一个模板,根据不同的需求把参数替换一下就行了。
而今天使用ComfyUI github仓库中提供的案例代码,去访问ComfyUI服务端,使用炼丹师提供的json文件去获取结果。
JSON文件是经过测试的,在web页面上可以成功生成需要的图片;而使用官方提供的prompt接口生成图片时,通过websocket监听服务端的生成状态,当服务端响应生成完成时,则调用history接口获取任务执行的结果。
而就是在这一步,通过history接口响应的状态都是成功的,但就是没有返回生成文件的名称和路径。
然后就把github上提供的几个案例都在服务器上跑了一下,结果都获取不到。
而之前做的一个视频生成的业务,调用ComfyUI工作流就可以获取到。
因此,这时就想到一个思路,既然案例代码都不行,那么是ComfyUI本身的bug,还是现在的环境有问题?
因此,这时就找到在之前视频生成的代码,把视频生成的业务给跑一遍,结果发现视频生成竟然是正常的。
而且在此之前,还把ComfyUI github上的代码下载到了本地,看了一部分源码也没发现问题在哪。
ComfyUI github地址
https://github.com/comfyanonymous/ComfyUI/tree/master/script_examples
而最终是怎么解决这个问题的呢?
其实解决这个问题更多的是一种运气,因为从理论上来说,官方提供的案例代码一般情况下不会有什么问题,因此我就把官方的案例代码给跑了好多遍,每一遍都会把它们输出的结果拿出来对比一下。
因此,在跑视频生成业务的时候,又习惯性的看一下接口输出,结果发现视频业务和图片生成业务在JSON内容上有区别。
毕竟是两种完全不同的业务,有区别其实也是正常的,但根据自己的经验来说,在视频生成业务中有一个节点是关于文件存储的,但在图像业务中就没有这个节点。
这时,这个节点就引起了我的注意,刚好问了一下炼丹师,炼丹师说视频业务和图像业务在存储方式上不一样,图像业务有一种存储方式可能会有问题,因此就没有用。
所以,为了验证是否是这个问题,就让炼丹师把存储方式给改了一下;这时图像生成就能正常返回了。
之所以写这篇文章的目的,并不是说这个问题本身,而是说很多时候人会陷入经验主义;在刚开始从来没想过JSON文件会有问题,其次即使JSON文件有问题最多只是会影响图片的生成,但没想到会影响接口的返回。
本文转载自公众号AI探索时代 作者:DFires