Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth

В этой статье на примере набора Stable Diffusion Quick Kit подробно объясняется, как использовать Dreambooth для тонкой настройки модели Stable Diffusion. В статье представлены базовые знания по тонкой настройке модели Stable Diffusion, введение в тонкую настройку Dreambooth, а также демонстрация эффекта тонкой настройки с помощью набора Quick Kit.

Эта статья будет На примере Quick Kit мы подробно объясним, как им пользоваться. Тонкая настройка модели Stable Diffusion, включая базовые знания по тонкой настройке модели Stable Diffusion, введение в тонкую настройку Dreambooth и использование Quick Kit для демонстрации эффекта тонкой настройки с помощью демонстрационной версии.

Официальный сайт Amazon Web Services:https://www.amazonaws.cn

Официальный сайт Amazon Cloud Overseas:https://aws.amazon.com/cn/

01
Тонкая настройка модели устойчивой диффузии
В настоящее время существует четыре основных способа точной настройки модели стабильной диффузии:Dreambooth, LoRA (низкоранговая адаптация больших языковых моделей), текстовая инверсия, гиперсети.

Различия между ними примерно следующие:

Текстовая инверсия (также известная как встраивание) фактически не изменяет исходную модель диффузии. Вместо этого она использует глубокое обучение для определения параметров изображения символа, соответствующих желаемому изображению, и сохраняет их в небольшой модели. Это означает, что если исходная модель не обучена в этой области, встраивание будет сложно «обучить» и не научит модель диффузии отображать контент изображения, который она никогда ранее не видела.
Dreambooth корректирует веса всех слоёв нейронной сети и обучает входное изображение, используя модель Stable Diffusion. По сути, он клонирует исходную модель, корректирует её и независимо создаёт новую. Он может делать практически всё. Недостаток — значительный объём видеопамяти для обучения, но после оптимизации он может выполнить обучение, используя 16 ГБ видеопамяти.
LoRA также использует небольшое количество изображений, но обучает веса отдельных слоёв сети по отдельности. Добавление нового слоя сети в существующую модель позволяет избежать изменения исходных параметров модели и, следовательно, копирования всей модели. Кроме того, оптимизируется количество параметров во вставленном слое, что в конечном итоге обеспечивает очень лёгкий метод настройки модели. Модель, генерируемая LoRA, меньше по размеру и быстро обучается. Для вывода требуются модель LoRA и базовая модель. Модель LoRA заменяет отдельные сетевые слои базовой модели, поэтому её производительность зависит от базовой модели.
Принципы обучения Hypernetworks аналогичны принципам LoRA, хотя официальной документации пока нет. В отличие от LoRA, Hypernetwork представляет собой отдельную модель нейронной сети, которая выводит промежуточные слои, которые можно вставить в исходную модель Diffusion. Таким образом, в результате обучения получается новая модель нейронной сети, которая может вставлять соответствующие промежуточные слои и параметры в исходную модель Diffusion, тем самым устанавливая корреляцию между выходным изображением и входной командой.
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
 Примечание: Картинка взята из интернета.
02
Что такое Dreambooth
Модели Stable Diffusion способны реализовывать разнообразные сценарии генерации изображений, как «текст-изображение», так и «изображение-изображение». Однако, когда на изображении появляется реальный, конкретный объект реального мира, наиболее продвинутые модели «текст-изображение» испытывают трудности с сохранением его ключевых визуальных характеристик. То есть, они не способны имитировать или воспроизводить внешний вид объекта в заданном наборе эталонных данных. Выразительность области вывода таких моделей ограничена. Даже если для обеспечения точного текстового описания объекта используется тонкая настройка Textual Inversion или гиперсеть для сохранения стиля, они всё равно могут создавать экземпляры с различным внешним видом.

