تنفيذ مُحسَّن لـ Whisper للتعرف على الكلام يعتمد على CTranslate2، أسرع 4 مرات ويستهلك ذاكرة أقل من الإصدار الأصلي.
تفاصيل مشروع Faster-Whisper
نظرة عامة على المشروع
Faster-Whisper هو إعادة تنفيذ لنموذج OpenAI Whisper، يستخدم CTranslate2 كمحرك استدلال سريع. مقارنةً بالإصدار الأصلي openai/whisper، يحقق Faster-Whisper سرعة تصل إلى 4 أضعاف مع الحفاظ على نفس الدقة، بالإضافة إلى استهلاك أقل للذاكرة. من خلال تقنية التكميم 8 بت، يمكن زيادة الكفاءة بشكل أكبر على وحدات المعالجة المركزية (CPU) ووحدات معالجة الرسوميات (GPU).
الميزات الأساسية
🚀 مزايا الأداء
- زيادة السرعة: أسرع بـ 4 مرات من Whisper الأصلي
- تحسين الذاكرة: استهلاك أقل للذاكرة
- دعم التكميم: يدعم التكميم 8 بت لزيادة الأداء
- المعالجة الدفعية: يدعم النسخ الصوتي الدفعي لزيادة الإنتاجية
🛠️ الميزات التقنية
- يعتمد على محرك الاستدلال CTranslate2
- يدعم التنفيذ على وحدات GPU و CPU
- متوافق مع نماذج Whisper الأصلية
- يدعم أوضاع دقة متعددة (FP16، FP32، INT8)
- فك تشفير الصوت مدمج (لا حاجة لـ FFmpeg)
مقارنة الأداء
اختبار أداء GPU (NVIDIA RTX 3070 Ti 8GB)
مقارنة أداء نسخ صوتي لمدة 13 دقيقة:
حل التنفيذ | الدقة | حجم الشعاع | الوقت | استهلاك ذاكرة الفيديو |
---|---|---|---|---|
openai/whisper | fp16 | 5 | 2m23s | 4708MB |
whisper.cpp (Flash Attention) | fp16 | 5 | 1m05s | 4127MB |
faster-whisper | fp16 | 5 | 1m47s | 3244MB |
faster-whisper | int8 | 5 | 1m33s | 2926MB |
اختبار أداء CPU (Intel Core i7-12700K)
حل التنفيذ | الدقة | حجم الشعاع | الوقت | استهلاك الذاكرة |
---|---|---|---|---|
openai/whisper | fp32 | 5 | 6m58s | 2335MB |
whisper.cpp | fp32 | 5 | 2m05s | 1049MB |
faster-whisper | fp32 | 5 | 2m37s | 2257MB |
faster-whisper | int8 | 5 | 1m42s | 1477MB |
تعليمات التثبيت
متطلبات النظام
- بايثون 3.9 أو أحدث
- يتطلب تنفيذ GPU دعم مكتبة NVIDIA CUDA
التثبيت الأساسي
pip install faster-whisper
تثبيت دعم GPU
يتطلب تثبيت مكتبات NVIDIA:
- CUDA 12.x
- cuDNN 9.x
- cuBLAS
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*
export LD_LIBRARY_PATH=`python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'`
طريقة Docker
# استخدام صورة NVIDIA CUDA الرسمية
docker run --gpus all -it nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
دليل الاستخدام
النسخ الصوتي الأساسي
from faster_whisper import WhisperModel
model_size = "large-v3"
# تنفيذ GPU (FP16)
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# أو تنفيذ GPU (INT8)
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# أو تنفيذ CPU (INT8)
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("اللغة المكتشفة '%s'، باحتمالية %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
النسخ الصوتي الدفعي
from faster_whisper import WhisperModel, BatchedInferencePipeline
model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched_model = BatchedInferencePipeline(model=model)
segments, info = batched_model.transcribe("audio.mp3", batch_size=16)
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
الطوابع الزمنية على مستوى الكلمة
segments, _ = model.transcribe("audio.mp3", word_timestamps=True)
for segment in segments:
for word in segment.words:
print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))
كشف نشاط الصوت (VAD)
# تمكين تصفية VAD
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
# تخصيص معلمات VAD
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
دعم Distil-Whisper
from faster_whisper import WhisperModel
model_size = "distil-large-v3"
model = WhisperModel(model_size, device="cuda", compute_type="float16")
segments, info = model.transcribe(
"audio.mp3",
beam_size=5,
language="en",
condition_on_previous_text=False
)
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
تحويل النموذج
التحويل من Transformers
pip install transformers[torch]>=4.23
ct2-transformers-converter \
--model openai/whisper-large-v3 \
--output_dir whisper-large-v3-ct2 \
--copy_files tokenizer.json preprocessor_config.json \
--quantization float16
تحميل النماذج المخصصة
# التحميل من دليل محلي
model = WhisperModel("whisper-large-v3-ct2")
# التحميل من Hugging Face Hub
model = WhisperModel("username/whisper-large-v3-ct2")
سيناريوهات التطبيق
- تحويل الكلام إلى نص
- النسخ الصوتي في الوقت الفعلي
- توليد الترجمات (التعليقات التوضيحية)
- الترجمة متعددة اللغات
- تحليل الصوت
- فهرسة محتوى الصوت
التكوين والتحسين
تكوين السجلات
import logging
logging.basicConfig()
logging.getLogger("faster_whisper").setLevel(logging.DEBUG)
نصائح لتحسين الأداء
- استخدم تسريع GPU للحصول على أفضل أداء
- اختر وضع الدقة المناسب بناءً على الأجهزة
- المعالجة الدفعية لزيادة الإنتاجية
- تمكين تصفية VAD لتقليل وقت المعالجة
- ضبط حجم الشعاع وحجم الدفعة بشكل مناسب
تكوين الخيوط
# تعيين عدد خيوط CPU
OMP_NUM_THREADS=4 python3 my_script.py
البنية التقنية
المكونات الأساسية
- CTranslate2: محرك استدلال سريع
- PyAV: مكتبة فك تشفير الصوت
- Silero VAD: كشف نشاط الصوت
- Transformers: دعم تحويل النموذج
النماذج المدعومة
- سلسلة OpenAI Whisper (tiny، base، small، medium، large-v1/v2/v3)
- سلسلة Distil-Whisper
- النماذج المخصصة المعدلة بدقة
المجتمع والدعم
- مستودع GitHub: https://github.com/SYSTRAN/faster-whisper
- حزمة PyPI: https://pypi.org/project/faster-whisper/
- نماذج Hugging Face: https://huggingface.co/Systran
الخلاصة
Faster-Whisper هو حل عالي الأداء للتعرف على الكلام، يحقق زيادة كبيرة في السرعة من خلال تحسين محرك الاستدلال، مع الحفاظ على نفس الدقة مثل Whisper الأصلي. ميزاته الغنية، ودعمه البيئي الجيد، وواجهة برمجة التطبيقات سهلة الاستخدام تجعله خيارًا مثاليًا لتطبيقات التعرف على الكلام. سواء كنت مطورًا أو باحثًا، يمكنك من خلال Faster-Whisper بناء تطبيقات معالجة صوتية فعالة بسرعة.