Также можно сгенерировать работоспособный код Python непосредственно из конфигурации:
from discoart . config import export_python
export_python ( da )
Если вы являетесь пользователем Google Colab бесплатного уровня, вас раздражает время от времени потеря сеансов. Или иногда вы просто досрочно останавливаете выполнение, поскольку первое изображение недостаточно хорошее, и прерывание клавиатуры не позволяет .create()
вернуть какой-либо результат. В любом случае вы можете легко восстановить результаты, получив идентификатор последнего сеанса.
Найдите идентификатор сеанса. Он появляется поверх изображения.
Получите результат через этот идентификатор на любом компьютере в любое время , не обязательно в Google Colab:
from docarray import DocumentArray
da = DocumentArray . pull ( 'discoart-3205998582' )
Рассматривайте документ как автономные данные с конфигурацией и изображением, его можно использовать в качестве начального состояния для будущего запуска. Его .tags
будут использоваться в качестве начальных параметров; .uri
если он представлен, будет использоваться в качестве исходного изображения.
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 ,
)
Если вы просто хотите инициализировать известный идентификатор DocArray, просто:
from discoart import create
create ( init_document = 'discoart-3205998582' )
Вы можете установить переменные среды для управления метаповедением DiscoArt. Переменные среды должны быть установлены перед импортом DiscoArt либо в Bash, либо в Python через 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 предоставляет две команды create
и config
, которые позволяют запускать DiscoArt из CLI.
python -m discoart create my.yml
который создает иллюстрации из конфигурационного файла YAML my.yml
. Вы также можете сделать:
cat config.yml | python -m discoart create
Итак, как мне получить свой собственный my.yml
и как он выглядит? Это вторая команда:
python -m discoart config my.yml
который создает конфигурацию YAML по умолчанию и экспортирует ее в my.yml
. Теперь вы можете изменить его и запустить с помощью команды python -m discoart create
.
Если путь вывода не указан, то python -m discoart config
выведет конфигурацию по умолчанию на стандартный вывод.
Чтобы получить справку по команде, добавьте в конце --help
, например:
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 очень просто. Просто запустите следующую команду:
python -m discoart serve
Вы увидите:
Теперь отправьте запрос на сервер через Curl/Javascript, например
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"]}} '
Вот и все.
Конечно, вы можете передать все параметры, принятые функцией create()
в JSON.
Мы уже знаем, что функция create
работает медленно, даже на графическом процессоре: завершение работы может занять 10 минут. Это означает, что после отправки вышеуказанного запроса клиенту придется ждать ответа 10 минут. В этом поведении нет ничего плохого, учитывая, что все работает синхронно. Однако на практике клиент может ожидать прогресса или промежуточных результатов в середине, а не ждать конца.
Конечная точка /result
предназначена для этой цели. Он вернет промежуточные результаты, как только они станут доступны. Все, что вам нужно, это указать name_docarray
в параметрах запроса, как вы указали в /create
endpoint. Вот пример:
Давайте создадим mydisco-123
, отправив следующий запрос в конечную точку /create
:
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"]}} '
Теперь, когда указанный выше запрос обрабатывается на сервере, вы можете периодически проверять ход выполнения mydisco-123
, отправляя следующий запрос в конечную точку /result
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/result", "parameters": {"name_docarray": "mydisco-123"}} '
JSON будет возвращен с актуальной информацией о ходе выполнения, с изображением в виде DataURI, потерями, шагами и т. д. Схема JSON Document/DocumentArray описана здесь.
Обратите внимание: /result
не будет заблокирован /create
благодаря интеллектуальной маршрутизации Jina Gateway. Чтобы узнать больше об этих конечных точках или поиграть в них, вы можете проверить ReDoc или пользовательский интерфейс Swagger, встроенный в сервер.
Отправьте команду /skip
, чтобы пропустить текущий запуск и перейти к следующему, как определено в n_batches
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/skip"} '
Отправьте команду /stop
, чтобы остановить текущий запуск, отмените все запуски n_batches
:
curl
-X POST http://0.0.0.0:51001/post
-H ' Content-Type: application/json '
-d ' {"execEndpoint":"/stop"} '
/create
запроса Можно иметь разблокированную конечную точку /create
: клиентский запрос к /create
будет немедленно возвращен, не дожидаясь завершения результатов. Теперь вам придется полностью полагаться на /result
для опроса результата.
Чтобы включить эту функцию:
flow.yml
по умолчанию в myflow.yml
;floating: false
на floating: true
в разделе исполнителя discoart
;python -m discoart serve myflow.yml
Помните, что скорость запросов теперь под вашим контролем . То есть, если клиент отправит 10 запросов /create
в секунду, то сервер параллельно запустит 10 create()
! Это может легко привести к ООМ. Следовательно, предлагается включать эту функцию только в том случае, если вы уверены, что клиент не отправляет слишком много запросов, например, вы контролируете частоту запросов клиента; или вы используете DiscoArt за BFF (серверная часть для внешнего интерфейса).
Если у вас есть несколько графических процессоров и вы хотите запускать несколько экземпляров DiscoArt параллельно, используя графические процессоры с временным мультиплексированием, вы можете скопировать и вставить файл flow.yml
по умолчанию и изменить его следующим образом:
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
Вот replicas: 3
говорит о создании трёх экземпляров DiscoArt, CUDA_VISIBLE_DEVICES: RR0:3
гарантирует, что они используют первые три графических процессора по круговому принципу.
Назовите его myflow.yml
и запустите.
python -m discoart serve myflow.yml
Благодаря Джине, вы можете настроить множество вещей! Вы можете изменить номер порта; изменить протокол на gRPC/Websockets; добавить TLS-шифрование; включить/отключить мониторинг Prometheus; вы также можете экспортировать его в пакет развертывания Kubernetes, просто выполнив:
jina export kubernetes myflow.yml
Дополнительные функции и конфигурации YAML можно найти в документации Jina.
Переключиться с HTTP на шлюз gRPC просто:
jtype : Flow
with :
protocol : grpc
...
а затем перезапустите сервер.
Использование шлюза gRPC имеет множество преимуществ:
В общем, если вы используете сервер DiscoArt за BFF (серверная часть для внешнего интерфейса) или ваш сервер DiscoArt не обслуживает HTTP-трафик от конечных пользователей напрямую, вам следует использовать протокол gRPC.
Для связи с сервером gRPC DiscoArt можно использовать клиент 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' })
Чтобы использовать существующий Document/DocumentArray в качестве документа инициализации для 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 ],
},
)
Это эквивалентно запуску create(init_document=old_da, width_height=[1024, 768])
на сервере. Примечание:
init_document
.init_document
— это DocumentArray, то первый документ в массиве будет использоваться в качестве инициализирующего документа.Хотя это и не рекомендуется, но также можно использовать Google Colab для размещения сервера DiscoArt. Пожалуйста, ознакомьтесь со следующими уроками:
Мы предоставляем готовый образ Docker для запуска DiscoArt «из коробки». Чтобы обновить образ Docker до последней версии:
docker pull jinaai/discoart:latest
Точка входа по умолчанию — запуск блокнота 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
Теперь вы можете посетить http://127.0.0.1:51000
чтобы получить доступ к блокноту.
Вы можете использовать его в подсистеме Windows для Linux (WSL). Ознакомьтесь с официальным руководством здесь.
# 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
Ваш сервер DiscoArt теперь работает по адресу http://127.0.0.1:51001
.
Образы Docker создаются для каждой версии, поэтому их можно привязать к определенной версии, например 0.5.1
:
docker run -p 51000:8888 -v $( pwd ) :/home/jovyan/ -v $HOME /.cache:/root/.cache --gpus all jinaai/discoart:0.5.1
Далее создаем.
? Если вы уже являетесь пользователем DD : вы готовы к работе! Никакого дополнительного обучения не требуется, DiscoArt учитывает ту же семантику параметров, что и DD5.6. Так что просто раскройте свой творческий потенциал! Подробнее об их различиях читайте здесь.
Вы всегда можете сделать это from discoart import cheatsheet; cheatsheet()
для проверки всех новых/измененных параметров.
? Если вы являетесь пользователем DALL·E Flow или новым пользователем : возможно, вы захотите действовать шаг за шагом, поскольку Disco Diffusion работает совершенно иначе, чем DALL·E. Он гораздо более продвинутый и мощный: например, Disco Diffusion может принимать взвешенные и структурированные текстовые подсказки; он может инициализироваться из изображения с контролируемым шумом; и есть гораздо больше параметров, которые можно настроить. Нетерпеливая подсказка типа "armchair avocado"
не принесет вам ничего, кроме растерянности и разочарования. Я настоятельно рекомендую вам проверить следующие ресурсы, прежде чем пытаться создать собственную подсказку:
DiscoArt поддерживается Jina AI и лицензируется по лицензии MIT. Мы активно нанимаем инженеров по искусственному интеллекту и инженеров по решениям для создания следующей экосистемы нейронного поиска с открытым исходным кодом.