Алгоритм DreamBooth настраивает модель Imagen для достижения точного восстановления реальных объектов на изображениях. Благодаря тонкой обработке небольшого количества изображений физических объектов исходная SD-модель может сохранить точность памяти сущности изображения и определить основные особенности и даже тематический стиль сущности в тексте исходного изображения. Это новая «персонализированная» (адаптируемая к потребностям пользователя) модель диффузии текста в изображение.

Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Проблемы и сложности тонкой настройки Dreambooth
Тонкая настройка Dreambooth работает следующим образом: берётся небольшое количество входных изображений, определяется объект объекта (например, игрушечный кот/Роммель), выполняется тонкая настройка изображений экземпляров с помощью instance_prompt, а также предоставляются запрос предварительного определения класса и изображение класса, которые определяют схему сцены или темы (например, в стиле мультфильма или масляной живописи). Затем система извлекает сети UNet и VAE из исходного SD и привязывает к ним запрос экземпляра и запросы сохранения класса. Это гарантирует, что все последующие изображения, содержащие ключевое слово из запроса экземпляра, сохранят объект объекта во входном изображении экземпляра и стиль темы, заданный графикой сохранения класса.

В настоящее время существует два основных метода тонкой настройки DreamBooth:

Один из них — стабильная диффузия. Используйте визуальный интерфейс для выбора моделей, загрузки обучающих изображений и проведения локализованного обучения;
Второй вариант — провести обучение в режиме интерактивной разработки скрипта на сторонней платформе IDE, например, Colab Notebook.
Первый метод можно обучить только на одном сервере или хосте, где развернуто приложение Stable Diffusion WebUI, и он не может быть интегрирован с корпоративными или клиентскими бэкэнд-платформами и бизнес-операциями. Второй метод ориентирован на отдельных разработчиков алгоритмов, проводящих эксперименты и исследования моделей на этапах разработки и тестирования, и не позволяет добиться готового к эксплуатации инженерного развертывания. Кроме того, обучение Dreambooth этими двумя методами требует учета стоимости высокопроизводительных вычислительных ресурсов (особенно для сценариев с высокими требованиями к производительности модели, требующих более 50 изображений классов и подверженных проблемам нехватки памяти), хранения и управления базовыми и настроенными моделями, управления гиперпараметрами обучения, унифицированного мониторинга журналов, ускорения обучения, а также компиляции и упаковки библиотеки зависимостей, помимо прочих сложностей и задач реализации.
03
Использование SageMaker Training Job для тонкой настройки Dreambooth
SageMaker — это универсальная интегрированная платформа разработки для машинного обучения, предоставляющая широкий спектр функций, помогающих пользователям легко создавать, обучать и развертывать модели машинного обучения. На уровне задач обучения SageMaker может использовать различные типы V100, A100, T4 и т. д. Оптимизированные вычислительные ресурсы благодаря моделям BYOC (Bring Your Own Container) и BYOS (Bring Your Own Script) позволяют пользователям использовать собственные обучающие скрипты или настраиваемые образы контейнеров, гибко управлять процессом обучения и применять собственные методы предварительной обработки данных и оценки моделей. Более того, расширенные функции, такие как автоматическая оптимизация гиперпараметров и распределенное обучение, позволяют пользователям использовать специальные фреймворки и библиотеки в SageMaker, гибко и индивидуально настраивать модели Dreambooth. Это устраняет ограничения веб-интерфейса и локальных сред ноутбуков, а также обеспечивает интеграцию с производственными бизнес-системами для инженерного развертывания.

Ниже подробно описывается, как настроить Dreambooth с помощью задания обучения BYOC на Amazon SageMaker. Кроме того, оно оптимизирует использование памяти, управление моделями и гиперпараметры во время обучения Dreambooth. Это позволяет пользователям реализовать этот инженерный подход на собственных платформах машинного обучения или бизнес-системах, снижая общую стоимость владения обучением.

Тонкая настройка Dreambooth на основе технического решения SageMaker
В этой статье объясняется технология тонкой настройки Dreambooth на SageMaker с точки зрения поиска модели, ввода обучающих изображений, вывода модели и типов обучающих задач.
Модель Тянуть
Amazon и HuggingFace являются стратегическими партнерами. Поэтому в задании по обучению SageMaker мы можем использовать API конвейера диффузоров и гиперпараметр pretrained_model_name_or_path для передачи идентификатора модели в стандартном формате URL-адреса модели HuggingFace (например, runwayml/stable-diffusion-v1-5) или каталога файлов модели (например, /opt/ml/model/stable-diffusion-v1.5/). SageMaker автоматически извлечет модель из HuggingFace без регистрации учетной записи или передачи токена для аутентификации. В следующем примере кода показано, как это сделать:
model_dir='/opt/ml/input/fineturned_model/' model = StableDiffusionPipeline.from_pretrained( model_dir, scheduler = DPMSolverMultistepScheduler.from_pretrained(model_dir, subfolder="scheduler"), torch_dtype=torch.float16, )

 

