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
ewidth
: 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:
- Feche aplicativos desnecessários: Certifique-se de que outros aplicativos que consomem recursos estejam fechados para liberar RAM e recursos da CPU.
- Ajuste as dimensões da imagem: Se você precisa de tempos de geração mais rápidos, pode reduzir os parâmetros
height
ewidth
. Inversamente, você pode aumentá-los para maior qualidade às custas de tempos de geração mais longos. - 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. - 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. - 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:
- Atualize as dependências: Certifique-se de que todos os pacotes estejam atualizados, especialmente o PyTorch e o diffusers.
- 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.
- 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.
- 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!