tech explorers, welcome!

Etiqueta: generación de imágenes

Dalle-playground: un servidor local de Dall·E para PCs con pocos recursos

La generación de imágenes mediante IA tiene un alto coste computacional. Que no te engañe la velocidad de la API de Dall·E 2 que vimos en este otro post; si estos servicios habitualmente son de pago es por algo y, fuera de los servicios online que ya vimos, ejecutar IA en tu ordenador no es tan sencillo.

Después de probar, en vano, algunas alternativas open-source como Pixray o Dalle-Flow, finalmente te traigo la más simple de todas: dalle-playground. Esta es una versión primeriza de Dalle, por lo que no se obtienen los mejores resultados.

Aun así, pronto traeré una alternativa a Dall·E (Stable Diffusion de stability.ai), que también cuenta con una versión optimizada por la comunidad para PCs con pocos recursos.

Requisitos

"Computer hardware elements" by dalle-playground

Hardware

Para que te hagas una idea, Pixray recomienda mínimo 16GB de VRAM y Dalle-Flow 21GB. VRAM o virtual RAM es la memoria de acceso rápido que tiene tu tarjeta gráfica (no confundir con la memoria RAM de toda la vida).

Un portátil estándar como el mío tiene una Nvidia GeForce GTX1050Ti con 3GB de VRAM dedicada, más luego 8GB de RAM en placa.

Con este requisito mínimo, y un poco de paciencia, podrás ejecutar Dalle-playground localmente en tu PC, aunque también requiere una conexión a internet para comprobar que los módulos python y el punto de control de la IA están actualizados.

Si tienes alguna o varias gráficas más potentes yo te recomiendo probar Pixray, ya que se instala relativamente fácil y está muy extendido y documentado.

https://github.com/pixray/pixray#usage

Software

Los requisitos de software tampoco son triviales. Principalmente necesitarás python y Node.js. Yo enseñaré los pasos principales de Linux, que tiene mucha más flexibilidad a la hora de instalar todo tipo de paquetes de este tipo, pero es igualmente válido para Windows o Mac si te manejas con la terminal o usando docker.

Descarga dalle-playground

Casualmente descubrí este repositorio antes de que fuese actualizado a Stable Diffusion V2 (allá por noviembre de 2022) y tuve la perspicacia de clonarlo.

Accede y descarga todo el repositorio desde mi github:

https://github.com/TheRoam/dalle-playground-DalleMINI-localLinux

Opcionalmente, puedes descargar el repositorio original, aunque Stable Diffusion V2 requiere bastante más VRAM:

https://github.com/saharmor/dalle-playground/

Si usas git puedes clonarlo directamente a un directorio desde el terminal con:

git clone https://github.com/TheRoam/dalle-playground-DalleMINI-localLinux

Yo renombré el directorio simplemente a dalle-playground.

Instala python3 y los módulos requeridos

Todo el algoritmo trabaja con python en un backend. En el repositorio solo se menciona el uso de python3, por lo que asumo que versiones anteriores no funcionarán. Comprueba tu versión de python con:

>> python3 -V
Python 3.10.6

O instálalo, si no lo tienes, de su fuente oficial (creo que ya vamos por python 3.11, así que comprueba cuál es la última disponible para tu sistema operativo):

https://www.python.org/downloads/

O de tu repositorio de Linux:

sudo apt-get install python3.10

También necesitarás el módulo venv para virtualizar el entorno de trabajo de dalle-playground y no alterar toda tu instalación de python (lo siguiente es para Linux, en Windows viene incluído en su instalador):

sudo apt-get install python3.10-venv

En la carpeta de backend, crea un entorno virtual de python, que yo llamaré dalleP:

cd dalle-playground/backend
python3 -m venv dalleP

Ahora, activa este entorno virtual (verás que aparece el nombre al inicio de la línea del terminal):

(dalleP) abc@123: ~dalle-playground/backend$

Instala el resto de módulos de python que requiere dalle-playground y que se indican en el fichero dalle-playground/backend/requirements.txt

pip3 install -r requirements.txt