Ввод обучающего изображения
Для входных изображений, используемых для тонкой настройки, обучающее задание SageMaker предоставляет удобный метод ввода обучающих данных. Параметр inputs задаёт имя канала (например, images) в виде словаря и путь к хранилищу входного изображения на S3 в качестве значения. Во время обучающего задания SageMaker изображение загружается из S3 и помещается в каталог /opt/ml/input/data/{channel} на компьютере. Следующий пример кода показывает:
 
images_s3uri = 's3://{0}/drebooth/images/'.format(bucket) inputs = { 'images': images_s3uri } оценщик = Оценщик( role = role, instance_count=1, instance_type = instance_type, image_uri = image_uri, hyperparameters = hyperparameters, environment = environment ) оценщик.fit(inputs)

 

 

Выходные данные модели
После обучения SageMaker по умолчанию упаковывает файл модели в формат model.tar.gz и загружает его в подкаталог с именем, соответствующим заданию обучения, на сервере S3. Производственная система клиента может напрямую получить путь к местоположению через API, что упрощает управление моделью и последующее развертывание вывода, как показано ниже:
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Методы обучения
Amazon SageMaker поддерживает режимы BYOS и BYOC для обучения моделей. Обучение модели Dreambooth включает установку и развертывание множества зависимостей, включая diffusion, huggingface, accel и xformers. Более того, библиотеки с открытым исходным кодом, такие как xformers и accel, имеют различия в совместимости с различными моделями графических процессоров и версиями CUDA и CUDN, что затрудняет их установку и развертывание на вычислительных машинах методом прямой установки pip. Поэтому данное решение использует метод BYOC, основанный на официальных предустановленных базовых образах Pytorch, CUDA и torchversion. Необходимые библиотеки, такие как xformers, устанавливаются путем компиляции и упаковки исходного кода, расширяя образ контейнера для обучения Dreambooth, созданный заказчиком.

Обратите внимание, что для компиляции и установки xformers на Amazon G4dn и G5 требуются CUDA 11.7 и Torch 1.13 или выше, а параметр вычислительной мощности CUDA_ARCH_LIST должен быть установлен на значение 8.0 или выше. В противном случае компиляция сообщит, что мощность графического процессора не поддерживается.

Компиляция и упаковка Ссылка на файл выглядит следующим образом:

FROM pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime ENV PATH="/opt/ml/code:${PATH}" ENV DEBIAN_FRONTEND неинтерактивный RUN apt-get update RUN apt-get install --assume-yes apt-utils -y RUN apt update RUN echo "Y"|apt install vim RUN apt install wget git -y RUN apt install libgl1-mesa-glx -y RUN pip install opencv-python-headless RUN mkdir -p /opt/ml/code RUN pip3 install sagemaker-training COPY train.py /opt/ml/code/ COPY ./sd_code/ /opt/ml/code/ RUN pip install -r /opt/ml/code/extensions/sd_dreambooth_extension/requirements.txt ENV SAGEMAKER_PROGRAM train.py RUN export TORCH_CUDA_ARCH_LIST="7.5 8.0 8.6" && export FORCE_CUDA="1" && pip install ninja triton==2.0.0.dev20221120 && git clone https://github.com/xieyongliang/xformers.git /opt/ml/code/repositories/xformers && cd /opt/ml/code/repositories/xformers && git submodule update --init --recursive && pip install -r requirements.txt && pip install -e . ТОЧКА ВХОДА []

 

Скрипт для отправки упакованного образа в репозиторий образов Amazon ECR выглядит следующим образом:
algorithm_name=dreambooth-finetuning-v3 account=$(aws sts get-caller-identity --query Account --output text) # Получить регион, определенный в текущей конфигурации (по умолчанию us-west-2, если ничего не определено) region=$(aws configure get region) fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # Если репозиторий отсутствует в ECR, создайте его. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Войдите в Docker pwd=$(aws ecr get-login-password --region ${region}) docker login --username AWS -p ${pwd} ${account}.dkr.ecr.${region}.amazonaws.com # Создайте образ docker локально с именем образа, а затем отправьте его в ECR # с полным именем. mkdir -p ./sd_code/extensions cd ./sd_code/extensions/ && git clone https://github.com/qingyuan18/sd_dreambooth_extension.git cd ../../ docker build -t ${имя_алгоритма} ./ -f ./dockerfile_v3 > ./docker_build.log docker tag ${имя_алгоритма} ${полное_имя} docker push ${полное_имя} rm -rf ./sd_code

 

