Запускаем ComfyUI на GPU AMD Radeon в Docker

от автора

https://vk.com/video4072868_456239383

В этой статье я хочу рассказать об опыте контейнеризации с использованием видеокарты Radeon от AMD. В качестве примера возьмём ComfyUI и поместим его в контейнер. А в конце, для демонстрации успешной работы, создадим видео в стиле аниме.

Всё нижеизложенное протестировано на AMD Radeon RX 7900 XTX.

ROCm от AMD

В октябре 2023 года AMD занялась поддержкой PyTorch для своих видеокарт. Платформа ROCm от AMD — это аналог CUDA от Nvidia, которая обеспечивает ускорение массовых параллельных вычислений. Плюсом AMD является то, что код ROCm открыт и их видеокарты, как правило, дешевле, чем у Nvidia. Но к существенным недостаткам AMD можно отнести то, что сообщество программистов, использующих видеокарты Radeon, меньше, чем GeForce, что приводит к трудностям поиска решений возникающих проблем.

Для возможности подключения видеокаты к контейнеру необходим ROCm. Поэтому набор программ для Ubuntu будет состоять из git, make, docker и ROCm. ОС и первые три программы всем хорошо известны, разбирать их установку здесь не будем, а ROCm можно установить по инструкции.

Краткая инструкция установки ROCm
sudo apt update sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)" sudo usermod -a -G render,video $LOGNAME wget https://repo.radeon.com/amdgpu-install/6.1.2/ubuntu/jammy/amdgpu-install_6.1.60102-1_all.deb sudo apt install ./amdgpu-install_6.1.60102-1_all.deb  # При ошибке необходимо выполнить: sudo chown -Rv _apt:root /var/cache/apt/archives/partial/ sudo chmod -Rv 700 /var/cache/apt/archives/partial/  sudo apt update sudo apt install amdgpu-dkms rocm

Контейнеризация

Для контейнеризации AMD предлагает создавать пользовательские образы на основе исполняемого файла build.sh. Этот файл собирает образы из Dockerfile по переданным параметрам. Собранный образ служит основой для помещения в контейнер любого проекта.

Выбрав только самые необходимые пакеты и ограничив комбинацию загрузкой только свежих версий, можно получить компактный и легко читаемый базовый образ.

Код базового образа
# https://github.com/ROCm/ROCm-docker/blob/master/dev/Dockerfile-ubuntu-22.04-complete # https://github.com/microsoft/onnxruntime/blob/main/tools/ci_build/github/pai/rocm-ci-pipeline-env.Dockerfile FROM ubuntu:22.04  ARG ROCM_VERSION=6.1.3 ARG AMDGPU_VERSION=${ROCM_VERSION} ARG APT_PREF='Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' RUN echo "$APT_PREF" > /etc/apt/preferences.d/rocm-pin-600  ENV DEBIAN_FRONTEND noninteractive  RUN apt-get update && apt-get install -y \     libopenblas-dev \     ninja-build \     build-essential \     pkg-config \     curl \     wget \     git \     make  RUN curl -sL https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - && \     printf "deb [arch=amd64] https://repo.radeon.com/rocm/apt/$ROCM_VERSION/ jammy main" | tee /etc/apt/sources.list.d/rocm.list && \     printf "deb [arch=amd64] https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/ubuntu jammy main" | tee /etc/apt/sources.list.d/amdgpu.list RUN apt-get update && apt-get install -y \     rocm-dev \     rocm-libs  ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # Install Conda ENV PATH /opt/miniconda/bin:${PATH} RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh --no-check-certificate && /bin/bash ~/miniconda.sh -b -p /opt/miniconda && \     conda init bash && \     conda config --set auto_activate_base false && \     conda update --all && \     rm ~/miniconda.sh && conda clean -ya ENV PYTHON_VERSION=3.11 RUN conda install python=${PYTHON_VERSION} pip  # https://github.com/comfyanonymous/ComfyUI/issues/3698 ENV TORCH_BLAS_PREFER_HIPBLASLT=0 RUN pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.1  RUN pip install transformers \     peft \     sentencepiece \     scipy \     protobuf --extra-index-url https://download.pytorch.org/whl/nightly/rocm6.1  # https://github.com/agrocylo/bitsandbytes-rocm # or # https://github.com/arlo-phoenix/bitsandbytes-rocm-5.6 ENV PYTORCH_ROCM_ARCH=gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1100,gfx1101,gfx940,gfx941,gfx942 ENV BITSANDBYTES_VERSION=62353b0200b8557026c176e74ac48b84b953a854 RUN git clone https://github.com/arlo-phoenix/bitsandbytes-rocm-5.6 /bitsandbytes && \     cd /bitsandbytes && \     git checkout ${BITSANDBYTES_VERSION} && \     make hip ROCM_TARGET=${PYTORCH_ROCM_ARCH} ROCM_HOME=/opt/rocm/ && \     pip install . --extra-index-url https://download.pytorch.org/whl/nightly/rocm6.1

