这是一个在 Amazon EKS 上部署 ComfyUI 的方案。
- IaC 方式部署,极简运维,使用 AWS Cloud Development Kit (AWS CDK) 和 Amazon EKS Bluprints 来管理 Amazon Elastic Kubernetes Service (Amazon EKS) 集群以承载运行 ComfyUI。
- 基于 Karpenter 的能力动态伸缩,自定义节点伸缩策略以适应业务需求。
- 通过 Amazon Spot instances 实例节省 GPU 实例成本。
- 充分利用 GPU 实例的 instance store,最大化模型加载和切换的性能,同时最小化模型存储和传输的成本。
- 利用 S3 CSI driver 将生成的图片直接写入 Amazon S3,降低存储成本。
- 利用 Amazon CloudFront 边缘节点加速动态请求,以满足跨地区美术工作室共用平台的场景。(Optional)
- 通过 Serverless 事件触发的方式,当模型上传 S3 或在 S3 删除时,触发工作节点同步模型目录数据。
分为两个部分介绍方案架构:
方案部署过程
- ComfyUI 的模型存放在 S3 for models,目录结构和原生的
ComfyUI/models
目录结构一致。 - EKS 集群的 GPU node 在拉起初始化时,会格式化本地的 Instance store,并通过 user-data 从 S3 将模型同步到本地 Instance store。
- EKS 运行 ComfyUI 的 pod 会将 node 上的 Instance store 目录映射到 pod 里的 models 目录,以实现模型的读取加载。
- 当有模型上传到 S3 或从 S3 删除时,会触发 Lambda 对所有 GPU node 通过 SSM 执行命令再次同步 S3 上的模型到本地 Instance store。
- EKS 运行 ComfyUI 的 pod 会通过 PVC 的方式将
ComfyUI/output
目录映射到 S3 for outputs。
用户使用过程
- 当用户请求通过 CloudFront --> ALB 到达 EKS pod 时,pod 会首先从 Instance store 加载模型。
- pod 推理完成后会将图片存放在
ComfyUI/output
目录,通过 S3 CSI driver 直接写入 S3。 - 得益于 Instance store 的性能优势,用户在第一次加载模型以及切换模型时的时间会大大缩短。
部署完成后可以通过浏览器直接访问 CloudFront 的域名或 Kubernetes Ingress 的域名来使用 ComfyUI 的前端
也可以通过将 ComfyUI 的 workflow 保存为可供 API 调用的 json 文件,以 API 的方式来调用,可以更好地与企业内的平台和系统进行结合。参考调用代码 comfyui-on-eks/test/invoke_comfyui_api.py
可以参考详细部署指引一步步执行,也可以运行下面的自动化脚本进行部署(目前只支持 Ubuntu,且需要至少 50GB 的磁盘空间)
确保账号下有足够的 G 实例配额。(本方案使用 g6.2x/g5.2x/g4dn.2x 至少需要 8vCPU 或 g6e.x 则至少需要 4vCPU)
rm -rf ~/comfyui-on-eks && git clone https://github.com/aws-samples/comfyui-on-eks ~/comfyui-on-eks
cd ~/comfyui-on-eks && git checkout v0.4.0
region="us-west-2" # Modify the region to your current region
sed -i "s/export AWS_DEFAULT_REGION=.*/export AWS_DEFAULT_REGION=$region/g" ~/comfyui-on-eks/auto_deploy/env.sh
安装所需的工具以及 NPM 库
cd ~/comfyui-on-eks/auto_deploy/ && bash env_prepare.sh
执行以下脚本部署所有资源
source ~/.bashrc
cd ~/comfyui-on-eks/auto_deploy/ && bash deploy_infra.sh
执行以下脚本删除所有资源
cd ~/comfyui-on-eks/auto_deploy/ && bash destroy_infra.sh
假设场景:
- 部署 1 台 g5.2xlarge 来支持图像生成
- 一张 1024x1024 的图片生成平均需要 9s,平均大小为 1.5MB
- 每天使用时间为 8h,每个月使用 20 天
- 每个月可以生成 8 x 20 x 3600 / 9 = 64000 张图片
- 每个月需要存储的图片大小为 64000 x 1.5MB / 1000 = 96GB
- DTO 流量大小约 100GB(96GB + 加上 HTTP 请求)
- ComfyUI 不同版本的镜像共 20G
使用此方案部署在 us-west-2 的总价约为 $441.878(使用 CloudFront 对外)或 $442.378(使用 ALB 对外)
Service | Pricing | Detail |
---|---|---|
Amazon EKS (Control Plane) | $73 | Fixed Pricing |
Amazon EC2 (ComfyUI-EKS-GPU-Node) | $193.92 | 1 g5.2xlarge instance (On-Demand) 1 x $1.212/h x 8h x 20days/month |
Amazon EC2 (Comfyui-EKS-LW-Node) | $137.68 | 2 t3a.xlarge instance (1yr RI No upfront since it's fixed long running) 2 x $68.84/month |
Amazon S3 (Standard) for models | $2.3 | Total models size 100GB x $0.023/GB |
Amazon S3 (Standard) for output images | $2.208 | 64000 images/month x 1.5MB/image / 1000 x $0.023/GB Rotate all images per month |
Amazon ECR | $2 | 20GB different versions of images x $0.1/GB |
AWS ALB | $22.27 | 1 ALB $16.43 fixed hourly charges + $0.008/LCU/h x 730h x 1LCU x 1ALB |
DTO (use ALB) | $9 | 100GB x $0.09/GB |
DTO (use CloudFront) | $8.5 | 100GB x $0.085/GB |
可以在目录 comfyui-on-eks/auto_deploy/
下使用自动化脚本来部署,目前只支持 Ubuntu。
ComfyUI 已经支持了 Flux,要在当前的方案中使用 Flux,只需要:
- 用最新版本的 ComfyUI build docker 镜像,已在 Dockerfile 中完成
- 将 Flux 的模型放到对应的 S3 目录,参考 ComfyUI Flux Examples
用 comfyui sd3 的 workflow 来调用模型推理,参考 comfyui-on-eks/test/
目录
切换到 custom_nodes_demo 分支了解具体细节。
ComfyUI 已经支持了 Stable Diffusion 3,要在当前的方案中使用 Stable Diffusion 3,只需要:
- 用最新版本的 ComfyUI build docker 镜像
- 将 SD3 的模型放到对应的 S3 目录,参考 ComfyUI SD3 Examples
用 comfyui sd3 的 workflow 来调用模型推理,参考 comfyui-on-eks/test/
目录