تسريع مُجزِّئ BERT في Hugging Face بنحو 50 مرة بعد التخلص من العمل الزائد على ASCII

يقسّم المُجزِّئ (tokenizer) النص إلى قطع يفهمها النموذج. ويُعدّ فريق مكتبة tokenizers من Hugging Face إصدار v1.0.0. وفي هذا الإصدار تسارعت مُجزِّئات BPE، المستخدمة في معظم نماذج LLM، حتى 30 مرة. أما مُجزِّئ BERT فتسارع 8,6 مرة، ثم 5,7 مرة أخرى بعد التعديل الجديد. والمحصلة نحو 50 مرة مقارنة بالإصدار 0.23. ولا تزال هذه التغييرات في طلب سحب (pull request) لم يُدمج بعد. أظهر التحليل الأدائي (profiling) أن تطبيع النص يستهلك 88% من الوقت. فقد كان الكود القديم يبحث عن كل حرف، حتى الحرف العادي «s»، في جدول يضم 1567 علامة تمييزية (diacritics). أما الآن فتُفحص كتل ASCII بحجم 16 بايت بتعليمة SIMD واحدة وتُتخطى، بينما تُخزَّن نتيجة بقية الأحرف مؤقتًا في كتل من 256 نقطة ترميز. • ارتفعت السرعة على النص الإنجليزي من 23 إلى 151 ميغابايت/ث، وانخفضت حصة المُطبِّع من 88% إلى 13%. • تسارعت الروسية واليونانية والعربية بمقدار 2,2–3,2 مرة، أما الصينية فلم تتسارع إطلاقًا. • النماذج التي تستخدم مُطبِّع BERT: يجري تنزيل all-MiniLM-L6-v2 نحو 218 مليون مرة شهريًا.

معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
تسريع مُجزِّئ BERT في Hugging Face بنحو 50 مرة بعد التخلص من العمل الزائد على ASCII
المصدر: Habr AI. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليHabr AI ↗
رئيس التحرير
حقيقة رئيسية #1ارتفعت السرعة على النص الإنجليزي من 23 إلى 151 ميغابايت/ث، وانخفضت حصة المُطبِّع من 88% إلى 13%.
حقيقة رئيسية #2تسارعت الروسية واليونانية والعربية بمقدار 2,2–3,2 مرة، أما الصينية فلم تتسارع إطلاقًا.
النماذج التي تستخدم مُطبِّع BERTيجري تنزيل all-MiniLM-L6-v2 نحو 218 مليون مرة شهريًا.

يحوّل المُجزِّئ (tokenizer) السلسلة النصية إلى أرقام تستقبلها الشبكة العصبية. وفي مكتبة tokenizers من Hugging Face كانت هذه المرحلة في نماذج BERT بطيئة دون مبرر. حلّل الفريق أداء الكود (profiling) واكتشف عملًا زائدًا وأزاله. والآن أصبح مُجزِّئ BERT أسرع بنحو 50 مرة مقارنة بالإصدار 0.23. ويتألف هذا الرقم من خطوتين: تسريع بمقدار 8,6 مرة جاء مع التحضير لإصدار v1.0.0، وتسريع إضافي بمقدار 5,7 مرة من التعديل الجديد. ولا يزال هذا التعديل في طلب سحب (pull request). وبالتوازي، تسارعت مُجزِّئات BPE الكلاسيكية، التي تعمل عليها معظم نماذج LLM، حتى 30 مرة.

لماذا يظل BERT القديم مهمًا

صدر BERT في عام 2018، لكن النماذج المنحدرة منه ما زالت في كل مكان: التضمينات (embeddings)، والبحث، وRAG، وأدوات إعادة الترتيب (rerankers)، والمصنِّفات. وتستخدم مُطبِّع BERT النماذج الثلاثة الأكثر تنزيلًا على Hugging Face Hub:

• all-MiniLM-L6-v2: 218 مليون تنزيل شهريًا؛ • المشفّر المتقاطع (cross-encoder) ms-marco-MiniLM-L6-v2: 79 مليونًا؛ • bge-small-en-v1.5: 59 مليونًا.

أما bert-base-uncased نفسه فيحتل المركز السادس بـ 34 مليونًا. وبين أكثر 10 000 نموذج شعبية، يبلغ عدد التنزيلات الشهرية للنماذج القائمة على BPE نحو 842 مليونًا، وللنماذج القائمة على WordPiece (خوارزمية BERT) نحو 627 مليونًا. وأكثر من نصف تنزيلات BPE يذهب إلى مُجزِّئات تطبّق تطبيع Unicode، وغالبًا NFC كما في Qwen أو ModernBERT. وهذه التحسينات تسرّع هذا النوع من التطبيع أيضًا.

