Transformers documentation

استكشاف الأخطاء

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

استكشاف الأخطاء

قد تحدث أخطاء في بعض الأحيان، لكننا هنا للمساعدة! يغطي هذا الدليل بعضًا من أكثر المشكلات شيوعًا التي واجهناها وكيفية حلها. ومع ذلك، لا يُقصد بهذا الدليل أن يكون مجموعة شاملة لكل مشكلة في 🤗 Transformers. للحصول على مزيد من المساعدة في استكشاف مشكلتك وحلها، جرّب ما يلي:

  1. الطلب على المساعدة في المنتديات. توجد فئات محددة يمكنك نشر سؤالك فيها، مثل المبتدئون أو 🤗 Transformers. تأكد من كتابة منشور وصفي جيد في المنتدى يتضمن بعض الأكواد القابلة للتكرار لتعظيم احتمالية حل مشكلتك!
  1. أنشئ قضية في مستودع 🤗 Transformers إذا كان الأمر يتعلق بخطأ في المكتبة. حاول تضمين أكبر قدر ممكن من المعلومات التي تصف الخطأ لمساعدتنا على تحديد المشكلة بشكل أفضل ومعرفة كيفية إصلاحها.

  2. إذا كنت تستخدم إصدارًا أقدم من 🤗 Transformers، فراجع دليل النقل نظرًا لأن بعض التغييرات المهمة قد أُدخلت بين الإصدارات.

لمزيد من التفاصيل حول استكشاف الأخطاء وإصلاحها والحصول على المساعدة، راجع الفصل 8 من دورة Hugging Face.

البيئات المحمية بجدران نارية

تُقيَّد بعض وحدات المعالجة الرسومية (GPU) في بيئات السحابة والشبكات الداخلية بجدران حماية تمنع الاتصالات الخارجية، مما يؤدي إلى حدوث خطأ في الاتصال. عند محاولة سكربتك تنزيل أوزان النموذج أو مجموعات البيانات، سيعلق التنزيل ثم ينتهي بوقت انتهاء الصلاحية مع الرسالة التالية:

ValueError: Connection error, and we cannot find the requested files in the cached path.
Please try again or make sure your Internet connection is on.

في هذه الحالة، يجب أن تحاول تشغيل 🤗 Transformers في الوضع دون اتصال لتجنب خطأ الاتصال.

نفاد ذاكرة CUDA

قد يكون تدريب نماذج كبيرة تحتوي على ملايين المعلمات أمراً صعباً دون توفر العتاد المناسب. خطأ شائع قد تواجهه عندما تنفد ذاكرة وحدة معالجة الرسوميات (GPU) هو:

CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 11.17 GiB total capacity; 9.70 GiB already allocated; 179.81 MiB free; 9.85 GiB reserved in total by PyTorch)

إليك بعض الحلول المحتملة التي يمكنك تجربتها لتقليل استهلاك الذاكرة:

راجع نظرة عامة على التحسين لمزيد من التفاصيل حول تقنيات توفير الذاكرة.

ImportError

خطأ شائع آخر قد تواجهه، لا سيما إذا كان النموذج حديث الإصدار، هو ImportError:

ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location)

بالنسبة لأنواع الأخطاء هذه، تأكد من أنك قمت بتثبيت أحدث إصدار من 🤗 Transformers للوصول إلى أحدث النماذج:

pip install transformers --upgrade

خطأ CUDA: تم تفعيل المطالبة على جانب الجهاز

قد تواجه أحيانًا خطأً عامًا في CUDA يتعلق بخطأ في كود الجهاز.

RuntimeError: CUDA error: device-side assert triggered

يجب أن تحاول تشغيل الكود على وحدة المعالجة المركزية (CPU) أولاً للحصول على رسالة خطأ أكثر تفصيلاً. أضف متغير البيئة التالي إلى بداية الكود للتبديل إلى وحدة المعالجة المركزية:

>>> import os

