เราสามารถสร้างโค้ด Python ที่รันได้โดยตรงจากการกำหนดค่า:
from discoart . config import export_python
export_python ( da )
หากคุณเป็นผู้ใช้ Google Colab แบบฟรี สิ่งหนึ่งที่น่ารำคาญคือการสูญเสียเซสชันเป็นครั้งคราว หรือบางครั้งคุณเพียงแค่หยุดการทำงานก่อนกำหนดเนื่องจากภาพแรกไม่ดีพอ และการขัดจังหวะแป้นพิมพ์จะป้องกันไม่ให้ .create()
ส่งกลับผลลัพธ์ใดๆ ไม่ว่าในกรณีใด คุณสามารถกู้คืนผลลัพธ์ได้อย่างง่ายดายโดยการดึง 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
ที่อนุญาตให้คุณเรียกใช้ 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
จะพิมพ์การกำหนดค่าเริ่มต้นเป็น 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
เรารู้อยู่แล้วว่าฟังก์ชัน create
ทำงานช้าแม้บน GPU อาจใช้เวลา 10 นาทีจึงจะเสร็จสิ้นงานศิลปะ ซึ่งหมายความว่าหลังจากส่งคำขอข้างต้นแล้ว ลูกค้าจะต้องรอ 10 นาทีจึงจะตอบกลับ พฤติกรรมนี้ไม่มีอะไรผิดปกติเนื่องจากทุกอย่างทำงานพร้อมกัน อย่างไรก็ตาม ในทางปฏิบัติ ลูกค้าอาจคาดหวังความคืบหน้าหรือผลลัพธ์ระหว่างกลางแทนที่จะรอจนถึงจุดสิ้นสุด
/result
endpoint ได้รับการออกแบบมาเพื่อจุดประสงค์นี้ มันจะส่งคืนผลลัพธ์ระดับกลางทันทีที่มีอยู่ สิ่งที่คุณต้องมีคือระบุ name_docarray
ในพารามิเตอร์คำขอตามที่คุณระบุใน /create
endpoint นี่คือตัวอย่าง:
มาสร้าง mydisco-123
โดยส่งคำขอต่อไปนี้ไปที่ /create
endpoint:
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
endpoint:
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 Schema ของ Document/DocumentArray มีอธิบายไว้ที่นี่
หมายเหตุ /result
จะไม่ถูกบล็อกโดย /create
ด้วยการกำหนดเส้นทางอัจฉริยะของ Jina Gateway หากต้องการเรียนรู้/เล่นเพิ่มเติมเกี่ยวกับตำแหน่งข้อมูลเหล่านั้น คุณสามารถตรวจสอบ 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
;floating: false
เป็นการ floating: true
ภายใต้ส่วนผู้ดำเนินการ discoart
;python -m discoart serve myflow.yml
ระวังว่าความเร็วคำขออยู่ภายใต้ การควบคุมของคุณ แล้ว นั่นคือหากไคลเอนต์ส่งคำขอ 10 /create
ในวินาทีนั้นเซิร์ฟเวอร์จะเริ่ม 10 create()
พร้อมกัน! สิ่งนี้สามารถนำไปสู่ OOM ได้อย่างง่ายดาย ดังนั้น คำแนะนำจะเปิดใช้งานคุณลักษณะนี้เฉพาะเมื่อคุณแน่ใจว่าไคลเอ็นต์ไม่ได้ส่งคำขอมากเกินไป เช่น คุณควบคุมอัตราคำขอของไคลเอ็นต์ หรือคุณกำลังใช้ DiscoArt หลัง BFF (แบ็กเอนด์สำหรับส่วนหน้า)
หากคุณมี GPU หลายตัวและต้องการเรียกใช้อินสแตนซ์ DiscoArt หลายรายการพร้อมกันโดยใช้ประโยชน์จาก GPU ในลักษณะมัลติเพล็กซ์ตามเวลา คุณสามารถคัดลอกและวางไฟล์ 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 มีข้อดีหลายประการ:
โดยทั่วไป หากคุณใช้เซิร์ฟเวอร์ DiscoArt ที่อยู่เบื้องหลัง BFF (แบ็กเอนด์สำหรับส่วนหน้า) หรือเซิร์ฟเวอร์ DiscoArt ของคุณ ไม่ ให้บริการการรับส่งข้อมูล HTTP โดยตรงจากผู้ใช้ปลายทาง คุณควรใช้โปรโตคอล gRPC
ในการสื่อสารกับเซิร์ฟเวอร์ gRPC DiscoArt เราสามารถใช้ Jina Client:
# !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 เอกสารแรกในอาร์เรย์จะถูกใช้เป็นเอกสาร initแม้ว่าจะไม่แนะนำ แต่ก็สามารถใช้ 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()
ได้ตลอดเวลา from discoart import cheatsheet; cheatsheet()
เพื่อตรวจสอบพารามิเตอร์ใหม่/ที่แก้ไขทั้งหมด
- หากคุณเป็น DALL·E Flow หรือผู้ใช้ใหม่ : คุณอาจต้องการดำเนินการทีละขั้นตอน เนื่องจาก Disco Diffusion ทำงานในลักษณะที่แตกต่างจาก DALL·E มาก มันล้ำหน้าและมีประสิทธิภาพกว่ามาก เช่น Disco Diffusion สามารถรับข้อความแจ้งแบบถ่วงน้ำหนักและมีโครงสร้าง; มันสามารถเริ่มต้นจากรูปภาพที่มีสัญญาณรบกวนควบคุม และมีพารามิเตอร์อีกมากมายที่สามารถปรับแต่งได้ การโต้ตอบอย่างไม่อดทนเช่น "armchair avocado"
จะทำให้คุณไม่ได้อะไรนอกจากความสับสนและความหงุดหงิด ฉันขอแนะนำให้คุณตรวจสอบแหล่งข้อมูลต่อไปนี้ก่อนลองใช้ข้อความแจ้งของคุณเอง:
DiscoArt ได้รับการสนับสนุนโดย Jina AI และได้รับอนุญาตภายใต้ใบอนุญาต MIT เรากำลังจ้างวิศวกร AI และวิศวกรโซลูชันเพื่อสร้างระบบนิเวศการค้นหาแบบนิวรัลในโอเพ่นซอร์ส