View a markdown version of this page

Gere imagens em lote com um modelo de difusão - Deadline Cloud

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gere imagens em lote com um modelo de difusão

Este tutorial mostra como executar a geração de imagens em lote de alto rendimento em um arquivo JSONL de solicitações usando um modelo de difusão. Você envia o pacote de trabalho em lote de texto para imagem GitHub para uma frota de GPU em sua fazenda Deadline Cloud. O modelo padrão é o FLUX.2 Klein 4B on Hugging Face, que é licenciado pelo Apache 2.0, não bloqueado, destilado em 4 etapas e precisa de cerca de 13 GB de RAM de vídeo (VRAM).

Cada linha selecionada no JSONL se torna uma tarefa de geração. O agendador distribui as tarefas entre os trabalhadores de GPU disponíveis, e cada trabalhador carrega o pipeline de difusão uma vez e o reutiliza para cada tarefa executada. Quando uma linha carrega um caption campo, ou um generated_text campo encadeado a partir da saída do pacote de inferência em lote vLLM, a tarefa compõe o texto sobre a imagem gerada como uma tipografia nítida. Linhas sem legenda produzem imagens puras, então o pacote funciona igualmente bem como um gerador de lote de texto simples para imagem.

Tempo estimado: 30 a 60 minutos, incluindo a configuração da fazenda. A primeira execução também baixa cerca de 13 GB de pesos de modelo por trabalhador.

A execução deste tutorial gera cobranças para as instâncias de trabalho da GPU que processam a tarefa.

Visão geral do

Para concluir este tutorial, siga estas etapas:

  1. Configure sua fazenda.

  2. Prepare o arquivo de entrada.

  3. Envie o trabalho de geração de imagens.

  4. Baixe e navegue na galeria.

  5. Limpe recursos.

Configure sua fazenda

Você precisa de uma frota gerenciada por serviços com GPUs NVIDIA e pelo menos 32 GB de RAM, além de uma fila com um ambiente de fila conda anexado com leituras e parâmetros de trabalho. CondaPackages CondaChannels FLUX.2 O Klein 4B se encaixa confortavelmente em GPUs de 16 GB ou maiores (por exemplo, L4 ou A10G) graças ao descarregamento da CPU.

A maneira mais rápida de obter uma fazenda compatível é implantar o modelo de fazenda CUDA GitHub, que é o mesmo CloudFormation modelo usado pelo pacote de inferência em lote vLLM. Depois que a pilha chegarCREATE_COMPLETE, configure o Deadline Cloud CLI para usar a nova fazenda:

deadline config set defaults.farm_id FarmId-from-stack-outputs deadline config set defaults.queue_id CUDAQueueId-from-stack-outputs
nota

O pacote inclui um ambiente de InstallDeps trabalho que é instalado PyTorch e a biblioteca de difusores mais recente do git no topo do ambiente conda da fila em cada sessão, além de baixar quatro pequenas fontes do Google para a sobreposição de legendas. Espere de 30 a 90 segundos de tempo adicional de configuração por trabalhador na primeira utilização, além do download do modelo na primeira execução. Se sua frota funciona em uma VPC restrita à rede, você precisa pré-transformar as dependências em uma AMI personalizada ou em um canal conda, ou abrir a saída.

Prepare o arquivo de entrada

A entrada é um arquivo JSONL com um objeto JSON por linha. Cada linha deve ter um prompt campo ou um generated_text campo encadeado a partir da saída do pacote de inferência em lote vLLM:

{"prompt": "A golden hour photo of a sourdough loaf on a linen-covered table", "id": "loaf_01"} {"prompt": "A bakery storefront at sunrise, photorealistic", "caption": "OPEN AT DAWN", "id": "shop_01"} {"prompt": "Write a slogan for sourdough", "id": "001", "generated_text": "Real grain. Real fermentation. Real you.", "style": "rustic flat lay, warm tones"}

Os campos opcionais caption por linha incluem sobreposição de texto, style para substituir o sufixo de estilo de nível de trabalho,, e, e. font width height steps seed O pacote inclui a mesma ferramenta de criação de prompts de dependência zero do pacote de lotes vLLM. Abra tools/prompt_builder.html para criar arquivos de entrada, importe um JSONL arrastando e soltando e adicione substituições por solicitação.

