Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"الفلسفة","local":"philosophy","sections":[{"title":"السهولة في الاستخدام على حساب الأداء","local":"usability-over-performance","sections":[],"depth":2},{"title":"بسيط وسهل","local":"simple-over-easy","sections":[],"depth":2},{"title":"تخصيص قابل للضبط، ميسّر للمساهمين فوق التجريد","local":"tweakable-contributor-friendly-over-abstraction","sections":[],"depth":2},{"title":"فلسفة التصميم بالتفصيل","local":"design-philosophy-in-details","sections":[{"title":"خطوط الأنابيب","local":"pipelines","sections":[],"depth":3},{"title":"المولّدات التوليدية المعيارية","local":"modular-diffusers","sections":[],"depth":3},{"title":"النماذج","local":"models","sections":[],"depth":3},{"title":"المجدولون","local":"schedulers","sections":[],"depth":3}],"depth":2}],"depth":1}"/> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/start.B6roO9Zr.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/CjYFLaCl.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/Cc4T7sti.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/app.CxxEVG8A.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/C8F28shN.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/BTnLXsn-.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DnVIJfC5.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/0.CmHT0Edy.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/C7Ky3Ped.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/5.BaK0t02u.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/D2YP2_0L.js" rel="modulepreload"> | |
| <!--80qojn--><meta name="hf:doc:metadata" content="{"title":"Philosophy","local":"philosophy","sections":[{"title":"Usability over Performance","local":"usability-over-performance","sections":[],"depth":2},{"title":"Simple over easy","local":"simple-over-easy","sections":[],"depth":2},{"title":"Tweakable, contributor-friendly over abstraction","local":"tweakable-contributor-friendly-over-abstraction","sections":[],"depth":2},{"title":"Design Philosophy in Details","local":"design-philosophy-in-details","sections":[{"title":"Pipelines","local":"pipelines","sections":[],"depth":3},{"title":"Modular Diffusers","local":"modular-diffusers","sections":[],"depth":3},{"title":"Models","local":"models","sections":[],"depth":3},{"title":"Schedulers","local":"schedulers","sections":[],"depth":3}],"depth":2}],"depth":1}"/><!----> | |
| <link href="/docs/diffusers/main/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="philosophy" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#philosophy"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->الفلسفة<!----></span></h1><!--]--><!----> <p>🧨 يوفر Diffusers نماذج انتشار مَسبقة التدريب <strong>متطورة</strong> عبر عدة أنماط. | |
| يهدف إلى العمل كـ <strong>صندوق أدوات معياري</strong> لكل من الاستدلال والتدريب.</p> <p>نهدف إلى بناء مكتبة تتحمل اختبار الزمن، ولذلك نولي تصميم واجهة برمجة التطبيقات أهمية بالغة.</p> <p>بإيجاز، بُني Diffusers ليكون امتدادًا طبيعيًا لـ PyTorch. لذلك، تستند معظم اختياراتنا التصميمية إلى <a href="https://pytorch.org/docs/stable/community/design.html#pytorch-design-philosophy" rel="nofollow">مبادئ تصميم PyTorch</a>. دعونا نستعرض أهمها:</p> <!--[1--><h2 class="relative group"><a id="usability-over-performance" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#usability-over-performance"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->السهولة في الاستخدام على حساب الأداء<!----></span></h2><!--]--><!----> <ul><li>على الرغم من أن Diffusers يحتوي على العديد من الميزات المدمجة لتعزيز الأداء (انظر <a href="../optimization/overview">تحسين الأداء والتوسع</a>)، إلا أن النماذج تُحمَّل دائمًا بأعلى دقة وأقل تحسين. لذلك، افتراضيًا، تُنشأ خطوط أنابيب الانتشار دائمًا على وحدة المعالجة المركزية (CPU) بدقة float32 ما لم يُعرّف المستخدم خلاف ذلك. وهذا يضمن قابلية الاستخدام عبر منصات ومسرّعات مختلفة، ويعني أنه لا تُطلب تركيبات معقدة لتشغيل المكتبة.</li> <li>تسعى مكتبة Diffusers إلى أن تكون حزمة <strong>خفيفة</strong>، ولذلك فهي تعتمد على عدد قليل جداً من التبعيات الإلزامية، بينما تمتلك العديد من التبعيات الاختيارية التي يمكن أن تحسّن الأداء (مثل <code>accelerate</code>، <code>safetensors</code>، <code>onnx</code>، وغيرها…). ونسعى جاهدين إلى إبقاء المكتبة خفيفة الوزن قدر الإمكان بحيث يمكن إضافتها كتبعية للحزم الأخرى دون قلق كبير.</li> <li>يفضّل Diffusers الكود البسيط الذي يفسّر نفسه بنفسه على الكود المُضغوط الذي يعتمد على حيل خفية. وهذا يعني أن صيغ الكود المختصرة مثل دوال lambda، والمُشغِّلات المتقدمة في PyTorch غالبًا ما لا تكون مرغوبة.</li></ul> <!--[1--><h2 class="relative group"><a id="simple-over-easy" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#simple-over-easy"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->بسيط وسهل<!----></span></h2><!--]--><!----> <p>كما يوضح PyTorch، <strong>الصراحة أفضل من الضمنية</strong> و<strong>البساطة أفضل من التعقيد</strong>. تنعكس هذه الفلسفة التصميمية في عدة أجزاء من المكتبة:</p> <ul><li>نتبع واجهة برمجة التطبيقات الخاصة بـ PyTorch من خلال طرق مثل <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.to"><code>DiffusionPipeline.to</code></a> للسماح للمستخدم بإدارة الأجهزة.</li> <li>يُفضَّل رفع رسائل خطأ موجزة بدلاً من تصحيح المدخلات الخاطئة بصمت. يهدف Diffusers إلى تعليم المستخدم، بدلاً من جعل المكتبة أسهل استخدامًا ما أمكن.</li> <li>يتم كشف منطق النموذج المعقّد مقابل المجدول بدلاً من معالجته بشكل سحري في الداخل. تم فصل المجدول/المُعيّنات عن نماذج الانتشار مع اعتمادٍ ضئيل بينها. وهذا يفرض على المستخدم كتابة حلقة إزالة الضوضاء المفكوكة. ومع ذلك، يتيح هذا الفصل تسهيل عملية تصحيح الأخطاء ومنح المستخدم مزيداً من التحكم في تكييف عملية إزالة الضوضاء أو تبديل نماذج الانتشار أو المجدول.</li> <li>المكوّنات المُدرَّبة بشكل منفصل في خط أنابيب الانتشار، <em>مثل</em> مُشفِّر النص، وشبكة unet، والمشفِّر التلقائي التبايني، لكلٍّ منها فئة نموذج خاصة به. وهذا يفرض على المستخدم التعامل مع التفاعل بين مكوّنات النموذج المختلفة، كما أن صيغة التسلسل تُفرّق مكوّنات النموذج في ملفات مختلفة. ومع ذلك، فإن هذا يتيح تسهيل عمليات التصحيح والتخصيص. تدريب DreamBooth أو Textual Inversion بسيط للغاية بفضل قدرة Diffusers على فصل مكوّنات فردية من خط أنابيب الانتشار.</li></ul> <!--[1--><h2 class="relative group"><a id="tweakable-contributor-friendly-over-abstraction" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#tweakable-contributor-friendly-over-abstraction"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->تخصيص قابل للضبط، ميسّر للمساهمين فوق التجريد<!----></span></h2><!--]--><!----> <p>في أجزاء كبيرة من المكتبة، تتبنى Diffusers مبدأً تصميمياً مهماً من <a href="https://github.com/huggingface/transformers" rel="nofollow">مكتبة Transformers</a>، وهو تفضيل نسخ ولصق الأكواد على التجريدات المتسرعة. هذا المبدأ التصميمي ذو رأي قوي ويتعارض بوضوح مع مبادئ التصميم الشائعة مثل <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow">عدم تكرار نفسك (DRY)</a>. | |
| باختصار، تماماً كما تفعل Transformers لملفات النمذجة، تفضل Diffusers الحفاظ على مستوى تجريد منخفض للغاية وأكواد ذاتية الاكتفاء إلى حد كبير للأنابيب (pipelines) والمجدولات (schedulers). | |
| يمكن نسخ الدوال، والكتل الطويلة من الأكواد، وحتى الفئات عبر ملفات متعددة، مما قد يبدو في البداية كخيار تصميمي سيئ وغير منظم يجعل المكتبة غير قابلة للصيانة. <strong>ومع ذلك</strong>، أثبت هذا التصميم نجاحه بشكل كبير في Transformers، وله معنى كبير للمكتبات مفتوحة المصدر للتعلم الآلي التي يقودها المجتمع لأن:</p> <ul><li>يُعدّ تعلّم الآلة مجالًا سريع التطوّر للغاية، حيث تتغير النماذج المعمارية والخوارزميات بسرعة، مما يجعل من الصعب تحديد تجريدات برمجية طويلة الأمد.</li> <li>يُفضّل ممارسو تعلّم الآلة القدرة على تعديل الأكواد الموجودة بسرعة لأغراض توليد الأفكار والبحث، ولذلك يميلون إلى الأكواد المستقلة بذاتها بدلاً من تلك التي تحتوي على العديد من التجريدات.</li> <li>تعتمد المكتبات مفتوحة المصدر على مساهمات المجتمع، ولذلك يجب أن تبني مكتبة يسهل المساهمة فيها. كلما كان الكود أكثر تجريدًا، زادت الاعتماديات، وصعبت القراءة، وصعبت المساهمة. يتوقف المساهمون ببساطة عن المساهمة في المكتبات شديدة التجريد خوفًا من كسر وظائف حيوية. إذا لم يكن بإمكان المساهمة في مكتبة أن تكسر كودًا أساسيًا آخر، فإن ذلك لا يجعلها أكثر جاذبية للمساهمين الجدد المحتملين فحسب، بل يسهّل أيضًا مراجعة أجزاء متعددة والمساهمة فيها بالتوازي.</li></ul> <p>في Hugging Face، نطلق على هذا التصميم اسم <strong>سياسة الملف الواحد</strong>، مما يعني أن معظم كود فئة معينة يجب أن يُكتب في ملف واحد مكتفٍ ذاتياً. لقراءة المزيد عن هذه الفلسفة، يمكنك الاطلاع على <a href="https://huggingface.co/blog/transformers-design-philosophy" rel="nofollow">هذا المنشور في المدونة</a>.</p> <p>في Diffusers، نتبع هذه الفلسفة فيما يتعلق بخطوط الأنابيب ومجدولات التدرج والنماذج على حد سواء. بعض النماذج الأقدم تسبق هذا الاتفاق وتُحفظ كما هي؛ بينما تعيش جميع معماريات النماذج الجديدة في ملفات مستقلة بذاتها. راجع قسم <a href="#models">النماذج</a> أدناه للتفاصيل.</p> <p>رائع، الآن يجب أن تكون قد فهمت بشكل عام سبب تصميم 🧨 Diffusers بهذه الطريقة 🤗. | |
| نحاول تطبيق مبادئ التصميم هذه بشكل متسق عبر المكتبة. ومع ذلك، هناك بعض الاستثناءات البسيطة للفلسفة أو بعض اختيارات التصميم غير المحظوظة. إذا كان لديك ملاحظات حول التصميم، فسنكون سعداء ❤️ بالاستماع إليها <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title=" rel="nofollow">مباشرة على GitHub</a>.</p> <!--[1--><h2 class="relative group"><a id="design-philosophy-in-details" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#design-philosophy-in-details"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->فلسفة التصميم بالتفصيل<!----></span></h2><!--]--><!----> <p>والآن لنغوص في التفاصيل الدقيقة لفلسفة التصميم. يمنحك <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">Diffusers</a> طريقتين لتكوين <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow">النماذج</a> و<a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines" rel="nofollow">المجدولين</a> في سير عمل قابل للتشغيل: خطوط الأنابيب القياسية، وهي أحادية الكتلة بمهمة واحدة لكل فئة خط أنابيب، وModular Diffusers، وهو قابل للتكوين ومبني على الكتل. تغطي الأقسام أدناه خطوط الأنابيب، وخطوط الأنابيب المعيارية، والنماذج، والمجدولين على التوالي.</p> <!--[2--><h3 class="relative group"><a id="pipelines" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#pipelines"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->خطوط الأنابيب<!----></span></h3><!--]--><!----> <p>تُصمَّم خطوط الأنابيب، سواء كانت قياسية أو معيارية، للاستدلال فقط. وهي مصممة لتكون سهلة الاستخدام (لذا فهي لا تتبع مبدأ <a href="#simple-over-easy">البساطة على السهولة</a> بنسبة 100%): فهي قابلة للقراءة، وتشرح نفسها بنفسها، ويسهل تعديلها، ويُفضَّل النظر إليها كمثال على كيفية استخدام <a href="#models">النماذج</a> و<a href="#schedulers">المجدولين</a>. وهي لا تتمتع بكامل الميزات. لبناء واجهات مستخدم كاملة الميزات فوق Diffusers، استخدم <a href="../modular_diffusers/overview">Modular Diffusers</a>.</p> <p>تُتّبع مبادئ التصميم التالية:</p> <ul><li>تتبع خطوط الأنابيب سياسة الملف الواحد. يمكن العثور على جميع خطوط الأنابيب في مجلدات فردية تحت src/diffusers/pipelines. يتوافق مجلد خط أنابيب واحد مع ورقة/مشروع/إصدار واحد للتوليد الانتشاري. يمكن تجميع ملفات خطوط أنابيب متعددة في مجلد خط أنابيب واحد، كما هو الحال في <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines/stable_diffusion" rel="nofollow"><code>src/diffusers/pipelines/stable-diffusion</code></a>. إذا كانت خطوط الأنابيب تتشارك في وظائف مشابهة، يمكن الاستفادة من آلية <a href="https://github.com/huggingface/diffusers/blob/125d783076e5bd9785beb05367a2d2566843a271/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L251" rel="nofollow"># Copied from</a>.</li> <li>ترث جميع خطوط الأنابيب من <a href="/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline">DiffusionPipeline</a>.</li> <li>تتكون كل خط أنابيب من مكونات نموذج ومجدول مختلفة، موثقة في ملف <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/model_index.json" rel="nofollow"><code>model_index.json</code></a>، ويمكن الوصول إليها كأسماء سمات لخط الأنابيب، ويمكن مشاركتها بين خطوط الأنابيب باستخدام دالة <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.components"><code>DiffusionPipeline.components</code></a>.</li> <li>يجب أن يكون كل خط أنابيب قابلًا للتحميل عبر الدالة <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained"><code>DiffusionPipeline.from_pretrained</code></a>.</li> <li>يجب أن يكون لكل خط أنابيب طريقة واحدة فقط لتشغيله عبر طريقة <code>__call__</code>. كما ينبغي أن تكون تسمية معاملات <code>__call__</code> متسقة عبر جميع خطوط الأنابيب.</li> <li>يجب تسمية خطوط الأنابيب (Pipelines) وفقاً للمهمة التي صُممت لحلها.</li></ul> <!--[2--><h3 class="relative group"><a id="modular-diffusers" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#modular-diffusers"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->المولّدات التوليدية المعيارية<!----></span></h3><!--]--><!----> <p>يعتبر Modular Diffusers البديل القابل للتركيب للأنابيب القياسية. تقوم ببناء سير عمل من <em>كتل الأنابيب</em> القابلة لإعادة الاستخدام، والتي يمكنك مزجها وتبديلها وتغييرها ومشاركتها. الأنابيب القياسية هي أمثلة مرجعية فضفاضة لكيفية استخدام النماذج ومجدولات الجدولة. يُعد Modular Diffusers المسار الموصى به لبناء واجهات مستخدم مكتملة الميزات فوق Diffusers، ولتمكين المجتمع من بناء ومشاركة أنابيب جديدة بطريقة لامركزية.</p> <p>تُتّبع مبادئ التصميم التالية:</p> <ul><li>تتبع خطوط الأنابيب المعيارية سياسة الملف الواحد. يوجد كل خط أنابيب في مجلد خاص به تحت <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/modular_pipelines" rel="nofollow">src/diffusers/modular_pipelines/</a>، ويقسم المجلد سير العمل إلى ملف واحد لكل مرحلة: <code>encoders.py</code>، <code>before_denoise.py</code>، <code>denoise.py</code>، و<code>decoders.py</code>. تكمل ملفان إضافيان خط الأنابيب. يجمع <code>modular_blocks_<model>.py</code> المراحل معًا، ويحدد <code>modular_pipeline.py</code> فئة فرعية من <a href="/docs/diffusers/main/ar/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a> لكل نموذج. لا تستورد خطوط الأنابيب المعيارية بعضها بعضًا.</li> <li>يُعرَّف كل خط أنابيب معياري على أنه مجموعة من <a href="/docs/diffusers/main/ar/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks">ModularPipelineBlocks</a>. توجد الكتل الورقية في ملفات المراحل (<code>encoders.py</code>، <code>before_denoise.py</code>، <code>denoise.py</code>، <code>decoders.py</code>)، بينما يجمع <code>modular_blocks_<model>.py</code> بينها لتكوين سير عمل كامل باستخدام فئات الحاوية مثل <a href="/docs/diffusers/main/ar/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks">SequentialPipelineBlocks</a> و<a href="/docs/diffusers/main/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a>. وهذا يفصل بين مفهومين يدمجهما <code>DiffusionPipeline combines</code>. الكتلة هي تعريف خالص؛ فهي تُلزم المدخلات والمخرجات والتبعيات المكوّنة، لكنها لا تحتفظ بالأوزان ولا يمكن تشغيلها. أما <a href="/docs/diffusers/main/ar/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a>، الذي يُنشأ عبر <code>.init_pipeline(repo_id)</code>، فهو المقابل القابل للتشغيل. إن إبقاء الكتل بلا حالة وبلا أوزان هو ما يجعلها قابلة للتركيب بحرية، وقابلة للاستبدال، وقابلة للمشاركة عبر سير العمل المختلفة.</li> <li>لدعم مهمة جديدة، اكتب الكتل الخاصة بالمهمة، وركّبها مع الكتل الموجودة، وسجّل سير العمل في <code>_workflow_map</code> على مستوى تجميع الكتل العلوي. يمكن لنسخة واحدة من <code>ModularPipeline</code> أن تدعم العديد من سلاسل العمل، مثل النص إلى صورة، والصورة إلى صورة، والتعبئة (inpainting)، بينما يعمل <code>DiffusionPipeline</code> على سلسلة عمل واحدة فقط.</li></ul> <p>راجع <a href="../modular_diffusers/overview">توثيق Modular Diffusers</a> للحصول على دليل التصميم والاستخدام الكامل.</p> <!--[2--><h3 class="relative group"><a id="models" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#models"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->النماذج<!----></span></h3><!--]--><!----> <p>تُصمَّم النماذج على أنها صناديق أدوات قابلة للتهيئة، وهي امتدادات طبيعية لفئة <a href="https://pytorch.org/docs/stable/generated/torch.nn.Module.html" rel="nofollow">Module في PyTorch</a>. ينبغي أن تتبع <em>سياسة الملف الواحد</em>. بعض النماذج الأقدم تسبق هذه الاتفاقية وقد أُبقي عليها كما هي. تعامل معها كاستثناءات قديمة، لا كنماذج يُحتذى بها عند إنشاء نماذج جديدة. على سبيل المثال، استُخدمت فئة <a href="/docs/diffusers/main/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel">UNet2DConditionModel</a> الأصلية لعدة متغيرات من UNet.</p> <p>تُتّبع مبادئ التصميم التالية:</p> <ul><li>توجد كل بنية نموذج في مجلد خاص بها تحت <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">src/diffusers/models</a>، على سبيل المثال <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/transformers" rel="nofollow">transformers/</a> أو <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/autoencoders" rel="nofollow">autoencoders/</a> أو <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/unets" rel="nofollow">unets/</a>. ولكل عائلة نماذج ملف خاص بها داخل ذلك المجلد، مثل <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_flux.py" rel="nofollow">transformer_flux.py</a> و<a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_wan.py" rel="nofollow">transformer_wan.py</a>.</li> <li>تتبع النماذج سياسة الملف الواحد. يجب أن يكون كل ملف نموذج مكتفياً ذاتياً، باستثناء عدد قليل من الوحدات القياسية التي تستخدمها جميع النماذج بشكل متطابق، مثل تضمينات خطوات الزمن وطبقات التطبيع. استورد تلك من <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/embeddings.py" rel="nofollow">embeddings.py</a> و <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/normalization.py" rel="nofollow">normalization.py</a>.</li> <li>تهدف النماذج إلى كشف التعقيد، تمامًا كما تفعل فئة <code>Module</code> في PyTorch، وتقديم رسائل خطأ واضحة.</li> <li>تورث جميع النماذج من <code>ModelMixin</code> و<code>ConfigMixin</code>.</li> <li>يمكن تحسين النماذج من حيث الأداء عندما لا يتطلب ذلك تغييرات كبيرة في الكود، ويحافظ على التوافق مع الإصدارات السابقة، ويحقق مكاسب كبيرة في الذاكرة أو القدرة الحاسوبية.</li> <li>يجب أن تكون النماذج افتراضيًا بأعلى دقة وأدنى إعداد للأداء.</li> <li>لدمج بنية نموذج جديدة تشبه بنية موجودة مسبقًا، انسخ الملف الموجود كنقطة انطلاق ثم عدّله. استخدم تعليقات <a href="./contribution#copied-from-mechanism"><code># Copied from</code></a> على الطبقات التي تبقى متطابقة حتى يحافظ <code>make fix-copies</code> على مزامنتها.</li></ul> <!--[2--><h3 class="relative group"><a id="schedulers" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#schedulers"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->المجدولون<!----></span></h3><!--]--><!----> <p>تتولى مُجدولات المهام (Schedulers) مسؤولية توجيه عملية إزالة الضوضاء أثناء الاستدلال، وكذلك تحديد جدول الضوضاء للتدريب. وقد صُممت كصنفات مستقلة مع ملفات إعداد قابلة للتحميل، وتلتزم بشكل صارم بـ<strong>سياسة الملف الواحد</strong>.</p> <p>تُتّبع مبادئ التصميم التالية:</p> <ul><li>تُوجد جميع المجدولات في <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow"><code>src/diffusers/schedulers</code></a>.</li> <li>لا يُسمح لـSchedulers بـ<strong>استيراد</strong> من ملفات الأدوات الكبيرة، ويجب أن تبقى مكتفيةً ذاتياً إلى حد كبير.</li> <li>يتوافق ملف بايثون واحد للمجدول مع خوارزمية مجدولة واحدة (كما قد تُعرَّف في ورقة بحثية).</li> <li>إذا كانت المجدولات (Schedulers) تتشارك في وظائف متشابهة، يمكننا الاستفادة من آلية <code># Copied from</code>.</li> <li>ترث جميع المجدولات من <code>SchedulerMixin</code> و<code>ConfigMixin</code>.</li> <li>يمكن استبدال المجدولات بسهولة باستخدام طريقة <a href="../api/configuration#diffusers.ConfigMixin.from_config"><code>ConfigMixin.from_config</code></a> كما هو موضح بالتفصيل <a href="../using-diffusers/schedulers">هنا</a>.</li> <li>يجب أن يحتوي كل مُجدول على <code>set_num_inference_steps</code>، ودالة <code>step</code>. يجب استدعاء <code>set_num_inference_steps(...)</code> قبل كل عملية إزالة الضوضاء، <em>أي</em> قبل استدعاء <code>step(...)</code>.</li> <li>تُعرِض كل وحدة جدولة خطوات الزمن التي يجب «التكرار عليها» عبر خاصية <code>timesteps</code>، وهي مصفوفة من خطوات الزمن التي سيُطلب من النموذج استدعاؤها.</li> <li>تستقبل الدالة <code>step(...)</code> مخرجات النموذج المتوقعة والعينة “الحالية” (x_t) وتعيد العينة “السابقة” الأكثر إزالةً للضوضاء قليلاً (x_t-1).</li> <li>نظرًا لتعقيد مجدولات الانتشار، لا تُظهر دالة <code>step</code> كل هذا التعقيد، وقد تبدو إلى حد ما “صندوقًا أسود”.</li> <li>في جميع الحالات تقريبًا، يجب تنفيذ المجدولات الجديدة في ملف جدولة جديد.</li></ul> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/conceptual/philosophy.md" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]--> | |
| <script> | |
| { | |
| __sveltekit_kft2r9 = { | |
| base: "/docs/diffusers/main/en", | |
| assets: "/docs/diffusers/main/en" | |
| }; | |
| const element = document.currentScript.parentElement; | |
| Promise.all([ | |
| import("/docs/diffusers/main/en/_app/immutable/entry/start.B6roO9Zr.js"), | |
| import("/docs/diffusers/main/en/_app/immutable/entry/app.CxxEVG8A.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 5], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 41.4 kB
- Xet hash:
- 8a32fd42b0d3480955166f71550dabf2108e20ec88303ab65473220646a274ba
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.