أين كان الوقت يضيع

يوحّد التطبيع الصيغ المختلفة لكتابة الحرف نفسه. فمثلًا يمكن كتابة «é» بنقطة ترميز واحدة، أو بالحرف «e» مع علامة تمييز (accent) منفصلة. وبدون التطبيع سيعطي النموذج رموزًا (tokens) مختلفة لهاتين الصيغتين. ويتألف مُطبِّع BERT غير الحساس لحالة الأحرف من خمس خطوات: تنظيف المحارف الضابطة ومحارف المسافات، وإضافة مسافات حول الحروف الصينية، والتحليل وفق NFD، وحذف العلامات التمييزية، والتحويل إلى الأحرف الصغيرة.

أعطى مخطط اللهب (flame graph)، وهو رسم يدل عرض الكتلة فيه على حصة الدالة من الوقت، صورة لا لبس فيها. فقد استهلك المُطبِّع 88% من الوقت، بينما لم يستهلك WordPiece نفسه، الذي يختار الرموز، سوى 8%. وذهب نحو ثلثي الوقت الإجمالي إلى الدالة binary_search_by، التي كانت تتحقق مما إذا كان الحرف علامة قابلة للدمج. وهذا بحث ثنائي في مصفوفة من 1567 حرفًا (6 كيلوبايت)، أي نحو 11 مقارنة مع تفرعات لا يمكن للمعالج التنبؤ بها. وكان البحث يُنفَّذ لكل حرف، بما في ذلك الأحرف اللاتينية العادية «s» و«l» و«o» و«w».

ثلاث حيل «كسولة»

نقطة الانطلاق هي دراسة البيانات. ففي النصوص الحقيقية كثير من ASCII، وتأتي أحرف الكتابة الواحدة متجاورة، ومعظم النص مطبَّع أصلًا. ومن هنا جاءت ثلاثة أساليب.

• تخطي ASCII عبر SIMD. في UTF-8 ينتمي البايت إلى ASCII إذا كان بته الأعلى يساوي صفرًا. يحمّل المعالج 16 بايت، ويجمع البتات العليا في عدد واحد بتعليمة واحدة، ثم يقارنه بالصفر.

فإذا كان صفرًا، يمكن عدم فك ترميز الكتلة كلها، وعدم البحث عنها في الجداول، بل وعدم نسخها. وإذا لم يكن صفرًا، فإن عدّ البتات الصفرية يحدد أول بايت غير لاتيني. كما يجري تحويل الأحرف ASCII الكبيرة إلى صغيرة دفعة واحدة: عبر عملية OR مع 0x20.

• ذاكرة مؤقتة بكتل نقاط الترميز. تشغل الكيريلية 256 نقطة ترميز متتالية (U+0400–U+04FF). وعند أول ظهور لحرف من الكتلة، تحسب الخوارزمية فورًا الإجابة عن سؤال «هل يمكن أن يمسّه التطبيع» لجميع المواضع الـ 256.

وبعد ذلك تكفي قراءة واحدة من الذاكرة. وتشغل الكتلة أربعة أسطر ذاكرة مؤقتة (cache lines) بحجم 64 بايت، وتبقى في أسرع ذاكرة مؤقتة بجوار النواة. • **النسخ الكسول.

** إذا لم يتغير النص، تُعاد السلسلة الأصلية دون تخصيص ذاكرة. وعند أول تعديل تُخصَّص الذاكرة مرة واحدة، وتُنسخ المقاطع التي لم تُمسّ على شكل قطع كبيرة.

ماذا تحقق وأين لم يفد التعديل

على النص الإنجليزي ارتفعت السرعة من 23 إلى 151 ميغابايت/ث مقارنة بالفرع main، وانخفضت حصة المُطبِّع من 88% إلى 13%. وتتطابق الرموز مع النتائج السابقة في جميع المدونات الاختبارية. وكلما زادت حصة ASCII في النص زاد المكسب: فقد تسارعت الإنجليزية والكود المصدري أكثر من غيرهما. وفي الروسية واليونانية والعربية تبلغ حصة ASCII نحو 11%، لكن ذاكرة الكتل المؤقتة أعطت تسريعًا بمقدار 2,2–3,2 مرة. أما في ModernBERT مع NFC فلم تتغير الإنجليزية تقريبًا (1,06 مرة)، لأن ASCII كان يُتخطى هناك من قبل، بينما أصبح الكود والعربية والروسية أسرع بنحو الضعف.

وللنهج نقاط ضعف:

