مقدمة
ظهرت توليد النص كقدرة ثورية، حيث غيرت كيفية تفسير الآلات وإنتاج نصوص شبيهة بالنصوص البشرية. أدى هذا الارتفاع في الشعبية إلى تطوير العديد من الأدوات المصممة لتبسيط وتعزيز عملية العمل مع نماذج اللغات الكبيرة.
أدى التوسع السريع في نماذج اللغات الكبيرة، مع ظهور إصدارات جديدة أسبوعيًا تقريبًا، إلى زيادة متزامنة في خيارات الاستضافة لدعم هذه التقنية. ومن بين الأدوات العديدة المتاحة، تبرز أداة استدلال النص من Hugging Face (TGI)، حيث تمكننا من تشغيل نموذج لغة كبير كخدمة على أجهزتنا المحلية.
سيستعرض هذا الدليل لماذا يُعد TGI من Hugging Face ابتكارًا هامًا وكيف يمكنك استخدامه لتطوير نماذج ذكاء اصطناعي متطورة قادرة على توليد نصوص يصعب تمييزها عن الكتابة البشرية.
ما هو استدلال النص من Hugging Face (TGI)؟
استدلال النص من Hugging Face (TGI) هو إطار عمل مكتوب بلغة Rust وPython لنشر وتقديم نماذج اللغات الكبيرة. إنها مجموعة أدوات جاهزة للإنتاج مصممة لهذا الغرض.
تطور Hugging Face وتوزع TGI تحت ترخيص HFOILv1.0، مما يسمح بالاستخدام التجاري طالما يعمل كأداة مساعدة داخل المنتج أو الخدمة، وليس كميزة أساسية. التحديات الرئيسية التي يعالجها هي:
الميزات الرئيسية لاستدلال النص من Hugging Face (TGI)
-
توليد النص عالي الأداء
— يستخدم TGI تقنيات مثل التوزيع المتوازي للتوترات (Tensor Parallelism) الذي يوزع النماذج الكبيرة عبر وحدات معالجة رسومية (GPUs) متعددة، والتجميع الديناميكي (dynamic batching) الذي يجمع المطالبات معًا بشكل فوري داخل الخادم، لتحسين أداء نماذج اللغات الكبيرة مفتوحة المصدر الشهيرة، بما في ذلك StarCoder وBLOOM وGPT-NeoX وLlama وT5. -
استخدام فعال للموارد
— يستخدم TGI التجميع المستمر (continuous batching) والرمز المحسن والتوزيع المتوازي للتوترات لمعالجة طلبات متعددة في وقت واحد مع تقليل استخدام الموارد. -
المرونة والأمان
— يدعم TGI ميزات أمان وسلامة متنوعة، مثل العلامات المائية، وتحويل اللوجيت (logit warping) (تعديل اللوجيتات لأكواد محددة عن طريق إضافة قيمة انحياز)، وتسلسلات الإيقاف لضمان استخدام مسؤول ومنضبط لنماذج اللغات الكبيرة.
قامت Hugging Face بتحسين بنية بعض نماذج اللغات الكبيرة للعمل بشكل أسرع مع TGI، بما في ذلك النماذج الشائعة مثل LLaMA وFalcon7B وMistral. يمكن العثور على قائمة كاملة بالنماذج المدعومة في وثائقهم.
لماذا نستخدم TGI من Hugging Face؟
أصبحت Hugging Face المنصة الأساسية لتطوير الذكاء الاصطناعي بقدرات اللغة الطبيعية. تستضيف عددًا كبيرًا من النماذج مفتوحة المصدر الرائدة، مما يجعلها قوة دافعة للابتكار في معالجة اللغة الطبيعية. تقليديًا، كانت هذه النماذج كبيرة جدًا بحيث لا يمكن تشغيلها محليًا، مما استلزم الاعتماد على الخدمات السحابية.
ومع ذلك، أدت التطورات الحديثة في تقنيات التكميم مثل QLoRa وGPTQ إلى جعل بعض نماذج اللغات الكبيرة قابلة للإدارة على الأجهزة اليومية، بما في ذلك أجهزة الكمبيوتر المحلية.
صُمم TGI من Hugging Face خصيصًا لتمكين نماذج اللغات الكبيرة كخدمة على الأجهزة المحلية. يعالج هذا النهج تحدي تشغيل نموذج لغة كبير عن طريق إبقاء النموذج جاهزًا في الخلفية للاستجابة السريعة، وتجنب الانتظار الطويل لكل مطالبة. تخيل وجود نقطة نهاية تحتوي على مجموعة من أفضل نماذج اللغة الجاهزة لتوليد النص عند الطلب.
ما يبرز في TGI هو تنفيذه المباشر. فهو يدعم العديد من بنى النماذج المبسطة، مما يجعل النشر سريعًا وسهلاً.
علاوة على ذلك، يعمل TGI بالفعل على تشغيل العديد من المشاريع الحية. بعض الأمثلة تشمل:

