Как использовать Flux Schnell локально на MacBook Pro M3 Max

Хотите попробовать FLUX онлайн без лишних хлопот? Вы можете запустить FLUX.1 Pro, Schnell и Dev на Anakin AI сейчас! Flux Schnell — это мощная модель генерации изображений из текста, способная создавать качественные изображения на основе текстовых подсказок. В этом руководстве мы проведем вас через шаги, необходимые для настройки и запуска

Build APIs Faster & Together in Apidog

Как использовать Flux Schnell локально на MacBook Pro M3 Max

Start for free
Inhalte
Хотите попробовать FLUX онлайн без лишних хлопот?

Вы можете запустить FLUX.1 Pro, Schnell и Dev на Anakin AI сейчас!

Flux Schnell — это мощная модель генерации изображений из текста, способная создавать качественные изображения на основе текстовых подсказок. В этом руководстве мы проведем вас через шаги, необходимые для настройки и запуска Flux Schnell локально на MacBook Pro с чипом M3 Max. Эта конфигурация позволяет эффективно генерировать изображения, используя до 40 ГБ ОЗУ, с временем генерации каждого изображения около 30 секунд.

Требования для запуска Flux.1 Pro на Mac локально

Прежде чем начать, убедитесь, что ваша система соответствует следующим требованиям:

  • MacBook Pro с чипом M3 Max
  • macOS (рекомендуется последняя версия)
  • Не менее 40 ГБ доступной оперативной памяти
  • Установлен Anaconda или Miniconda
  • Подключение к Интернету для загрузки зависимостей

Пошаговое руководство по запуску Flux.1 Pro на Mac локально

Пошаговое руководство по запуску Flux.1 Pro на Mac локально

Шаг 1: Настройте окружение

Сначала создадим новое окружение Conda и активируем его:

conda create -n flux python=3.11
conda activate flux

Шаг 2: Установите зависимости

Теперь давайте установим необходимые пакеты:

pip install torch==2.3.1
pip install git+https://github.com/huggingface/diffusers.git
pip install transformers==4.43.3 sentencepiece==0.2.0 accelerate==0.33.0 protobuf==5.27.3

Шаг 3: Подготовьте Python-скрипт

Создайте новый файл Python с именем flux_schnell.py и добавьте следующий код:

import torch
from diffusers import FluxPipeline
import diffusers# Изменить функцию rope, чтобы обработать устройство MPS
_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
   assert dim % 2 == 0, "Размерность должна быть четной."
   if pos.device.type == "mps":
       return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
   else:
       return _flux_rope(pos, dim, theta)
diffusers.models.transformers.transformer_flux.rope = new_flux_rope
# Загрузите модель Flux Schnell
pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")
# Определить подсказку
prompt = "Кот, держащий табличку с надписью 'привет мир'"
# Генерировать изображение
out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]
# Сохранить сгенерированное изображение
out.save("flux_image.png")

Шаг 4: Запустите скрипт

Выполните Python-скрипт:

python flux_schnell.py

Это сгенерирует изображение на основе подсказки "Кот, держащий табличку с надписью 'привет мир'" и сохранит его как "flux_image.png" в той же директории.

Понимание кода

Давайте разберем ключевые компоненты скрипта:

Импорт зависимостей

import torch
from diffusers import FluxPipeline
import diffusers

Эти строки импортируют необходимые модули: PyTorch для операций с тензорами, FluxPipeline из библиотеки diffusers для использования модели Flux Schnell и модуль diffusers для дополнительных утилит.

Изменение функции rope

_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
   assert dim % 2 == 0, "Размерность должна быть четной."
   if pos.device.type == "mps":
       return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
   else:
       return _flux_rope(pos, dim, theta)diffusers.models.transformers.transformer_flux.rope = new_flux_rope

Этот раздел изменяет функцию rope (Rotary Position Embedding), чтобы обрабатывать устройство MPS (Metal Performance Shaders), используемое в чипах Apple Silicon. Это обеспечивает совместимость с чипом M3 Max, перемещая тензоры на CPU, когда это необходимо.

