구성에서 직접 실행 가능한 Python 코드를 생성할 수도 있습니다.
from discoart . config import export_python
export_python ( da )
무료 Google Colab 사용자라면 한 가지 짜증나는 점은 때때로 세션이 손실된다는 것입니다. 또는 첫 번째 이미지가 충분하지 않아 실행을 일찍 중단하고 키보드 인터럽트로 인해 .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나 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는 CLI에서 DiscoArt를 실행할 수 있는 create
및 config
두 가지 명령을 제공합니다.
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
기본 구성을 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
-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
엔드포인트는 이러한 목적으로 설계되었습니다. 중간 결과가 나오는 즉시 반환됩니다. /create
엔드포인트에 지정한 대로 요청 매개변수에 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를 확인하세요.
n_batches
에 정의된 대로 현재 실행을 건너뛰고 다음 실행으로 이동하려면 /skip
로 보냅니다.
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
이제 요청 속도가 귀하의 통제 하에 있음을 주의하십시오. 즉, 클라이언트가 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
세 개의 DiscoArt 인스턴스를 생성한다고 말합니다. CUDA_VISIBLE_DEVICES: RR0:3
라운드 로빈 방식으로 처음 세 개의 GPU를 사용하는지 확인합니다.
이름을 myflow.yml
로 지정한 다음 실행하세요.
python -m discoart serve myflow.yml
Jina 덕분에 맞춤 설정할 수 있는 것들이 엄청나게 많아졌습니다! 포트 번호를 변경할 수 있습니다. 프로토콜을 gRPC/웹소켓으로 변경합니다. 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' })
create
위한 초기화 문서로 기존 Document/DocumentArray를 사용하려면 다음을 수행합니다.
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 서버를 호스팅하는 것도 가능합니다. 다음 튜토리얼을 확인해 보세요:
우리는 즉시 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
방문하여 노트북에 액세스할 수 있습니다.
WSL(Linux용 Windows 하위 시스템)에서 사용할 수 있습니다. 여기에서 공식 가이드를 확인하세요.
# 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 엔지니어, 솔루션 엔지니어를 적극적으로 채용하고 있습니다.