На основе базового образа, ComfyUI можно поместить в контейнер следующим образом
FROM hardandheavy/transformers-rocm:2.1.0  EXPOSE 80  # To upgrade to the higher version, you need to wait for the problem to be resolved # https://github.com/abetlen/llama-cpp-python/issues/1481 ENV LLAMA_CPP_PYTHON_VERSION=0.2.56 ENV DAMDGPU_TARGETS=gfx900;gfx906;gfx908;gfx90a;gfx1030;gfx1100;gfx1101;gfx940;gfx941;gfx942 RUN CMAKE_ARGS="-DLLAMA_HIPBLAS=ON -DCMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang -DCMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++ -DAMDGPU_TARGETS=${DAMDGPU_TARGETS}" pip install llama-cpp-python==${LLAMA_CPP_PYTHON_VERSION}  WORKDIR /app COPY ./docker/Makefile ./Makefile  CMD make run
  • Первой строкой загружается базовый образ hardandheavy/transformers-rocm, в котором уже содержатся необходимые пакеты для ComfyUI;

  • С 5 по 9 строки устанавливается llama-cpp-python (строки с 5 по 6). Этот пакет необходим для работы различных расширений ComfyUI;

  • 12-й строкой копируется набор команд для загрузки и запуска ComfyUI.

Код Makefile следует читать с 14-й строки. Вначале идёт подготовка окружения: копирование репозитория и установка пакетов ComfyUI. А затем переход в каталог программы и её запуск.

COMFYUI_CHECK_SEED_FILE = /check/comfyui-check-seed-file MANAGER_CHECK_SEED_FILE = /check/manager-check-seed-file  init: if [ ! -f $(COMFYUI_CHECK_SEED_FILE) ]; then \ git clone https://github.com/comfyanonymous/ComfyUI /comfyui && \ cd /comfyui && \ pip install -r requirements.txt && \ touch $(COMFYUI_CHECK_SEED_FILE); fi if [ ! -f $(MANAGER_CHECK_SEED_FILE) ]; then \ git clone https://github.com/ltdrdata/ComfyUI-Manager /comfyui/custom_nodes/ComfyUI-Manager && \ touch $(MANAGER_CHECK_SEED_FILE); fi  run: init cd /comfyui && \ python main.py --listen 0.0.0.0 --port 80

Запуск ComfyUI

После сборки ComfyUI, запуск проекта можно осуществить тремя строками:

git clone https://github.com/HardAndHeavy/comfyui-rocm-docker cd comfyui-rocm-docker make run

При первом запуске будет происходить длительный процесс инициализации. Когда этот процесс завершится, ComfyUI станет доступен по адресу http://localhost.

Создание аниме