• لم يتسارع النص الصيني: فـ ASCII فيه قليل، وBERT يضع مسافات حول كل حرف صيني على أي حال. • قد تُعالَج السلاسل حتى 32 بايت بشكل أبطأ، لأن التكلفة الإضافية تفوق المكسب. وفي أسوأ الحالات (StripAccents على 8 بايت من الصينية) تنخفض السرعة إلى 0,35 من السرعة السابقة. • بالنسبة للمُطبِّع وحده، لوحظ تباطؤ يتجاوز هامش الخطأ في 55 حالة من 320، منها 19 حالة على مدخلات حتى 32 بايت. • يعالج BERT الحساس لحالة الأحرف النص الصيني أبطأ بنسبة 8–15% عند مدخلات بحجم 64 بايت فأكثر.

والخلاصة للمهندسين بسيطة. إذا كنتم تمرّرون ملايين المستندات عبر MiniLM أو bge لأغراض البحث وRAG، فقد يكون التجزئة على CPU بندًا ملحوظًا في التكاليف، وستنخفض تكلفتها كثيرًا بعد إصدار v1.0.0. أما من يتضمن تدفق بياناتهم كثيرًا من السلاسل القصيرة أو الصينية، فينبغي لهم قياس السرعة على بياناتهم الخاصة.

القصة

أسئلة وأجوبة حول الخبر

ما أبرز التفاصيل حول لماذا يظل BERT القديم مهمًا؟

صدر BERT في عام 2018، لكن النماذج المنحدرة منه ما زالت في كل مكان: التضمينات (embeddings)، والبحث، وRAG، وأدوات إعادة الترتيب (rerankers)، والمصنِّفات. وتستخدم مُطبِّع BERT النماذج الثلاثة الأكثر تنزيلًا على Hugging Face Hub: all-MiniLM-L6-v2: 218 مليون تنزيل شهريًا؛ المشفّر المتقاطع (cross-encoder) ms-marco-MiniLM-L6-v2: 79 مليونًا؛ bge-small-en-v1.5: 59 مليونًا. أما bert-base-uncased نفسه فيحتل المركز السادس بـ 34 مليونًا. وبين أكثر 10 000 نموذج شعبية، يبلغ عدد التنزيلات الشهرية للنماذج القائمة على BPE نحو 842 مليونًا، وللنماذج القائمة على WordPiece (خوارزمية BERT) نحو 62

ما أبرز التفاصيل حول أين كان الوقت يضيع؟

يوحّد التطبيع الصيغ المختلفة لكتابة الحرف نفسه. فمثلًا يمكن كتابة «é» بنقطة ترميز واحدة، أو بالحرف «e» مع علامة تمييز (accent) منفصلة. وبدون التطبيع سيعطي النموذج رموزًا (tokens) مختلفة لهاتين الصيغتين. ويتألف مُطبِّع BERT غير الحساس لحالة الأحرف من خمس خطوات: تنظيف المحارف الضابطة ومحارف المسافات، وإضافة مسافات حول الحروف الصينية، والتحليل وفق NFD، وحذف العلامات التمييزية، والتحويل إلى الأحرف الصغيرة. أعطى مخطط اللهب (flame graph)، وهو رسم يدل عرض الكتلة فيه على حصة الدالة من الوقت، صورة لا لبس فيها. فقد استهلك المُطبِّع 88% من الوقت، بينما لم يستهلك WordPiece نفسه، الذي ي

ما أبرز التفاصيل حول ثلاث حيل «كسولة»؟

نقطة الانطلاق هي دراسة البيانات. ففي النصوص الحقيقية كثير من ASCII، وتأتي أحرف الكتابة الواحدة متجاورة، ومعظم النص مطبَّع أصلًا. ومن هنا جاءت ثلاثة أساليب. تخطي ASCII عبر SIMD. في UTF-8 ينتمي البايت إلى ASCII إذا كان بته الأعلى يساوي صفرًا. يحمّل المعالج 16 بايت، ويجمع البتات العليا في عدد واحد بتعليمة واحدة، ثم يقارنه بالصفر. فإذا كان صفرًا، يمكن عدم فك ترميز الكتلة كلها، وعدم البحث عنها في الجداول، بل وعدم نسخها. وإذا لم يكن صفرًا، فإن عدّ البتات الصفرية يحدد أول بايت غير لاتيني. كما يجري تحويل الأحرف ASCII الكبيرة إلى صغيرة دفعة واحدة: عبر عملية OR مع 0x20. ذاكرة مؤقتة ب

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
ما رأيك؟
جارٍ تحميل التعليقات…