Olá a todos.
A menos que tenham vivido em marte nos últimos tempos, já devem conhecer o impacto positivo (e as vezes negativo) da IA.
Um dos campos onde este impacto tem sido notado, é precisamente no campo da arte. Soluções como o Dall-E, Midjourney e como o Stable Difusion tem sido particularmente discutidos e debatidos.
Todos eles, desde os pagos aos gratuitos, tem por base a necessidade de computação maciça, largura de banda de memória e capacidade de uma placa gráfica de ultima geração, cara, e pouco disponível em alguns casos.
Assim sendo, os autores do stable_diffusion.openvino fizeram um fork que embora perca algo em termos de velocidade para as versões com GPU (lembram-se da largura de banda e multitude de cuda cores?) em termos práticos, conseguem a mesma produzir coisas interessantes em termos gráficos. Este é um post sobre como instalar o produto num container lxc.
O que é o stable_diffusion?
O stable_diffusion refere-se a uma técnica específica de machine learning, mais precisamente em modelos gerativos. No contexto do machine learning, a difusão estável (stable diffusion) é uma abordagem para gerar amostras de dados complexos e de alta qualidade.
O stable_diffusion é frequentemente utilizado em modelos generativos probabilísticos, nos quais o objetivo é aprender a distribuição de probabilidade subjacente aos dados. Ele difere de outras técnicas de geração de dados, como GANs (Redes Generativas Adversariais) e VAEs (Variational Autoencoders), e tem sido explorada para melhorar a qualidade das amostras geradas.
O conceito básico da difusão estável envolve um processo iterativo em que uma amostra inicial é modificada gradualmente até se assemelhar à distribuição desejada. Esse processo é “estável” no sentido de que as mudanças são controladas para evitar que o modelo saia de uma região plausível do espaço de dados.
Quanto ao projeto específico mencionado , é uma implementação ou extensão que integra o stable_diffusion com o OpenVINO. O OpenVINO é uma ferramenta da Intel projetada para otimizar e acelerar a implementação de modelos de inteligência artificial em hardware específico da Intel, como CPUs, GPUs e FPGAs (embora seja compatível com processadores AMD e equivalentes)
Para obter mais informações mais precisas sobre o stable_diffusion e o projeto stable_diffusion.openvino, recomendo lerem a documentação oficial do projeto no GitHub, mas num ponto de vista bird’s eye isto é o projeto suporta e efetua muito bem:
- Txt2img/img2img
- Negative prompts
- Prompt queueing
- Upscaling
- Waifu Diffusion support
E se estás interessado em explorar o poder do Stable Diffusion com o OpenVINO, estás no lugar certo! Este guia abrangente irá nos ajudar através do processo de instalação e utilização do stable_diffusion.openvino. Certifiquem-se de seguir cada passo com muita atenção para obter os resultados desejados.
Pré-requisitos:
Para este caso especifico instalei um opensuse tumbleweed – build de 122023 – como plataforma num lxc container, com os seguintes requisitos de hardware e software:
Python 3.9.+ (incluído e deployed pelo Miniconda).
CPU compatível com o OpenVINO (a maior parte suporta).
8gb RAM (quase não chega e irá causar swapping e lentidão. 24gb ou mais de ram recomendado).
Preparação do container após instalado:
zypper install gcc git libX11-6 libvulkan1 Mesa-libGL1 libgthread-2_0-0 unzip
Criem um utilizador que irá correr a vossa instancia de stable_diffusione e executem lá os seguintes passos:
useradd ai
Instalação do Python Virtual Environment / Conga:
Como é obvio, iremos ainda ter de instalar alguns componentes extras relacionados com python. Para isto escolhi criar um ambiente com o conga:
mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh
Em seguida, activar o conga:
~/miniconda3/bin/conda init bash ~/miniconda3/bin/conda init zsh
Sair e voltar a entrar na sessão de consola para o utilizador criado anteriormente:
su - ai
Em seguida, descarregar o feature branch desde o git:
git clone https://github.com/bes-dev/stable_diffusion.openvino.git
E procede-se a instalação dos pré-requisitos:
cd stable_diffusion.openvino conda create --name vin python=3.9 pip conda activate vin conda install pip pip install -r requirements.txt pip install Pillow pyyaml sv-ttk
Aguardar durante algum tempo para que todas as instalações das dependencias estejam completadas.
Utilizando o Stable Diffusion OpenVINO:
Agora que está tudo instalado e configurado, estamos prontos para utilizar o stable_diffusion.openvino. Certifiquem-se de fornecer os parâmetros necessários conforme descrito na documentação do projeto. Por exemplo:
python demo.py --prompt "Street-art painting of Torre de Belem, photorealism"
O resultado foi:
Modificando um pouco o nosso prompt:
python demo.py --prompt "Street-art painting of Torre de Belem, with the sun behind in Monet style. Personalize at will"
Se notarem, a personalização que ele fez foi assinar a foto.
Pedi então, por sugestão, que removesse a personalização por ele efetuada:
python demo.py --prompt "Street-art painting of Torre de Belem, with the sun behind in Monet style. Do not sign your painting"
Lembrem-se que esta geração irá demorar um pouco. Os valores temporais para gerar a imagem são os seguintes:
(Intel(R) Core(TM) i5-8279U) 7.4 s/it 3.59 min
(AMD Ryzen Threadripper 1900X) 5.34 s/it 2.58 min
(Intel(R) Xeon(R) Gold 6154 CPU) 1 s/it 33 s
Lembrem-se, este é apenas um guia básico para começar.
Para obter informações mais detalhadas sobre os parâmetros, funcionalidades e possíveis configurações, consulte a documentação oficial do disponível no GitHub.
Parabéns! Se chegaram até este ponto com uma imagem gerada, concluíram com sucesso a instalação e utilização do stable_diffusion.openvino. Este é um passo significativo para explorar as capacidades da difusão estável com a eficiência do OpenVINO. Sintam-se à vontade para experimentar e ajustar os parâmetros de acordo com vossas necessidades específicas.
O próximo passo será treinarem novos modelos de machine learning para ir obtendo imagens cada vez mais realistas.
Divirtam-se explorando esse fascinante mundo da inteligência artificial e como sempre, se tiverem duvidas ou reparos, sabem onde me encontrar.
Um abraço
Nuno
Agradecimentos especiais ao Pedro Silva pela ajuda em me fazer compreender alguns conceitos e métodos do software.