Ранее я уже делал статью про запуск в пару кликов моделей Stable Diffusion в Google Colab с помощью Fooocus (способ актуальный), сегодня мы проделаем похожее с моделью FLUX 1 Dev, но без web интерфейса.
Шаг 1
Заходим в Google Colab, создаем новый блокнот и меняем среду выполнения на «Графический процессор Т4», подключаемся к ней.
Теперь добавляем первый блок кода, всего их будет два.
%cd /content !git clone -b totoro3 https://github.com/camenduru/ComfyUI /content/TotoroUI %cd /content/TotoroUI !pip install -q torchsde==0.2.6 einops diffusers accelerate xformers==0.0.29.post3 !apt -y install -qq aria2 !aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/flux1-dev-fp8.safetensors -d /content/TotoroUI/models/unet -o flux1-dev-fp8.safetensors !aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/ae.sft -d /content/TotoroUI/models/vae -o ae.sft !aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors -d /content/TotoroUI/models/clip -o clip_l.safetensors !aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors -d /content/TotoroUI/models/clip -o t5xxl_fp8_e4m3fn.safetensors import random import torch import numpy as np from PIL import Image import nodes from nodes import NODE_CLASS_MAPPINGS from totoro_extras import nodes_custom_sampler from totoro import model_management DualCLIPLoader = NODE_CLASS_MAPPINGS["DualCLIPLoader"]() UNETLoader = NODE_CLASS_MAPPINGS["UNETLoader"]() RandomNoise = nodes_custom_sampler.NODE_CLASS_MAPPINGS["RandomNoise"]() BasicGuider = nodes_custom_sampler.NODE_CLASS_MAPPINGS["BasicGuider"]() KSamplerSelect = nodes_custom_sampler.NODE_CLASS_MAPPINGS["KSamplerSelect"]() BasicScheduler = nodes_custom_sampler.NODE_CLASS_MAPPINGS["BasicScheduler"]() SamplerCustomAdvanced = nodes_custom_sampler.NODE_CLASS_MAPPINGS["SamplerCustomAdvanced"]() VAELoader = NODE_CLASS_MAPPINGS["VAELoader"]() VAEDecode = NODE_CLASS_MAPPINGS["VAEDecode"]() EmptyLatentImage = NODE_CLASS_MAPPINGS["EmptyLatentImage"]() with torch.inference_mode(): clip = DualCLIPLoader.load_clip("t5xxl_fp8_e4m3fn.safetensors", "clip_l.safetensors", "flux")[0] unet = UNETLoader.load_unet("flux1-dev-fp8.safetensors", "fp8_e4m3fn")[0] vae = VAELoader.load_vae("ae.sft")[0] def closestNumber(n, m): q = int(n / m) n1 = m * q if (n * m) > 0: n2 = m * (q + 1) else: n2 = m * (q - 1) if abs(n - n1) < abs(n - n2): return n1 return n2
Жмем на кнопку запуска
Начнется процесс загрузки моделей и установки необходимых пакетов, это займет около 5 минут.
Шаг 2
Копируем отсюда и добавляем второй блок кода.
sdelatraz = 1 while sdelatraz < 88: with torch.inference_mode(): positive_prompt = "A brown bear carries a toilet bowl in his hands and smiles" width = 1024 height = 1024 seed = 0 steps = 20 sampler_name = "euler" scheduler = "simple" if seed == 0: seed = random.randint(0, 18446744073709551615) print(seed) soseed = str(seed) sdelatraz += 1 cond, pooled = clip.encode_from_tokens(clip.tokenize(positive_prompt), return_pooled=True) cond = [[cond, {"pooled_output": pooled}]] noise = RandomNoise.get_noise(seed)[0] guider = BasicGuider.get_guider(unet, cond)[0] sampler = KSamplerSelect.get_sampler(sampler_name)[0] sigmas = BasicScheduler.get_sigmas(unet, scheduler, steps, 1.0)[0] latent_image = EmptyLatentImage.generate(closestNumber(width, 16), closestNumber(height, 16))[0] sample, sample_denoised = SamplerCustomAdvanced.sample(noise, guider, sampler, sigmas, latent_image) model_management.soft_empty_cache() decoded = VAEDecode.decode(vae, sample)[0].detach() Image.fromarray(np.array(decoded*255, dtype=np.uint8)[0]).save("/content/" + soseed + "flux.png") Image.fromarray(np.array(decoded*255, dtype=np.uint8)[0]) print("Дело сделано")
В пятой строчке кода positive_prompt = «Сюда нужно написать свой промт» , далее запускаем этот блок кода. Начнется генерация изображений с случайным seed, изображения будут сохранятся в разделе файлы, оттуда их можно скачать. Количество изображений необходимых для генерации можно изменить в третьей строчке кода.
Есть возможность автоматически сохранять готовые изображения сразу на свой Google Диск, для этого вам придется добавить немного кода, но здесь справитесь и без меня я думаю.
Дальше я буду искать способы запуска квантованных моделей FLUX 1 Dev в Google Colab, они работают значительно быстрее. Например на моей RTX 3060 12 gb создание одного изображения с помощью квантованной версии FLUX 1 Dev 8fp в ComfyUI занимает почти в 4 раза меньше времени (семплер, количество шагов и размер изображения идентичны), при этом нагрев видеокарты ограничен до 60 градусов (она работает на процентов 60-70% от максимальной мощности). Возможно дело в ComfyUI, будем проверять.
ссылка на оригинал статьи https://habr.com/ru/articles/895212/
Добавить комментарий