- Hugging Chat، واجهة مفتوحة المصدر للنماذج مفتوحة الوصول.
- OpenAssistant، مبادرة مجتمعية مفتوحة المصدر لتدريب نماذج اللغات الكبيرة.
- nat.dev، منصة لاستكشاف ومقارنة نماذج اللغات الكبيرة.
ومع ذلك، هناك قيود ملحوظة: TGI ليس متوافقًا بعد مع أجهزة Mac التي تعتمد على معالجات ARM GPU، بما في ذلك سلسلة M1 والإصدارات الأحدث.
إعداد TGI من Hugging Face
أولاً، قم بإعداد نقطة نهاية TGI من Hugging Face.

لتثبيت وتشغيل TGI محليًا، ابدأ بتثبيت Rust. بعد ذلك، قم بإعداد بيئة افتراضية Python بإصدار Python 3.9 أو أعلى، على سبيل المثال باستخدام conda:
# تثبيت Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# إنشاء بيئة افتراضية Python
conda create -n text-generation-inference python=3.9
conda activate text-generation-inference
علاوة على ذلك، من الضروري تثبيت Protoc. توصي Hugging Face باستخدام الإصدار 21.12 للحصول على أفضل توافق. يرجى ملاحظة أنك ستحتاج إلى صلاحيات sudo لتنفيذ هذا التثبيت.
PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP
أولاً، سأوضح عملية التثبيت من الصفر، والتي قد لا تكون مباشرة. إذا واجهت أي مشاكل أثناء هذه العملية، يمكنك تخطيها والانتقال مباشرة إلى استخدام صورة Docker، وهو أسهل. سيتم تغطية كلا السيناريوهين.
بمجرد استيفاء جميع المتطلبات الأساسية، يمكننا المتابعة لإعداد TGI. ابدأ باستنساخ مستودع GitHub:
git clone https://github.com/huggingface/text-generation-inference.git
بعد ذلك، انتقل إلى دليل TGI على جهازك المحلي وقم بتثبيته باستخدام الأوامر التالية:
cd text-generation-inference/
BUILD_EXTENSIONS=False make install
الآن، دعنا نستكشف كيفية استخدام TGI، مع وبدون Docker. للتوضيح، سأستخدم نموذج Falcon-7B، المرخص بموجب Apache 2.0.
تشغيل نموذج بدون Docker
أدت عملية التثبيت إلى إنشاء أمر جديد “text-generation-launcher” يقوم بتشغيل خادم TGI. لتفعيل نقطة نهاية باستخدام نموذج Falcon-7B، قم بتنفيذ الأمر التالي:
text-generation-launcher --model-id tiiuae/falcon-7b-instruct --num-shard 1 --port 8080 --quantize bitsandbytes
فيما يلي شرح لكل معلمة إدخال:
- model-id: يشير إلى الاسم المحدد للنموذج كما هو مدرج في Hugging Face Hub. في حالتنا، بالنسبة لـ Falcon-7B، هو “tiiuae/falcon-7b-instruct”.
- num-shard: اضبط هذه المعلمة لتتناسب مع عدد وحدات معالجة الرسوم (GPUs) المتاحة للاستخدام. القيمة الافتراضية هي 1.
- port: يحدد المنفذ الذي سيستمع عليه الخادم للطلبات. المنفذ الافتراضي هو 8080.
- quantize: بالنسبة للمستخدمين الذين لديهم وحدات معالجة رسوم ذات ذاكرة VRAM أقل من 24 جيجابايت، فإن تكميم النموذج ضروري لتجنب زيادة تحميل الذاكرة. في الأوامر السابقة، تم اختيار “bitsandbytes” للتكميم الفوري. خيار آخر، “GPTQ” (“gptq”)، متاح أيضًا، لكن آلية عمله قد تكون أقل شهرة.
تطبيقات TGI
هناك عدة طرق لدمج خادم استدلال النص (TGI) في تطبيقاتك. بمجرد تشغيله، يمكنك التفاعل معه عن طريق إرسال طلب POST إلى نقطة النهاية /generate للحصول على النتائج.