Aparte, si no lo tienes ya, necesitarás pyTorch:

pip3 intall torch

Instala npm

Node.js ejecutará un servidor web local que servirá de app. Instálalo de la fuente oficial:

https://nodejs.org/en/download/

O de tu repositorio de Linux:

sudo apt-get install npm

Ahora ve a la carpeta del frontend dalle-playground/interface e instala los módulos necesarios de Node.js :

cd dalle-playground/interface
npm install

Lanzar el backend

Con todo instalado lanzamos los servidores, empezando por el backend.

Primero activamos el entorno virtual de python3 en la carpeta dalle-playground/backend (si acabas de instalarlo, lo tendrás ya activado del paso anterior)

cd dalle-playground/backend
source dalleP/bin/activate

Lanzamos la aplicación de backend:

python3 app.py --port 8080 --model_version mini

El backend tardará varios minutos en arrancar (de 2 a 5 min). Esperamos a que salga un mensaje como el siguiente y nos fijamos en las direcciones IP que nos aparecen al final:

--> DALL-E Server is up and running!
--> Model selected - DALL-E ModelSize.MINI
 * Serving Flask app 'app' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8080
 * Running on http://192.168.1.XX:8080

Lanzar frontend

Ahora lanzamos el servidor web local de Node.js, para lo que ejecutamos una nueva terminal:

cd dalle-playground/interfaces
npm start

En cuanto acabe, se abrirá un navegador web y nos mostrará el menú gráfico de la aplicación.

Lanzador automático

En Linux puedes usar mi script launch.sh que lanza backend y frontend automáticamente siguiendo los pasos de arriba. Solo siéntate a esperar a que cargue.

launch.sh

#!/bin/bash
#Launcher for dalle-playground in Linux terminal

#Launchs backend and frontend scripts in one go
$(bash ./frontend.sh && bash ./backend.sh &)

#Both scripts will run in one terminal.
#Close this terminal to stop the programm.

backend.sh

#!/bin/bash
#Backend launcher for dalle-playground in Linux terminal

#move to backend folder
echo "------ MOVING TO BACKEND FOLDER ------"
cd ./backend

#set python virtual environment
echo "------ SETTING UP PYTHON VIRTUAL ENVIRONMENT ------"
python3 -m venv dalleP
source dalleP/bin/activate

#launch backend
echo "------ LAUNCHING DALLE-PLAYGROUND BACKEND ------"
python3 app.py --port 8080 --model_version mini &

frontend.sh

#!/bin/bash
#Frontend launcher for dalle-playground in Linux terminal

#move to frontend folder
echo "------ MOVING TO FRONTEND FOLDER ------"
cd ./interface

#launch frontend
echo "------ LAUNCHING DALLE-PLAYGROUND FRONTEND ------"
npm start &

App dalle-playground

En el primer campo introduciremos la dirección IP del servidor de backend que vimos anteriormente. Si accedes desde el mismo PC puedes usar la primera:

http://127.0.0.1:8080

Pero puedes acceder desde otro dispositivo de tu red local mediante la segunda:

http://192.168.1.XX:8080

Ahora introducimos la descripción de la imagen a generar en el segundo campo, y por último definimos el número de imágenes que queremos que se generen (a mayor número, más tiempo tardará).

Pulsamos [enter] y esperamos a que se genere la imagen (sobre 5 minutos por imagen).

Y aquí está nuestra primera imagen generada por IA en nuestro ordenador. Yo os dejo una pequeña galería de resultados. Y en el próxmo post veremos cómo obtener mejores resultados mediante Stable Diffusion, también usando menos de 4GB de VRAM.

Ya sabes que espero tus dudas y comentarios en 🐦 Twitter!

🐦 @RoamingWorkshop

Galería: Dalle-playground

Nota: imágenes originales de 256x256 píxeles, ampliadas con Upscayl.

Dall·E 2 Beta: generación de imágenes mediante inteligencia artificial (IA)

