ComfyUIをリモートのDockerで動かして、動画を生成する

ふと、生成AIを試してみたくなりました。

二年前に自分でStable Diffusionを動かしたときは、Stable Diffusion Web UI(AUTOMATIC1111)を使っていました。

しかし、最近のhuggingfaceを見ていると、多くのモデルがHow to useにComfyUI上での動作を上げています。

実際、ComfyUIの画面は、AUTOMATIC1111のWeb UIと違って、ノードベースで処理が表現されていて、いくつかの手順を踏む生成画像の場合には、向いていそうです。

GitHub - comfyanonymous/ComfyUI: The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface.
The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface. - comfyanonymous/Comfy...

そこで、今回はリモートのUbuntu上のDockerにComfyUI環境を整備し、AnimateDiff-lightningで動画を生成してみたいと思います。

環境構築

dev-containerを使いました。以下、ディレクトリ構成です。

comfyui_server
├── .devcontainer
|    ├── Dockerfile
|    ├── devcontainer.json
|    └── docker-compose.yml
ComfyUI(これはgit cloneします)

Dockerfile

imageはpytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtimeをベースにしました。また、ComfyUIのレポジトリにあるrequriements.txtを参考にライブラリを入れました。

FROM pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime

ENV DEBIAN_FRONTEND=noninteractive

ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get update \
    && groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
    && apt-get install -y sudo \
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
    && chmod 0440 /etc/sudoers.d/$USERNAME \
    && apt-get -y install locales \
    && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

RUN apt-get -y install git
RUN apt-get -y install libopencv-dev

RUN pip install einops  \
    transformers>=4.25.1  \
    safetensors>=0.3.0  \
    aiohttp  \
    pyyaml  \
    Pillow  \
    scipy  \
    tqdm  \
    psutil  \
    kornia>=0.7.1  \
    spandrel \
    torchsde \
    torchvision \
    GitPython \
    opencv-python \
    imageio-ffmpeg

ComfyUIの拡張機能で動画を表示するのにopencv-pythonやimageio-ffmpegが必要でした。また、libopencv-devはタイムゾーンを設定していないと、設定を強要されてコンパイルが止まります。ENV DEBIAN_FRONTEND=noninteractiveを入れると、入力待ちになりません。

devcontainer.json

名前とサービス名を決定してください。また、必要な拡張機能を入れてください。今回は、dev-containerを使いますが、プログラムを弄りたいわけではないので、拡張機能は入れなくても大丈夫です。

{
    "name": "comfyui-server",
    "service": "comfyui-server",
    "dockerComposeFile": "docker-compose.yml",
    "remoteUser": "vscode",
    "workspaceFolder": "/work",
    "customizations": {
      "vscode": {
        "extensions": [
          "ms-python.python",
          "ms-toolsai.jupyter"
        ]
      }
    }
}

docker-compose.yml

設定したサービス名を間違えないでください。

また、GPUを使うので、GPUが使えるようにdeployを書き足します。

version: '3'
services:
  comfyui-server:
    container_name: 'comfyui-server-container'
    hostname: 'comfyui-server-container'
    build: .
    restart: always
    working_dir: '/work' 
    tty: true
    volumes:
      - type: bind
        source: ..
        target: /work
    ulimits:
      memlock: -1
      stack: -1
    shm_size: '10gb'
    deploy:
      resources:
          reservations:
              devices:
                - capabilities: [gpu]

ComfyUIの実行

コンテナをビルドして、中に入ったらComfyUIをcloneします。

git clone https://github.com/comfyanonymous/ComfyUI.git

その後、クローンしたディレクトリに移動します。main.pyをpythonで実行することでサーバーが動作します。

python main.py

特段、エラーログが表示されなければ成功です。

URLが表示されるので、クリックすればWeb上にComfyUIの画面が表示されます。

Starting server

To see the GUI go to: http://127.0.0.1:8188

ComfyUI-Managerのインストール

拡張機能はComfyUI-Managerを使うのが良いです。

GitHub - ltdrdata/ComfyUI-Manager: ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom nodes of ComfyUI. Furthermore, this extension provides a hub feature and convenience functions to access a wide range of information within ComfyUI.
ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install,...

Installationに次のように書いてあるので、従います。

  1. goto ComfyUI/custom_nodes dir in terminal(cmd)
  2. git clone https://github.com/ltdrdata/ComfyUI-Manager.git
  3. Restart ComfyUI
https://github.com/ltdrdata/ComfyUI-Manager installation

ComfyUIを再起動すると、画面の右サイドバーにManagerのボタンが追加されています。

拡張機能のインストール

拡張機能の入れ方は、Managerボタンを押した後、「install Custom Nodes」を押します。

その後、次の2つを検索ボックスに入れて、installします。

インストールが成功すれば、「install Custom Nodes」には次のように表示されます。

モデルのダウンロード

ベースモデルのダウンロード

まず、Stable Diffusionのベースとなるモデルをダウンロードします。

今回は、アニメ風のMistoon_animeにしました。

Mistoon_Anime - v3.0 | Stable Diffusion Checkpoint | Civitai
Join our community Discord: You can now get all my LoRAs in one single package if you subscribe to my Patreon (includ...

これをダウンロードした後、ComfyUI/models/checkpointsへ入れます。

AnimateDiff-Lightingのダウンロード

次に、AnimateDiff-Lightningのモデルをダウンロードします。

ByteDance/AnimateDiff-Lightning at main
We???re on a journey to advance and democratize artificial intelligence through open source and open science.

今回は、8stepのモデルをダウンロードしました。

これを、ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/modelsへと入れます。

ワークフローのロード

基本のワークフロー(ComfyUIの処理の流れのこと)をAnimateDiff-Lightningが公開しているので、これをダウンロードします。

https://huggingface.co/ByteDance/AnimateDiff-Lightning/raw/main/comfyui/animatediff_lightning_workflow.json

ダウンロード後、ComfyUIの右のサイドバーから、Loadを選択し、ダウンロードしたワークフローを読み込みます。

エラーがあれば、表示されます。

モデルの設定と実行

各種、設定項目を変更します。

  1. Load Checkpointにあるベースのモデルを、ダウンロードしたモデルへ変更します。矢印を押すとmodels内のモデルが表示されるので、mistoonAnime_v30.safetensorsにします
  2. AnimateDiff Loaderのモデルも変更します。矢印をおすと、ダウンロードしたanimatediff_lightning_8step_comfyui.safetensorsに変更されます。
  3. KSamplerのstepsを8にします。

設定項目を入力したら、右サイドバーのQueue Promptを押すと、処理が始まります。

出力は、ComfyUI/outputに吐き出されています。

今回の結果は次の動画が生成されました。

動画にはなっていますが、ほとんど動きはありません。

Control NetやMotion LoRAを組み合わせると、動きのある動画が生成されやすいようです。

興味が続いたら、今後やってみます。

今回の記事はここまでです。

タイトルとURLをコピーしました