Man kann ausführbaren Python-Code auch direkt aus der Konfiguration generieren:
from discoart . config import export_python
export_python ( da )
Wenn Sie ein Google Colab-Free-Tarif-Nutzer sind, ist es ärgerlich, dass von Zeit zu Zeit Sitzungen verloren gehen. Oder manchmal beenden Sie den Lauf einfach vorzeitig, weil das erste Bild nicht gut genug ist und eine Tastaturunterbrechung verhindert, dass .create()
ein Ergebnis zurückgibt. In beiden Fällen können Sie die Ergebnisse problemlos wiederherstellen, indem Sie die letzte Sitzungs-ID abrufen.
Suchen Sie die Sitzungs-ID. Es erscheint über dem Bild.
Rufen Sie das Ergebnis jederzeit über diese ID auf einem beliebigen Computer ab, nicht unbedingt auf Google Colab:
from docarray import DocumentArray
da = DocumentArray . pull ( 'discoart-3205998582' )
Betrachten Sie ein Dokument als eigenständige Daten mit Konfiguration und Bild. Sie können es als Ausgangszustand für die zukünftige Ausführung verwenden. Seine .tags
werden als Anfangsparameter verwendet; .uri
wird, sofern vorhanden, als Ausgangsbild verwendet.
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 ,
)
Wenn Sie nur von einer bekannten DocArray-ID aus initialisieren möchten, dann gehen Sie einfach wie folgt vor:
from discoart import create
create ( init_document = 'discoart-3205998582' )
Sie können Umgebungsvariablen festlegen, um das Metaverhalten von DiscoArt zu steuern. Die Umgebungsvariablen müssen vor dem Import von DiscoArt festgelegt werden, entweder in Bash oder in Python über 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 bietet zwei Befehle create
und config
, mit denen Sie DiscoArt über die CLI ausführen können.
python -m discoart create my.yml
Dadurch werden Grafiken aus der YAML-Konfigurationsdatei my.yml
erstellt. Sie können auch Folgendes tun:
cat config.yml | python -m discoart create
Wie kann ich also mein eigenes my.yml
haben und wie sieht es aus? Das ist der zweite Befehl:
python -m discoart config my.yml
Dadurch wird die Standard-YAML-Konfiguration gegabelt und nach my.yml
exportiert. Jetzt können Sie es ändern und mit dem Befehl python -m discoart create
ausführen.
Wenn kein Ausgabepfad angegeben ist, gibt python -m discoart config
die Standardkonfiguration auf stdout aus.
Um Hilfe zu einem Befehl zu erhalten, fügen Sie am Ende --help
hinzu, z. B.:
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
DiscoArt zu servieren ist super einfach. Führen Sie einfach den folgenden Befehl aus:
python -m discoart serve
Sie werden sehen:
Senden Sie nun eine Anfrage per Curl/Javascript an den Server, z
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"]}} '
Das ist es.
Sie können natürlich alle Parameter, die von der Funktion create()
akzeptiert werden, im JSON übergeben.
Wir wissen bereits, dass die create
selbst auf der GPU langsam ist und die Fertigstellung eines Bildmaterials 10 Minuten dauern kann. Das bedeutet, dass der Kunde nach dem Absenden der oben genannten Anfrage 10 Minuten auf die Antwort warten muss. Da alles synchron läuft, ist an diesem Verhalten nichts auszusetzen. In der Praxis kann der Kunde jedoch mittendrin einen Fortschritt oder Zwischenergebnisse erwarten, anstatt auf das Ende zu warten.
/result
Endpunkt ist für diesen Zweck konzipiert. Die Zwischenergebnisse werden zurückgegeben, sobald sie verfügbar sind. Sie müssen lediglich name_docarray
in den Anforderungsparametern angeben, wie Sie es in /create
endpoint angegeben haben. Hier ist ein Beispiel:
Erstellen wir mydisco-123
indem wir die folgende Anfrage an den Endpunkt /create
senden:
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"]}} '
Da die obige Anfrage nun auf dem Server verarbeitet wird, können Sie den Fortschritt mydisco-123
regelmäßig überprüfen, indem Sie die folgende Anfrage an den Endpunkt /result
senden:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/result", "parameters": {"name_docarray": "mydisco-123"}} '
Ein JSON wird mit aktuellem Fortschritt zurückgegeben, mit Bild als DataURI, Verlust, Schritten usw. Das JSON-Schema von Document/DocumentArray wird hier beschrieben.
Beachten Sie, /result
dank der intelligenten Weiterleitung von Jina Gateway nicht von /create
blockiert wird. Um mehr über diese Endpunkte zu erfahren/zu spielen, können Sie ReDoc oder die im Server eingebettete Swagger-Benutzeroberfläche überprüfen.
Senden Sie an /skip
, um den aktuellen Lauf zu überspringen und zum nächsten Lauf zu wechseln, wie in n_batches
definiert:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/skip"} '
An /stop
senden, um den aktuellen Lauf zu stoppen, alle Läufe abzubrechen n_batches
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/stop"} '
/create
Es ist möglich, einen entsperrten /create
Endpunkt zu haben: Die Client-Anfrage an /create
wird sofort zurückgegeben, ohne auf die Fertigstellung der Ergebnisse zu warten. Sie müssen sich jetzt vollständig auf /result
verlassen, um das Ergebnis abzufragen.
So aktivieren Sie diese Funktion:
flow.yml
und fügen Sie sie in myflow.yml
ein.floating: false
in floating: true
im Abschnitt discoart
executor“;python -m discoart serve myflow.yml
Beachten Sie, dass die Anforderungsgeschwindigkeit jetzt unter Ihrer Kontrolle liegt. Das heißt, wenn der Client 10 /create
-Anfragen pro Sekunde sendet, startet der Server 10 create()
parallel! Dies kann leicht zu OOM führen. Daher wird empfohlen, diese Funktion nur dann zu aktivieren, wenn Sie sicher sind, dass der Client nicht zu viele Anfragen sendet, z. B. wenn Sie die Client-Anfragerate steuern. oder Sie verwenden DiscoArt hinter einem BFF (Backend für Frontend).
Wenn Sie über mehrere GPUs verfügen und mehrere DiscoArt-Instanzen parallel ausführen möchten, indem Sie GPUs im Zeitmultiplex nutzen, können Sie die Standarddatei flow.yml
kopieren, einfügen und wie folgt ändern:
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
Hier replicas: 3
sagt, dass drei DiscoArt-Instanzen erzeugt werden, CUDA_VISIBLE_DEVICES: RR0:3
stellt sicher, dass sie die ersten drei GPUs im Round-Robin-Verfahren verwenden.
Nennen Sie es myflow.yml
und führen Sie es dann aus
python -m discoart serve myflow.yml
Dank Jina gibt es jede Menge Dinge, die Sie anpassen können! Sie können die Portnummer ändern; Protokoll auf gRPC/Websockets ändern; TLS-Verschlüsselung hinzufügen; Prometheus-Überwachung aktivieren/deaktivieren; Sie können es auch einfach über Folgendes in das Kubernetes-Bereitstellungspaket exportieren:
jina export kubernetes myflow.yml
Weitere Funktionen und YAML-Konfigurationen finden Sie in den Jina-Dokumenten.
Der Wechsel vom HTTP- zum gRPC-Gateway ist einfach:
jtype : Flow
with :
protocol : grpc
...
und starten Sie dann den Server neu.
Die Verwendung des gRPC-Gateways bietet mehrere Vorteile:
Wenn Sie den DiscoArt-Server hinter einem BFF (Backend für Frontend) verwenden oder Ihr DiscoArt-Server den HTTP-Verkehr von Endbenutzern nicht direkt weiterleitet, sollten Sie im Allgemeinen das gRPC-Protokoll verwenden.
Um mit einem gRPC DiscoArt-Server zu kommunizieren, kann man einen Jina-Client verwenden:
# !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' })
So verwenden Sie ein vorhandenes Dokument/DocumentArray als Init-Dokument zum 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 ],
},
)
Dies entspricht der Ausführung create(init_document=old_da, width_height=[1024, 768])
auf dem Server. Notiz:
init_document
.init_document
ein DocumentArray ist, wird das erste Dokument im Array als Init-Dokument verwendet.Obwohl dies nicht empfohlen wird, ist es auch möglich, Google Colab zum Hosten des DiscoArt-Servers zu verwenden. Bitte schauen Sie sich die folgenden Tutorials an:
Wir stellen ein vorgefertigtes Docker-Image zum sofortigen Ausführen von DiscoArt bereit. So aktualisieren Sie das Docker-Image auf die neueste Version:
docker pull jinaai/discoart:latest
Der Standardeinstiegspunkt ist das Starten eines Jupyter-Notebooks
# 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
Jetzt können Sie http://127.0.0.1:51000
besuchen, um auf das Notebook zuzugreifen
Sie können es auf dem Windows-Subsystem für Linux (WSL) verwenden. Die offizielle Anleitung finden Sie hier.
# 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
Ihr DiscoArt-Server läuft jetzt unter http://127.0.0.1:51001
.
Docker-Images werden in jeder Version erstellt, sodass man sie auf eine bestimmte Version, beispielsweise 0.5.1
, beschränken kann:
docker run -p 51000:8888 -v $( pwd ) :/home/jovyan/ -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart:0.5.1
Als nächstes folgt Erstellen.
? Wenn Sie bereits DD-Benutzer sind : Jetzt kann es losgehen! Es gibt kein zusätzliches Lernen, DiscoArt respektiert die gleiche Parametersemantik wie DD5.6. Also lassen Sie Ihrer Kreativität freien Lauf! Lesen Sie hier mehr über ihre Unterschiede.
Sie können jederzeit from discoart import cheatsheet; cheatsheet()
um alle neuen/geänderten Parameter zu überprüfen.
? Wenn Sie ein DALL·E Flow oder ein neuer Benutzer sind : Vielleicht möchten Sie Schritt für Schritt vorgehen, da Disco Diffusion ganz anders funktioniert als DALL·E. Es ist viel fortschrittlicher und leistungsfähiger: Beispielsweise kann Disco Diffusion gewichtete und strukturierte Textaufforderungen annehmen; es kann von einem Bild mit kontrolliertem Rauschen initialisiert werden; und es gibt viel mehr Parameter, die man anpassen kann. Ungeduldige Aufforderungen wie "armchair avocado"
werden Ihnen nur Verwirrung und Frustration bereiten. Ich empfehle Ihnen dringend, sich die folgenden Ressourcen anzusehen, bevor Sie Ihre eigene Eingabeaufforderung ausprobieren:
DiscoArt wird von Jina AI unterstützt und ist unter der MIT-Lizenz lizenziert. Wir stellen aktiv KI-Ingenieure und Lösungsingenieure ein, um das nächste Ökosystem für die neuronale Suche in Open Source aufzubauen.