Dreambooth на SageMaker тонкая настройка оптимизация
1
Удалить из плагина WebUI
DreamBooth изначально был создан Литература, открытый исходный код примера кода для совместной работы с блокнотом HuggingFace, см.  Сопутствующая информацияМногие будут расширять и обновлять эту версию. Наиболее полная версия — это скрипт с открытым исходным кодом плагина Stable Diffusion WebUI. Этот плагин инкапсулирует больше гиперпараметров и методов оптимизации для обучения с помощью манипуляций, может интегрировать веса Lora и поддерживает формат контрольных точек, требуемый WebUI. Подробнее см. Код для sd_extentions на GitHub.

Сопутствующие материалы на GitHub:

https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M

Код для sd_extentions на github:

https://github.com/d8ahazard/sd_dreambooth_extension

Как упоминалось выше, SD WebUI невозможно интегрировать с бэкенд-системой бизнес-процессов. Поэтому нам необходимо отделить его от режима плагина WebUI и инкапсулировать в отдельную программу обучения модели, основанную на стандартных входных данных, таких как базовая модель, входное изображение, запрос экземпляра, запрос класса и настроенные выходные данные модели.

Чтобы отделиться от плагина WebUI, необходимо учесть следующие аспекты:
Код плагина связан с операциями и взаимодействием с данными, привязанными к различным компонентам интерфейса WebUI. Например, общая часть исходного кода сохраняет различные параметры обучения, вводимые с веб-страницы.
если shared.force_cpu: import modules.shared no_safe = modules.shared.cmd_opts.disable_safe_unpickle modules.shared.cmd_opts.disable_safe_unpickle = True

 

Класс mytqdm отображает информацию о состоянии индикатора выполнения для веб-страниц:
из helpers.mytqdm импорт mytqdm

 

Этот тип кода не нужен в рамках подготовки инженеров. Мы организуем параметры, передаваемые страницей front-end, в гиперпараметры, чтобы их можно было использовать в основном тексте. Библиотека parse_args для анализа и получения, а также удаления кода, связанного с информацией об отображении страницы.

Очищенный код sd_extentions можно найти по адресу https://github.com/qingyuan18/sd_dreambooth_extension.git. Видно, что сохранился только основной модуль train, а код, связанный с фронтендом, такой как webui.py, helper и shard, был очищен.

Передача параметров учебной задачи
Обучающие задания SageMaker поддерживают передачу и анализ гиперпараметров модели. В API инкапсулируйте параметры model_path, model_name, instance_prompt и class_prompt, упомянутые выше в исходном коде плагина, в строку JSON с парами «ключ-значение». Затем эта строка передаётся в обучающее задание через API оценщика. В обучающей машине SageMaker эти параметры преобразуются в стандартный формат передачи параметров args для пар «ключ-значение». Это позволяет обучающему коду анализировать и обрабатывать эти параметры с помощью библиотеки Python parse_args. См. следующий пример кода:
гиперпараметры = { 'имя_модели':'aws-trained-dreambooth-model', 'mixed_precision':'fp16', 'имя_или_путь_предварительно_обученной_модели': имя_модели, 'каталог_данных_экземпляра':каталог_экземпляра, 'каталог_данных_класса':каталог_класса, 'с_предварительным_сохранением':True, 'путь_моделей': '/opt/ml/model/', 'manul_upload_model_path':s3_model_output_location, 'приглашение_экземпляра': приглашение_экземпляра, ……} оценщик = Оценщик( роль = роль, количество_экземпляров = 1, тип_экземпляра = тип_экземпляра, uri_изображения = uri_изображения, гиперпараметры = гиперпараметры )

 