Загрузка модели

pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")

Этот код загружает модель Flux Schnell из хранилища моделей Hugging Face. Он указывает версию модели, устанавливает тип данных на bfloat16 для повышения эффективности и перемещает модель на устройство MPS.

Генерация изображения

prompt = "Кот, держащий табличку с надписью 'привет мир'"out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]

Здесь мы определяем подсказку и используем загруженную модель для генерации изображения. Параметры контролируют различные аспекты процесса генерации:

  • guidance_scale: Установите на 0 для некондиционного создания.
  • height и width: Установите размеры выходного изображения на 1024x1024 пикселей.
  • num_inference_steps: Контролирует количество шагов денойзинга (4 в этом случае для более быстрой генерации).
  • max_sequence_length: Ограничивает максимальную длину входной последовательности.

Сохранение изображения

out.save("flux_image.png")

Наконец, эта строка сохраняет сгенерированное изображение в файле PNG с именем "flux_image.png" в текущей директории.

Оптимизация производительности

Чтобы максимально использовать ваш MacBook Pro с M3 Max и достичь времени генерации ~30 секунд при использовании до 40 ГБ ОЗУ, учитывайте следующие советы:

  1. Закройте ненужные приложения: Убедитесь, что другие ресурсоемкие приложения закрыты, чтобы освободить ОЗУ и ресурсы ЦП.
  2. Настройте размеры изображений: Если вам нужно более быстрое время генерации, вы можете уменьшить параметры height и width. Напротив, вы можете увеличить их для более высокого качества за счет более длительного времени генерации.
  3. Экспериментируйте с num_inference_steps: Увеличение этого значения может привести к более качественным изображениям, но увеличит время генерации. Уменьшение его ускорит процесс, но может снизить качество изображения.
  4. Используйте точность bfloat16: Как уже реализовано в скрипте, использование типа данных torch.bfloat16 помогает сократить использование памяти и потенциально увеличить скорость без значительных потерь в качестве.
  5. Пакетная обработка: Если вам нужно генерировать несколько изображений, подумайте о реализации пакетной обработки для более эффективного использования GPU.

Устранение неполадок

Если вы столкнулись с какими-либо проблемами при запуске Flux Schnell на вашем MacBook Pro с M3 Max, попробуйте следующее:

  1. Обновите зависимости: Убедитесь, что все пакеты обновлены, особенно PyTorch и diffusers.
  2. Проверьте совместимость с CUDA: Хотя M3 Max использует MPS, могут возникнуть некоторые ошибки, связанные с CUDA. Убедитесь, что вы используете правильные версии PyTorch и связанных библиотек для вашей системы.
  3. Мониторинг использования ресурсов: Используйте Монитор активности, чтобы следить за использованием ОЗУ и ЦП. Если вы постоянно достигаете пределов, возможно, вам нужно будет настроить параметры модели или освободить больше системных ресурсов.
  4. Очистите кеш: Если вы столкнулись с ошибками, связанными с памятью, попробуйте очистить кеш PyTorch:

torch.cuda.empty_cache()

5. Перезапустите ядро: Если вы используете Jupyter-ноутбук или аналогичную среду, попробуйте перезапустить ядро, если вы столкнулись с постоянными ошибками.

Заключение

Запуск Flux Schnell локально на вашем MacBook Pro с M3 Max предлагает мощные возможности генерации изображений из текста. С настройкой, описанной в этом руководстве, вы можете создавать качественные изображения на основе текстовых описаний за 30 секунд, используя до 40 ГБ ОЗУ. Имейте в виду, что производительность может варьироваться в зависимости от вашей аппаратной части и сложности подсказок.

Не стесняйтесь экспериментировать с различными параметрами, чтобы достичь наилучшего баланса между скоростью и качеством изображения для ваших нужд. Поскольку модели ИИ и аппаратное обеспечение продолжают развиваться, еще более впечатляющие результаты на горизонте. Удачной генерации!