Como Usar o Flux Schnell Localmente em um MacBook Pro M3 Max

Quer experimentar o FLUX online sem complicações adicionais? Você pode rodar o FLUX.1 Pro, Schnell e Dev no Anakin AI agora! O Flux Schnell é um modelo robusto de geração de imagens a partir de texto, capaz de produzir imagens de alta qualidade com base em prompts textuais. Neste

Build APIs Faster & Together in Apidog

Como Usar o Flux Schnell Localmente em um MacBook Pro M3 Max

Start for free
Inhalte
Quer experimentar o FLUX online sem complicações adicionais?

Você pode rodar o FLUX.1 Pro, Schnell e Dev no Anakin AI agora!

O Flux Schnell é um modelo robusto de geração de imagens a partir de texto, capaz de produzir imagens de alta qualidade com base em prompts textuais. Neste tutorial, orientaremos você sobre os passos para configurar e executar o Flux Schnell localmente em um MacBook Pro M3 Max. Esta configuração permite a geração eficiente de imagens, utilizando até 40GB de RAM, com cada imagem levando cerca de 30 segundos para ser produzida.

Requisitos para Executar o Flux.1 Pro no Mac Localmente

Antes de começarmos, certifique-se de que seu sistema atende aos seguintes requisitos:

  • MacBook Pro com chip M3 Max
  • macOS (versão mais recente recomendada)
  • Pelo menos 40GB de RAM disponível
  • Anaconda ou Miniconda instalado
  • Conexão de internet para baixar dependências

Tutorial Passo a Passo para Executar o Flux.1 Pro no Mac Localmente

Tutorial Passo a Passo para Executar o Flux.1 Pro no Mac Localmente

Passo 1: Configurar o Ambiente

Primeiro, criaremos um novo ambiente Conda e o ativaremos:

conda create -n flux python=3.11
conda activate flux

Passo 2: Instalar Dependências

Agora, vamos instalar os pacotes necessários:

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

Passo 3: Preparar o Script em Python

Crie um novo arquivo Python chamado flux_schnell.py e adicione o seguinte código:

import torch
from diffusers import FluxPipeline
import diffusers# Modifique a função rope para lidar com o dispositivo 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, "A dimensão deve ser par."
   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
# Carregue o modelo Flux Schnell
pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")
# Defina o prompt
prompt = "Um gato segurando uma placa que diz olá mundo"
# Gere a imagem
out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]
# Salve a imagem gerada
out.save("flux_image.png")

Passo 4: Execute o Script

Execute o script Python:

python flux_schnell.py

Isso gerará uma imagem com base no prompt “Um gato segurando uma placa que diz olá mundo” e a salvará como “flux_image.png” no mesmo diretório.

Entendendo o Código

Vamos analisar os principais componentes do script:

Importando Dependências

import torch
from diffusers import FluxPipeline
import diffusers

Essas linhas importam os módulos necessários: PyTorch para operações com tensores, FluxPipeline da biblioteca diffusers para usar o modelo Flux Schnell e o módulo diffusers para utilitários adicionais.

Modificando a Função 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, "A dimensão deve ser par."
   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

Esta seção modifica a função rope (Rotary Position Embedding) para lidar com o dispositivo MPS (Metal Performance Shaders) usado em chips Apple Silicon. Isso garante compatibilidade com o chip M3 Max, movendo tensores para a CPU quando necessário.

Carregando o Modelo

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

Este código carrega o modelo Flux Schnell do hub de modelos Hugging Face. Ele especifica a versão do modelo, define o tipo de dado como bfloat16 para eficiência e move o modelo para o dispositivo MPS.

Gerando a Imagem

prompt = "Um gato segurando uma placa que diz olá mundo"out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]

Aqui, definimos o prompt e usamos o modelo carregado para gerar uma imagem. Os parâmetros controlam vários aspectos do processo de geração:

  • guidance_scale: Definido como 0 para geração incondicional.
  • height e width: Definem as dimensões da imagem de saída para 1024x1024 pixels.
  • num_inference_steps: Controla o número de etapas de denoising (4 neste caso para gerar mais rápido).
  • max_sequence_length: Limita o comprimento máximo da sequência de entrada.

Salvando a Imagem

out.save("flux_image.png")

Finalmente, esta linha salva a imagem gerada como um arquivo PNG nomeado “flux_image.png” no diretório atual.

Otimizando o Desempenho

Para tirar o máximo proveito do seu MacBook Pro M3 Max e alcançar o tempo de geração de ~30 segundos com até 40GB de uso de RAM, considere as seguintes dicas:

  1. Feche aplicativos desnecessários: Certifique-se de que outros aplicativos que consomem recursos estejam fechados para liberar RAM e recursos da CPU.
  2. Ajuste as dimensões da imagem: Se você precisa de tempos de geração mais rápidos, pode reduzir os parâmetros height e width. Inversamente, você pode aumentá-los para maior qualidade às custas de tempos de geração mais longos.
  3. Experimente com num_inference_steps: Aumentar esse valor pode levar a imagens de maior qualidade, mas aumentará o tempo de geração. Diminuí-lo acelerará o processo, mas pode reduzir a qualidade da imagem.
  4. Use precisão bfloat16: Como já implementado no script, usar o tipo de dado torch.bfloat16 ajuda a reduzir o uso de memória e potencialmente aumentar a velocidade sem perda significativa de qualidade.
  5. Processamento em lote: Se você precisa gerar várias imagens, considere implementar processamento em lote para fazer uso mais eficiente da GPU.

Soluções de Problemas

Se você encontrar algum problema ao executar o Flux Schnell no seu MacBook Pro M3 Max, tente o seguinte:

  1. Atualize as dependências: Certifique-se de que todos os pacotes estejam atualizados, especialmente o PyTorch e o diffusers.
  2. Verifique a compatibilidade com CUDA: Embora o M3 Max use MPS, alguns erros relacionados ao CUDA podem ocorrer. Certifique-se de que você está usando as versões corretas do PyTorch e bibliotecas relacionadas para o seu sistema.
  3. Monitore o uso de recursos: Use o Monitor de Atividades para acompanhar o uso de RAM e CPU. Se você estiver constantemente atingindo os limites, poderá precisar ajustar os parâmetros do modelo ou liberar mais recursos do sistema.
  4. Limpe o cache: Se você encontrar erros relacionados à memória, tente limpar o cache do PyTorch:

torch.cuda.empty_cache()

5. Reinicie o kernel: Se você estiver usando um notebook Jupyter ou ambiente semelhante, tente reiniciar o kernel se encontrar erros persistentes.

Conclusão

Executar o Flux Schnell localmente no seu MacBook Pro M3 Max oferece capacidades poderosas de geração de imagem a partir de texto. Com a configuração descrita neste tutorial, você pode criar imagens de alta qualidade a partir de descrições textuais em cerca de 30 segundos, utilizando até 40GB de RAM. Lembre-se de que o desempenho pode variar dependendo do seu hardware e da complexidade dos prompts.

Sinta-se à vontade para experimentar diferentes parâmetros para alcançar o melhor equilíbrio entre velocidade e qualidade da imagem para suas necessidades. À medida que modelos de IA e hardware continuam a avançar, resultados ainda mais impressionantes estão no horizonte. Boa geração!