Tenía esto en el tintero desde hace tiempo, y es que a raíz de algunos Tweets y del proyecto GOIA de Iker Jiménez, me parecía que la generación de imágenes mediante IA se había vuelto bastante accesible. Y lo es. Se avanza a pasos de gigante. Pero todo tiene un precio.

La generación de imágenes de OpenAI, uno de los gigantes de Elon Musk, bautizada como Dall·E, lanzó su API abierta para que todo el mundo la pruebe.

Tienes 18$ para usar durante 3 meses solo con registrarte. El resto hay que pasarlo por caja, pero te dará para bastantes pruebas, y luego solo cuesta 0.02$ la imagen. Además es bastante fácil de usar y los resultados son geniales.

Merece la pena probarlo para saber cuál es el top y al final os diré qué podemos usar el resto de los mortales para el día a día.

Pero antes… arrancamos con una imagen del volcán Teide en Tenerife. ¿Es real o es virtual?

Foto del Teide, Tenerife, creada con Dall·E 2 de OpenAI. The Roaming Workshop 2022.

OpenAI API

Bueno, rápidamente, OpenAI es el megaproyecto de Inteligencia Artificial (IA) de Elon Musk & Co. Dentro de las muchas capacidades de estas redes neuronales virtuales está la generación de imágenes a partir de un texto en lenguaje natural, pero hay mucho más.

La IA va a facilitar muchas cosas en el futuro, así que échale un vistazo a todos los ejemplos que hay abiertos en sus pruebas Beta:

https://beta.openai.com/examples/

Básicamente se "entrena" a un ordenador con ejemplos reales bien caracterizados para que, a partir de ellos, pueda generar contenido nuevo siguiendo una petición.

La máquina no va a generar lo que tú quieres o piensas, algo esperable, sino que a partir de tu orden y su aprendizaje, generará un resultado propio.

La generación de imágenes a partir del lenguaje natural es quizás la aplicación más gráfica, pero el potencial es inimaginable. Arriba simplemente le pedí a Dall·E la palabra "Teide". Pero, ¿qué pasa si nos planteamos cosas que no han ocurrido, que no hemos visto, o simples elucubraciones? Pues que la IA es capaz de darle vida a nuestro pensamiento. Lo que imaginamos en nuestra mente se traslada a la pantalla.

Pero bueno basta de rollo filosófico y vamos al grano.

Dall·E 2 API

Para "vendernos" el futuro, OpenAI nos lo ha puesto muy fácil. Disponemos de muchísima documentación para curiosear una versión de pruebas Beta completamente abierta durante tres meses, y solo tendremos que darles nuestro correo electrónico.

Regístrate para usar Dall·E 2 a través de su página web, pulsando el botón de Sign Up.

https://openai.com/dall-e-2/

Tendrás que verificar tu correo electrónico y ya podrás entrar a tu cuenta. Cuidado por que te puede redirigir a la página comercial https://labs.openai.com

La versión de prueba es esta:

https://beta.openai.com

Crear API key

Desde el menú superior, pinchamos sobre nuestro perfil y seleccionamos View API keys.

Como acabamos de registrarnos, tendremos que generar una y copiarla en algún sitio, ya que será necesaria para el uso de la API.

Uso de Dall·E 2

Y ya está. No hay más requisitos. ¡A jugar!

Vamos a ver cómo generar una imagen según su documentación:

https://beta.openai.com/docs/api-reference/images/create

Para no liarnos, podemos usar curl, para lo que necesitas abrir un terminal, ya sea de Window, MacOS o Linux. El código que nos indican es este:

curl https://api.openai.com/v1/images/generations \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "prompt": "A cute baby sea otter",
  "n": 2,
  "size": "1024x1024"
}'

Donde deberemos introducir nuestra clave secreta en lugar de YOUR_API_KEY.

También indicaremos en prompt la descripción de la imagen que queremos.

Con n definimos el número de imágenes a generar con esta orden.

Y size es el tamaño de la imagen, estando disponibles 256x256, 512x512, o 1024x1024.

Yo voy a probar con "un mapa de Marte en papel".