O sample_prompts.jsonl arquivo incluído é uma demonstração de campanha de padaria de 10 imagens: slogans de padaria gerados pelo pacote de inferência em lote vLLM, com dicas de estilo em camadas para obter visuais evocativos.

Envie o trabalho de geração de imagens

Para enviar com o remetente da GUI
  1. No diretório do text_to_image_batch pacote, abra o remetente:

    deadline bundle gui-submit .
  2. Escolha seu arquivo JSONL de entrada. Experimente sample_prompts.jsonl a demonstração da campanha de padaria.

  3. Defina o intervalo de solicitações (por exemplo, 1-10 para as primeiras 10 solicitações) e escolha um diretório de saída.

  4. Opcionalmente StyleSuffix, ajuste a largura e a altura. Deixe a legenda sobreposta em true se seu JSONL tiver legendas ou slogans, ou configure-a como para pura geração de imagens. false

  5. Selecione Enviar.

Como alternativa, envie com a CLI:

deadline bundle submit . \ --parameter InputFile=$PWD/sample_prompts.jsonl \ --parameter Prompts=1-10 \ --parameter OutputDir=$PWD/output

Os ChunkSize parâmetros Prompts e funcionam da mesma forma que no pacote de inferência em lote vLLM, usando o recurso de fragmentação de tarefas do Deadline Cloud. Para obter mais informações, consulte Divisão de tarefas para modelos de trabalho. O ModelName parâmetro aceita qualquer coisa que a biblioteca de difusores possa carregar, incluindo SDXL Turbo e Stable Diffusion 3.5. Para ver a lista completa de parâmetros e as configurações de outros modelos, consulte a tabela de parâmetros no exemplo README em GitHub.

Baixe e navegue na galeria

Para baixar e navegar pelos resultados
  1. Depois que o trabalho for concluído, execute o comando de download no mesmo diretório usado no momento do envio, para que o OutputDir caminho seja resolvido no mesmo local:

    deadline job download-output --job-id job-id
  2. Cada artefato fica em um output/ subdiretório do caminho que você definiu como. OutputDir Os PNGs brutos estão dentrooutput/images/, os metadados combinados estão dentro output/output.jsonl e output/gallery.html é um visualizador de galeria estático com pesquisa e exportação de CSV.

  3. Se as imagens da galeria não carregarem quando você abre gallery.html diretamente, isso é uma restrição de segurança do navegador em file:// URLs. Em vez disso, sirva o diretório:

    cd OutputDir/output && python3 -m http.server 8080 # open http://localhost:8080/gallery.html

Cadeia a partir da inferência em lote vLLM

O fluxo clássico combina esse pacote com o pacote de inferência em lote vLLM:

  1. Gere texto com o pacote de inferência em lote vLLM: slogans, legendas, descrições de cenas ou texto alternativo. A saída é output.jsonl com um generated_text campo por linha. Consulte Execute inferência LLM em lote com vLLM.

  2. (Opcional) Abratools/prompt_builder.html, insiraoutput.jsonl, adicione ou edite legendas, estilos ou descrições visuais por solicitação e reexporte.

  3. Envie este pacote com o JSONL como. InputFile O script por tarefa é usado automaticamente generated_text como legenda de sobreposição.

Quando uma linha tem um generated_text slogan e o LLM originalprompt, o script de tarefas tenta extrair o assunto da solicitação e usá-lo como aviso visual para o modelo de difusão, porque os slogans geralmente são muito abstratos para dar ao modelo um assunto concreto. O trabalhador registra a fonte visual do prompt por tarefa para que você possa identificar extrações incorretas.

Fazer a limpeza.

Para evitar cobranças contínuas, limpe os recursos que você criou para este tutorial:

Para limpar os recursos do tutorial
  1. Se você implantou o CloudFormation modelo de farm CUDA, exclua a CloudFormation pilha do console. CloudFormation

  2. Se você usou uma fazenda existente e criou uma frota de GPU especificamente para este tutorial, interrompa ou exclua essa frota. Se você usou uma frota compartilhada preexistente, deixe-a em vigor.

  3. Remova os arquivos de saída locais se não precisar mais deles.

Os seguintes recursos fornecem informações adicionais: