يعد تحويل الكلام إلى كلام (S2S) مشروعًا جديدًا مثيرًا من Hugging Face الذي يجمع بين العديد من النماذج المتقدمة لإنشاء تجربة سلسة وساحرة تقريبًا: أنت تتحدث، ويستجيب النظام بصوت مركب.

ينفذ المشروع نماذج متسلسلة للاستفادة من خطوط الأنابيب المتاحة من خلال مكتبة Transformers في مركز Hugging Face. يتكون خط الأنابيب من المكونات التالية:

  1. اكتشاف النشاط الصوتي (VAD)
  2. تحويل الكلام إلى نص (STT)
  3. نموذج اللغة (LM)
  4. تحويل النص إلى كلام (TTS)

علاوة على ذلك، تتمتع S2S بدعم متعدد اللغات! وهو يدعم حاليًا اللغة الإنجليزية والفرنسية والإسبانية والصينية واليابانية والكورية. يمكنك تشغيل المسار في وضع اللغة الواحدة أو استخدام auto علامة للكشف التلقائي عن اللغة. تحقق من الريبو لمزيد من التفاصيل هنا.

> 👩🏽‍💻: That's all amazing, but how do I run S2S?
> 🤗: Great question!

يتطلب تشغيل ميزة “تحويل الكلام إلى كلام” موارد حسابية كبيرة. حتى على جهاز كمبيوتر محمول متطور، قد تواجه مشكلات في زمن الاستجابة، خاصة عند استخدام الطرز الأكثر تقدمًا. في حين أن وحدة معالجة الرسومات القوية يمكنها التخفيف من هذه المشكلات، إلا أنه ليس لدى الجميع الوسائل (أو الرغبة!) لإعداد أجهزتهم الخاصة.

هذا هو المكان الذي تلعب فيه نقاط نهاية استنتاج Hugging Face (IE). تسمح لك Inference Endpoints باستئجار جهاز افتراضي مزود بوحدة معالجة الرسومات (أو أي جهاز آخر قد تحتاجه) والدفع فقط مقابل الوقت الذي يعمل فيه نظامك، مما يوفر حلاً مثاليًا لنشر التطبيقات ذات الأداء العالي مثل تحويل الكلام إلى كلام.

في منشور المدونة هذا، سنرشدك خطوة بخطوة لنشر ميزة تحويل الكلام إلى كلام في نقطة نهاية استدلال الوجه المعانق. وهذا ما سنغطيه:

  • فهم نقاط نهاية الاستدلال ونظرة عامة سريعة على الطرق المختلفة لإعداد IE، بما في ذلك صورة حاوية مخصصة (وهو ما سنحتاجه لـ S2S)
  • إنشاء صورة عامل إرساء مخصصة لـ S2S
  • نشر الصورة المخصصة على IE والاستمتاع ببعض المرح مع S2S!

نقاط النهاية الاستدلالية

توفر نقاط نهاية الاستدلال طريقة فعالة وقابلة للتطوير لنشر نماذج التعلم الآلي. تسمح لك نقاط النهاية هذه بخدمة النماذج بأقل قدر من الإعداد، مع الاستفادة من مجموعة متنوعة من الأجهزة القوية. تعد نقاط نهاية الاستدلال مثالية لنشر التطبيقات التي تتطلب أداءً عاليًا وموثوقية، دون الحاجة إلى إدارة البنية التحتية الأساسية.

فيما يلي بعض الميزات الأساسية، وتأكد من مراجعة الوثائق لمزيد من المعلومات:

  • بساطة – يمكنك البدء في العمل في دقائق معدودة بفضل الدعم المباشر الذي تقدمه شركة IE للنماذج الموجودة في مركز Hugging Face.
  • قابلية التوسع – لا داعي للقلق بشأن الحجم، نظرًا لأن IE يقوم بالقياس تلقائيًا، بما في ذلك إلى الصفر، من أجل التعامل مع الأحمال المتنوعة وتوفير التكاليف.
  • التخصيص: يمكنك تخصيص إعداد IE الخاص بك للتعامل مع المهام الجديدة. المزيد عن هذا أدناه.

تدعم نقاط نهاية الاستدلال جميع مهام المحولات ومحولات الجملة، ولكن يمكنها أيضًا دعم المهام المخصصة. هذه هي خيارات إعداد IE:

  1. نماذج مسبقة الصنع: انشر النماذج بسرعة مباشرةً من مركز Hugging Face.
  2. معالجات مخصصة: تحديد منطق الاستدلال المخصص لخطوط الأنابيب الأكثر تعقيدًا.
  3. صور عامل ميناء مخصصة: استخدم صور Docker الخاصة بك لتغليف جميع التبعيات والتعليمات البرمجية المخصصة.

بالنسبة للنماذج الأبسط، يعد الخياران 1 و2 مثاليين ويجعلان النشر باستخدام Inference Endpoints أمرًا سهلاً للغاية. ومع ذلك، بالنسبة لخط أنابيب معقد مثل S2S، ستحتاج إلى مرونة الخيار 3: نشر IE الخاص بنا باستخدام صورة Docker مخصصة.

لا توفر هذه الطريقة المزيد من المرونة فحسب، بل تعمل أيضًا على تحسين الأداء من خلال تحسين عملية الإنشاء وجمع البيانات الضرورية. إذا كنت تتعامل مع مسارات نماذج معقدة أو ترغب في تحسين نشر تطبيقك، فسيقدم لك هذا الدليل رؤى قيمة.

نشر تحويل الكلام إلى كلام على نقاط نهاية الاستدلال

دعونا ندخل في ذلك!

بناء صورة Docker المخصصة

للبدء في إنشاء صورة Docker مخصصة، بدأنا باستنساخ مستودع صور Docker الافتراضي الخاص بـ Hugging Face. يعد هذا بمثابة نقطة انطلاق رائعة لنشر نماذج التعلم الآلي في مهام الاستدلال.

git clone https://github.com/huggingface/huggingface-inference-toolkit

لماذا استنساخ المستودع الافتراضي؟

  • مؤسسة صلبة: يوفر المستودع صورة أساسية محسنة مسبقًا ومصممة خصيصًا لأحمال عمل الاستدلال، مما يوفر نقطة بداية موثوقة.
  • التوافق: نظرًا لأن الصورة مصممة لتتوافق مع بيئة نشر Hugging Face، فإن هذا يضمن التكامل السلس عند نشر صورتك المخصصة.
  • سهولة التخصيص: يوفر المستودع بيئة نظيفة ومنظمة، مما يجعل من السهل تخصيص الصورة للمتطلبات المحددة لتطبيقك.

يمكنك التحقق من جميع التغييرات لدينا هنا

تخصيص صورة Docker لتطبيق تحويل الكلام إلى كلام

مع استنساخ المستودع، كانت الخطوة التالية هي تصميم الصورة لدعم خط أنابيب تحويل الكلام إلى كلام الخاص بنا.

  1. إضافة مشروع تحويل الكلام إلى كلام

لدمج المشروع بسلاسة، أضفنا قاعدة بيانات تحويل الكلام إلى كلام وأي مجموعات بيانات مطلوبة كوحدات فرعية. يوفر هذا الأسلوب تحكمًا أفضل في الإصدار، مما يضمن توفر الإصدار الدقيق من التعليمات البرمجية والبيانات دائمًا عند إنشاء صورة Docker.

من خلال تضمين البيانات مباشرة داخل حاوية Docker، نتجنب الاضطرار إلى تنزيلها في كل مرة يتم فيها إنشاء مثيل لنقطة النهاية، مما يقلل بشكل كبير من وقت بدء التشغيل ويضمن إمكانية تكرار النظام. يتم تخزين البيانات في مستودع Hugging Face، مما يوفر سهولة التتبع وإصدار الإصدارات.