إذا اخترت دفق الرموز المستمر مع TGI، فاستخدم نقطة النهاية /generate_stream بدلاً من ذلك، كما هو موضح في القسم التالي. يمكن إجراء هذه الطلبات باستخدام أداتك المفضلة، مثل curl أو Python أو TypeScript. للاستعلام عن النموذج الذي يخدمه TGI باستخدام برنامج Python النصي، ستحتاج إلى تثبيت مكتبة text-generation التالية. يمكنك القيام بذلك بسهولة عن طريق تشغيل أمر pip التالي:
pip install text-generation
بعد تشغيل خادم TGI، قم بإنشاء مثيل من InferenceClient() مع عنوان URL الذي يشير إلى نقطة نهاية خدمة النموذج. ثم، يمكنك استدعاء text_generation() لإرسال الطلبات إلى نقطة النهاية باستخدام Python.
from text_generation import Client
client = Client("http://127.0.0.1:8080")
client.text_generation(prompt="Your prompt here!")
لتفعيل الدفق باستخدام InferenceClient، فقط قم بتعيين stream=True. سيمكنك هذا من استقبال الرموز في الوقت الفعلي عند إنشائها على الخادم. إليك كيفية استخدام الدفق:
for token in client.text_generation("Your prompt here!", max_new_tokens=12, stream=True):
print(token)
تقديم مطالبة لنموذج عبر TGI
ضع في اعتبارك أنك ستتفاعل مع النموذج المنشور على نقطة النهاية الخاصة بك، وهو في حالتنا Falcon-7B. من خلال TGI، ننشئ نقطة نهاية حية تسهل استرداد الردود من نموذج اللغة الكبير المختار.
ونتيجة لذلك، باستخدام Python، يمكن إرسال المطالبات مباشرة إلى نموذج اللغة الكبير عبر العميل المستضاف على جهازنا المحلي، والذي يمكن الوصول إليه عبر المنفذ 8080. لذلك، سيكون البرنامج النصي Python المطابق على النحو التالي:
from text_generation import Client
client = Client("http://127.0.0.1:8080")
print(client.generate("Translate the following sentence into spanish: 'What does Large Language Model mean?'", max_new_tokens=500).generated_text)
سنتلقى ردًا من النموذج دون الحاجة إلى تثبيته في بيئتنا. بدلاً من استخدام Python، يمكننا الاستعلام عن نموذج اللغة الكبير باستخدام CURL، كما هو موضح في المثال التالي:
curl 127.0.0.1:8080/generate \
-X POST \
-d '{"inputs":"Code in Javascript a function to remove all spaces in a string and then print the string twice.","parameters":{"max_new_tokens":500}}' \
-H 'Content-Type: application/json'
بعد تجربة TGI، يظهر سرعة مذهلة. مع Falcon-7B (بحد أقصى 500 رمز)، يستغرق الأمر بضع ثوانٍ فقط. في المقابل، يستغرق نهج الاستدلال النموذجي باستخدام مكتبة transformers حوالي 30 ثانية.
التكامل مع novita.ai باستخدام نموذج اللغة الكبير الخاص بـ novita.ai

بدءًا من الإصدار 1.4.0، قدم TGI واجهة برمجة تطبيقات (API) متوافقة مع واجهة برمجة تطبيقات اللغة الكبيرة (LLM API) من novita.ai. تتيح واجهة برمجة التطبيقات الجديدة للرسائل (Messages API) الانتقال السلس للعملاء والمستخدمين من نماذج novita.ai إلى نماذج اللغات الكبيرة مفتوحة المصدر. تم تصميم واجهة برمجة التطبيقات للتكامل المباشر مع مكتبات عملاء novita.ai أو مع أدوات الطرف الثالث مثل LangChain أو LlamaIndex.

