يمكن للمرء أيضًا إنشاء تعليمات برمجية 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
بطباعة التكوين الافتراضي إلى 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
بطيئة حتى على وحدة معالجة الرسومات، وقد يستغرق الأمر 10 دقائق لإنهاء العمل الفني. وهذا يعني أنه بعد إرسال الطلب أعلاه، سيتعين على العميل الانتظار لمدة 10 دقائق للرد. لا حرج في هذا السلوك نظرًا لأن كل شيء يعمل بشكل متزامن. ومع ذلك، من الناحية العملية، قد يتوقع العميل تقدمًا أو نتائج وسيطة في المنتصف بدلاً من انتظار النهاية.
تم تصميم نقطة النهاية /result
لهذا الغرض. وستعيد النتائج المتوسطة بمجرد توفرها. كل ما تحتاجه هو تحديد 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 للمستند/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 (الواجهة الخلفية للواجهة الأمامية).
إذا كان لديك وحدات معالجة رسومات متعددة وترغب في تشغيل مثيلات 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؛ تمكين/تعطيل مراقبة بروميثيوس؛ يمكنك أيضًا تصديره إلى حزمة نشر 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' })
لاستخدام مستند/DocumentArray موجود كمستند init 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()
للتحقق من كافة المعلمات الجديدة/المعدلة.
؟ إذا كنت من مستخدمي DALL·E Flow أو مستخدمًا جديدًا : قد ترغب في اتخاذ خطوة بخطوة، حيث يعمل Disco Diffusion بطريقة مختلفة تمامًا عن DALL·E. إنه أكثر تقدمًا وقوة: على سبيل المثال، يمكن لـ Disco Diffusion أن يتلقى مطالبات نصية مرجحة ومنظمّة؛ ويمكنه التهيئة من صورة ذات ضوضاء يمكن التحكم فيها؛ وهناك المزيد من المعلمات التي يمكن تعديلها. إن المطالبة بفارغ الصبر مثل "armchair avocado"
لن تمنحك سوى الارتباك والإحباط. أنصحك بشدة بمراجعة الموارد التالية قبل تجربة المطالبة الخاصة بك:
يتم دعم DiscoArt بواسطة Jina AI ومرخص بموجب ترخيص MIT. نحن نعمل بنشاط على توظيف مهندسي الذكاء الاصطناعي ومهندسي الحلول لبناء النظام البيئي التالي للبحث العصبي في المصادر المفتوحة.