Transformers documentation
طبقات ومساعدات مخصصة
طبقات ومساعدات مخصصة
تُدرج هذه الصفحة جميع الطبقات المخصصة التي يستخدمها المكتبة، بالإضافة إلى دوال الأداة والفئات التي توفرها للنمذجة.
لا تُفيد معظم تلك العناصر إلا إذا كنت تدرس كود النماذج الموجودة في المكتبة.
WeightRenaming
فئة transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
يطبّق قائمة من تحويلات إعادة التسمية المزدوجة لـ WeightRenaming، وتُفعَّل بشكل كسول (lazy) بواسطة نمط المصدر الأول (نمط "الحارس"). استخدم هذا عندما تتشارك إعادة تسمية وسيطة اسمًا مشتركًا (مثل norm0→norm1 وnorm1→norm2) بحيث لا يُعاد تطبيق إعادة التسمية بشكل غير صحيح عند تحميل نقطة تحقق (checkpoint) تم تحويلها مسبقًا (التي تحتوي على norm1 وnorm2 ولا تحتوي على norm0).
NOTE: رتّب source_patterns بحيث يأتي النمط غير الموجود في نقطة التفتيش المحوّلة مسبقًا في المقدمة. يتم تكرار قاموس الحالة (state dict) بترتيب مفاتيح مرتبة، لذا يجب أن يكون نمط الحماية أصغر حروفية من الأنماط المعتمدة عليه. وإلا فسيتم تجاوز المعتمدات في المرور الأول ولن يُعاد تجربتها أبدًا.
WeightConverter
فئة transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
عمليات التحويل
الفئة الأساسية لعمليات تحويل الأوزان.
قسّم متجهًا على طول dim إلى مقاطع متساوية الحجم. بالإضافة إلى ذلك، num_shards_attribute هو حقل إعدادات يُقرأ لمعرفة عدد المتجهات التي يجب تقسيمها إلى مقاطع. مفيد عند دمج عدد عشوائي من المتجهات.
تجميع المصفوفات على طول dim. بالإضافة إلى ذلك، إذا كان يتم تجميع عدد عشوائي من المصفوفات، فإن num_shards_attribute هو حقل في الإعدادات يُقرأ لمعرفة عدد المصفوفات التي يجب إعادة إنشائها عند استخدام العمليات المعاكسة.
دمج قائمة من الموترات (tensors) في موتر واحد على طول البُعد الأول. نعرّف هذا صراحةً لأنه في حالة EP أو TP تريد التأكد من أنك تعرف ما تفعله!
عكس MergeModulelist باستخدام أحجام تقسيم صريحة لكل مجموعة.
فئة transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
يطبّق التباديل المطلوبة لتحويل أوزان RoPE المركبة إلى تنسيق sin/cos المنفصل.
فئة transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
يطبّق الترتيب المطلوب لتحويل أوزان RoPE المركّبة إلى تنسيق sin/cos المنفصل على QKV المدمج.
يُكافئ استدعاء PermuteForRope() + Concatenate() لكنه يتيح لنا استدعاء Permute على مجموعة فرعية من الموترات المقسّمة فقط.
ملاحظة: تنطبق هذه العملية على العمود الفقري البصري في النماذج متعددة الوسائط فقط، لأنها تفحص config.vision_config
فئة transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
يطبّق التباديل المطلوبة لتحويل أوزان RoPE المركبة إلى تنسيق sin/cos المنفصل على QKV المدمج.
يُكافئ استدعاء Chunk() + PermuteForRope() لكنه يتيح لنا استدعاء Permute على مجموعة فرعية من الموترات المقسمة فقط.
ملاحظة: تنطبق هذه العملية على العمود الفقري البصري في النماذج متعددة الوسائط فقط، لأنها تفحص config.vision_config
الطبقات
الفئة الأساسية للطبقات التي تستخدم فحص التدرجات.
تمكّن هذه الفئة من تفعيل خاصية فحص التدرّجات (gradient checkpointing) لطبقة. بشكل افتراضي، تكون خاصية فحص التدرّجات معطّلة (gradient_checkpointing = False). عند استدعاء model.set_gradient_checkpointing()، يتم تفعيل خاصية فحص التدرّجات من خلال تعيين gradient_checkpointing = True وتعيين دالة فحص التدرّجات إلى _gradient_checkpointing_func.
مهم:
عند استخدام نقطة التفتيش للتدرجات مع use_reentrant=True، يجب تمرير المدخلات التي تتطلب تدرجات (مثل الحالات المخفية) كحجج موضعية (*args) بدلاً من الحجج المسماة لضمان انتشار التدرجات بشكل صحيح.
دوال الانتباه
كائن يشبه القاموس يتتبع دوال الانتباه المسموح بها. يمكنك بسهولة إضافة دالة انتباه جديدة عبر استدعاء register(). إذا احتاج نموذج إلى تجاوز دالة انتباه موجودة محليًا، مثل sdpa، فعليه أن يُعلن عن نسخة جديدة من هذا الفئة داخل modeling_<model>.py، ويُعلن عنها على تلك النسخة.
دوال قناع الانتباه
دوال تضمين الموضع الدوّار
transformers.dynamic_rope_update
< source >( rope_forward )
دالة مُزيِّنة لتحديث معاملات RoPE في مسار الأمامي، إذا كان النموذج يستخدم RoPE ديناميكيًا (أي تطبيق RoPE قد يعيد حساب تردداته في مسار الأمامي).
وحدات Pytorch المخصصة
فئة transformers.Conv1D
< source >( nfnx )
طبقة التمرير أحادية البُعد كما عرّفها رادفورد وآخرون لـ OpenAI GPT (والمستخدمة أيضاً في GPT-2).
يعمل بشكل أساسي كطبقة خطية لكن الأوزان تكون منقولة.
دوال مساعدة في PyTorch
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor
المعاملات
- forward_fn (
Callable[..., torch.Tensor]) — دالة الأمامية للنموذج. - chunk_size (
int) — حجم الجزء في متجه مقسّم إلى أجزاء:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) — البُعد الذي يجب تقسيمinput_tensorsعلى أساسه. - input_tensors (
tuple[torch.Tensor]) — مصفوفات الإدخال الخاصة بـforward_fnالتي سيتم تقسيمها
يعيد
torch.Tensor
متجه (Tensor) بنفس الشكل الذي كان سيُنتجه forward_fn لو طُبّق`.
يقسم هذا الدالة input_tensors إلى أجزاء أصغر من تينسور الإدخال بحجم chunk_size على طول البُعد chunk_dim. ثم يطبق طبقة forward_fn على كل جزء بشكل مستقل لتوفير الذاكرة.
إذا كان forward_fn مستقلاً عبر chunk_dim، فإن هذه الدالة ستُنتج نفس النتيجة التي تُنتجها عند تطبيق forward_fn مباشرةً على input_tensors.
أمثلة:
# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
hidden_states = self.decoder(hidden_states)
return hidden_states
# implement a chunked forward function
def forward(self, hidden_states):
return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)transformers.pytorch_utils.prune_linear_layer
< source >( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear
اقصّ طبقة خطية للاحتفاظ فقط بالقيم الموجودة في index.
يُستخدم لإزالة الرؤوس.