git submodule add https://github.com/huggingface/speech-to-speech.git
git submodule add https://huggingface.co/andito/fast-unidic
  1. تحسين صورة عامل الميناء

بعد ذلك، قمنا بتعديل ملف Dockerfile ليناسب احتياجاتنا:

  • تبسيط الصورة: لقد قمنا بإزالة الحزم والتبعيات التي لم تكن ذات صلة بحالة الاستخدام لدينا. يؤدي هذا إلى تقليل حجم الصورة وتقليل الحمل غير الضروري أثناء الاستدلال.
  • متطلبات التثبيت: قمنا بنقل التثبيت requirements.txt من نقطة الدخول إلى ملف Dockerfile نفسه. بهذه الطريقة، يتم تثبيت التبعيات عند إنشاء صورة Docker، مما يؤدي إلى تسريع النشر نظرًا لأن هذه الحزم لن تحتاج إلى التثبيت في وقت التشغيل.
  1. نشر الصورة المخصصة

بمجرد إجراء التعديلات، قمنا ببناء الصورة المخصصة ودفعها إلى Docker Hub:

DOCKER_DEFAULT_PLATFORM="linux/amd64" docker build -t speech-to-speech -f dockerfiles/pytorch/Dockerfile . 
docker tag speech-to-speech andito/speech-to-speech:latest 
docker push andito/speech-to-speech:latest

بعد إنشاء صورة Docker ودفعها، أصبحت جاهزة للاستخدام في Hugging Face Inference Endpoint. باستخدام هذه الصورة المعدة مسبقًا، يمكن تشغيل نقطة النهاية بشكل أسرع وتشغيلها بشكل أكثر كفاءة، حيث يتم تجميع جميع التبعيات والبيانات مسبقًا داخل الصورة.

إعداد نقطة نهاية الاستدلال

يتطلب استخدام صورة عامل إرساء مخصصة تكوينًا مختلفًا قليلاً، فلا تتردد في مراجعة الوثائق. سنتعرف على الطريقة المتبعة للقيام بذلك في كل من واجهة المستخدم الرسومية وواجهة برمجة التطبيقات.

الخطوات المسبقة

  1. تسجيل الدخول: https://huggingface.co/login
  2. طلب الوصول إلى meta-llama/Meta-Llama-3.1-8B-Instruct
  3. قم بإنشاء رمز مميز: https://huggingface.co/settings/tokens/new?tokenType=fineGrained

    • حدد الوصول إلى اتفاقيات إعادة الشراء المسورة
    • إذا كنت تستخدم واجهة برمجة التطبيقات (API)، فتأكد من تحديد الأذونات لإدارة نقاط نهاية الاستدلال

استنتاج نقاط النهاية واجهة المستخدم الرسومية

  1. انتقل إلى https://ui.endpoints.huggingface.co/new
  2. املأ المعلومات ذات الصلة
    • مستودع النماذج – andito/s2s
    • اسم النموذج – لا تتردد في إعادة التسمية إذا لم يعجبك الاسم الذي تم إنشاؤه
      • على سبيل المثال speech-to-speech-demo
      • اجعلها صغيرة وقصيرة
    • اختر السحابة والأجهزة المفضلة لديك – استخدمنا AWS GPU L4
      • انها فقط $0.80 ساعة وهي كبيرة بما يكفي للتعامل مع النماذج
    • التكوين المتقدم (انقر فوق سهم التوسيع ➤)
      • نوع الحاوية – Custom
      • ميناء الحاويات – 80
      • عنوان URL للحاوية – andito/speech-to-speech:latest
      • أسرار – HF_TOKEN|<your token here>
انقر لإظهار الصور

نقطة نهاية الاستدلال الجديدة

التكوين المتقدم

3. انقر فوق “إنشاء نقطة نهاية”.

لا يهم مستودع النماذج في الواقع نظرًا لأنه يتم تحديد النماذج وتنزيلها في إنشاء الحاوية، لكن نقاط نهاية الاستدلال تتطلب نموذجًا، لذا لا تتردد في اختيار نموذج صغير من اختيارك.