Для создания аниме на основе видео воспользуемся статьёй Unsampling for AnimateDiff/Hotshot — An Inner-Reflections Guide и комментарием от Catz, который перечислил необходимые ресурсы для работы. А для удобства чтения статьи текст будет продублирован как краткий перевод с небольшой адаптацией под наш созданный образ.

Файлы настроек, оригинальное видео и результаты генерации можно скачать по ссылке.

Перейдя в ComfyUI, необходимо нажать кнопку «Load» и загрузить файл настройки anime.json. После загрузки на экране будет отображена настроенная связь множества узлов. Некоторые узлы будут отмечены красным цветом, так как для них отсутствуют необходимые расширения. Чтобы исправить это, необходимо нажать кнопку «Manager», затем — «Install Missing Custom Nodes» и, отметив все расширения, нажать «Install». После установки программа предложит перезагрузиться, для чего нужно нажать «Restart». А после обновить страницу, нажав «F5».

Важно заметить, что ComfyUI для данного образа может устареть, и обновленные расширения для него будут несовместимыми. Поэтому необходимо обновить ComfyUI, нажав кнопку «Manager», а затем «Update ComfyUI».

Перед копированием ресурсов для узлов необходимо предоставить доступ к каталогу data, так как контейнер запускался от имени пользователя root. Для этого нужно выполнить команду sudo chmod -R 777 ./data.

Необходимые ресурсы:

Для узла «LoadVideo» выбираем видеофайл original.mp4. Устанавливаем «framerate» на четверть от исходного значения, чтобы получить быстрый результат. А для первоначальной проверки результата установим «imagers_limit» равным 5 кадрам. Для генерации всех кадров «imagers_limit» необходимо установить равным 0.

Для узла «Video Combine» устанавливаем «frame_rate» равным частоте кадров из узла «LoadVideo». В нашем случае это 15, т. е. 60 кадров из оригинального видео разделить на «framerate».

Для узла положительного Promt («CLIPTextEncodeSDXL» зелёного цвета) отредактируем текст вверху и внизу одинаково. В нашем случае текст будет таким: «masterpiece, smooth color, 1 boy, dark hair, simple background, white shirt, blue trousers, barefoot, anime style, stairs, green grass».

После всех настроек мы готовы к созданию аниме. Нажимаем «Queue Promt» и получаем аниме из видео (файл anime.mp4).

Для каждого конкретного видео (узел «LoadVideo») и модели (узел «Load Checkpoint») необходимо настраивать позитивный и негативный промт. Негативный промт требует подстройки реже. Также полезным будет попробовать изменить:

  • «strength» и «end_percent» для узла «Apply Advanced ControlNet»;

  • «resolution» для «Realistic Lineart»;

  • «cfg» для «SamplerCustom».

В завершении попробуем поменять предложенные выше параметры, и результатом будет ещё пара примеров:

Анимация в стиле оригами

Загружаем файл настройки angle.json.

Необходимые ресурсы:

Для узла положительного промта вводим текст: «((masterpiece, best quality)), Origami young man, folding sculpture, wearing white origami shirt, blue origami jeans, dark origami hair, origami barefoot, depth of field, detailed, sharp, 8k resolution, very detailed, cinematic lighting, trending on artstation, hyperdetailed, stairs, green grass».

На выходе получаем видео в стиле оригами (файл angle.mp4).

Идея с оригами взята из видео AnimateDiff Tutorial.

Аниме от Studio Ghibli

Загружаем файл настройки cartoon.json.

Для узла положительного промта вводим текст: «anime key visual, 70s Art, stylized by Studio Ghibli, Shinji Aramaki, 1 boy, dark hair, simple background, white shirt, blue trousers, barefoot, anime style, stairs, green grass»

На выходе получаем видео в стиле аниме от Studio Ghibli (файл cartoon.mp4).

На этом всё. Благодарю всех за внимание! Желаю раскрыть все ваши творческие идеи с ComfyUI и, конечно, использовать больше контейнеризации!


ссылка на оригинал статьи https://habr.com/ru/articles/828576/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *