论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
人工智能
›
人工智能
›
ComfyUI 源代码阅读:步伐启动
ComfyUI 源代码阅读:步伐启动
张国伟
论坛元老
|
2024-10-4 09:09:40
|
显示全部楼层
|
阅读模式
楼主
主题
1518
|
帖子
1518
|
积分
4554
近期打仗 AIGC 方面的内容,项目中用到 ComfyUI 这个组件,这个系列文章主要是阅读 ComfyUI 的源代码,实验分析主要的实行流程。
启动参数
ComfyUI 支持的启动下令比力多,在启动前会先剖析启动参数,详细的启动参数和分析整理如下:
步伐启动流程
主要的启动流程就如上图所示,我们分成不同的模块来详细的分析:
实行启动前的脚本
ComfyUI 启动时会扫描 models 文件夹和 custom_nodes 文件夹,将文件名和路径、文件扩展类型的映射存储在全局变量 folder_names_and_paths 中。
启动前从这个变量中查询到 custom_nodes 的节点路径,找到自定义节点中的前置启动脚本:prestartup_script.py。通过动态加载实行这个脚本文件,并且保存实行信息。
配置 cuda
启动流程的第二步,会设置三个cuda相关的配置:
CUDA_VISIBLE_DEVICES:为当前的实例绑定一个指定的 cuda 装备,通常是一个数字。
CUBLAS_WORKSPACE_CONFIG:用于配置NVIDIA的cuBLAS库。cuBLAS库是一个GPU-accelerated的基础线性代数库,用于在NVIDIA的CUDA平台上进行高性能的矩阵运算。CUBLAS_WORKSPACE_CONFIG的值用于控制cuBLAS库的工作空间配置。它的值是一个由两部门组成的字符串,格式为"minimumSize:maximumSize",其中minimumSize和maximumSize都是以字节为单位的整数。这里会默认设置成 4096字节,即4KB。
PYTORCH_CUDA_ALLOC_CONF:设置 cudaMallocAsync,启用异步分配显存的本领,进步GPU内存分配的效率。
创建 http 服务和任务队列
ComfyUI 中封装了一个类用来表示整个http服务,包括两种类型的参数:
web 相关:MIME、中心件(权限、cors等)、最大上传大小、前端文件、路由链接。
任务实行相关:任务队列、事故循环、异步消息队列,任务数、最后运行的节点id、客户端的id。
创建的过程就是创建一个 PromptServer 的类,初始化上面的两种类型的参数。任务队列是另一个类 PromptQueue,主要包含的都是任务相关的参数。
从外部文件加载模型路径
ComfyUI 是支持复用 webUI 的模型的,实现的方式即通过一个配置文件:extra_model_paths.yaml 来实现,假如在该配置文件中定义了 webUI 模型的路径,ComfyUI 在启动时会将这些路径添加到前面提到的全局变量 folder_names_and_paths 中。
#config for a1111 ui
#all you have to do is change the base_path to where yours is installed
a111:
base_path: path/to/stable-diffusion-webui/
checkpoints: models/Stable-diffusion
configs: models/Stable-diffusion
vae: models/VAE
loras: |
models/Lora
models/LyCORIS
upscale_models: |
models/ESRGAN
models/RealESRGAN
models/SwinIR
embeddings: embeddings
hypernetworks: models/hypernetworks
controlnet: models/ControlNet
复制代码
初始化自定义节点
节点的泉源有三种:
comfyui 自带的基础节点,实现在 nodes.py 文件中。
从 comfy_extras 文件夹中以 nodes_xxx 开头的文件加载的节点,这部门属于 comfyui 支持一些新特性添加的默认实现,比方 flux,sd3等
外部的节点,从 custom_nodes 文件夹加载,主要是开源的一些节点,比方 comfyui-manager 等
初始化自定义节点就是将定义在 comfy_extras 文件夹和 custom_nodes 文件夹的节点通过动态加载的方式加载到内存中,并将它们添加到 NODE_CLASS_MAPPINGS 表和NODE_DISPLAY_NAME_MAPPINGS 表中。
启动worker消费任务
这一步会创建并启动一个新的守护线程,这个线程将实行prompt_worker函数,函数的参数是q和server。 worker 中详细的消费逻辑,我们将在下一部门的内容中详细分析。
启动服务
ComfyUI 的 HTTP 服务是使用 aiohttp 库实现的,它是基于 Python 的 asyncio 库,可以用于处置惩罚并发的 HTTP 请求。
HTTP 服务启动时会启动两个协程,一个是启动 HTTP 服务,另一个是用于监听异步消息队列,并发送消息,实现 websocket 服务中的消息交互本领。
小结
那么到这里 ComfyUI 主要启动流程我们已经分析完毕了,从启动的代码可以发现,ComfyUI 的代码非常简洁,大量运用Python动态加载库来实现代码的动态加载,实现自定义节点的插件体系,方便扩展。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张国伟
论坛元老
这个人很懒什么都没写!
楼主热帖
XAF新手入门 - 类型子系统(Types Info ...
JAVA 装箱拆箱--到底指什么呢? ...
MyBatis 查询数据库
[NOI2010] 航空管制
HarmonyOS(鸿蒙)开发一文入门 ...
ThinkPHP5 远程命令执行漏洞
RabbitMQ入门 -- 阿里云服务器安装Rabb ...
浅入浅出 1.7和1.8的 HashMap
基于 Dubbo Admin 实现同机房/区域优先 ...
来自学长的建议
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
容器及微服务
快速回复
返回顶部
返回列表