تحتاج إلى تحديد HF_TOKEN لأننا بحاجة إلى تنزيل النماذج المسورة في مرحلة إنشاء الحاوية. لن يكون هذا ضروريًا إذا كنت تستخدم نماذج غير مسورة أو خاصة.

تستخدم نقطة إدخال Huggingface-inference-toolkit الحالية المنفذ 5000 كإعداد افتراضي، لكن نقطة نهاية الاستدلال تتوقع المنفذ 80. يجب عليك مطابقة ذلك في ميناء الحاويات. لقد قمنا بالفعل بتعيينه في ملف الإرساء الخاص بنا، ولكن احذر إذا قمت بإنشاء ملف خاص بك من الصفر!

واجهة برمجة تطبيقات نقاط النهاية الاستدلالية

سنستعرض هنا خطوات إنشاء نقطة النهاية باستخدام واجهة برمجة التطبيقات (API). ما عليك سوى استخدام هذا الرمز في بيئة بايثون التي تختارها.

تأكد من الاستخدام 0.25.1 أو أكبر

pip install huggingface_hub>=0.25.1

استخدم رمزًا مميزًا يمكنه كتابة نقطة نهاية (الكتابة أو الحبيبات الدقيقة)

from huggingface_hub import login
login()
from huggingface_hub import create_inference_endpoint, get_token
endpoint = create_inference_endpoint(
    
    "speech-to-speech-demo",
    repository="andito/s2s",
    framework="custom",
    task="custom",
    
    type="protected",
    
    vendor="aws",
    accelerator="gpu",
    region="us-east-1",
    instance_size="x1",
    instance_type="nvidia-l4",
    
    custom_image=
        "health_route": "/health",
        "url": "andito/speech-to-speech:latest", 
        "port": 80
    ,
    secrets='HF_TOKEN': get_token()
)


endpoint.wait()

ملخص

ملخص

المكونات الرئيسية

  • الكلام إلى الكلام
    • هذه مكتبة عناق للوجه، نضع بعض الملفات المحددة لنقطة النهاية الاستدلالية في ملف inference-endpoint الفرع الذي سيتم دمجه مع الرئيسي قريبا.
  • andito/s2s أو أي مستودع آخر. هذا ليس ضروريًا بالنسبة لنا نظرًا لأن لدينا النماذج في مرحلة إنشاء الحاوية، لكن نقطة نهاية الاستدلال تتطلب نموذجًا، لذلك نمرر مستودعًا صغيرًا.
  • andimarafioti/مجموعة أدوات تحويل الكلام إلى كلام.

بناء خادم الويب

لاستخدام نقطة النهاية، سنحتاج إلى بناء خدمة ويب صغيرة. تم تنفيذ الكود الخاص به s2s_handler.py في مكتبة الكلام إلى الكلام التي نستخدمها للعميل و webservice_starlette.py في thespeech_to_speech_inference_toolkit الذي استخدمناه لبناء صورة عامل الإرساء. في العادة، سيكون لديك فقط معالج مخصص لنقطة النهاية، ولكن بما أننا نريد أن يكون لدينا زمن استجابة منخفض حقًا، فقد قمنا أيضًا ببناء خدمة الويب لدعم اتصالات websocket بدلاً من الطلبات العادية. قد يبدو هذا مخيفًا في البداية، لكن خدمة الويب تتكون من 32 سطرًا فقط من التعليمات البرمجية!

رمز خدمة الويب

سيتم تشغيل هذا الرمز prepare_handler عند بدء التشغيل، والذي سيقوم بتهيئة جميع النماذج وتدفئتها. وبعد ذلك، سيتم معالجة كل رسالة بواسطة inference_handler.process_streaming_data

عملية رمز التدفق