يضمن دعم TGI للرسائل (Messages) أن نقاط النهاية الخاصة به (Inference Endpoints) متوافقة تمامًا مع واجهة برمجة تطبيقات اللغة الكبيرة من novita.ai. يسمح هذا التوافق للمستخدمين باستبدال أي نصوص برمجية موجودة تستخدم نماذج novita.ai بسهولة بنماذج لغة كبيرة مفتوحة المصدر مستضافة على نقاط نهاية TGI دون أي عناء.
يُسهل هذا الترقية التبديل دون عناء، مما يمنح وصولاً فوريًا إلى المزايا الواسعة للنماذج مفتوحة المصدر، بما في ذلك:
- تحكم وشفافية كاملان فيما يتعلق بالنماذج والبيانات.
- إزالة المخاوف بشأن حدود المعدل.
- المرونة في تخصيص الأنظمة لتلبية المتطلبات الفريدة.
مثال على كيفية دمج TGI في بروتوكول الدردشة الكامل من novita.ai موضح أدناه:
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
# احصل على مفتاح API من NovitaAI بالإشارة إلى: https://novita.ai/get-started/Quick_Start.html#_3-create-an-api-key
api_key="<YOUR NovitaAI API Key>",
)
model = "meta-llama/llama-3-8b-instruct"
stream = True # أو False
max_tokens = 512
chat_completion_res = client.chat.completions.create(
model=model,
messages=[
{
"role": "system",
"content": "Act like you are a helpful assistant.",
},
{
"role": "user",
"content": "Hi there!",
}
],
stream=stream,
max_tokens=max_tokens,
)
if stream:
for chunk in chat_completion_res:
print(chunk.choices[0].delta.content or "", end="")
else:
print(chat_completion_res.choices[0].message.content)
كما هو واضح، يمكن استخدام مكتبة novita.ai لتحديد نقطة النهاية الخاصة بنا وكلمة مرور Hugging Face الخاصة بنا. لمزيد من المعلومات حول هذا التكامل، راجع وثائق TGI من Hugging Face.
نصائح عملية عند استخدام TGI
المفاهيم الأساسية لنماذج اللغات الكبيرة
قبل الغوص في TGI من HuggingFace، من المهم أن يكون لديك فهم جيد لنماذج اللغات الكبيرة. تعرف على المفاهيم الرئيسية مثل الترميز (tokenization) وآليات الانتباه (attention mechanisms) وهندسة المحولات (Transformer architecture). هذه الأساسيات ضرورية لتخصيص النماذج وتحسين نتائج توليد النص.
إعداد النموذج وتحسينه — فهم Hugging Face
تعلم كيفية إعداد النماذج وتحسينها لاحتياجاتك الخاصة. يتضمن ذلك اختيار النموذج المناسب، وتخصيص أدوات الترميز، وتطبيق تقنيات لتحسين الأداء دون التضحية بالجودة.
تعرف على كيفية عمل HuggingFace وكيفية استخدام HuggingFace Hub لتطوير معالجة اللغة الطبيعية. نقطة بداية جيدة هي البرنامج التعليمي “مقدمة لاستخدام المحولات وHugging Face”.
فهم مفهوم الضبط الدقيق (fine-tuning) ضروري أيضًا، حيث تحتاج النماذج غالبًا إلى تحسين لأهداف محددة. يمكنك تعلم كيفية ضبط نموذج بدقة من خلال دليل “دليل تمهيدي لضبط نماذج اللغات الكبيرة بدقة”.
استراتيجيات التوليد
تحقق من الأساليب المختلفة لتوليد النص، بما في ذلك البحث الجشع (greedy search)، والبحث الشعاعي (beam search)، وأخذ العينات من أعلى k (top-k sampling). لكل طريقة مزاياها وعيوبها، مما يؤثر على تماسك النص المولد وإبداعه وملاءمته.
الخاتمة
تمكن مجموعة أدوات TGI من Hugging Face الأفراد من التعمق في توليد النص بالذكاء الاصطناعي. توفر مجموعة أدوات سهلة الاستخدام لنشر واستضافة نماذج اللغات الكبيرة لتطبيقات معالجة اللغة الطبيعية المتطورة التي تتطلب نصوصًا شبيهة بالنصوص البشرية.
على الرغم من أن الاستضافة الذاتية لنماذج اللغات الكبيرة توفر خصوصية البيانات والتحكم في التكاليف، إلا أنها تتطلب أجهزة قوية. ومع ذلك، فإن التطورات الأخيرة في هذا المجال تمكن من استخدام نماذج أصغر مباشرة على أجهزتنا المحلية.
novita.ai، المنصة الشاملة للإبداع غير المحدود التي تمنحك إمكانية الوصول إلى أكثر من 100 واجهة برمجة تطبيقات (API). بدءًا من إنشاء الصور ومعالجة اللغة إلى تحسين الصوت ومعالجة الفيديو، وبنظام الدفع حسب الاستخدام الرخيص، فهي تحررك من متاعب صيانة وحدة المعالجة الرسومية (GPU) أثناء بناء منتجاتك الخاصة. جربها مجانًا.
قراءة موصى بها
محرك استدلال نماذج اللغات الكبيرة من Novita AI: أعلى إنتاجية وأرخص استدلال متاح