Модель ввода WebUI
Формат — ckpt (последний WebUI — это формат safetensor), а конвейер модели, загружаемый from_pretrained во время обучения диффузора, — это путь модели Stable Diffusion или формат локального пути (по умолчанию — путь к каталогу, содержащий каталоги подмоделей, такие как vae, unet, tokenizer и т. д., а каждый каталог подмодели содержит независимый файл формата torch pt (суффикс .bin)).

Если в производственной среде клиента используется один файл модели в формате ckpt (например, модель, загруженная с сайта civit.ai), мы можем использовать скрипт конвертации, предоставляемый диффузором, для преобразования его из формата ckpt в формат каталога диффузора, чтобы тот же код можно было загрузить в производственной среде. Пример использования скрипта приведен ниже:

python convert_original_stable_diffusion_to_diffusers.py —путь_к_контрольной_точке ./models_ckpt/768-v-ema.ckpt —путь_дамп ./models_diffuser

 

Как показано выше, вывод dump_path представляет собой каталог формата диффузора. Разверните этот каталог, чтобы увидеть файлы каталогов подмоделей vae, unet и text_encoder.
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
2
Управление выходной моделью
Структура каталогов вычислительной машины для обучения моделям SageMaker выглядит следующим образом:
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Обученная модель по умолчанию будет выведена в каталог /opt/ml/model/. После завершения задания обучения SageMaker файлы модели в этом каталоге будут упакованы в файл tar.gz и загружены в папку S3 задачи обучения. Для составной модели, такой как Stable Diffusion, существует несколько подкаталогов. Файлы модели в каждом подкаталоге находятся в независимом формате bin. Каждый файл h-модели имеет размер более 4 или 5 ГБ. SageMaker автоматически упаковывает и Переход на S3 занял бы слишком много времени.

Поэтому мы добавляем параметр manul_upload_model_path, чтобы указать путь к S3, куда вручную загружается файл обученной модели. После обучения весь каталог модели рекурсивно загружается на указанный S3 через S3 SDK, поэтому SageMaker больше не упаковывает файл model.tar.gz.

Пример справочного кода выглядит следующим образом:

def upload_directory_to_s3(local_directory, dest_s3_path): bucket,s3_prefix=get_bucket_and_key(dest_s3_path) для корня, dirs, файлов в os.walk(local_directory): для имени файла в files: local_path = os.path.join(root, filename) relative_path = os.path.relpath(local_path, local_directory) s3_path = os.path.join(s3_prefix, relative_path).replace("\\", "/") s3_client.upload_file(local_path, bucket, s3_path) print(f'Файл {local_path} загружен в s3://{bucket}/{s3_path}') для подкаталога в dirs: upload_directory_to_s3(local_directory+"/"+subdir,dest_s3_path+"/"+subdir) s_pipeline.save_pretrained(args.models_path) ### вручную загрузить каталоги обученной модели базы данных в путь s3###### #### для исключения процесса tar sagemaker##### print(f"manul_upload_model_path is {args.manul_upload_model_path}") upload_directory_to_s3(args.models_path,args.manul_upload_model_path)

 

Благодаря этой оптимизации время обучения Dreambooth на SageMaker с 800 шагами сокращается с 1 часа до примерно 30 минут.
3
Оптимизация памяти графического процессора
При тонкой настройке обучения больших моделей, таких как Dreambooth, стоимость является важным фактором. Amazon предоставляет вычислительные ресурсы различных моделей графических процессоров, среди которых модель G4dn отличается наибольшей экономической эффективностью и доступна практически во всех регионах Amazon.

Однако модель g4dn оснащена только одной видеокартой NVIDIA T4 с 16 ГБ видеопамяти. Dreambooth необходимо переобучить сети UNET и VAE, чтобы сохранить прежние значения потерь. При более точной настройке Dreambooth требуются входные данные десятков изображений и 1000-шаговый процесс обучения. Вся сеть, особенно шумоподавление и обработка шумоподавления в сети UNET, может легко привести к нехватке видеопамяти (OOM) и сбою обучения.

Чтобы клиенты могли обучать модели Dreambooth на экономичных компьютерах с 16 ГБ видеопамяти, мы провели ряд оптимизаций. В результате для точной настройки Dreambooth на SageMaker требуется всего лишь компьютер G4dn.xlarge, что позволяет завершить обучение за несколько сотен–3000 шагов. Это значительно снижает затраты на обучение Dreambooth.

