由于我电脑上同时装了两个Comfyui作为我站点的绘图服务,一个是给正式服使用,一个是开发测试使用,在使用过程中经常会因为两个Comfyui服务跑图后没有自动释放显存导致爆显存。所以我需要让Comfyui跑完图之后可以自动释放显存。
我自己在网上找了几个方案,测试下来是没有效果,也有可能是我电脑的原因,大家也可以试看看。后来自己在使用的过程中发现,Comfyui在跑新的任务的时候,会把上一次加载到显存的内容给清空(如果加载的模型不一样的情况下),所以我就想着,每次在跑完一次图之后,自动跑个空载的任务(没有加载任何模型的工作流),这样就实现了显存自动释放的效果。
一、使用空载任务清理显存
于是我就在创建完用户的绘图任务后立马创建了一个空载任务,用来清理GPU的显存。
1、空载工作流workflow.json:
{
"last_node_id": 2,
"last_link_id": 1,
"nodes": [
{
"id": 2,
"type": "PreviewImage",
"pos": [
205.499643768773,
298.78351573772534
],
"size": [
210,
246
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 1,
"label": "images"
}
],
"properties": {
"Node name for S&R": "PreviewImage"
}
},
{
"id": 1,
"type": "EmptyImage",
"pos": [
-171,
256
],
"size": {
"0": 315,
"1": 130
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
1
],
"shape": 3,
"label": "IMAGE",
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "EmptyImage"
},
"widgets_values": [
1,
1,
1,
0
]
}
],
"links": [
[
1,
1,
0,
2,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
2、以下是具体java代码的实现:
/**
* 清理GPU显存
*/
public void cleanGpuRam() {
try {
String comfyuiApi = sysParamsService.getValue("sd_img_url");
//comfyui绘图完成后是否清理gpu显存
String isCleanGpuRam = sysParamsService.getValue("comfyui_complete_is_clean_gpu_ram");
String cleanApiJson = sysParamsService.getValue("comfyui_clean_gpu_ram_json");
if ((DicEnums.YesOrNo.YES.getValue() + "").equals(isCleanGpuRam)) {
String promptResult = HttpUtil.sendPost(comfyuiApi + "/prompt",
JSONObject.parseObject("{\n" +
" \"client_id\": \"cleanGpuRam\",\n" +
" \"prompt\": " + cleanApiJson +
"}"),
null
);
}
} catch (Exception e) {
log.error("执行清理GPU缓存的任务失败");
}
}
在创建完用户绘图任务后立即创建一个空载任务,用来清理GPU的显存。
需要注意的是,清理缓存的这步操作要做异常捕获。因为即使没有清空也不影响用户绘图任务的正常执行。
二、其他清理显存的方法介绍
网上找的其他方法虽然我使用没有效果,有可能是我使用方法不当或者说我电脑上的Comfyui环境有问题,所以在此我也把其他方法也列一下,大家如果使用有效的话,希望可以在评论区里告诉我一下正确的使用姿势!
方法1:在启动命令后边加上:–disable-smart-memory
- 如果你是用命令行启动,那就在启动脚本中加上这个参数
- 如果你用的是秋叶启动器,那就高级选项中,关闭智能显存优化
但是我用了并没有效果。。。。。。。。不知道咋回事
方法2:使用ComfyUI-Easy-Use插件中提供的easy cleanGpuUsed节点
ComfyUI-Easy-Use插件地址:
https://github.com/yolain/ComfyUI-Easy-Use
这个用法是把easy cleanGpuUsed节点添加到工作流运行的末尾!
但是我用了并没有效果。。。。。。。。不知道咋回事
三、最后是介绍下Comfyui工作流封装成web站点、H5、小程序、App的源码介绍
项目中接入了国内外各大平台的gpt聊天模型,使用milvus作为向量数据库,可上传知识库文档。可AI接管微信、QQ钉钉、企业微信等社媒平台!绘图接入了comfyui和dalle,实现了电商换装、换脸、ai抠图、图片变高清、智能扩图、艺术二维码等功能。
源码地址:
https://wailikeji.com/index.php/2023/07/15/chat_draw/
项目体验地址:
https://pcai.wailikeji.com/