Buckets:

hf-doc-build/doc / transformers /main /ar /how_to_hack_models.html
HuggingFaceDocBuilder's picture
download
raw
41.6 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;كيفية تعديل أي نموذج من نماذج Transformers&quot;,&quot;local&quot;:&quot;كيفية-تعديل-أي-نموذج-من-نماذج-transformers&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;مثال: تعديل آلية الانتباه في نموذج Segment Anything (SAM)&quot;,&quot;local&quot;:&quot;مثال-تعديل-آلية-الانتباه-في-نموذج-segment-anything-sam&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;الدافع&quot;,&quot;local&quot;:&quot;الدافع&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;التنفيذ&quot;,&quot;local&quot;:&quot;التنفيذ&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;الخطوة 1: إنشاء فئة اهتمام مخصصة&quot;,&quot;local&quot;:&quot;الخطوة-1-إنشاء-فئة-اهتمام-مخصصة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 2: استبدال فئة الانتباه الأصلية&quot;,&quot;local&quot;:&quot;الخطوة-2-استبدال-فئة-الانتباه-الأصلية&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 3: تطبيق LoRA على إسقاطات محددة&quot;,&quot;local&quot;:&quot;الخطوة-3-تطبيق-lora-على-إسقاطات-محددة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 4: التحقق من عدد المعلمات القابلة للتدريب&quot;,&quot;local&quot;:&quot;الخطوة-4-التحقق-من-عدد-المعلمات-القابلة-للتدريب&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;المساهمة بابداعاتك الخاصة&quot;,&quot;local&quot;:&quot;المساهمة-بابداعاتك-الخاصة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/transformers/main/ar/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/entry/start.66c7f883.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/scheduler.eaf6c8c4.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/singletons.14ead52b.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/index.5e3cad04.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/paths.343cdb23.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/entry/app.af97ad77.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/preload-helper.d648f8ef.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/index.e25dcc83.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/nodes/0.7d39507f.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/nodes/14.fe371eb3.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.c5abd470.js">
<link rel="modulepreload" href="/docs/transformers/main/ar/_app/immutable/chunks/CodeBlock.d3edfc80.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;كيفية تعديل أي نموذج من نماذج Transformers&quot;,&quot;local&quot;:&quot;كيفية-تعديل-أي-نموذج-من-نماذج-transformers&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;مثال: تعديل آلية الانتباه في نموذج Segment Anything (SAM)&quot;,&quot;local&quot;:&quot;مثال-تعديل-آلية-الانتباه-في-نموذج-segment-anything-sam&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;الدافع&quot;,&quot;local&quot;:&quot;الدافع&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;التنفيذ&quot;,&quot;local&quot;:&quot;التنفيذ&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;الخطوة 1: إنشاء فئة اهتمام مخصصة&quot;,&quot;local&quot;:&quot;الخطوة-1-إنشاء-فئة-اهتمام-مخصصة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 2: استبدال فئة الانتباه الأصلية&quot;,&quot;local&quot;:&quot;الخطوة-2-استبدال-فئة-الانتباه-الأصلية&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 3: تطبيق LoRA على إسقاطات محددة&quot;,&quot;local&quot;:&quot;الخطوة-3-تطبيق-lora-على-إسقاطات-محددة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;الخطوة 4: التحقق من عدد المعلمات القابلة للتدريب&quot;,&quot;local&quot;:&quot;الخطوة-4-التحقق-من-عدد-المعلمات-القابلة-للتدريب&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;المساهمة بابداعاتك الخاصة&quot;,&quot;local&quot;:&quot;المساهمة-بابداعاتك-الخاصة&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div 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>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> </div> <h1 class="relative group"><a id="كيفية-تعديل-أي-نموذج-من-نماذج-transformers" 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="#كيفية-تعديل-أي-نموذج-من-نماذج-transformers"><span><svg class="" 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>كيفية تعديل أي نموذج من نماذج Transformers</span></h1> <p data-svelte-h="svelte-1mgmjto">توفر مكتبة <a href="https://github.com/huggingface/transformers" rel="nofollow">🤗 Transformers</a> مجموعة من النماذج المسبقة التدريب والأدوات لمعالجة اللغات الطبيعية، والرؤية، وما إلى ذلك. على الرغم من أن هذه النماذج تغطي مجموعة واسعة من التطبيقات، فقد تواجه حالات استخدام لا تدعمها المكتبة بشكل افتراضي. يُمكن للتخصيص أن يفتح إمكانيات جديدة، مثل إضافة طبقات جديدة، أو تعديل البنية المعمارية، أو تحسين آليات الانتباه. سيُوضح لك هذا الدليل كيفية تعديل نماذج Transformers الموجودة لتلبية احتياجاتك المحددة. الشيء الرائع هو أنك لست بحاجة إلى الخروج من إطار عمل Transformers لإجراء هذه التغييرات. ي يمكنك تعديل النماذج مباشرةً في Transformers والاستفادة من الميزات مثل <a href="https://huggingface.co/docs/transformers/main/en/main_classes/trainer" rel="nofollow">واجهة برمجة التطبيقات Trainer</a>، و <a href="https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel" rel="nofollow">PreTrainedModel</a>، والضبط الدقيق الفعال باستخدام أدوات مثل <a href="https://huggingface.co/docs/peft/index" rel="nofollow">PEFT</a>.</p> <p data-svelte-h="svelte-1732u89">سنرشدك في هذا الدليل لكيفية تخصيص نماذج Transformers الموجودة لتلبية متطلباتك، دون فقدان مزايا الإطار. ستتعلم كيفية:</p> <ul data-svelte-h="svelte-2hv98t"><li>تعديل بنية نموذج ما من خلال تغيير آلية الانتباه الخاصة به.</li> <li>تطبيق تقنيات مثل Low-Rank Adaptation (LoRA) على مكونات نموذج محددة.</li></ul> <p data-svelte-h="svelte-1p8gsw8">نحن نشجعك على المساهمة باختراقاتك الخاصة ومشاركتها هنا مع المجتمع1</p> <h2 class="relative group"><a id="مثال-تعديل-آلية-الانتباه-في-نموذج-segment-anything-sam" 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="#مثال-تعديل-آلية-الانتباه-في-نموذج-segment-anything-sam"><span><svg class="" 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>مثال: تعديل آلية الانتباه في نموذج Segment Anything (SAM)</span></h2> <p data-svelte-h="svelte-1bz3xzx">نموذج <strong>Segment Anything (SAM)</strong> هو نموذج رائد في مجال تجزئة الصور. في تنفيذه الافتراضي، يستخدم SAM إسقاطًا مجمعًا للاستعلام والمفتاح والقيمة (<code>qkv</code>) في آلية الانتباه الخاصة به. ومع ذلك، قد ترغب في ضبط مكونات محددة فقط من آلية الانتباه، مثل إسقاطات الاستعلام (<code>q</code>) والقيمة (<code>v</code>)، لتقليل عدد المعلمات القابلة للتدريب والموارد الحسابية المطلوبة.</p> <h3 class="relative group"><a id="الدافع" 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="#الدافع"><span><svg class="" 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 data-svelte-h="svelte-1pl2dvy">من خلال تقسيم الإسقاط المجمع <code>qkv</code> إلى إسقاطات منفصلة <code>q</code> و <code>k</code> و <code>v</code>، يمكنك تطبيق تقنيات مثل <strong>LoRA</strong> (Low-Rank Adaptation) على إسقاطي <code>q</code> و <code>v</code> فقط. يسمح لك هذا بما يلي:</p> <ul data-svelte-h="svelte-1p6h3vz"><li>ضبط عدد أقل من المعلمات، مما يقلل من العبء الحسابي.</li> <li>تحقيق أداء أفضل من خلال التركيز على مكونات محددة.</li> <li>تجربة استراتيجيات تعديل مختلفة في آلية الانتباه.</li></ul> <h3 class="relative group"><a id="التنفيذ" 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="#التنفيذ"><span><svg class="" 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> <h4 class="relative group"><a id="الخطوة-1-إنشاء-فئة-اهتمام-مخصصة" 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="#الخطوة-1-إنشاء-فئة-اهتمام-مخصصة"><span><svg class="" 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>الخطوة 1: إنشاء فئة اهتمام مخصصة</span></h4> <p data-svelte-h="svelte-1nzt6k1">بعد ذلك، قم بإنشاء فئة فرعية من فئة <code>SamVisionAttention</code> الأصلية وعدلها لتضم إسقاطات <code>q</code> و <code>k</code> و <code>v</code> منفصلة.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" 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> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-python "><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">import</span> torch.nn <span class="hljs-keyword">as</span> nn
<span class="hljs-keyword">from</span> transformers.models.sam.modeling_sam <span class="hljs-keyword">import</span> SamVisionAttention
<span class="hljs-keyword">class</span> <span class="hljs-title class_">SamVisionAttentionSplit</span>(SamVisionAttention, nn.Module):
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, config, window_size</span>):
<span class="hljs-built_in">super</span>().__init__(config, window_size)
<span class="hljs-keyword">del</span> self.qkv
<span class="hljs-comment"># إسقاطات منفصلة q و k و v</span>
self.q = nn.Linear(config.hidden_size, config.hidden_size, bias=config.qkv_bias)
self.k = nn.Linear(config.hidden_size, config.hidden_size, bias=config.qkv_bias)
self.v = nn.Linear(config.hidden_size, config.hidden_size, bias=config.qkv_bias)
self._register_load_state_dict_pre_hook(self.split_q_k_v_load_hook)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">split_q_k_v_load_hook</span>(<span class="hljs-params">self, state_dict, prefix, *args</span>):
keys_to_delete = []
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> <span class="hljs-built_in">list</span>(state_dict.keys()):
<span class="hljs-keyword">if</span> <span class="hljs-string">&quot;qkv.&quot;</span> <span class="hljs-keyword">in</span> key:
<span class="hljs-comment"># تقسيم q و k و v من الإسقاط المجمع</span>
q, k, v = state_dict[key].chunk(<span class="hljs-number">3</span>, dim=<span class="hljs-number">0</span>)
<span class="hljs-comment"># استبدال الإسقاطات الفردية q و k و v</span>
state_dict[key.replace(<span class="hljs-string">&quot;qkv.&quot;</span>, <span class="hljs-string">&quot;q.&quot;</span>)] = q
state_dict[key.replace(<span class="hljs-string">&quot;qkv.&quot;</span>, <span class="hljs-string">&quot;k.&quot;</span>)] = k
state_dict[key.replace(<span class="hljs-string">&quot;qkv.&quot;</span>, <span class="hljs-string">&quot;v.&quot;</span>)] = v
<span class="hljs-comment"># وضع علامة على مفتاح qkv القديم للحذف</span>
keys_to_delete.append(key)
<span class="hljs-comment"># حذف مفاتيح qkv القديمة</span>
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> keys_to_delete:
<span class="hljs-keyword">del</span> state_dict[key]
<span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, hidden_states: torch.Tensor, output_attentions=<span class="hljs-literal">False</span></span>) -&gt; torch.Tensor:
batch_size, height, width, _ = hidden_states.shape
qkv_shapes = (batch_size * self.num_attention_heads, height * width, -<span class="hljs-number">1</span>)
query = self.q(hidden_states).reshape((batch_size, height * width,self.num_attention_heads, -<span class="hljs-number">1</span>)).permute(<span class="hljs-number">0</span>,<span class="hljs-number">2</span>,<span class="hljs-number">1</span>,<span class="hljs-number">3</span>).reshape(qkv_shapes)
key = self.k(hidden_states).reshape((batch_size, height * width,self.num_attention_heads, -<span class="hljs-number">1</span>)).permute(<span class="hljs-number">0</span>,<span class="hljs-number">2</span>,<span class="hljs-number">1</span>,<span class="hljs-number">3</span>).reshape(qkv_shapes)
value = self.v(hidden_states).reshape((batch_size, height * width,self.num_attention_heads, -<span class="hljs-number">1</span>)).permute(<span class="hljs-number">0</span>,<span class="hljs-number">2</span>,<span class="hljs-number">1</span>,<span class="hljs-number">3</span>).reshape(qkv_shapes)
attn_weights = (query * self.scale) @ key.transpose(-<span class="hljs-number">2</span>, -<span class="hljs-number">1</span>)
<span class="hljs-keyword">if</span> self.use_rel_pos:
attn_weights = self.add_decomposed_rel_pos(
attn_weights, query, self.rel_pos_h, self.rel_pos_w, (height, width), (height, width)
)
attn_weights = torch.nn.functional.softmax(attn_weights, dtype=torch.float32, dim=-<span class="hljs-number">1</span>).to(query.dtype)
attn_probs = nn.functional.dropout(attn_weights, p=self.dropout, training=self.training)
attn_output = (attn_probs @ value).reshape(batch_size, self.num_attention_heads, height, width, -<span class="hljs-number">1</span>)
attn_output = attn_output.permute(<span class="hljs-number">0</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">4</span>).reshape(batch_size, height, width, -<span class="hljs-number">1</span>)
attn_output = self.proj(attn_output)
<span class="hljs-keyword">if</span> output_attentions:
outputs = (attn_output, attn_weights)
<span class="hljs-keyword">else</span>:
outputs = (attn_output, <span class="hljs-literal">None</span>)
<span class="hljs-keyword">return</span> outputs<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-19wirwg"><strong>الشرح:</strong></p> <ul data-svelte-h="svelte-sp19qy"><li><strong>الإسقاطات المنفصلة:</strong> يتم إزالة الإسقاط المُجمع <code>qkv</code>، وإنشاء إسقاطات خطية منفصلة <code>q</code> و <code>k</code> و <code>v</code>.</li> <li><strong>دالة استدعاء تحميل الأوزان:</strong> تقوم طريقة <code>_split_qkv_load_hook</code> بتقسيم أوزان <code>qkv</code> المسبقة التدريب إلى أوزان <code>q</code> و <code>k</code> و <code>v</code> منفصلة عند تحميل النموذج. يضمن هذا التوافق مع أي نموذج مسبق التدريب.</li> <li><strong>التنفيذ الأمامي:</strong> يتم حساب الاستعلامات والمفاتيح والقيم بشكل منفصل، وتستمر آلية الانتباه كالمعتاد.</li></ul> <h4 class="relative group"><a id="الخطوة-2-استبدال-فئة-الانتباه-الأصلية" 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="#الخطوة-2-استبدال-فئة-الانتباه-الأصلية"><span><svg class="" 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>الخطوة 2: استبدال فئة الانتباه الأصلية</span></h4> <p data-svelte-h="svelte-15x9xcr">استبدل فئة <code>SamVisionAttention</code> الأصلية بفئتك المخصصة بحيث يستخدم النموذج آلية الانتباه المعدلة.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" 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> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-python "><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> SamModel
<span class="hljs-keyword">from</span> transformers.models.sam <span class="hljs-keyword">import</span> modeling_sam
<span class="hljs-comment"># استبدال فئة الاهتمام في وحدة نمطية modeling_sam</span>
modeling_sam.SamVisionAttention = SamVisionAttentionSplit
<span class="hljs-comment"># تحميل نموذج SAM المسبق التدريب</span>
model = SamModel.from_pretrained(<span class="hljs-string">&quot;facebook/sam-vit-base&quot;</span>)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-19wirwg"><strong>الشرح:</strong></p> <ul data-svelte-h="svelte-1ccnkwy"><li><strong>استبدال الفئة:</strong> من خلال تعيين فئتك المخصصة إلى <code>modeling_sam.SamVisionAttention</code>، فإن أي حالات من فئة <code>SamVisionAttention</code> في النموذج ستستخدم النسخة المعدلة. وبالتالي، عند استدعاء <code>SamModel</code>، سيتم استخدام <code>SamVisionAttentionSplit</code> المحددة حديثًا.</li> <li><strong>تحميل النموذج:</strong> يتم تحميل النموذج باستخدام <code>from_pretrained</code>، ويتم دمج آلية الانتباه المخصصة.</li></ul> <h4 class="relative group"><a id="الخطوة-3-تطبيق-lora-على-إسقاطات-محددة" 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="#الخطوة-3-تطبيق-lora-على-إسقاطات-محددة"><span><svg class="" 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>الخطوة 3: تطبيق LoRA على إسقاطات محددة</span></h4> <p data-svelte-h="svelte-25uips">مع وجود إسقاطات <code>q</code> و <code>k</code> و <code>v</code> منفصلة، يمكنك الآن تطبيق LoRA على مكونات محددة، مثل إسقاطات <code>q</code> و <code>v</code>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" 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> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-python "><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> peft <span class="hljs-keyword">import</span> LoraConfig, get_peft_model
config = LoraConfig(
r=<span class="hljs-number">16</span>,
lora_alpha=<span class="hljs-number">32</span>,
target_modules=[<span class="hljs-string">&quot;q&quot;</span>, <span class="hljs-string">&quot;v&quot;</span>], <span class="hljs-comment"># تطبيق LoRA على إسقاطات q و v</span>
lora_dropout=<span class="hljs-number">0.1</span>,
task_type=<span class="hljs-string">&quot;mask-generation&quot;</span>
)
<span class="hljs-comment"># تطبيق LoRA على النموذج</span>
model = get_peft_model(model, config)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-19wirwg"><strong>الشرح:</strong></p> <ul data-svelte-h="svelte-zi3ifu"><li><strong>تكوين LoRA:</strong> تحدد <code>LoraConfig</code> المرتبة <code>r</code>، وعامل القياس <code>lora_alpha</code>، والوحدات المستهدفة (<code>&quot;q&quot;</code> و <code>&quot;v&quot;</code>)، ومعدل التخلي، ونوع المهمة.</li> <li><strong>تطبيق LoRA:</strong> تقوم دالة <code>get_peft_model</code> بتطبيق LoRA على الوحدات المحددة في النموذج.</li> <li><strong>تقليل المعلمات:</strong> من خلال التركيز على <code>q</code> و <code>v</code>، فإنك تقلل عدد المعلمات القابلة للتدريب، مما يؤدي إلى تسريع التدريب وتقليل استخدام الذاكرة.</li></ul> <h4 class="relative group"><a id="الخطوة-4-التحقق-من-عدد-المعلمات-القابلة-للتدريب" 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="#الخطوة-4-التحقق-من-عدد-المعلمات-القابلة-للتدريب"><span><svg class="" 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>الخطوة 4: التحقق من عدد المعلمات القابلة للتدريب</span></h4> <p data-svelte-h="svelte-c77z7p">من السهل التحقق من عدد المعلمات القابلة للتدريب ومعرفة تأثير تعديلك.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" 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> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-python "><!-- HTML_TAG_START -->model.print_trainable_parameters()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-awqv7y"><strong>الناتج المتوقع:</strong></p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" 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> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=" "><!-- HTML_TAG_START -->عدد المعلمات القابلة للتدريب: <span class="hljs-number">608</span>,<span class="hljs-number">256</span> |<span class="hljs-type">| جميع المعلمات: 94</span>,<span class="hljs-number">343</span>,<span class="hljs-number">728</span> |<span class="hljs-type">| نسبة المعلمات القابلة للتدريب: 0</span><span class="hljs-number">.6447</span>
عدد المعلمات القابلة للتدريب: <span class="hljs-number">912</span>,<span class="hljs-number">384</span> |<span class="hljs-type">| جميع المعلمات: 94</span>,<span class="hljs-number">647</span>,<span class="hljs-number">856</span> |<span class="hljs-type">| نسبة المعلمات القابلة للتدريب: 0</span><span class="hljs-number">.9640</span> # مع k<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="المساهمة-بابداعاتك-الخاصة" 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="#المساهمة-بابداعاتك-الخاصة"><span><svg class="" 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 data-svelte-h="svelte-15z7lpy">يمكن لتعديل النماذج المسبقة التدريب أن يفتح آفاقًا جديدة للبحث والتطبيق. من خلال فهم وتعديل الآليات الداخلية للنماذج مثل SAM، يمكنك تخصيصها لتلبية احتياجاتك المحددة، وتحسين الأداء، وتجربة أفكار جديدة.</p> <p data-svelte-h="svelte-5uzo05">إذا قمت بتطوير تعديﻻتك الخاصة لنماذج Transformers وترغب في مشاركتها، ففكر في المساهمة في هذه الوثيقة.</p> <ul data-svelte-h="svelte-gqwp2k"><li><strong>إنشاء طلب سحب (Pull Request):</strong> شارك تغييراتك وتحسيناتك في التعليمات البرمجية مباشرة في المستودع.</li> <li><strong>كتابة التوثيق:</strong> قدم تفسيرات وأمثلة واضحة لتعديلاتك.</li> <li><strong>التفاعل مع المجتمع:</strong> ناقش أفكارك واحصل على تعليقات من المطورين والباحثين الآخرين من خلال فتح مشكلة.</li></ul> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/transformers/blob/main/docs/source/ar/how_to_hack_models.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 data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p>
<script>
{
__sveltekit_1174xhz = {
assets: "/docs/transformers/main/ar",
base: "/docs/transformers/main/ar",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/transformers/main/ar/_app/immutable/entry/start.66c7f883.js"),
import("/docs/transformers/main/ar/_app/immutable/entry/app.af97ad77.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 14],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
41.6 kB
·
Xet hash:
b080f564dc9175728761e1021582eb58faffc59b9098f521475c1151f2c1b1a1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.