Отрегулируйте компонент точной настройки
В модели Stable Difussion text_encoder является текстовым кодировщиком подмодели CLIP. Dreambooth не требуется переобучать текстовый кодировщик, если запрос экземпляра или класса не является длинным текстом. Это связано с корректировкой некоторых правил. Если объём памяти графического процессора меньше 16 ГБ, переобучение text_encoder отключается. Если объём памяти графического процессора ещё меньше, автоматически включаются 8-битный оптимизатор Adam и формат данных градиента половинной точности fp16. Если объём памяти графического процессора ещё меньше, обучение можно даже напрямую переложить на центральный процессор.

Пример кода выглядит следующим образом:

print(f"Всего VRAM: {gb}") если 24 > gb >= 16: attention = "xformers" not_cache_latents = False train_text_encoder = True use_ema = True если 16 > gb >= 10: train_text_encoder = False use_ema = False если gb < 10: use_cpu = True use_8bit_adam = False mixed_precision = 'no'

 

Использование xformers
Formers — это фреймворк с открытым исходным кодом для ускорения обучения. Сохраняя параметры различных слоёв, динамически загружая каждый подслой в видеопамять и оптимизируя механизмы самовосприятия и межслоевую передачу информации, он позволяет значительно сократить использование видеопамяти без ущерба для скорости обучения.

Во время обучения в Dreambooth мы переключили внимание с флеш-памяти по умолчанию на Xformers. Сравнивая использование памяти графического процессора до и после включения Xformers, мы видим, что этот метод значительно снижает потребление памяти.

Перед включением Xformers:

***** Запуск обучения ***** Мгновенный размер партии на устройство = 1 Общий размер партии обучения (с параллельным, распределенным и накопленным) = 1 Шаги накопления градиента = 1 Всего шагов оптимизации = 1000 Настройки обучения: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA: False Выделено: 10,5 ГБ Зарезервировано: 11,7 ГБ

 

После открытия Xformers:
***** Запуск обучения ***** Мгновенный размер партии на устройство = 1 Общий размер партии обучения (с параллельным, распределенным и накопленным) = 1 Шаги накопления градиента = 1 Всего шагов оптимизации = 1000 Настройки обучения: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA: False Выделено: 5,5 ГБ Зарезервировано: 5,6 ГБ

 

Другие параметры оптимизации
  • 'PYTORCH_CUDA_ALLOC_CONF':'max_split_size_mb:32' Для CUDA OOM, вызванного фрагментацией видеопамяти, можно установить max_split_size_mb параметра PYTORCH_CUDA_ALLOC_CONF на меньшее значение.
  • train_batch_size':1 — количество изображений, обрабатываемых за один раз. Если количество изображений экземпляров или классов невелико (менее 10), можно установить это значение равным 1, чтобы уменьшить количество изображений, обрабатываемых за один пакет, и в некоторой степени снизить использование видеопамяти.
  • 'sample_batch_size': 1 соответствует train_batch_size, то есть пропускной способности партии, включающей сэмплирование, шумоподавление и шумоподавление одновременно. Уменьшение этого значения также снижает использование видеопамяти.
  • Кроме того, обучение модели Stable Diffusion основано на моделях Latent Diffusion. Исходная модель кэширует латентные значения, но мы обучаем регуляризацию в основном в условиях подсказки экземпляра и подсказки класса. Поэтому при ограниченном объёме памяти GPU мы можем отказаться от кэширования латентных значений, чтобы минимизировать использование памяти.
  • «gradient_accumulation_steps» — это количество пакетов обновления градиента. Если количество шагов обучения велико, например, 1000, можно увеличить количество шагов обновления градиента, накапливая их пакетами до достижения определённого количества пакетов. Большее значение увеличивает использование памяти графического процессора. Чтобы уменьшить использование памяти графического процессора, можно уменьшить это значение за счёт времени обучения. Обратите внимание: если вы решите переобучить текстовый кодировщик text_encode, который не поддерживает накопление градиента, и если на машине с несколькими графическими процессорами включено ускоренное распределённое обучение на нескольких графических процессорах, параметру «gradient_accumulation_steps» необходимо присвоить значение 1; в противном случае переобучение текстового кодировщика будет отключено.
