如何在 Amazon EKS 上構建自定義節點工作流
ComfyUI 是一個基於節點的開源工作流解決方案,專為穩定擴散技術而設,越來越多的創作者使用它。之前我們已經發表了一篇關於如何在 AWS 上部署 ComfyUI 的文章。通常,ComfyUI 用戶會使用各種自定義節點,這些節點擴展了 ComfyUI 的功能,用於構建自己的工作流,經常使用 ComfyUI-Manager 來方便地安裝和管理這些自定義節點。
在我們的文章發布後,我們收到了許多客戶的請求,希望將 ComfyUI 的自定義節點集成到我們的解決方案中。這篇文章將指導您如何在 ComfyUI-on-EKS 中集成自定義節點。
架構概覽
為了在 ComfyUI-on-EKS 解決方案中集成自定義節點,我們需要準備自定義節點代碼和環境,以及所需的模型:
– **代碼和環境**:自定義節點代碼放在 `$HOME/ComfyUI/custom_nodes`,環境通過運行 `pip install -r` 在所有自定義節點目錄中的 `requirements.txt` 文件上準備(自定義節點之間的任何依賴衝突需要單獨處理)。此外,還需要安裝自定義節點所需的任何系統包。這些操作都通過 Dockerfile 完成,構建一個包含所需自定義節點的映像。
– **模型**:自定義節點使用的模型放在 `s3://comfyui-models-{account_id}-{region}` 的不同目錄下。這會觸發一個 Lambda 函數,向所有 GPU 節點發送命令,以將新上傳的模型同步到本地實例存儲。
我們將使用穩定視頻擴散(SVD)——圖像生成視頻的高幀率工作流作為示例,說明如何集成自定義節點(您也可以使用自己的工作流)。
構建 Docker 映像
在加載這個工作流時,將顯示缺少的自定義節點。接下來,我們將把缺少的自定義節點構建到 Docker 映像中。
有兩種構建映像的方法:
1. **從 GitHub 構建**:在 Dockerfile 中,下載每個自定義節點的代碼,並單獨設置環境和依賴。
2. **本地構建**:將所有自定義節點從本地開發環境複製到映像中,並設置環境和依賴。
在構建映像之前,請切換到相應的分支:
“`bash
git clone https://github.com/aws-samples/comfyui-on-eks ~/comfyui-on-eks
cd ~/comfyui-on-eks && git checkout custom_nodes_demo
“`
從 GitHub 構建映像時,您需要找到所有缺失自定義節點的 GitHub URL,並在 Dockerfile 中安裝自定義節點和依賴。
“`bash
RUN apt-get update && apt-get install -y
git
python3.10
python3-pip
libsm6
libgl1
libglib2.0-0
…
RUN cd /app/ComfyUI/custom_nodes && git clone https://github.com/thecooltechguy/ComfyUI-Stable-Video-Diffusion.git && cd ComfyUI-Stable-Video-Diffusion/ && python3 install.py
…
“`
運行以下命令來構建和推送 Docker 映像:
“`bash
region=”us-west-2″ # 修改為您的當前區域。
cd ~/comfyui-on-eks/comfyui_image/ && bash build_and_push.sh $region Dockerfile.github
“`
從 GitHub 構建提供了對每個自定義節點的安裝方法、版本和環境依賴的清晰理解,從而更好地控制整個 ComfyUI 環境。
然而,當自定義節點過多時,安裝和管理可能會耗時,您需要自己找到每個自定義節點的 URL(另一方面,這也可以被視為一種優勢,因為它使您對整個 ComfyUI 環境更加熟悉)。
本地構建
通常,我們使用 ComfyUI-Manager 安裝缺失的自定義節點。ComfyUI-Manager 隱藏了安裝細節,我們無法清楚地知道已安裝的自定義節點。在這種情況下,我們可以通過將整個 ComfyUI 目錄(除了輸入、輸出、模型和其他目錄)複製到 Dockerfile 中來構建映像。
本地構建映像的前提是您已經有一個正常工作的 ComfyUI 環境,並且安裝了自定義節點。在與 ComfyUI 相同的目錄中,創建一個 `.dockerignore` 文件,並添加以下內容以在構建 Docker 映像時忽略這些目錄:
“`
ComfyUI/models
ComfyUI/input
ComfyUI/output
ComfyUI/custom_nodes/ComfyUI-Manager
“`
然後將 `comfyui-on-eks/comfyui_image/Dockerfile.local` 和 `comfyui-on-eks/comfyui_image/build_and_push.sh` 兩個文件複製到與您的本地 ComfyUI 相同的目錄中。
“`bash
COPY ComfyUI /app/ComfyUI
RUN pip3 install -r /app/ComfyUI/requirements.txt
“`
運行以下命令來構建和上傳 Docker 映像:
“`bash
region=”us-west-2″ # 修改為您的當前區域。
bash build_and_push.sh $region Dockerfile.local
“`
這種方法可以輕鬆快速地將您的本地開發環境構建為映像進行部署,而無需關注自定義節點的安裝、版本和依賴細節。
然而,不關注自定義節點的部署環境可能會導致衝突或缺失依賴,這需要手動測試和解決。
上傳模型
使用您首選的方法上傳工作流所需的所有模型到 `s3://comfyui-models-{account_id}-{region}` 相應的目錄。GPU 節點將自動從 Amazon S3 同步(由 Lambda 觸發)。如果模型大且多,您可能需要等待。您可以使用 `aws ssm start-session –target ${instance_id}` 命令登錄到 GPU 節點,並使用 `ps` 命令檢查 `aws s3 sync` 進程的進度。
要設置此演示,您需要將以下模型下載到 `s3://comfyui-models-{account_id}-{region}/svd/`:
– safetensors – 下載
– safetensors – 下載
– safetensors – 下載
– safetensors – 下載
測試 Docker 映像(可選)
由於存在許多不同依賴和版本的自定義節點,運行環境相當複雜。我們建議在構建後在本地測試 Docker 映像,以確保其正確運行。
使用 `comfyui-on-eks/comfyui_image/test_docker_image_locally.sh` 中的代碼。準備模型和輸入目錄(假設模型和輸入圖像存儲在 `/home/ubuntu/ComfyUI/models` 和 `/home/ubuntu/ComfyUI/input` 中),並運行腳本以測試 Docker 映像:
“`bash
bash comfyui-on-eks/comfyui_image/test_docker_image_locally.sh
“`
滾動更新 K8S Pods
使用您首選的方法對在線 K8S Pods 執行滾動更新映像,然後測試服務。
注意,運行此演示時,您需要:
– 使用 g5.2xlarge GPU 節點
– 在加載穩定視頻擴散模型時設置較低的幀數(例如設置為 6)
– 在穩定視頻擴散解碼器節點中設置較低的解碼時間(例如設置為 1)
結論
自定義節點使創作者能夠充分發揮 ComfyUI 的潛力,無縫集成各種功能到他們自己的工作流中。
這篇文章展示了如何將自定義節點構建到 ComfyUI-on-EKS 解決方案中,您可以根據這些指導構建自己的 ComfyUI CI/CD 管道。
以上文章由特價GPT API KEY所翻譯及撰寫。而圖片則由FLUX根據內容自動生成。