También se puede generar código Python ejecutable directamente desde la configuración:
from discoart . config import export_python
export_python ( da )
Si es un usuario gratuito de Google Colab, una cosa que le molesta es la pérdida de sesiones de vez en cuando. O, a veces, simplemente detienes la ejecución antes de tiempo porque la primera imagen no es lo suficientemente buena y una interrupción del teclado evitará que .create()
devuelva cualquier resultado. En cualquier caso, puede recuperar fácilmente los resultados obteniendo el ID de la última sesión.
Busque el ID de la sesión. Aparece encima de la imagen.
Obtenga el resultado a través de esa ID en cualquier máquina en cualquier momento , no necesariamente en Google Colab:
from docarray import DocumentArray
da = DocumentArray . pull ( 'discoart-3205998582' )
Considere un documento como datos autónomos con configuración e imagen; se puede utilizar como estado inicial para la ejecución futura. Sus .tags
se utilizarán como parámetros iniciales; .uri
si se presenta, se utilizará como imagen inicial.
from discoart import create
from docarray import DocumentArray
da = DocumentArray . pull ( 'discoart-3205998582' )
create (
init_document = da [ 0 ],
cut_ic_pow = 0.5 ,
tv_scale = 600 ,
cut_overview = '[12]*1000' ,
cut_innercut = '[12]*1000' ,
use_secondary_model = False ,
)
Si solo desea inicializar desde un ID de DocArray conocido, simplemente:
from discoart import create
create ( init_document = 'discoart-3205998582' )
Puede configurar variables de entorno para controlar el metacomportamiento de DiscoArt. Las variables de entorno deben configurarse antes de importar DiscoArt, ya sea en Bash o en Python a través de os.environ
.
DISCOART_LOG_LEVEL= ' DEBUG ' # more verbose logs
DISCOART_OPTOUT_CLOUD_BACKUP= ' 1 ' # opt-out from cloud backup
DISCOART_DISABLE_IPYTHON= ' 1 ' # disable ipython dependency
DISCOART_DISABLE_RESULT_SUMMARY= ' 1 ' # disable result summary after the run ends
DISCOART_DEFAULT_PARAMETERS_YAML= ' path/to/your-default.yml ' # use a custom default parameters file
DISCOART_CUT_SCHEDULES_YAML= ' path/to/your-schedules.yml ' # use a custom cut schedules file
DISCOART_MODELS_YAML= ' path/to/your-models.yml ' # use a custom list of models file
DISCOART_OUTPUT_DIR= ' path/to/your-output-dir ' # use a custom output directory for all images and results
DISCOART_CACHE_DIR= ' path/to/your-cache-dir ' # use a custom cache directory for models and downloads
DISCOART_DISABLE_REMOTE_MODELS= ' 1 ' # disable the listing of diffusion models on Github, remote diffusion models allows user to use latest models without updating the codebase.
DISCOART_REMOTE_MODELS_URL= ' https://yourdomain/models.yml ' # use a custom remote URL for fetching models list
DISCOART_DISABLE_CHECK_MODEL_SHA= ' 1 ' # disable checking local model SHA matches the remote model SHA
DISCOART_DISABLE_TQDM= ' 1 ' # disable tqdm progress bar on diffusion
DiscoArt proporciona dos comandos create
y config
que le permiten ejecutar DiscoArt desde CLI.
python -m discoart create my.yml
que crea obras de arte a partir del archivo de configuración YAML my.yml
. También puedes hacer:
cat config.yml | python -m discoart create
Entonces, ¿cómo puedo tener mi propio my.yml
y cómo se ve? Ese es el segundo comando:
python -m discoart config my.yml
que bifurca la configuración YAML predeterminada y la exporta a my.yml
. Ahora puedes modificarlo y ejecutarlo con el comando python -m discoart create
.
Si no se especifica ninguna ruta de salida, entonces python -m discoart config
imprimirá la configuración predeterminada en stdout.
Para obtener ayuda con un comando, agregue --help
al final, por ejemplo:
python -m discoart create --help
usage: python -m discoart create [-h] [YAML_CONFIG_FILE]
positional arguments:
YAML_CONFIG_FILE The YAML config file to use, default is stdin.
optional arguments:
-h, --help show this help message and exit
Servir DiscoArt es súper fácil. Simplemente ejecute el siguiente comando:
python -m discoart serve
Verás:
Ahora envíe la solicitud al servidor a través de curl/Javascript, por ejemplo
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/create", "parameters": {"text_prompts": ["A beautiful painting of a singular lighthouse", "yellow color scheme"]}} '
Eso es todo.
Por supuesto, puede pasar todos los parámetros aceptados por la función create()
en JSON.
Ya sabemos que la función create
es lenta, incluso en la GPU, podría llevar 10 minutos terminar una obra de arte. Esto significa que después de enviar la solicitud anterior, el cliente tendrá que esperar 10 minutos para recibir la respuesta. No hay nada de malo en este comportamiento dado que todo se ejecuta de forma sincrónica. Sin embargo, en la práctica, el cliente puede esperar un progreso o resultados intermedios en el medio en lugar de esperar el final.
El punto final /result
está diseñado para este propósito. Devolverá los resultados intermedios tan pronto como estén disponibles. Todo lo que necesita es especificar name_docarray
en los parámetros de solicitud como especificó en /create
endpoint. Aquí hay un ejemplo:
Creemos mydisco-123
enviando la siguiente solicitud a /create
endpoint:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/create", "parameters": {"name_docarray": "mydisco-123", "text_prompts": ["A beautiful painting of a singular lighthouse", "yellow color scheme"]}} '
Ahora que la solicitud anterior se está procesando en el servidor, puede verificar periódicamente el progreso mydisco-123
enviando la siguiente solicitud al punto final /result
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/result", "parameters": {"name_docarray": "mydisco-123"}} '
Se devolverá un JSON con el progreso actualizado, con una imagen como DataURI, pérdida, pasos, etc. El esquema JSON de Documento/DocumentArray se describe aquí.
Tenga en cuenta que /result
no será bloqueado por /create
gracias al enrutamiento inteligente de Jina Gateway. Para aprender/jugar más sobre esos puntos finales, puede consultar ReDoc o la interfaz de usuario Swagger integrada en el servidor.
Enviar a /skip
, para omitir la ejecución actual y pasar a la siguiente ejecución como se define en n_batches
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/skip"} '
Enviar a /stop
, para detener la ejecución actual, cancelar todas las ejecuciones n_batches
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/stop"} '
/create
solicitud Es posible tener un punto final /create
desbloqueado: la solicitud del cliente a /create
será devuelta inmediatamente , sin esperar a que finalicen los resultados. Ahora tienes que confiar completamente en /result
para sondear el resultado.
Para habilitar esta característica:
flow.yml
predeterminado en myflow.yml
;floating: false
a floating: true
en la sección del ejecutor discoart
;python -m discoart serve myflow.yml
Tenga en cuenta que la velocidad de la solicitud ahora está bajo su control . Es decir, si el cliente envía 10 solicitudes /create
en un segundo, entonces el servidor iniciará 10 create()
en paralelo. Esto puede conducir fácilmente a OOM. Por lo tanto, la sugerencia es solo habilitar esta función si está seguro de que el cliente no envía demasiadas solicitudes; por ejemplo, usted controla la tasa de solicitudes del cliente; o estás usando DiscoArt detrás de un BFF (backend para frontend).
Si tiene varias GPU y desea ejecutar varias instancias de DiscoArt en paralelo aprovechando las GPU en modo multiplexado en el tiempo, puede copiar y pegar el archivo flow.yml
predeterminado y modificarlo de la siguiente manera:
jtype : Flow
with :
protocol : http
monitoring : true
port : 51001
port_monitoring : 51002 # prometheus monitoring port
env :
JINA_LOG_LEVEL : debug
DISCOART_DISABLE_IPYTHON : 1
DISCOART_DISABLE_RESULT_SUMMARY : 1
executors :
- name : discoart
uses : DiscoArtExecutor
env :
CUDA_VISIBLE_DEVICES : RR0:3 # change this if you have multiple GPU
replicas : 3 # change this if you have larger VRAM
- name : poller
uses : ResultPoller
Aquí replicas: 3
dice generar tres instancias de DiscoArt, CUDA_VISIBLE_DEVICES: RR0:3
se asegura de que usen las primeras tres GPU en forma circular.
Nómbralo como myflow.yml
y luego ejecuta
python -m discoart serve myflow.yml
¡Gracias a Jina, hay toneladas de cosas que puedes personalizar! Puede cambiar el número de puerto; cambiar el protocolo a gRPC/Websockets; agregar cifrado TLS; habilitar/deshabilitar el monitoreo de Prometheus; También puedes exportarlo al paquete de implementación de Kubernetes simplemente a través de:
jina export kubernetes myflow.yml
Para obtener más funciones y configuraciones de YAML, consulte los documentos de Jina.
Cambiar de la puerta de enlace HTTP a gRPC es simple:
jtype : Flow
with :
protocol : grpc
...
y luego reinicie el servidor.
Existen múltiples ventajas de utilizar la puerta de enlace gRPC:
En general, si está utilizando el servidor DiscoArt detrás de un BFF (backend para frontend), o su servidor DiscoArt no atiende directamente el tráfico HTTP de los usuarios finales, entonces debe usar el protocolo gRPC.
Para comunicarse con un servidor gRPC DiscoArt, se puede utilizar un Cliente Jina:
# !pip install jina
from jina import Client
c = Client ( host = 'grpc://0.0.0.0:51001' )
da = c . post (
'/create' ,
parameters = {
'name_docarray' : 'mydisco-123' ,
'text_prompts' : [
'A beautiful painting of a singular lighthouse' ,
'yellow color scheme' ,
],
},
)
# check intermediate results
da = c . post ( '/result' , parameters = { 'name_docarray' : 'mydisco-123' })
Para utilizar un documento/DocumentArray existente como documento de inicio para create
:
from jina import Client
c = Client ( host = 'grpc://0.0.0.0:51001' )
old_da = create (...)
da = c . post (
'/create' ,
old_da , # this can be a DocumentArray or a single Document
parameters = {
'width_height' : [ 1024 , 768 ],
},
)
Esto equivale a ejecutar create(init_document=old_da, width_height=[1024, 768])
en el servidor. Nota:
init_document
.init_document
es un DocumentArray, entonces el primer documento de la matriz se utilizará como documento de inicio.Aunque no se recomienda, también es posible utilizar Google Colab para alojar el servidor DiscoArt. Por favor consulte los siguientes tutoriales:
Proporcionamos una imagen de Docker prediseñada para ejecutar DiscoArt de forma inmediata. Para actualizar la imagen de Docker a la última versión:
docker pull jinaai/discoart:latest
El punto de entrada predeterminado es iniciar un cuaderno Jupyter.
# docker build . -t jinaai/discoart # if you want to build yourself
docker run -p 51000:8888 -v $( pwd ) :/home/jovyan/ -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart
Ahora puedes visitar http://127.0.0.1:51000
para acceder al cuaderno.
Puede usarlo en el subsistema de Windows para Linux (WSL). Consulte la guía oficial aquí.
# Make sure you install Windows 11 or Windows 10, version 21H2
docker run -p 8888:8888 -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart
# docker build . -t jinaai/discoart # if you want to build yourself
docker run --entrypoint " python " -p 51001:51001 -v $( pwd ) :/home/jovyan/ -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart -m discoart serve
Su servidor DiscoArt ahora se está ejecutando en http://127.0.0.1:51001
.
Las imágenes de Docker se crean en cada versión, por lo que se pueden bloquear en una versión específica, digamos 0.5.1
:
docker run -p 51000:8888 -v $( pwd ) :/home/jovyan/ -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart:0.5.1
Lo siguiente es crear.
? Si ya eres usuario de DD : ¡estás listo para comenzar! No hay aprendizaje adicional, DiscoArt respeta la misma semántica de parámetros que DD5.6. ¡Así que da rienda suelta a tu creatividad! Lea más sobre sus diferencias aquí.
Siempre puedes hacerlo from discoart import cheatsheet; cheatsheet()
para verificar todos los parámetros nuevos/modificados.
? Si eres usuario de DALL·E Flow o nuevo : quizás quieras ir paso a paso, ya que Disco Diffusion funciona de una manera muy diferente a DALL·E. Es mucho más avanzado y potente: por ejemplo, Disco Diffusion puede aceptar mensajes de texto estructurados y ponderados; puede inicializarse a partir de una imagen con ruido controlado; y hay muchos más parámetros que se pueden modificar. Un mensaje impaciente como "armchair avocado"
no le generará más que confusión y frustración. Le recomiendo encarecidamente que consulte los siguientes recursos antes de probar su propio mensaje:
DiscoArt está respaldado por Jina AI y tiene licencia MIT. Estamos contratando activamente ingenieros de inteligencia artificial e ingenieros de soluciones para construir el próximo ecosistema de búsqueda neuronal en código abierto.