也可以直接從配置產生可運行的 Python 程式碼:
from discoart . config import export_python
export_python ( da )
如果您是免費版 Google Colab 用戶,一件惱人的事情就是時不時地失去會話。或者有時您只是提前停止運行,因為第一個圖像不夠好,並且鍵盤中斷將阻止.create()
返回任何結果。無論哪種情況,您都可以透過拉取最後一個會話 ID 輕鬆恢復結果。
查找會話 ID。它出現在圖像的頂部。
隨時在任何機器上透過該 ID 提取結果,不一定是在 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 ID 進行初始化,那麼只需:
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
,讓您從 CLI 執行 DiscoArt。
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
服務迪斯可藝術非常簡單。只需執行以下命令:
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"]}} '
就是這樣。
當然,您可以在 JSON 中傳遞create()
函數接受的所有參數。
我們已經知道,即使在 GPU 上, create
函數也很慢,可能需要 10 分鐘才能完成一幅作品。這表示發送上述請求後,客戶端需要等待10分鐘才能回應。鑑於一切都是同步運作的,這種行為沒有任何問題。然而,在實踐中,客戶可能期望中間有進展或中間結果,而不是等待結束。
/result
端點就是為此目的而設計的。一旦中間結果可用,它將立即返回。您所需要做的就是在請求參數中指定name_docarray
,如您在/create
端點中指定的那樣。這是一個例子:
讓我們透過向/create
端點發送以下請求來建立mydisco-123
:
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"]}} '
現在伺服器正在處理上述請求,您可以透過向/result
端點發送以下請求來定期檢查mydisco-123
進度:
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、遺失、步驟等。
請注意,由於 Jina Gateway 的智慧路由, /result
不會被/create
封鎖。要了解/了解有關這些端點的更多信息,您可以檢查伺服器中嵌入的 ReDoc 或 Swagger UI。
傳送到/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
;discoart
執行器部分下將floating: false
更改為floating: true
;python -m discoart serve myflow.yml
請注意,請求速度現在由您控制。也就是說,如果客戶端在一秒鐘內發送10個/create
請求,那麼伺服器就會並行啟動10個create()
!這很容易導致OOM。因此,建議僅當您確定客戶端沒有發送太多請求時才啟用此功能,例如您控制用戶端請求速率;或者您在 BFF(前端的後端)後面使用 DiscoArt。
如果您有多個 GPU,並且希望透過以時間復用方式利用 GPU 來並行運行多個 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
確保它們以循環方式使用前三個GPU。
將其命名為myflow.yml
然後運行
python -m discoart serve myflow.yml
感謝 Jina,您可以定制很多東西!您可以更改連接埠號碼;將協議更改為 gRPC/Websockets;新增TLS加密;啟用/停用 Prometheus 監控;您也可以透過以下方式將其匯出到 Kubernetes 部署套件:
jina export kubernetes myflow.yml
如需更多功能和 YAML 配置,請查看 Jina 文件。
從 HTTP 閘道切換到 gRPC 閘道很簡單:
jtype : Flow
with :
protocol : grpc
...
然後重新啟動伺服器。
使用 gRPC 閘道有多個優點:
一般來說,如果您在 BFF(前端的後端)後面使用 DiscoArt 伺服器,或者您的 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 作為 init Document 來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,則陣列中的第一個 Document 將用作 init Document。儘管不推薦,但也可以使用 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 Subsystem for 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 許可證獲得許可。我們正在積極招募人工智慧工程師、解決方案工程師,以開源方式建構下一個神經搜尋生態系統。