تقوم هذه الطريقة ببساطة بتلقي البيانات الصوتية من العميل، وتقطيعها إلى أجزاء صغيرة لجهاز VAD، وإرسالها إلى قائمة الانتظار للمعالجة. ثم يتحقق من قائمة انتظار معالجة الإخراج (الاستجابة المنطوقة من النموذج!) ويعيدها إذا كان هناك شيء ما. تتم معالجة كافة العمليات الداخلية من خلال مكتبة الكلام إلى الكلام الخاصة بـ Hugging Face.

معالج مخصص للعميل المخصص

تتلقى خدمة الويب الصوت وتعيده. ولكن لا تزال هناك قطعة كبيرة مفقودة، كيف يمكننا تسجيل الصوت وتشغيله؟ ومن أجل ذلك، قمنا بإنشاء عميل يتصل بالخدمة. الأسهل هو تقسيم التحليل في الاتصال بخدمة الويب وتسجيل/تشغيل الصوت.

كود العميل الصوتي

تتطلب تهيئة عميل خدمة الويب تعيين رأس لجميع الرسائل باستخدام Hugging Face Token الخاص بنا. عند تهيئة العميل، نقوم بتعيين ما نريد القيام به على الرسائل الشائعة (فتح، إغلاق، خطأ، رسالة). سيحدد هذا ما يفعله عميلنا عندما يرسل الخادم له رسائل.

كود رسائل العميل الصوتية

يمكننا أن نرى أن ردود الفعل على الرسائل تكون مباشرة، مع on_message كونها الطريقة الوحيدة مع المزيد من التعقيد. تتفهم هذه الطريقة متى ينتهي الخادم من الاستجابة ويبدأ في “الاستماع” مرة أخرى إلى المستخدم. وبخلاف ذلك، فإنه يضع البيانات من الخادم في قائمة انتظار التشغيل.

تسجيل الصوت للعميل وتشغيله

يحتوي قسم الصوت الخاص بالعميل على 4 مهام:

  1. سجل الصوت
  2. إرسال التسجيلات الصوتية
  3. تلقي الاستجابات الصوتية من الخادم
  4. تشغيل الاستجابات الصوتية

يتم تسجيل الصوت على audio_input_callback الطريقة، فإنه ببساطة يرسل جميع القطع إلى قائمة الانتظار. ثم يتم إرساله إلى الخادم مع send_audio طريقة. هنا، إذا لم يكن هناك صوت لإرساله، فإننا نستمر في إرسال مصفوفة فارغة لتلقي استجابة من الخادم. تتم معالجة الاستجابات من الخادم بواسطة on_message الطريقة التي رأيناها سابقًا في المدونة. بعد ذلك، تتم معالجة تشغيل الاستجابات الصوتية بواسطة audio_output_callback طريقة. نحتاج هنا فقط إلى التأكد من أن الصوت في النطاق الذي نتوقعه (لا نريد تدمير طبلة أذن شخص ما بسبب حزمة خاطئة!) والتأكد من أن حجم مصفوفة الإخراج هو ما تتوقعه مكتبة التشغيل.

خاتمة

في هذا المنشور، تناولنا خطوات نشر مسار تحويل الكلام إلى كلام (S2S) على نقاط النهاية لاستدلال الوجه باستخدام صورة Docker مخصصة. لقد أنشأنا حاوية مخصصة للتعامل مع تعقيدات مسار S2S وأظهرنا كيفية تكوينها للنشر الفعال والقابل للتطوير. تعمل نقاط النهاية لاستدلال الوجه على تسهيل تشغيل التطبيقات ذات الأداء العالي مثل تحويل الكلام إلى كلام، دون الحاجة إلى إدارة الأجهزة أو البنية التحتية.

إذا كنت مهتمًا بتجربتها أو كانت لديك أية أسئلة، فلا تتردد في استكشاف الموارد التالية:

هل لديك مشاكل أو أسئلة؟ افتح مناقشة حول مستودع GitHub ذي الصلة، وسنكون سعداء بتقديم المساعدة!

شاركها.
اترك تعليقاً