curl https://api.openai.com/v1/images/generations -H "Content-Type: application/json" -H "Authorization: Bearer sk-TuApiKeyAqui" -d "{\"prompt\":\"A map of Mars in paper\",\"n\":1,\"size\":\"1024x1024\"}"

TIP! Copia y pega este código en tu terminal, cambiando tu clave secreta "sk-..." y el prompt.

Obtendrás una URL como respuesta al comando, que es un enlace web a la imagen generada.

Abre el enlace para ver el resultado:

"Un mapa de Marte en papel" con OpenAI. The Roaming WorkShop 2022.

¡Impresionante!

Tarifas

Bueno, bueno... Volvamos ahora a la Tierra. No pensarás que esta rapidez y esta calidad van a ser gratis, ¿verdad? Si vuelves a tu cuenta de OpenAI, podrás ver el uso que haces de la API y cómo vas gastando tu crédito.

https://beta.openai.com/account/usage

Como decía anteriormente, la Beta ofrece 18$ para gastar durante 3 meses y cada imagen a 1024px sale a unos 0,065$.

Todas las grandes plataformas de este estilo (Midjourney, Nightcafe, DreamAI, etc) funcionan de esta manera, a base de crédito por uso, y es que los procesadores que generan estas imágenes tan espectaculares son muy potentes.

Alternativas (gratuitas)

Hay varias alternativas de código abierto y totalmente gratuitas. Yo te invito a probarlas todas y elegir la que más te guste, pero te advierto que los requisitos de software y hardware son muchos; sobre todo necesitas una buena, o incluso varias, tarjetas gráficas. Al fin y al cabo pon en la balanza cuánto vas a usar la IA, y si no te merece más la pena pagar unos pocos céntimos por 4 imágenes de alta calidad cada par de meses.

De las 4 recomendaciones que te voy a hacer solo he probado con éxito las dos últimas y más flojas:

1. Pixray

https://github.com/pixray/pixray

Se presenta prometedor por la simplicidad de la instalación y del uso. Aunque no te fies de la imagen de arriba (es su módulo de pixelado) porque cuenta con complejas opciones de generación de imágenes detalladas.

Existe además buena documentación hecha por los usuarios y con soporte en Discord.

Por otro lado, recomiendan unos 16GB de VRAM (RAM virtual de la GPU de tu tarjeta gráfica). A mi me petó por falta de memoria sin poder ver el resultado...

2. Dalle-Flow

https://github.com/jina-ai/dalle-flow#Client

Muy técnico y complicado. Los resultados parecen brillantes, pero no he pasado de la instalación. Usa varios paquetes muy específicos de python que supuestamente se ejecutan en Google Colab. O no tiene continuidad y está roto, o la documentación es mala o yo soy un auténtico inútil... Además recomiendan unos 21GB de VRAM aunque por lo visto mediante Colab se puede repartir esta carga... nunca lo pude comprobar.

3. Craiyon

https://www.craiyon.com/

El antiguo Dalle-mini creado por Boris Dayma tiene una práctica versión web totalmente gratuita (sin crédito ni pagos, solo algún que otro anuncio).

Aunque sus resultados no son brillantes de inicio, luego los podremos mejorar con Upscayl (ya te hablaré de él).

4. Dalle-playground

https://github.com/saharmor/dalle-playground/

Uno de los muchos repositorios derivados de dalle-mini, en este caso en un práctico paquete que podremos usar libremente y de forma gratuita en nuestro PC de casa con muy pocos requisitos de hardware o software. Se ejecuta como una webapp local en tu navegador generando un servidor para que puedas acceder desde cualquier parte de tu red.

Junto con Upscayl, hacen un buen tándem para generar imágenes de IA en tu propio PC de forma gratuita.

Galería: Dall·E 2

Galería: Dalle-playground+Upscayl preview

En el próximo artículo veremos cómo generar estás imágenes en un PC ordinario, con Dalle-playground y Upscayl.

Esto es todo por ahora! Cualquier duda o comentario sobre este post de Dall·E te espero en 🐦 Twitter!

🐦 @RoamingWorkshop