Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Implante o Stable Diffusion Automatic1111 em GPUs do Oracle Cloud Infrastructure
No cenário em constante evolução da inteligência artificial (IA) e do aprendizado de máquina (ML), pesquisadores e engenheiros estão constantemente ultrapassando os limites do que é possível. Um desenvolvimento notável que ganhou impulso nos últimos anos é o modelo de difusão estável. Essa tecnologia de ponta oferece vantagens significativas, promete uma ampla gama de casos de uso e continua a ver desenvolvimentos empolgantes. Neste tutorial, vamos nos aprofundar no mundo dos modelos de IA/ML de difusão estável, explorando seus benefícios, explorando seus casos de uso e discutindo os mais recentes desenvolvimentos neste campo fascinante.
Introdução
Difusão Estável: A Difusão Estável é uma abordagem relativamente nova e inovadora no mundo da IA e do ML. É um modelo gerativo probabilístico que ganhou destaque devido à sua capacidade de gerar amostras de dados de alta qualidade e sua robustez para várias condições de treinamento. O modelo de difusão estável, muitas vezes baseado no processo de difusão, permite a geração e manipulação de dados controlados. Veja uma breve visão geral de seus principais componentes:
Processo de Difusão: A ideia central do modelo de difusão estável é o processo de difusão, que modela a evolução de uma distribuição de dados ao longo do tempo. Ela envolve a aplicação iterativa de um processo de ruído aos dados até convergir para a distribuição desejada.
Denoising Autoencoder: No processo de difusão, um autoencoder denoising é usado para recuperar os dados originais das amostras ruidosas. Esse processo ajuda o modelo a aprender e capturar recursos significativos dos dados.
Objetivo
Automatic1111 Stable Diffusion é uma ferramenta de mudança de jogo no realm de imagens geradas por IA. Este WebUI inovador oferece uma plataforma amigável, reformulando o cenário de criação de imagens geradas por IA. Com ele, os usuários podem operar e supervisionar de forma integrada seus modelos de IA dedicados à geração de imagens. Implantaremos o Automatic1111 e seus pré-requisitos para inferir seu Modelo de Difusão Estável favorito no Oracle Linux 8.
Pré-requisitos
-
Tenancy do Oracle Cloud Infrastructure (OCI) com limites de GPU A10. Pelo menos 1 A10 é necessário.
-
Uma VCN (Virtual Cloud Network) do OCI existente com pelo menos uma sub-rede pública e limites para IP público.
-
Um checkpoint Stable Diffusion Model do seu Huggingface Creator favorito. Limite o modelo a v1-5 e v2-1. A Difusão Estável XL é difícil de carregar em uma única GPU A10. Consulte Modelo de Difusão Estável - Interface de Hugging.
Tarefa 1: Provisionar uma instância de computação GPU no OCI
-
Inicie uma instância de computação no OCI com VCN existente com sub-rede pública. Para obter mais informações, consulte Iniciar Instância de Computação.
-
Escolha uma única instância de GPU A10 entre as formas GPU.A10 disponíveis.
VM.GPU.A10.1
-
Ao iniciar uma instância de computação, altere a forma para uma das formas acima. Para iniciar a VM GPU.A10, clique em Especialidade e Geração Anterior e selecione as formas VM.GPU.A10.1.
-
Se sua tenancy não tiver um limite de serviço definido para GPU.A10, essas formas não estarão na lista de formas.
-
Para verificar os limites da sua tenancy na Console do OCI, defina a região na qual você provisionará uma instância de computação GPU.A10, abra o menu de navegação e clique em Governança e Administração.
-
Em Gerenciamento de Tenancy, selecione Limites, Cotas e Uso.
-
Defina o serviço como Compute, selecione um dos domínios de disponibilidade no campo de escopo e digite GPU.A10 no campo de recurso.
-
Selecione GPUs para instâncias de VM baseadas em A10 e BM.
-
-
Os limites de computação são por domínio de disponibilidade. Verifique se o limite está definido em qualquer um dos domínios de disponibilidade da região. Se o limite de serviço for definido como 0 para todos os domínios de disponibilidade, você poderá clicar no link "solicitar um aumento do limite de serviço" e enviar uma solicitação de aumento do limite para este recurso.
Observação: para acessar Limites, Cotas e Uso, você deve ser membro do grupo Administradores da tenancy ou seu grupo deve ter uma política designada para ler LimitsAndUsageViewers.
- Para obter mais informações, consulte Limites de Serviço.
-
No momento, as configurações de computação do OCI GPU.A10 suportam Oracle Linux, Ubuntu e Rocky Linux. O Windows é suportado apenas por formas de VM.
Observação: o Rocky Linux não é oficialmente suportado pela NVIDIA.
-
Ao provisionar uma instância de computação no OCI, use uma imagem de sistema operacional padrão do Oracle Linux 8 ou uma Imagem ativada por GPU do Oracle Linux 8. Se você utilizar uma imagem padrão do Oracle Linux OS, saiba que o driver NVIDIA vGPU deve ser instalado. Para nosso tutorial, vamos usar a imagem de GPU do Oracle Linux 8.
-
Expanda a seção Volume de Inicialização para aumentar o volume de inicialização para pelo menos 250 GB e aumentar o VPU para Maior Desempenho, a fim de obter uma leitura/gravação decente para melhor dedução.
-
Inicie a instância com os parâmetros acima.
Tarefa 2: Instalar pré-requisitos para Automatic1111
-
Como os drivers NVIDIA estão incluídos na imagem de compilação da GPU do Oracle Linux, podemos simplesmente verificar sua presença e funcionalidade executando o comando nvidia-smi. Isso garantirá que tudo esteja configurado corretamente e que os drivers GPU estejam funcionando conforme esperado.
-
Cresça FileSystem A memória do sistema de instâncias do OCI vem com o padrão 46.6GB. Como aumentamos nosso Volume de Inicialização para 300 GB, vamos expandir nosso Sistema de Arquivos com um comando OCI construído do OCI Util.
Para expandir o sistema de arquivos na sua instância do OCI depois de aumentar o volume de inicialização para 300 GB, você pode usar o comando incorporado do OCI (Oracle Cloud Infrastructure). Veja como fazer isso:
-
Verificar o uso atual do disco: Antes de redimensionar o sistema de arquivos, é uma boa prática verificar o uso atual do disco para garantir que ele reflita o tamanho aumentado do volume de inicialização. Você pode usar o comando
df
para essa finalidade:df -h
Verifique se o espaço disponível corresponde ao seu novo tamanho de volume de inicialização (300 GB).
-
Redimensionar o Sistema de Arquivos: Use o comando do utilitário OCI para redimensionar o sistema de arquivos para fazer uso do armazenamento aumentado. O comando exato pode variar dependendo do sistema operacional e do sistema de arquivos específicos que você está usando. O item abaixo é usado para o Oracle Linux 8.
sudo /usr/libexec/oci-growfs
Informe 's' quando solicitado para confirmar que você está estendendo a partição.
-
Verificar a Expansão do Sistema de Arquivos: Depois de executar o comando de redimensionamento, verifique o uso do disco novamente para confirmar se o sistema de arquivos foi expandido com sucesso:
df -h
Agora ele deve refletir o tamanho do sistema de arquivos aumentado.
Seguindo essas etapas, você deverá ser capaz de expandir seu sistema de arquivos em sua instância do OCI para utilizar o espaço de armazenamento adicional fornecido pelo volume de inicialização aumentado.
-
-
Instale o Python 3.10.6 no Oracle Linux 8.
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
Agora que temos o Python3.10.6 instalado, vamos instalar o git para clonar o repositório Git.
sudo dnf install git
-
Clone Automatic1111.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Você deve ter o repo constant-diffusion-webui em seu diretório clonado.
-
Faça download do seu Modelo de Difusão Estável favorito para o diretório
stable-diffusion-webui/models/Stable-Diffusion
.- Para nosso caso de uso, aqui eu baixei v1-5-pruned.ckpt de stable-diffusion-v1-5.
-
Atualize Regras de firewall para permitir a porta 7860 tráfego.
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
Tarefa 3: Executar AUTOMATIC1111
-
Com o Python 3.10.6 instalado com sucesso, o software AUTOMATIC1111 e os Modelos de Difusão Estável essenciais baixados, estamos prontos para avançar com a execução de AUTOMATIC1111. No entanto, antes de continuar, vamos ajustar nossa configuração para otimizar a velocidade e a qualidade geral da geração de imagens de difusão estável.
-
Edite o arquivo
webui-user.sh
e faça os ajustes a seguir. Você pode localizar esse arquivo no diretóriostable-diffusion-webui
. Este script é responsável por configurar os argumentos para AUTOMATIC1111 e é crucial para entender e atualizar os parâmetros disponíveis.-
Modifique o parâmetro da seguinte forma: Adicione
listen
para executar isso como um servidor na porta 7860, ative o acesso de extensão para instalar extensões preferenciais de Difusão Estável e defina a precisão como cheia.# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
O parâmetro abaixo para garantir que Python3.10 seja usado.
# python3 executable python_cmd="python3.10"
-
O parâmetro abaixo instala o PyTorch2 mais recente em vez do PyTorch padrão. Isso provou ser melhor nas velocidades de inferência e iteração de imagens.
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
Depois de certificar-se de que não haja erros de sintaxe, deixe-nos executar o script webui.sh (para não ficar confuso com webui-user.sh, o arquivo editado anteriormente).
bash webui.sh
O resultado desse processo deve incluir a instalação de todos os pacotes necessários para AUTOMATIC1111, incluindo o PyTorch2 mais recente. Ele também carregará os modelos essenciais e iniciará o servidor de inferência na porta 7860. Se necessário, você pode personalizar a porta modificando o arquivo webui-user.sh.
-
Depois de confirmar uma implantação bem-sucedida com o servidor em execução na porta 7860, conforme demonstrado acima, vamos continuar a acessar o aplicativo Stable Diffusion. Abra seu Web browser e informe o seguinte endereço:
http://<PublicIP>:7860
, substituindo"<PublicIP>"
pelo endereço IP público da instância.
Depois de fazer isso, o aplicativo deverá ser carregado e exibido conforme ilustrado abaixo. Você encontrará os modelos desejados convenientemente localizados no canto superior direito, conforme destacado.
Tarefa 4: Implantar AUTOMATIC1111 via service manager systemctl
-
Crie um arquivo
stable-diffusion.service
no caminho/etc/systemd/system
E informe o seguinte no arquivostable-diffusion.service
.[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
Certifique-se de alterar o diretório de trabalho para o necessário.
-
Execute os comandos abaixo para recarregar e ativar/iniciar o serviço.
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
Execute o comando abaixo para verificar o status do serviço.
sudo systemctl start stable-diffusion.service
O que saber e melhorias
- Modelos de Difusão Estável vêm em uma faixa de tamanhos e versões, incluindo v1.1, v1.2, v1.3, v1.4, v1.5, v2.0, v2.1 e vSDXL. Essas versões são listadas em ordem crescente de suas capacidades e o que elas podem realizar. Por exemplo, todos os modelos v1 são capazes de gerar imagens nativas 512x512. v2 pode gerar imagens 768x768 de forma nativa sem exigir precisão total. Os tamanhos dos arquivos para modelos v1 geralmente estão dentro da faixa de 6 a 8 GB por modelo de checkpoint, enquanto os modelos v2 tendem a ter tamanhos de arquivo em torno de 5.5GB por modelo de checkpoint.
Carga do Modelo
-
O modelo multigabyte é carregado em seu GPU VRAM no início da execução, enquanto os numerosos núcleos CUDA o processam meticulosamente centenas de vezes por segundo. As taxas de transferência de dados envolvidas estão operando nos limites absolutos definidos pelas leis da física. Dentro da placa gráfica, fatores como o tempo necessário para que um sinal elétrico percorra o chip na velocidade da luz não devem ser subestimados.
-
A GPU processa um conjunto de cálculos e, em seguida, sinaliza a CPU para fornecer mais dados para processamento. Posteriormente, ele aguarda enquanto a CPU acessa a memória do sistema para recuperar outro batch de dados e os envia para a GPU via PCI-E. Depois que a GPU tiver os dados, ela os processará e sinalizará a CPU novamente, informando outra fase de espera.
-
É por isso que o VRAM desempenha um papel fundamental nas tarefas de IA. Se você puder pré-carregar todos os dados e instruções necessários na placa gráfica no início da operação, permitindo que ela os processe em suas velocidades internas brilhantes e simplesmente coletar os resultados na conclusão, poderá reduzir significativamente os tempos de espera e minimizar os recursos desperdiçados.
-
Em nosso caso de uso, utilizamos VM.GPU.A10.1, que possui uma GPU A10 NVIDIA com 24 GB de RAM. Uma única GPU NVIDIA A10 é mais do que suficiente para uma operação suave da v1.5. No entanto, à medida que a complexidade do prompt aumenta, o tempo de geração aumenta e a velocidade de iteração diminui. Existem versões podadas de modelos v2 Stable Diffusion que podem executar operações com mais rapidez e facilidade do que suas contrapartes v2 de tamanho original, principalmente devido aos seus requisitos de espaço reduzido. Embora todas as versões dos modelos de Difusão Estável possam ser acomodadas em uma única GPU NVIDIA de A10 24 GB, o ritmo da iteração e o tempo de geração de imagem depende de vários fatores, incluindo o modelo específico, seu tamanho, complexidade rápida, etapas de amostragem, dimensões de imagem, ajustes de alta resolução, tamanho do lote e muito mais.
-
No próximo tutorial, exploraremos como particionar o modelo, distribuí-lo entre várias GPUs e executar a Difusão Estável usando várias GPUs em uma única máquina. Também exploraremos o ajuste fino de um modelo de base de Difusão Estável existente.
Links Relacionados
Confirmações
Autor - Abhiram Ampabathina (Arquiteto de Nuvem Sênior)
Mais Recursos de Aprendizagem
Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.