Демонстрация тонкой настройки модели Dreambooth
В демонстрации мы использовали четыре фотографии кошачьей игрушки и обрезали их до одинакового размера 512×512 с помощью инструмента.
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Затем войдите в созданный вами заранее блокнот SageMaker, клонируйте репозиторий Quick Kit (git clone https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit), откройте fine-tuning/dreambooth/stablediffusion_dreambooth_finetuning.zh.ipynb и следуйте инструкциям блокнота шаг за шагом.
# использует zwx в качестве триггерного слова. После обучения модели мы используем это слово для генерации графика instance_prompt="photo\ of\ zwx\ toy" class_prompt="photo\ of\ a\ cat toy" #notebook описание кода обучения # набор гиперпараметров environment = { 'PYTORCH_CUDA_ALLOC_CONF':'max_split_size_mb:32', 'LD_LIBRARY_PATH':"${LD_LIBRARY_PATH}:/opt/conda/lib/" } hyperparameters = { 'model_name':'aws-trained-dreambooth-model', 'mixed_precision':'fp16', 'pretrained_model_name_or_path': model_name, 'instance_data_dir':instance_dir, 'class_data_dir':class_dir, 'with_prior_preservation':True, 'models_path': '/opt/ml/model/', 'instance_prompt': instance_prompt, 'class_prompt':class_prompt, 'resolution':512, 'train_batch_size':1, 'sample_batch_size': 1, 'gradient_accumulation_steps':1, 'learning_rate':2e-06, 'lr_scheduler':'constant', 'lr_warmup_steps':0, 'num_class_images':50, 'max_train_steps':300, 'save_steps':100, 'attention':'xformers', 'prior_loss_weight': 0.5, 'use_ema':True, 'train_text_encoder': Ложь, 'not_cache_latents': Истина, 'gradient_checkpointing': Истина, 'save_use_epochs': Ложь, 'use_8bit_adam': Ложь } hyperparameters = json_encode_hyperparameters(hyperparameters) # запускает задание обучения sagemaker из импорта sagemaker.estimator Estimator inputs = { 'images': f"s3://{bucket}/dreambooth/images/" } estimator = Estimator( role = role, instance_count=1, instance_type = instance_type, image_uri = image_uri, hyperparameters = hyperparameters, environment = environment ) estimator.fit(inputs)

 

Журнал запуска учебного задания:
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Время обучения составляет около 40 минут. Вы также можете просматривать логи CloudWatch через консоль SageMaker Training Job. После завершения обучения модель будет автоматически загружена в S3.
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
После завершения обучения вы можете загрузить обученную модель в SageMaker с помощью блокнота вывода Quick Kit. Обученную модель можно протестировать следующим образом:
Эксперименты со Stable Diffusion на Amazon SageMaker: тонкая настройка модели на основе Dreambooth
04
в заключение
В заключение, в данной статье описываются бизнес-требования и технические принципы Dreambooth. В ней реализовано решение для обучения BYOC на Amazon SageMaker, а также методы оптимизации графической памяти, управления моделями и гиперпараметров, обеспечивающие тонкую настройку Dreambooth в условиях эксплуатации. Приведённый в данной статье код скрипта и примеры обучения в блокнотах могут послужить основой для разработки инженерных приложений на платформе AIGC ML на основе Stable Diffusion.
05
приложение
Stable Diffusion Quick Kit на github:

https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit

Документация по тонкой настройке Stable Diffusion Quick Kit Dreambooth:

https://catalog.us-east-1.prod.workshops.aws/workshops/1ac668b1-dbd3-4b45-bf0a-5bc36138fcf1/zh-CN/4-configuration-stablediffusion/4-4-find-tuning-notebook

Бумага Dreambooth:

https://dreambooth.github.io/

Оригинальный GitHub Dreambooth с открытым исходным кодом: https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M

Инструмент преобразования формата диффузора Huggingface:

https://github.com/huggingface/diffusers/tree/main/scripts

Плагин расширения Dreambooth для стабильной диффузии webui:

https://github.com/d8ahazard/sd_dreambooth_extension.git

xformers с открытым исходным кодом:

https://github.com/facebookresearch/xformers

счет

Ответить

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