>>> os.environ["CUDA_VISIBLE_DEVICES"] = ""

خيار آخر هو الحصول على أثر أخطاء (traceback) أدق من وحدة معالجة الرسوميات (GPU). أضف متغير البيئة التالي في بداية كودك لجعل أثر الأخطاء يشير إلى مصدر الخطأ:

>>> import os

>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1"

إخراج غير صحيح عند عدم إخفاء رموز الحشو

في بعض الحالات، قد تكون المخرجات hidden_state غير صحيحة إذا كانت input_ids تتضمن رموز حشو. ولإيضاح ذلك، قم بتحميل نموذج ومُرمِّز. يمكنك الوصول إلى pad_token_id للنموذج لمعرفة قيمته. قد تكون pad_token_id هي None لبعض النماذج، لكن يمكنك دائمًا ضبطها يدويًا.

>>> from transformers import AutoModelForSequenceClassification
>>> import torch

>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")
>>> model.config.pad_token_id
0

يُظهر المثال التالي المخرجات دون إخفاء رموز الحشو:

>>> input_ids = torch.tensor([[7592, 2057, 2097, 2393, 9611, 2115], [7592, 0, 0, 0, 0, 0]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
        [ 0.1317, -0.1683]], grad_fn=<AddmmBackward0>)

إليك المخرجات الفعلية للترتيب الثاني:

>>> input_ids = torch.tensor([[7592]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)

في معظم الأحيان، يجب أن تزوّد نموذجك بـattention_mask لتجاهل رموز الحشو (padding) وتجنّب هذا الخطأ الصامت. الآن يطابق ناتج التسلسل الثاني ناتجه الفعلي:

بشكل افتراضي، ينشئ مُجزِّئ الرموز attention_mask نيابةً عنك بناءً على الإعدادات الافتراضية الخاصة بمُجزِّئ الرموز الذي تستخدمه.

>>> attention_mask = torch.tensor([[1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0]])
>>> output = model(input_ids, attention_mask=attention_mask)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
        [-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)

لا يقوم 🤗 Transformers تلقائيًا بإنشاء attention_mask لإخفاء رمز التعبئة إذا تم توفيره، وذلك للأسباب التالية:

  • بعض النماذج لا تحتوي على رمز تعبئة.
  • في بعض حالات الاستخدام، يرغب المستخدمون في أن يولي النموذج اهتمامًا لرمز الحشو.

ValueError: فئة الإعداد XYZ غير معروفة لهذا النوع من AutoModel

بشكل عام، ننصح باستخدام فئة AutoModel لتحميل النماذج المدربة مسبقاً. يمكن لهذه الفئة الاستدلال تلقائياً على البنية الصحيحة وتحميلها من نقطة تحقق محددة بناءً على الإعدادات. إذا واجهت هذا الخطأ ValueError عند تحميل نموذج من نقطة تحقق، فهذا يعني أن فئة Auto لم تتمكن من إيجاد تطابق بين الإعدادات في نقطة التحقق المحددة ونوع النموذج الذي تحاول تحميله. في الغالب، يحدث هذا عندما لا تدعم نقطة تحقق معينة مهمة محددة. على سبيل المثال، ستظهر هذه الرسالة في المثال التالي لأنه لا يوجد نموذج GPT2 للإجابة على الأسئلة:

>>> from transformers import AutoProcessor, AutoModelForQuestionAnswering

>>> processor = AutoProcessor.from_pretrained("openai-community/gpt2-medium")
>>> model = AutoModelForQuestionAnswering.from_pretrained("openai-community/gpt2-medium")
ValueError: Unrecognized configuration class <class 'transformers.models.gpt2.configuration_gpt2.GPT2Config'> for this kind of AutoModel: AutoModelForQuestionAnswering.
Model type should be one of AlbertConfig, BartConfig, BertConfig, BigBirdConfig, BigBirdPegasusConfig, BloomConfig, ...
Update on GitHub