Transformers documentation
الإنشاء
الإنشاء
يحتوي كل إطار عمل على طريقة generate لتوليد النص، وهي مُنفَّذة في فئة GenerationMixin الخاصة به:
- يُنفَّذ generate() في PyTorch داخل GenerationMixin.
يمكنك تخصيص طريقة generate باستخدام كائن من فئة GenerationConfig. يُرجى الرجوع إلى هذه الفئة للحصول على القائمة الكاملة لمعايير التوليد، التي تتحكم في سلوك طريقة التوليد.
لتعلّم كيفية فحص إعدادات توليد النموذج، وما هي القيم الافتراضية، وكيفية تغيير المعلمات بشكل مؤقت، وكيفية إنشاء وإعدادات توليد مخصصة وحفظها، يُرجى الرجوع إلى دليل استراتيجيات توليد النص. يشرح الدليل أيضاً كيفية استخدام الميزات ذات الصلة، مثل بث الرموز.
GenerationConfig
فئة transformers.GenerationConfig
< source >( **kwargs )
المعاملات التي تتحكم في طول المخرجات
- max_length (
int، اختياري) — يُوصى باستخدامmax_new_tokensللتحكم في عدد الرموز التي يولّدها النموذج. أماmax_lengthفقد أُبقيت من أجل التوافق مع الإصدارات السابقة. - max_new_tokens (
int, اختياري) — الحد الأقصى لعدد الرموز التي سيتم توليدها، مع تجاهل عدد الرموز الموجودة في الاستعلام. - min_length (
int، اختياري) — الحد الأدنى لطول التسلسل الذي سيتم توليده. يتوافق مع طول موجه الإدخال +min_new_tokens. يتم تجاوز تأثيره بواسطةmin_new_tokensإذا تم ضبطه أيضاً. - min_new_tokens (
int، اختياري) — الحد الأدنى لعدد الرموز التي يجب توليدها، مع تجاهل عدد الرموز الموجودة في الاستعلام. - early_stopping (
boolأوstr، اختياري) — يتحكم في شرط التوقف للطرق المعتمدة على الحزم (beam-based methods)، مثل beam-search. يقبل القيم التالية:True، حيث يتوقف التوليد بمجرد وجودnum_beamsمرشحين مكتملين؛False، حيث يُطبَّق معيار تقريبي (heuristic) ويتوقف التوليد عندما يصبح من غير المرجح جدًا العثور على مرشحين أفضل؛"never"، حيث لا تتوقف عملية البحث بالحزم إلا عندما لا يمكن وجود مرشحين أفضل (خوارزمية البحث بالحزم القياسية). - max_time (
float, اختياري) — الحد الأقصى للوقت المسموح به لتنفيذ العملية بالثواني. سيُكمل التوليد المرور الحالي بعد انقضاء الوقت المخصص. - stop_strings (
strأوlist[str]، اختياري) — نص أو قائمة نصوص يجب أن تُنهي عملية التوليد إذا أخرجها النموذج.
المعاملات التي تتحكم في استراتيجية التوليد المستخدمة
- do_sample (
bool) — ما إذا كان سيتم استخدام العينة أم لا؛ وإلا فسيتم استخدام فك الترميز الجشع. - num_beams (
int، اختياري) — عدد الحزم في بحث الحزم. القيمة 1 تعني عدم استخدام بحث الحزم. - use_mtp — (
bool): ما إذا كان سيتم استخدام التنبؤ متعدد الرموز (MTP) أم لا، في حال دعم النموذج لهذه الميزة.
المعاملات التي تتحكم في ذاكرة التخزين المؤقت
- use_cache (
bool) — ما إذا كان يجب على النموذج استخدام انتباهات المفاتيح/القيم الأخيرة السابقة (إذا كان ذلك ينطبق على النموذج) لتسريع فك الترميز. - cache_implementation (
str, اختياري) — اسم فئة الكاش التي سيتم إنشاء مثيل منها فيgenerate, لتسريع فك الترميز. القيم الممكنة هي:"dynamic": DynamicCache"static": StaticCache"offloaded":DynamicCache(offloaded=True)"offloaded_static":StaticCache(offloaded=True)"quantized": QuantizedCache
إذا لم يُحدَّد أي شيء، سنستخدم ذاكرة التخزين المؤقت الافتراضية للنموذج (والتي غالباً ما تكون DynamicCache). راجع توثيق ذاكرة التخزين المؤقت لدينا لمزيد من المعلومات.
- cache_config (
dict، اختياري، القيمة الافتراضيةNone) — يمكن تمرير الحُجج المستخدمة في فئة ذاكرة التخزين المؤقت للمفاتيح والقيم عبرcache_config. - max_cache_len (
int, اختياري) — يُستخدم فقط مع ذاكات التخزين الثابتة (عند ضبطcache_implementationعلى"static"أو"offloaded_static"). يحدد حجم ذاكرة التخزين مسبقًا على هذا الطول بدلاً منmax_lengthالخاص بالاستدعاء الحالي. اضبطه مرة واحدة على أكبر استدعاء تتوقعه، بحيث تعيد استدعاءاتgenerate()المتكررة التي تتضمن موجهًا أطول أو قيمة أكبر لـmax_new_tokens(حتى هذا الحد الأقصى) استخدام نفس ذاكرة التخزين بدلاً من تحفيز إعادة تخصيص وإعادة تجميعtorch.compile.
معاملات لتلاعب في قيم اللوجيتات الناتجة عن النموذج
- temperature (
float، اختياري) — القيمة المستخدمة لتعديل احتمالات الرمز التالي. يتم تعيين هذه القيمة في ملفgeneration_config.jsonالخاص بالنموذج. إذا لم يتم تعيينها، فإن القيمة الافتراضية هي 1.0 - top_k (
int, اختياري) — عدد رموز المفردات ذات أعلى احتمالات التي يجب الاحتفاظ بها لتصفية top-k. يتم تعيين هذه القيمة في ملفgeneration_config.jsonالخاص بالنموذج. إذا لم يتم تعيينها، فإن القيمة الافتراضية هي 50. - top_p (
float، اختياري) — إذا تم ضبطه على قيمة float < 1، فسيتم الاحتفاظ فقط بأصغر مجموعة من الرموز الأكثر احتمالاً التي تضاف احتمالاتها لتساويtop_pأو أعلى، وذلك لتوليد النص. يتم ضبط هذه القيمة في ملفgeneration_config.jsonالخاص بالنموذج. إذا لم يتم ضبطها، فإن القيمة الافتراضية هي 1.0 - min_p (
float, اختياري) — أدنى احتمال للرمز، والذي يُضرب في احتمال الرمز الأكثر احتمالاً. يجب أن يكون قيمة بين 0 و 1. القيم النموذجية تقع في نطاق 0.01-0.2، وهي انتقائية بمقدار يقارب ضبطtop_pفي نطاق 0.99-0.8 (استخدم القيم المعاكسة لقيمtop_pالمعتادة). - top_h (
float, اختياري) — عامل تحجيم ميزانية الإنتروبيا، الذي يتحكم في مقدار إنتروبيا التوزيع الذي يُحافظ عليه عند أخذ العينات. يجب أن تكون القيمة بين 0 و 1. في كل خطوة، تُرتَّب الرموز حسب الاحتمال، ويُحتفظ بأصغر بادئة من الرموز تكون إنتروبياها المعاد تطبيعها أقل من أو تساويtop_hمضروبًا في إنتروبيا التوزيع الكامل. تؤدي القيم الأصغر (مثل 0.2–0.5) إلى مخرجات أكثر تركيزًا وحتمية، بينما تسمح القيم الأقرب إلى 1.0 بمزيد من العشوائية والتنوع. القيم النموذجية تقع في نطاق 0.3–0.6. - typical_p (
float, اختياري) — تقيس المحلية النموذجية مدى تشابه الاحتمال الشرطي للتنبؤ بالرمز المستهدف التالي مع الاحتمال الشرطي المتوقع للتنبؤ برمز عشوائي تالٍ، بالنظر إلى النص الجزئي الذي تم توليده بالفعل. إذا تم ضبطه على قيمة float < 1، فسيتم الاحتفاظ بأصغر مجموعة من الرموز الأكثر محلية نموذجية التي تضاف احتمالاتها لتساويtypical_pأو أعلى، وذلك للتوليد. راجع هذا الورقة لمزيد من التفاصيل. - epsilon_cutoff (
float، اختياري) — إذا تم ضبطه على قيمة float تقع بصرامة بين 0 و 1، فسيتم أخذ عينات فقط من الرموز التي تتجاوز احتمالية الشرطepsilon_cutoff. في الورقة البحثية، تتراوح القيم المقترحة بين 3e-4 و 9e-4، اعتمادًا على حجم النموذج. راجع Truncation Sampling as Language Model Desmoothing لمزيد من التفاصيل. - eta_cutoff (
float, اختياري) — تُعدّ عيّنة إيتا (Eta) هجينة بين العيّنة المحلية النموذجية والعيّنة إبسيلون. إذا تم ضبطها على قيمة float تقع بصرامة بين 0 و1، فإن الرمز يُعتبر فقط إذا كان أكبر منeta_cutoffأوsqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))). الحدّ الثاني هو الحدّ المتوقع لاحتمالية الرمز التالي، مُقيَّسًا بواسطةsqrt(eta_cutoff). في الورقة البحثية، تتراوح القيم المقترحة بين 3e-4 و2e-3، بحسب حجم النموذج. راجع Truncation Sampling as Language Model Desmoothing لمزيد من التفاصيل. - repetition_penalty (
float، اختياري) — معامل عقوبة التكرار. القيمة 1.0 تعني عدم وجود عقوبة. راجع هذا الورق لمزيد من التفاصيل. - encoder_repetition_penalty (
float, اختياري) — المعامل الخاص بـ encoder_repetition_penalty. عقوبة أُسّية على التسلسلات التي لا توجد في المدخلات الأصلية. القيمة 1.0 تعني عدم وجود عقوبة. - length_penalty (
float, اختياري) — عقوبة أُسّية على الطول تُستخدم مع التوليد القائم على الحزم (beam-based generation). تُطبَّق هذه العقوبة كقوة أُسّية على طول التسلسل، والذي يُستخدم بدوره لقسم درجة التسلسل. وبما أن الدرجة هي الاحتمال اللوغاريتمي للتسلسل (أي أنها سالبة)، فإنlength_penalty> 0.0 يشجّع على تسلسلات أطول، بينماlength_penalty< 0.0 يشجّع على تسلسلات أقصر. - no_repeat_ngram_size (
int, اختياري) — إذا تم تعيينه إلى int > 0، فلا يمكن أن تظهر جميع ngrams بهذا الحجم إلا مرة واحدة. - bad_words_ids (
list[list[int]]، اختياري) — قائمة من قوائم معرّفات الرموز التي لا يُسمح بتوليدها. راجع NoBadWordsLogitsProcessor للحصول على مزيد من التوثيق والأمثلة. - renormalize_logits (
bool) — ما إذا كان يجب إعادة تطبيع القيم اللوجستية (logits) بعد تطبيق جميع معالجات القيم اللوجستية (بما في ذلك المخصصة). يُوصى بشدة بتعيين هذا العلم إلىTrueلأن خوارزميات البحث تفترض أن القيم اللوجستية للنتائج مُطبَّعة، لكن بعض معالجات القيم اللوجستية تُخرق هذا التطبيع. - forced_bos_token_id (
int، اختياري، القيمة الافتراضية هيmodel.config.forced_bos_token_id) — المعرّف الخاص بالرمز الذي يجب إجباره ليكون الرمز الأول المُولَّد بعدdecoder_start_token_id. مفيد في النماذج متعددة اللغات مثل mBART حيث يجب أن يكون الرمز الأول المُولَّد هو رمز لغة الهدف. - forced_eos_token_id (
intor list[int], *optional*, defaults tomodel.config.forced_eos_token_id) -- The id of the token to force as the last generated token whenmax_length` is reached. Optionally, use a list to set multiple end-of-sequence tokens. - remove_invalid_values (
bool) — ما إذا كان يجب إزالة قيم nan وinf المحتملة الناتجة عن النموذج لمنع طريقة التوليد من التعطّل. يُرجى ملاحظة أنّ استخدامremove_invalid_valuesقد يُبطئ عملية التوليد. - exponential_decay_length_penalty (
tuple(int, float)، اختياري) — تضيف هذه المجموعة (Tuple) عقوبة طول متزايدة أُسّياً بعد توليد عدد معين من الرموز. يجب أن تتكون المجموعة من:(start_index, decay_factor)حيث يشيرstart_indexإلى نقطة بدء العقوبة، ويمثلdecay_factorمعامل الاضمحلال الأُسّي. - suppress_tokens (
list[int]، اختياري) — قائمة من الرموز التي سيتم كبتها أثناء التوليد. سيقوم معالج الاحتمالاتSuppressTokensبإعداد احتمالاتها اللوغاريتمية إلى-infبحيث لا يتم اختيارها. - begin_suppress_tokens (
list[int]، اختياري) — قائمة برموز سيتم كبتها في بداية التوليد. سيقوم معالج اللوجيتSuppressBeginTokensبإعداد احتمالات اللوج الخاصة بها إلى-infحتى لا يتم اختيارها. - sequence_bias (
dict[tuple[int], float], اختياري) — قاموس يربط تسلسلًا من الرموز (tokens) بحده الانحياز (bias term). تزيد الانحيازات الموجبة من احتمالية اختيار التسلسل، بينما تفعل الانحيازات السالبة العكس. راجع SequenceBiasLogitsProcessor للحصول على مزيد من التوثيق والأمثلة. - token_healing (
bool) — إصلاح الرموز النهائية للموجّهات عن طريق استبدالها بامتداداتها المناسبة. يعزز هذا جودة الإكمالات للموجّهات المتأثرة بتحيز الترميز الجشع. - guidance_scale (
float، اختياري) — مقياس التوجيه للتوجيه الحر من التصنيف (CFG). يتم تفعيل CFG عن طريق تعيينguidance_scale > 1. تشجيع مقياس توجيه أعلى يدفع النموذج إلى توليد عينات أكثر ارتباطًا بالموجّه المُدخل، وعادةً على حساب جودة أدنى. - watermarking_config (
BaseWatermarkingConfigأوdict، اختياري) — الحجج المستخدمة لإضافة علامة مائية إلى مخرجات النموذج عن طريق إضافة انحياز صغير إلى مجموعة عشوائية محددة من الرموز "الخضراء". راجع توثيق SynthIDTextWatermarkingConfig وWatermarkingConfig لمزيد من التفاصيل. إذا تم تمريره على شكلDict، فسيتم تحويله داخليًا إلىWatermarkingConfig.
المعاملات التي تُعرّف متغيرات الإخراج الخاصة بـ generate
- num_return_sequences (
int, اختياري) — عدد التسلسلات المستقلة المحسوبة والمُعاد إرجاعها لكل عنصر في الدفعة. - output_attentions (
bool) — ما إذا كان يجب إرجاع تينسورات الانتباه لطبقات الانتباه جميعها أم لا. راجعattentionsضمن التينسورات المُرجعة لمزيد من التفاصيل. - output_hidden_states (
bool) — ما إذا كان يجب إرجاع حالات الإخفاء (hidden states) لجميع الطبقات. راجعhidden_statesضمن الموترات المُرجعة لمزيد من التفاصيل. - output_scores (
bool) — ما إذا كان يجب إرجاع درجات التنبؤ أم لا. راجعscoresضمن الموترات المُرجعة لمزيد من التفاصيل. - output_logits (
bool) — ما إذا كان يجب إرجاع درجات التنبؤ اللوجستية (logit) غير المعالجة أم لا. راجعlogitsضمن المصفوفات المُرجعة لمزيد من التفاصيل. - return_dict_in_generate (
bool) — ما إذا كان يجب إرجاع ModelOutput أم إرجاع التسلسل المولَّد فقط. يجب ضبط هذا العلم علىTrueلإرجاع ذاكرة التخزين المؤقت للتوليد (عندما يكونuse_cacheهوTrue) أو المخرجات الاختيارية (انظر الأعلام التي تبدأ بـoutput_)
رموز خاصة يمكن استخدامها أثناء التوليد
- pad_token_id (
int, اختياري) — المعرّف الخاص برموز الحشو. - bos_token_id (
int, اختياري) — المعرّف الخاص برمz بداية التسلسل. - eos_token_id (
Union[int, list[int]], اختياري) — المعرّف الخاص برموز نهاية التسلسل. يمكن اختيارياً استخدام قائمة لتحديد عدة رموز نهاية التسلسل.
معاملات التوليد الحصرية لنماذج المُشفِّر-المُفكِّك
- encoder_no_repeat_ngram_size (
int, اختياري) — إذا تم تعيينه إلى int > 0، فلا يمكن أن تظهر جميع ngrams من ذلك الحجم التي توجد فيencoder_input_idsفيdecoder_input_ids. - decoder_start_token_id (
intأوlist[int]، اختياري) — إذا بدأ نموذج المُشفِّر-المُفكِّك عملية فك التشفير برمز مختلف عن bos، فيُستخدم معرّف ذلك الرمز أو قائمة بطولbatch_size. يُتيح استخدام قائمة تحديد معرّفات بداية مختلفة لكل عنصر في الدفعة (مثلًا، النماذج متعددة اللغات التي تحتوي على لغات هدف مختلفة في دفعة واحدة)
معاملات التوليد الحصرية لتوليد المساعد
- is_assistant (
bool) — ما إذا كان النموذج نموذجًا مساعدًا (مسودة). - num_assistant_tokens (
int, اختياري) — يحدد عدد الرموز التخمينية التي يجب أن يولدها نموذج المساعد قبل أن يفحصها النموذج المستهدف في كل تكرار. تزيد القيم الأعلى لـnum_assistant_tokensمن التخمينية في عملية التوليد: إذا كان نموذج المساعد ذا أداء عالٍ، يمكن تحقيق تسارعات أكبر، أما إذا احتاج نموذج المساعد إلى تصحيحات كثيرة، فإن التسارعات المحققة ستكون أقل. - num_assistant_tokens_schedule (
str, اختياري) — يحدد الجدول الزمني لتغيير الحد الأقصى لعدد رموز المساعد أثناء الاستدلال."heuristic": عندما تكون جميع الرموز التخمينية صحيحة، يُزادnum_assistant_tokensبمقدار 2، وإلا يُنقص بمقدار 1. قيمةnum_assistant_tokensتبقى ثابتة عبر عدة استدعاءات للتوليد باستخدام نفس نموذج المساعد."heuristic_transient": مماثل لـ"heuristic"لكنnum_assistant_tokensيُعاد ضبطه إلى قيمته الأولية بعد كل استدعاء للتوليد."constant": يبقىnum_assistant_tokensدون تغيير أثناء التوليد
- assistant_confidence_threshold (
float، اختياري) — حد الثقة لنموذج المساعد. إذا كانت ثقة نموذج المساعد في توقعه للرمز الحالي أقل من هذا الحد، يتوقف نموذج المساعد عن تكرار توليد الرمز الحالي، حتى لو لم يتم بعد الوصول إلى عدد الرموز التخمينية (المعرّف بواسطةnum_assistant_tokens). يتم ضبط حد ثقة المساعد على مدار التكرارات التخمينية لتقليل عدد عمليات المرور الأمامي غير الضرورية للمسودة والهدف، مع ميل لتجنب السلبات الخاطئة. قيمةassistant_confidence_thresholdدائمة عبر عدة استدعاءات للتوليد باستخدام نفس نموذج المساعد. إنه نسخة غير مُشرَفة من الاستباق الديناميكي للنظر إلى الأمام من Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models https://huggingface.co/papers/2405.04304. - prompt_lookup_num_tokens (
int، اختياري) — عدد الرموز التي سيتم إخراجها كرموز مرشحة. - max_matching_ngram_size (
int، اختياري) — أقصى حجم لـ ngram يُؤخذ في الاعتبار عند المطابقة في الاستدعاء. القيمة الافتراضية هي 2 إذا لم يُحدد. - assistant_early_exit(
int, optional) — إذا تم تعيينه إلى عدد صحيح موجب، فسيتم استخدام الخروج المبكر للنموذج كمساعد. يمكن استخدامه فقط مع النماذج التي تدعم الخروج المبكر (أي النماذج التي يمكن تفسير logits من الطبقات الوسيطة بواسطة رأس LM). - assistant_lookbehind(
int, اختياري) — إذا تم تعيينه إلى عدد صحيح موجب، فإن عملية إعادة الترميز ستأخذ في الاعتبار أيضًا آخرassistant_lookbehindمن رموز المساعد لمحاذاة الرموز بشكل صحيح. يمكن استخدامه فقط مع مُرمّزات مختلفة في فك التشفير التخميني. راجع هذا المدونة لمزيد من التفاصيل. - target_lookbehind(
int, اختياري) — إذا تم تعيينه إلى عدد صحيح موجب، فإن عملية الترميز التكراري ستأخذ في الاعتبار أيضًا آخرtarget_lookbehindمن رموز الهدف لمحاذاة الرموز بشكل صحيح. لا يمكن استخدامه إلا مع مُرمّزات مختلفة في فك التشفير التخميني. راجع هذا المدونة لمزيد من التفاصيل. - assistant_ensemble_weight (
float, اختياري) — يُفعّل التحقق من التجميع الثابت في فك التشفير التخميني. إذا تم تعيينه إلى قيمة ضمن(0.0, 1.0)، يقبل المُتحقِّق الرموز مقابل الخليطw * p_target + (1 - w) * q_draftبدلاً منp_target، مما يقدّم انحيازاً توزيعياً مُتحكَّماً فيه مقابل معدل قبول أعلى. القيمة الافتراضية هيNone، مما يحافظ على فك التشفير دون فقدان. يتطلب أن تُعيد نموذج المساعد القيم اللوغاريتمية (logits)، لذا فهو غير متوافق مع فك التشفير عبر البحث في الاستدعاء (prompt lookup decoding). - speculation_type (
str، اختياري) — نوع التخمين المطلوب. القيم المقبولة هيdflash.
المعاملات المتعلقة بالأداء والتجميع
- compile_config (CompileConfig، اختياري) —
عند استخدام ذاكرة تخزين مؤقتة قابلة للتجميع، يتحكم هذا في كيفية قيام
generateبتجميعcompileالمرور الأمامي للحصول على استدلال أسرع. - disable_compile (
bool) — ما إذا كان سيتم تعطيل التجميع التلقائي لمرور الأمامي. يحدث التجميع التلقائي عند استيفاء معايير محددة، بما في ذلك استخدام ذاكرة تخزين مؤقت قابلة للتجميع. يرجى فتح مشكلة إذا وجدتَ حاجةً لاستخدام هذا العلم.
فئة تحتوي على إعدادات لمهمة توليد. يدعم استدعاء generate طرق التوليد التالية
للنماذج التي تعمل على فك ترميز النص، والنص إلى نص، والكلام إلى نص، والرؤية إلى نص:
- فك الترميز الجشع إذا كان
num_beams=1وdo_sample=False - العينة متعددة الحدود إذا كان
num_beams=1وdo_sample=True - فك الترميز بالبحث الحزمي إذا كان
num_beams>1وdo_sample=False - عينة متعددة الحدود البحث الحزمي إذا كان
num_beams>1وdo_sample=True - التفكيك بمساعدة إذا تم تمرير
assistant_modelأوprompt_lookup_num_tokensإلى.generate()
للاطلاع على مزيد من المعلومات حول استراتيجيات فك الترميز، يُرجى الرجوع إلى دليل استراتيجيات توليد النص.
تتحكم مجموعة كبيرة من هذه الأعلام في القيم الأولية (logits) أو معايير التوقف للتوليد. تأكد من الاطلاع على الفئات المتعلقة بالتوليد للحصول على وصف كامل للتعديلات الممكنة، وكذلك أمثلة على استخدامها.
ملاحظة: ستتم تجاوز حقول الإعدادات التي لا تزال None بواسطة GenerationConfig._get_default_generation_params() أثناء حلقة التوليد. إذا كنت ترغب في استخدام قيم مختلفة لهذه الحقول، فتأكد من تعيينها صراحةً في إعدادات التوليد.
from_pretrained
< source >( pretrained_model_name: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs ) → GenerationConfig
المعاملات
- pretrained_model_name (
strأوos.PathLike) — يمكن أن يكون هذا:- سلسلة نصية، وهي معرّف النموذج لإعدادات نموذج مُدرَّب مسبقًا مستضاف داخل مستودع نموذج على huggingface.co.
- مسار إلى مجلد يحتوي على ملف إعدادات تم حفظه باستخدام طريقة save_pretrained()، على سبيل المثال
./my_model_directory/.
- config_file_name (
strأوos.PathLike، اختياري، القيمة الافتراضية"generation_config.json") — اسم ملف تكوين التوليد بصيغة JSON الذي سيتم تحميله منpretrained_model_name. - cache_dir (
strأوos.PathLike، اختياري) — المسار إلى مجلد يجب تخزين إعدادات النموذج المسبق التدريب المُحمّل فيه مؤقتًا إذا لم يُستخدم المجلد المؤقت القياسي. - force_download (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب إجبار إعادة تنزيل ملفات الإعدادات وتجاوز النسخ المخزنة مؤقتاً في حال وجودها. - proxies (
dict[str, str], اختياري) — قاموس لخوادم الوكيل (proxy) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.تُستخدم هذه الوكلاء في كل طلب. - token (
strأوbool، اختياري) — الرمز الذي يُستخدم كتفويض حامل HTTP للملفات البعيدة. إذا كانTrue، أو لم يُحدد، فسيتم استخدام الرمز الذي تم إنشاؤه عند تشغيلhf auth login(المخزَّن في~/.huggingface). - revision (
str, اختياري, الافتراضي هو"main") — إصدار النموذج المحدد الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرف التزامن (commit id)، حيث نستخدم نظامًا قائمًا على git لتخزين النماذج والموارد الأخرى على huggingface.co، لذاrevisionيمكن أن يكون أي معرّف يسمح به git.لاختبار طلب سحب قمت بإنشائه على Hub، يمكنك تمرير
revision="refs/pr/<pr_number>". - return_unused_kwargs (
bool, اختياري, الافتراضي هوFalse) — إذا كانFalse, فإن هذه الدالة تُرجع كائن الإعداد النهائي فقط. إذا كان True، فإن هذه الدالة تُرجع Tuple(config, unused_kwargs) حيث unused_kwargs هو قاموس يتكون من أزواج المفاتيح والقيم التي مفاتيحها ليست من سمات الإعداد: أي الجزء من kwargs الذي لم يُستخدم لتحديث config ويُتجاهل في الحالات الأخرى.إذا كانت
True، فإن هذه الدالة تُرجعTuple(config, unused_kwargs)حيث unused_kwargs هو قاموس يتكوّن من أزواج المفاتيح والقيم التي لا تُعدّ مفاتيحها من سمات الإعداد: أي الجزء منkwargsالذي لم يُستخدم لتحديثconfigويُتجاهل في حالته الأخرى. - subfolder (
str، اختياري، الافتراضي"") — في حال كانت الملفات ذات الصلة موجودة داخل مجلد فرعي من مستودع النموذج على huggingface.co، يمكنك تحديد اسم المجلد هنا. - kwargs (
dict[str, Any]، اختياري) — تُستخدم القيم الموجودة في kwargs لأي مفاتيح تكون من سمات الإعداد لتجاوز القيم المحمّلة. يتم التحكم في السلوك المتعلق بالأزواج المفتاح/قيمة التي مفاتيحها ليست من سمات الإعداد بواسطة معامل الكلمة المفتاحيةreturn_unused_kwargs.
يعيد
كائن الإعداد المُستخدَم من هذا النموذج المُسبق التدريب.
أنشئ كائن GenerationConfig من ملف إعدادات التوليد.
أمثلة:
>>> from transformers import GenerationConfig
>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")
>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")
>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")
>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
... "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1
>>> unused_kwargs
{'foo': False}from_model_config
< source >( model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict] ) → GenerationConfig
المعاملات
يعيد
كائن الإعداد المُستخدَم من تلك المعاملات.
يُحدِث كائن GenerationConfig من PreTrainedConfig. تُعد هذه الدالة مفيدة لتحويل كائنات PreTrainedConfig القديمة، التي قد تحتوي على معاملات توليد، إلى GenerationConfig مستقل.
save_pretrained
< source >( save_directory: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonepush_to_hub: bool = False**kwargs )
المعاملات
- save_directory (
strأوos.PathLike) — المجلد الذي سيتم حفظ ملف الإعدادات بصيغة JSON فيه (سيتم إنشاؤه إذا لم يكن موجودًا). - config_file_name (
strأوos.PathLike، اختياري، القيمة الافتراضية"generation_config.json") — اسم ملف JSON الخاص بإعدادات التوليد الذي سيتم حفظه فيsave_directory. - push_to_hub (
bool، اختياري، الافتراضيFalse) — ما إذا كان سيتم دفع نموذجك إلى مركز نماذج Hugging Face بعد حفظه. يمكنك تحديد المستودع الذي تريد الدفع إليه باستخدامrepo_id(سيكون الافتراضي هو اسمsave_directoryفي نطاقك). - kwargs (
dict[str, Any]، اختياري) — حجج إضافية بأسماء تُمرَّر إلى طريقة push_to_hub().
احفظ كائن إعدادات التوليد في المجلد save_directory حتى يمكن إعادة تحميله باستخدام طريقة الفئة from_pretrained().
تحديث
< source >( defaults_only = Falseallow_custom_entries = False**kwargs ) → dict[str, Any]
المعاملات
- defaults_only (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تحديث جميع المفاتيح في الإعدادات باستخدامkwargsأم فقط تلك التي قيمتهاNone(أي القيمة الافتراضية). - allow_custom_entries (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يُسمح بتحديث إدخالات مخصصة في الإعدادات باستخدامkwargsإذا لم تكن موجودة في الإعدادات الحالية. - kwargs (
dict[str, Any]) — قاموس من السمات لتحديث هذا الصنف بشكل مؤقت.
يعيد
dict[str, Any]
قاموس يحتوي على جميع أزواج المفتاح والقيمة التي لم تُستخدم لتحديث الكائن.
تحديث خصائص هذا المثال من الفئة بخصائص من kwargs إذا كانت مطابقة لخصائص موجودة، مع إرجاع جميع خصائص kwargs غير المستخدمة.
validate
< source >( strict = Falseuser_set_attributes: set[str] | None = None )
المعاملات
- strict (bool) — إذا كانت القيمة True، فسيتم رفع استثناء لأي مشكلة يتم العثور عليها. أما إذا كانت False، فسيتم تسجيل المشكلات فقط.
- user_set_attributes (set[str], اختياري) — أسماء السمات التي حددها المستدعي صراحةً. عند توفيرها، لا تُطلق تحذيرات «المشكلة البسيطة» المتعلقة بتعارضات تركيبات الأعلام (مثل ضبط أعلام خاصة بالتعيّن فقط بينما
do_sample=False) إلا إذا كان العلم المتعارض ضمن هذا المجموع — وذلك لتجنّب تحذيرات مزعجة عندما تكون القيمة موروثة من ملفgeneration_config.jsonالافتراضي للنموذج. عند أن تكونNone، تُعتبر جميع السمات المضبوطة محددةً من قِبل المستخدم (سلوك متوافق مع الإصدارات السابقة لاستدعاءاتvalidate()المباشرة).
يتحقق من قيم سمات كائن GenerationConfig. يرمي استثناءات في حال وجود تهيئة معلمات يمكن اكتشافها على أنها غير صحيحة من كائن الإعداد وحده.
لاحظ أن بعض المعاملات التي لا يتم التحقق منها هنا يُفضَّل التحقق منها في وقت التشغيل عند التوليد، إذ قد تعتمد على مدخلات أخرى و/أو على النموذج، مثل المعاملات المتعلقة بطول التوليد.
get_generation_mode
< source >( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode
يعيد وضع التوليد الذي يُفعَّل بواسطة كائن GenerationConfig.
GenerationMixin
فئة تحتوي على جميع الدوال الخاصة بتوليد النص التلقائي (auto-regressive)، وتُستخدم كخلطة (mixin) في فئات النماذج.
الوراثة من هذه الفئة تمنح النموذج سلوكًا خاصًا يتعلق بالتوليد، مثل تحميل GenerationConfig عند وقت التهيئة، أو التأكد من تشغيل الاختبارات المتعلقة بـgenerate في بيئة transformers CI.
يجب أن ترث فئة النموذج من GenerationMixin لتفعيل استدعاء طرق مثل generate، أو عندما تكون قد عرّفت طريقة generate مخصصة تعتمد على GenerationMixin بشكل مباشر أو غير مباشر، والتي تشترك تقريبًا في نفس الواجهة مع طرق عامة مثل generate. ثلاثة أمثلة:
- يجب أن يرث
LlamaForCausalLMمنGenerationMixinلتفعيل استدعاءgenerateوغيرها من الطرق العامة في المخلوطة؛ - يتميز
BlipForQuestionAnsweringبطريقةgenerateمخصصة تشترك تقريبًا في نفس الواجهة معGenerationMixin.generate(فإنها تحتوي على بعض الحُجج الإضافية، وتُنتج نفس المخرجات). كما تستدعي تلك الدالةGenerationMixin.generateبشكل غير مباشر، من خلال نموذج داخلي. وعليه، ينبغي أن يرثBlipForQuestionAnsweringمنGenerationMixinللاستفادة من جميع أتمتة المهام المتعلقة بالتوليد في قاعدة أكوادنا؛ - يتميز
BarkModelبطريقةgenerateمخصصة، ويستدعي أحد نماذجه الداخليةGenerationMixin.generate. ومع ذلك، لا تشارك طريقةgenerateالخاصة به نفس الواجهة التي تشاركهاGenerationMixin.generate. في هذه الحالة، يجب ألا يرثBarkModelمنGenerationMixin، لأن ذلك يكسر واجهةgenerate.
تُعرّض الفئة generate()، والتي يمكن استخدامها لـ:
- فك الترميز الجشع إذا كان
num_beams=1وdo_sample=False - العينة متعددة الحدود إذا كان
num_beams=1وdo_sample=True - فك الترميز بالبحث الحزمي إذا كان
num_beams>1وdo_sample=False - عينة متعددة الحدود البحث الحزمي إذا كان
num_beams>1وdo_sample=True - التفكيك بمساعدة إذا تم تمرير
assistant_modelأوprompt_lookup_num_tokensإلى.generate()
للاطلاع على مزيد من المعلومات حول استراتيجيات فك الترميز، يُرجى الرجوع إلى دليل استراتيجيات توليد النص.
generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
المعاملات
- inputs (
torch.Tensorبأشكال متغيرة حسب النمط، اختياري) — التسلسل المستخدم كموجّه للتوليد أو كمدخلات للنموذج إلى المُشفِّر. إذا كانتNoneفسيُهيّئ الدالة هذا التسلسل باستخدامbos_token_idوحجم دفعة يساوي 1. بالنسبة لنماذج المُفكِّك فقط، يجب أن تكونinputsبصيغةinput_ids. أما بالنسبة لنماذج المُشفِّر-المُفكِّك، فيمكن أن يمثل inputs أيّاً منinput_idsأوinput_valuesأوinput_featuresأوpixel_values. - generation_config (GenerationConfig, اختياري) —
إعدادات التوليد التي تُستخدم كإعدادات أساسية لاستدعاء التوليد. أي
**kwargsمرر إلى generate تطابق سماتgeneration_configستُلغي قيمها. إذا لم يُقدَّمgeneration_config، فسيُستخدم الإعداد الافتراضي، الذي له أولوية تحميل كالتالي: 1) من ملف النموذجgeneration_config.json، إن وُجد؛ 2) من إعدادات النموذج. يُرجى ملاحظة أن المعاملات غير المحددة ستورث القيم الافتراضية لـ GenerationConfig، والتي يجب الرجوع إلى توثيقها لتهيئة التوليد. - logits_processor (
LogitsProcessorList، اختياري) — معالجات logits مخصصة تكمل المعالجات الافتراضية المبنية من المعاملات وإعدادات التوليد. إذا تم تمرير معالج logits تم إنشاؤه مسبقًا باستخدام المعاملات أو إعدادات التوليد، فسيتم طرح خطأ. هذه الميزة مخصصة للمستخدمين المتقدمين. - stopping_criteria (
StoppingCriteriaList، اختياري) — معايير إيقاف مخصصة تكمل معايير الإيقاف الافتراضية المبنية من الحجج وإعدادات التوليد. إذا تم تمرير معيار إيقاف تم إنشاؤه مسبقًا باستخدام الحجج أو إعدادات التوليد، فسيتم طرح خطأ. إذا كان معيار الإيقاف الخاص بك يعتمد على مدخلscores، فتأكد من تمريرreturn_dict_in_generate=True, output_scores=Trueإلىgenerate. هذه الميزة مخصصة للمستخدمين المتقدمين. - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]، اختياري) — إذا تم توفيره، فإن هذه الدالة تُقيّد بحث الحزمة (beam search) على الرموز المسموح بها فقط في كل خطوة. إذا لم يُوفَّر، فلا يُطبَّق أي قيد. تستقبل هذه الدالة حجتين: معرّف الدفعةbatch_idوinput_ids. يجب أن تُرجع قائمة بالرموز المسموح بها لخطوة التوليد التالية، مشروطةً بمعرّف الدفعةbatch_idوالرموز المولَّدة سابقًاinputs_ids. يُعدّ هذا الحُجّة مفيدًا للتوليد المقيد المشروط على البادئة، كما هو موصوف في Autoregressive Entity Retrieval. - synced_gpus (
bool, اختياري) — ما إذا كان يجب مواصلة تشغيل حلقة while حتى max_length. ما لم يتم تجاوز هذا العلم، فسيتم تعيينه إلىTrueعند استخدامFullyShardedDataParallelأو DeepSpeed ZeRO Stage 3 مع عدة وحدات معالجة رسومية لتجنب التعطّل إذا انتهت وحدة معالجة رسومية واحدة من التوليد قبل وحدات المعالجة الرسومية الأخرى. وإلا، فالقيمة الافتراضية هيFalse. - assistant_model (
PreTrainedModel، اختياري) — نموذج مساعد يمكن استخدامه لتسريع عملية التوليد. يجب أن يكون لدى النموذج المساعد نفس المرمّز (tokenizer) تمامًا. يتحقق التسريع عندما يكون التنبؤ بالرموز المرشحة باستخدام النموذج المساعد أسرع بكثير من تشغيل التوليد باستخدام النموذج الذي تستدعي منه generate. وعليه، يجب أن يكون النموذج المساعد أصغر بكثير. - streamer (
BaseStreamer، اختياري) — كائن Streamer الذي سيُستخدم لبثّ التسلسلات المولّدة. يتم تمرير الرموز المولّدة عبرstreamer.put(token_ids)، ويتحمّل الـ streamer مسؤولية أي معالجة إضافية. - negative_prompt_ids (
torch.LongTensorمن الشكل(batch_size, sequence_length)، اختياري) — الموجّه السلبي المطلوب لبعض المعالجات مثل CFG. يجب أن يتطابق حجم الدفعة مع حجم دفعة الإدخال. هذه ميزة تجريبية، وقد تخضع لتغييرات كاسرة في واجهة برمجة التطبيقات في الإصدارات المستقبلية. - negative_prompt_attention_mask (
torch.LongTensorof shape(batch_size, sequence_length), اختياري) — Attention_mask الخاص بـnegative_prompt_ids. - custom_generate (
strأوCallable, اختياري) — أحد ما يلي:str(اسم مستودع Hugging Face Hub): يشغّل دالةgenerateالمخصصة المعرّفة فيcustom_generate/generate.pyداخل ذلك المستودع بدلاً من طريقةgenerateالقياسية. يستبدل المستودع منطق التوليد بالكامل، وقد يختلف نوع الإرجاع.str(مسار المستودع المحلي): نفس ما سبق لكن من مسار محلي. كما تتطلب المجلدات المحليةtrust_remote_code=Trueلأنcustom_generate/generate.pyالمحلي يُنفَّذ.Callable: سيقومgenerateبتنفيذ خطوات إعداد المدخلات المعتادة، ثم استدعاء الدالة القابلة للاستدعاء المُقدَّمة لتشغيل حلقة فك الترميز. لمزيد من المعلومات، راجع التوثيق.
- kwargs (
dict[str, Any], اختياري) — تحديد معلمات بشكل مؤقت لـgeneration_configو/أو معلمات إضافية خاصة بالنموذج سيتم تحويلها إلى دالةforwardالخاصة بالنموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب عدم إضافة بادئة للمعلمات الخاصة بالمُشفِّر، بينما يجب إضافة بادئة decoder_ للمعلمات الخاصة بالمُفكِّك.
يعيد
ModelOutput أو torch.LongTensor
ModelOutput (إذا كان return_dict_in_generate=True
أو عندما يكون config.return_dict_in_generate=True) أو torch.LongTensor.
إذا لم يكن النموذج نموذجاً من نوع المُشفِّر-المُفكِّك (model.config.is_encoder_decoder=False)، فإن أنواع ModelOutput الممكنة هي:
إذا كان النموذج من نوع مُشفِّر-مُفكِّك (encoder-decoder) (model.config.is_encoder_decoder=True)، فإن أنواع ModelOutput الممكنة هي:
يولّد تسلسلات من معرّفات الرموز (token ids) للنماذج التي تحتوي على رأس لنمذجة اللغة.
تُضبط معظم المعلمات التي تتحكم في التوليد في
generation_config، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعدادات التوليد الافتراضية للنموذج. يمكنك تجاوز أيgeneration_configعن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال.generate(inputs, num_beams=4, do_sample=True).لمراجعة عامة لاستراتيجيات التوليد وأمثلة الأكواد، راجع الدليل التالي.
compute_transition_scores
< source >( sequences: Tensorscores: tuplebeam_indices: typing.Optional[torch.Tensor] = Nonenormalize_logits: bool = False ) → torch.Tensor
المعاملات
- sequences (
torch.LongTensor) — التسلسلات المولّدة. يكون البُعد الثاني (sequence_length) مساوياً لـmax_lengthأو أقصر منه إذا انتهت جميع الدفعات مبكراً بسببeos_token_id. - scores (
tuple(torch.Tensor)) — درجات الانتقال لكل رمز في قاموس اللغة في كل خطوة من خطوات التوليد. تتكون درجات الانتقال في الحزمة (Beam) من احتمالات السجلات (log probabilities) للرموز المشروطة على لوج سوفتماكس (log softmax) للرموز المولدة سابقًا في هذه الحزمة. مجموعة (Tuple) منtorch.Tensorتحتوي على ما يصل إلىmax_new_tokensعنصرًا (عنصر واحد لكل رمز مولّد)، حيث يكون شكل كل متجه(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor، اختياري) — فهارس الحزم (Beam indices) لمعرّف الرمز المولّد في كل خطوة من خطوات التوليد.torch.LongTensorمن الشكل(batch_size*num_return_sequences, sequence_length). مطلوب فقط إذا كانnum_beams>1في وقت التوليد. - normalize_logits (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب تطبيع القيم اللوجستية (logits) (والتي قد تكون غير مطبّعة لأسباب تتعلق بالتوافق مع الإصدارات القديمة).
يعيد
torch.Tensor
A torch.Tensor of shape (batch_size*num_return_sequences, sequence_length) containing
the transition scores (logits)
يحسب درجات الانتقال للترتيبات المعطاة درجات التوليد (ومؤشرات الحزمة إذا تم استخدام بحث الحزمة). هذه طريقة مريحة للحصول بسرعة على درجات الرموز المختارة أثناء التوليد.
أمثلة:
>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np
>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")
>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
... # | token | token string | log probability | probability
... print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
| 262 | the | -1.414 | 24.33%
| 1110 | day | -2.609 | 7.36%
| 618 | when | -2.010 | 13.40%
| 356 | we | -1.859 | 15.58%
| 460 | can | -2.508 | 8.14%
>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
... **inputs,
... max_new_tokens=5,
... num_beams=4,
... num_return_sequences=4,
... return_dict_in_generate=True,
... output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
TrueContinuousMixin
فئة مزيج (Mixin) للنماذج لإضافة قدرات الدفع المستمر (Continuous Batching). يحتوي الدفع المستمر على ثلاث نقاط دخول:
init_continuous_batching، وهو نقطة الدخول الفعلية للتجميع المستمرcontinuous_batching_context_manager، وهو نفسه غلاف حولinit_continuous_batchinggenerate_batch، وهو في الواقع غلاف حولcontinuous_batching_context_manager
يُعرَّفون بهذا الترتيب. يجب أن يُعكس أي تغيير يُجرى على أيٍّ من نقاط الدخول الثلاث في النقطتين الأخريين.
continuous_batching_context_manager
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Noneblock: bool = Truetimeout: float | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonepersistent_manager: bool = Falsewarmup: bool = Trueworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
مدير سياق لاستخدام مدير الدفع المستمر بأمان. تتشابه الحجج مع تلك الخاصة بـ init_continuous_batching باستثناء:
- block: ما إذا كان يجب منع الخيط (thread) عند إيقاف المدير. القيمة الافتراضية هي True.
- timeout: الحد الأقصى للوقت الذي يجب انتظاره حتى يتوقف الخيط. القيمة الافتراضية هي None (بدون مهلة زمنية).
- warmup: ما إذا كان يجب التقاط رسوميات CUDA مسبقاً عند أكبر الأحجام قبل التشغيل. القيمة الافتراضية هي True.
تدمير مدير الدفع المستمر المخزّن مؤقتاً وتحرير موارد وحدة معالجة الرسوميات.
generate_batch
< source >( inputs: listgeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonerecord_timestamps: bool = Falseprogress_bar: bool = Falsepersistent_manager: bool = Falsewarmup: bool = True**kwargs ) → dict[str, GenerationOutput]
المعاملات
- inputs — قائمة تسلسلات الرموز المدخلة (الموجّهات)
- generation_config — تكوين توليد اختياري
- continuous_batching_config — تكوين اختيارية للتجميع المستمر
- record_timestamps — إذا تم ضبطه على true، فستحتوي الطلبات على طابع زمني لكل رمز يتم توليده
- progress_bar — إذا تم ضبطه على true، فسيتم عرض شريط تقدم
- persistent_manager — ما إذا كان يجب الإبقاء على المُدير بعد انتهاء التوليد. القيمة الافتراضية هي False.
- warmup — ما إذا كان يجب التقاط رسوميات CUDA مسبقًا قبل معالجة الطلبات. القيمة الافتراضية هي True.
يعيد
dict[str, GenerationOutput]
قاموس من معرّفات الطلبات إلى كائنات GenerationOutput
أنشئ تسلسلات لدفعة من الأوامر باستخدام الدفع المستمر.
init_continuous_batching
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Noneworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None ) → ContinuousBatchingManager
المعاملات
- generation_config — تكوين توليد اختياري، قد يحتوي على كائن CompileConfig
- continuous_batching_config — تكوين اختياري للتجميع المستمر
- workload_hints — WorkloadHints اختيارية لمساعدة مدير الدفع المستمر (continuous batching) على اتخاذ قرارات أفضل للقيم الافتراضية
يعيد
ContinuousBatchingManager
مثيل المدير لإضافة الطلبات واسترجاع النتائج.
قم بتهيئة مدير للاستدلال مع الدفع المستمر.
ContinuousBatchingManager
فئة transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
مديرٌ للتعامل مع الدفع المستمر لطلبات التوليد. يوفر واجهة مستخدم لتقديم طلبات التوليد، واستخراج النتائج، وإدارة خيط التوليد في الخلفية. يجب ألا يتم إنشاء هذا الصنف مباشرةً، بل من خلال أحد نقاط الدخول التالية (جميعها طرق من مزيج ContinuousMixin):
init_continuous_batchingcontinuous_batching_context_managergenerate_batch
add_request
< source >( input_ids: listrequest_id: str | None = Nonemax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = Falseeos_token_id: int | list[int] | None = None**logit_processor_kwargs: Any ) → str | None
المعاملات
- input_ids — معرّفات الرموز المدخلة التي تُستخدم كموجّه
- request_id — معرّف طلب مخصص اختياري (يتم توليده تلقائيًا إذا كان فارغًا)
- max_new_tokens — الحد الأقصى لعدد الرموز الجديدة التي سيتم توليدها
- streaming — ما إذا كان سيتم بث الرموز أثناء توليدها
- record_timestamps — ما إذا كان سيتم تسجيل الطوابع الزمنية لكل رمز مُولَّد
- eos_token_id — معرفات رمز نهاية التسلسل
- logit_processor_kwargs — معاملات الكلمات المفتاحية لمعالج القيم الاحتمالية (logits).
يعيد
str | None
معرّف الطلب إذا كان العملية سائق TP، وإلا فهي None.
أضف طلب توليد جديدًا إلى قائمة الانتظار. إذا لم يكن العملية سائق TP، فإن هذا إجراء لا شيء.
add_requests
< source >( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
دالة مساعدة لتجميع add_request وإرجاع معرّفاتها. راجع توثيقها لمزيد من التفاصيل.
إلغاء طلب معرّفه ID. إذا تم استدعاء هذه العملية من عملية ليست سائق TP، فإنها لا تؤدي أي إجراء: فعمليات سائق TP فقط هي التي تتفاعل مع المدير.
أنهِ المدير وأطلق الموارد الموزعة. يُعدّ استدعاء هذه الدالة عدة مرات آمناً. بعد استدعائها، لا يمكن إعادة تشغيل المدير.
استرجاع نتيجة واحدة من طابور المخرجات. إذا تم توفير معرّف، تُرجع أول طلب مطابق. إذا تم توفير مهلة زمنية، تُرجع None بعد انتهاء المهلة (بالثواني).
يعيد True إذا كان خيط توليد الخلفية قد بدأ وما زال نشطًا.
انتظر حتى ينتهي الخيط في الخلفية. يمكن تحديد حد أقصى لـ Wait باستخدام معامل timeout (بالثواني).
مدير سياق يوقف حلقة التوليد، مما يتيح للخييط المستدعي استخدام النموذج، وعادةً لتحديثه في مكانه. لا يدخل الخيط هذا السياق إلا بعد إيقاف الحلقة مؤقتاً، وتُستأنف الحلقة عند الخروج منه، مع الحفاظ على ذاكرتها المؤقتة وطلباتها الجارية: لا يتم تصريف أي شيء ولا تُفقد أي طلب. قد يحتفظ عدة خيوط بإيقاف الحلقة في الوقت نفسه، وتُستأنف الحلقة بمجرد خروج آخر خيط. إذا كان TP مفعلاً، فيجب على جميع الرتب الدخول إلى هذا السياق، وإلا ستعلق الرتب الأخرى إلى الأبد.
register_result_handler
< source >( request_id: strcallback: Callable )
سجّل مستدعٍ (callback) لتسليم النتائج (بثّ متواصل أو غير متواصل).
يتم استدعاء مُعيد الاستدعاء (callback) عبر حلقة الأحداث (event loop) بواسطة call_soon_threadsafe في كل مرة يُنتج فيها نتيجة لهذا الطلب. ففي حالات الطلبات التدفّقية (streaming)، يحدث ذلك عند كل رمز (token)؛ أما في الطلبات غير التدفّقية، فيحدث فقط عند اكتمال الطلب. كما يتم تنظيف المُعالِج (handler) تلقائياً عند انتهاء الطلب.
التكرار على النتائج المطابقة لـ request id معيّن (حجب).
يستخدم طابور المخرجات المشترك مع إعادة الطابور. لخدمة عالية التوازي، استخدم register_result_handler بدلاً من ذلك.
ابدأ خيط توليد الخلفية.
إيقاف
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
أوقف خيط التوليد في الخلفية. إذا تم تعيين علم block إلى True، فإن هذه الطريقة تنتظر توقف الخيط لمدة قصوى تبلغ timeout ثانية (حيث يعني None عدم وجود مهلة زمنية). إذا تم تعيين علم keep_for_next_session إلى True، يتم تخزين المدير مؤقتًا على النموذج للاستخدام في المستقبل. إذا تم تعيين علم hard_stop، فسيتم إيقاف خيط التوليد في الخلفية فورًا وستفشل الطلبات المعلقة.
switch_to_cb_friendly_attn
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
بدّل تنفيذ attn إلى تنفيذ متوافق مع CB. إذا كان auto_switch_to_flash بقيمة True، وكان تنفيذ attn هو SDPA أو eager، فبدّل أيضاً إلى flash إذا كان مدعوماً ومتوفراً.
التقاط مسارات CUDA graphs مسبقًا لمسارات varlen و decode من خلال تشغيل دفعات وهمية. يقوم بمعالج الدفعة (batch processor) إذا لم يتم ذلك بعد.
المجدول
فئة transformers.generation.Scheduler
< source >( cache: PagedAttentionCachesafety_margin: floatmax_requests_per_batch: int )
فئة أساسية مجردة لجدولة الطلبات في معالج الدفعات المستمر. تُدير مجدولات دورة حياة الطلبات من لحظة إضافتها إلى قائمة الانتظار حتى لحظة جدولتها للمعالجة. تنفّذ المجدولات المختلفة استراتيجيات مختلفة لأولوية الطلبات وتجميعها في دفعات.
يضيف طلباً إلى قائمة الانتظار.
إزالة جميع الطلبات الملغاة من طوابير النشطة والانتظار.
تُكمل معالجة الطلب وتُحرر كتل ذاكرة التخزين المؤقت المخصصة له. يُستدعى هذا الأسلوب عندما ينتهي الطلب من التوليد أو عندما يواجه خطأً.
يحصل على الرموز المولّدة لطلب نشط.
يتحقق مما إذا كانت هناك طلبات جاهزة للمعالجة.
يتحقق مما إذا كان الطلب قد أُلغي أو حُذف.
إعادة تعيين حالة المجدول (scheduler) لحلقة توليد جديدة.
يُجدول الطلبات للدفعة التالية بناءً على ميزانيات الرموز والذاكرة المؤقتة المتاحة. تختار هذه الطريقة الطلبات التي يجب معالجتها في الدفعة الحالية، مع مراعاة الميزانيات وقواعد أولوية الجدولة. حيث يمثل token_budget الحد الأقصى لعدد الرموز التي يمكن معالجتها في دفعة واحدة، ويمثل cache_budget الحد الأقصى لعدد إدخالات ذاكرة KV التي يمكن قراءتها في دفعة واحدة. تُرجع قائمة الطلبات المجدولة بصيغة FutureRequestState، وقيمة منطقية تشير إلى ما إذا كان يمكن استخدام مسار فك الترميز السريع، والعدد الإجمالي لرموز الاستعلام، والحد الأقصى لعدد رموز kv التي تم قراءتها.
يشير إلى طلب للإلغاء.
FIFOScheduler
فئة transformers.generation.FIFOScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
يعالج هذا المجدول الطلبات بالترتيب الذي تصل به، مما يعني أن طلبات فك الترميز لها الأولوية على طلبات التمهيد.
PrefillFirstScheduler
فئة transformers.generation.PrefillFirstScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
جدول أولويات يعطي الأولوية لطلبات التمهيد المقسّم على طلبات فك الترميز. يضمن هذا الجدول إكمال طلبات التمهيد المقسّم (وهي استمرارات للموجّهات التي تمّ معالجتها جزئيًا) قبل معالجة طلبات فك الترميز الجديدة.