実行可能な Python コードを構成から直接生成することもできます。
from discoart . config import export_python
export_python ( da )
無料枠の Google Colab ユーザーにとって、悩ましいことの 1 つは、時折セッションが失われることです。または、最初のイメージが十分ではなく、キーボード割り込みによって.create()
結果を返せなくなるため、実行を早めに中止する場合もあります。いずれの場合も、最後のセッション ID を取得することで、結果を簡単に回復できます。
セッション ID を見つけます。画像の上に表示されます。
Google Colab である必要はなく、いつでも任意のマシンでその ID を介して結果を取得します。
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 またはos.environ
を介して Python で環境変数を設定する必要があります。
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 には、CLI から DiscoArt を実行できる 2 つのコマンドcreate
とconfig
用意されています。
python -m discoart create my.yml
これは、YAML 構成ファイルmy.yml
からアートワークを作成します。次のこともできます:
cat config.yml | python -m discoart create
では、どうすれば独自のmy.yml
を作成できますか?また、それはどのようなものになるでしょうか?それが 2 番目のコマンドです。
python -m discoart config my.yml
これにより、デフォルトの YAML 構成がフォークされ、 my.yml
にエクスポートされます。これで、これを変更して、 python -m discoart create
コマンドを使用して実行できるようになります。
出力パスが指定されていない場合、 python -m discoart config
デフォルトの設定を stdout に出力します。
コマンドのヘルプを表示するには、最後に--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 で渡すこともできます。
GPU 上でもcreate
関数が遅く、アートワークを完成させるのに 10 分かかる可能性があることはすでにわかっています。これは、上記のリクエストを送信した後、クライアントは応答まで 10 分間待つ必要があることを意味します。すべてが同期的に実行されることを考えると、この動作に問題はありません。ただし、実際には、クライアントは最後まで待つのではなく、途中での進捗や中間結果を期待する場合があります。
/result
エンドポイントはこの目的のために設計されています。中間結果が入手可能になるとすぐに返されます。必要なのは、 /create
endpoint で指定したように、リクエスト パラメーターでname_docarray
指定することだけです。以下に例を示します。
次のリクエストを/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、損失、ステップなどの画像を含む最新の進行状況とともに返されます。ここでは、Document/DocumentArray の JSON スキーマについて説明します。
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
エンドポイントを持つことも可能です。/create へのクライアント要求は、結果の完了を待たずにすぐに返されます。結果をポーリングするには/result
に完全に依存する必要があります。
この機能を有効にするには:
flow.yml
ファイルをコピーしてmyflow.yml
に貼り付けます。discoart
executor セクションの下のfloating: false
をfloating: true
に変更します。python -m discoart serve myflow.yml
リクエストの速度はあなたの制御下にあることに注意してください。つまり、クライアントが 1 秒間に 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
3 つの DiscoArt インスタンスを生成することを示しています。CUDA_VISIBLE_DEVICES CUDA_VISIBLE_DEVICES: RR0:3
最初の 3 つの GPU をラウンドロビン方式で使用することを確認します。
myflow.yml
という名前を付けて実行します。
python -m discoart serve myflow.yml
Jina のおかげで、カスタマイズできるものがたくさんあります。ポート番号は変更できます。プロトコルを gRPC/Websocket に変更します。 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 を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 が初期ドキュメントとして使用されます。推奨されませんが、Google Colab を使用して DiscoArt サーバーをホストすることも可能です。次のチュートリアルを確認してください。
DiscoArt をすぐに実行できるように、事前に構築された Docker イメージが提供されています。 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 ライセンスに基づいてライセンスされています。オープンソースで次のニューラル検索エコシステムを構築するために、AI エンジニア、ソリューション エンジニアを積極的に採用しています。