جدول الاختبارات المرجعية الكامل: أداء Whisper على Apple Silicon (M1–M5)
| الشريحة | Tiny | Base | Small | Medium | Large-v3 |
|---|---|---|---|---|---|
| — | 32× | 20× | 12× | 5× | — |
| — | 38× | 24× | 16× | 7× | — |
| — | 45× | 30× | 22× | 10× | — |
| — | 55× | 38× | 28× | 14× | — |
| — | 36× | 23× | 14× | 6× | — |
| — | 42× | 28× | 20× | 9× | — |
| — | 50× | 35× | 26× | 12× | — |
| — | 60× | 42× | 32× | 17× | — |
| — | 40× | 26× | 16× | 7× | — |
| — | 46× | 32× | 22× | 10× | — |
| — | 55× | 40× | 30× | 14× | — |
| — | 44× | 30× | 18× | 8× | — |
| — | 50× | 36× | 26× | 12× | — |
| — | 60× | 44× | 34× | 16× | — |
| — | 48× | 34× | 22× | 10× | — |
| — | 55× | 40× | 30× | 14× | — |
| — | 65× | 48× | 38× | 18× | — |
×N الوقت الفعلي = N ثانية من الصوت تُنسَخ في ثانية واحدة. اختبارات مرجعية عبر whisper.cpp بتسريع Metal. كل أجهزة M1 Pro فأحدث قادرة على تشغيل large-v3 في الوقت الفعلي أو أسرع.
أحجام نماذج Whisper: أيها يجب أن تستخدم؟
| النموذج | المعاملات | الحجم على القرص | استخدام RAM | WER بالإنجليزية | مثالي لـ |
|---|---|---|---|---|---|
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
WER (معدل خطأ الكلمات) على مجموعة اختبار LibriSpeech الإنجليزية. Large-v3-turbo وdistil-large-v3 هما النقطة المثلى للوقت الفعلي على معظم أجهزة Mac: جودة قريبة من large-v3 بسرعة 4–6×.
Metal مقابل Core ML مقابل Apple Neural Engine: أي خلفية تختار؟
يقدّم Apple Silicon ثلاثة مسارات تسريع لـ Whisper. لكل منها مزاياه وعيوبه.
Metal (عبر whisper.cpp) — موصى به: يستخدم إطار Apple Metal GPU، متوافق مع كل شرائح سلسلة M، 10–12× الوقت الفعلي على large-v3 (M5 Pro)، الإعداد عبر make WHISPER_METAL=1. مثالي لـ: معظم المستخدمين، أبسط إعداد، أداء مُختبَر.
Core ML (عبر صيغة Apple Core ML) — متقدم: يستخدم إطار تعلّم الآلة من Apple، يمكن أن يستهدف Neural Engine (ANE) لبعض العمليات، أسرع بنسبة 15–20% في بعض الأحمال، يتطلب تحويل النموذج (10–15 دقيقة إعداد). مثالي لـ: المستخدمون المتقدمون الباحثون عن أقصى سرعة.
Apple Neural Engine (ANE) — استخدام محدود: مسرّع ذكاء اصطناعي مخصص في كل شرائح سلسلة M، غير متاح مباشرةً (يجب المرور عبر Core ML)، لا يستفيد Whisper كاملًا من ANE بسبب عدم توافق البنية، يعمل أفضل مع النماذج الصغيرة (tiny، base). مثالي لـ: Whisper tiny/base على أجهزة لابتوب تعمل بالبطارية.
مصفوفة القرار: أول إعداد ← Metal (whisper.cpp). أقصى سرعة على large-v3 ← Metal (whisper.cpp). لابتوب بالبطارية، نموذج base ← Core ML مع ANE. خادم إنتاج ← Metal (مُختبَر، موثوق). نسخ في الوقت الفعلي ← Metal بوضع البث. نشر سحابي على نسخ Mac ← Metal (قابل للحاويات).
- Metal (whisper.cpp): الأسرع، توافق واسع، أبسط إعداد
- Core ML: تحسين مع Neural Engine، مكسب سرعة 15–20% في بعض الأحمال (يتطلب تحويلًا)
- Apple Neural Engine: فائدة محدودة للنماذج الكبيرة، مثالي لـ tiny/base على أجهزة اللابتوب
الإعداد: whisper.cpp بتسريع Metal
- 1ثبّت التبعيات
Why it matters: xcode-select --install (أدوات Xcode) brew install ffmpeg (تحويل الصوت) - 2استنسخ وجمّع whisper.cpp مع Metal
Why it matters: git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp make WHISPER_METAL=1 ./main -h | grep -i metal - 3نزّل نموذجًا
Why it matters: bash ./models/download-ggml-model.sh small (466 MB، الوقت الفعلي) bash ./models/download-ggml-model.sh large-v3 (3 GB، أفضل جودة) bash ./models/download-ggml-model.sh large-v3-turbo (1.6 GB، متوازن) - 4انسخ ملف صوتي
Why it matters: ./main -m models/ggml-large-v3.bin -f /ruta/al/audio.wav ./main -m models/ggml-large-v3.bin -f audio.wav -oj (JSON) ./main -m models/ggml-large-v3.bin -f audio.wav -l en (تحديد اللغة) - 5حوّل الصوت غير WAV أولًا
Why it matters: ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav ./main -m models/ggml-large-v3.bin -f output.wav
النسخ بالبث في الوقت الفعلي (ميكروفون مباشر)
للنسخ المباشر من الميكروفون: مساعدون صوتيون، نسخ الاجتماعات، أدوات الوصولية.
الخيار 1: وضع stream في whisper.cpp
./stream -m models/ggml-small.bin --step 500 --length 5000
# --step 500: المعالجة كل 500ms
# --length 5000: الاحتفاظ بآخر 5 ثوانٍ من السياق
الخيار 2: Python مع faster-whisper (انظر كتلة الكود أدناه)
زمن الاستجابة على M5 Pro: نموذج small نحو 200ms، large-v3-turbo نحو 400–600ms، large-v3 نحو 800ms–1.2 ثانية تأخر عن الوقت الفعلي.
import sounddevice as sd
import numpy as np
from faster_whisper import WhisperModel
model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8")
buffer = []
chunk_duration = 3
sample_rate = 16000
def callback(indata, frames, time, status):
buffer.append(indata.copy())
if len(buffer) * 1024 / sample_rate >= chunk_duration:
audio = np.concatenate(buffer).flatten().astype(np.float32)
segments, _ = model.transcribe(audio, beam_size=5)
for segment in segments:
print(segment.text)
buffer.clear()
with sd.InputStream(callback=callback, channels=1, samplerate=sample_rate):
print("Listening... (Ctrl+C to stop)")
while True:
sd.sleep(1000)خط أنابيب مساعد صوتي: Whisper + Ollama + Piper TTS
كود كامل لمساعد صوتي محلي يعمل بالكامل على Apple Silicon.
import sounddevice as sd
import numpy as np
import requests
import subprocess
from faster_whisper import WhisperModel
WHISPER_MODEL = "large-v3-turbo"
OLLAMA_URL = "http://localhost:11434/api/chat"
LLM_MODEL = "llama3.1:8b"
SAMPLE_RATE = 16000
whisper = WhisperModel(WHISPER_MODEL, device="cpu", compute_type="int8")
def record_audio(duration=5):
print("Listening...")
audio = sd.rec(int(duration * SAMPLE_RATE),
samplerate=SAMPLE_RATE,
channels=1,
dtype=np.float32)
sd.wait()
return audio.flatten()
def transcribe(audio):
segments, _ = whisper.transcribe(audio, beam_size=5)
return " ".join([seg.text for seg in segments])
def llm_respond(user_text):
response = requests.post(OLLAMA_URL, json={
"model": LLM_MODEL,
"messages": [{"role": "user", "content": user_text}],
"stream": False
})
return response.json()["message"]["content"]
def speak(text):
subprocess.run(
["piper", "--model", "en_US-amy-medium.onnx"],
input=text.encode(),
check=True
)
while True:
audio = record_audio(duration=5)
user_text = transcribe(audio)
print(f"You: {user_text}")
if not user_text.strip():
continue
response = llm_respond(user_text)
print(f"AI: {response}")
speak(response)أفضل تهيئة لـ Whisper حسب طراز Mac
| تهيئة Mac | النموذج الموصى به | مضاعف الوقت الفعلي | حالة الاستخدام |
|---|---|---|---|
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
لمساعد صوتي في الوقت الفعلي: استخدم small أو large-v3-turbo لأقل زمن استجابة. لنسخ الاجتماعات/البودكاست: استخدم large-v3 لأقصى دقة (تأخر 1–2 ثانية مقبول). قد تتفاوت الأسعار حسب بلدك.
Whisper المحلي مقابل خدمات النسخ السحابية
| المقياس | Whisper المحلي (M5 Pro) | Google Speech-to-Text | OpenAI Whisper API | AssemblyAI |
|---|---|---|---|---|
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
التكلفة الشهرية (8 ساعات/يوم): Whisper المحلي 0 دولار، Google 345 دولارًا، OpenAI 86 دولارًا، AssemblyAI 156 دولارًا. قد تتفاوت الأسعار حسب بلدك. للعمل الحساس للخصوصية (طبي، قانوني، صحافة)، يُعد Whisper المحلي الخيار الوحيد. للنسخ عالي الحجم (أكثر من 100 دولار/شهر في السحابة)، يسدّد جهاز Mac محلي تكلفته خلال 12 شهرًا.
هل Whisper أسرع من واجهات السحابة؟
محليًا على M5 Pro: 10× الوقت الفعلي (زمن استجابة 100ms). واجهات السحابة: 100–500ms زمن استجابة بسبب الشبكة. المحلي أسرع ومجاني.
هل يستطيع Whisper التعامل مع عدة متحدثين؟
نعم، تفصل الطوابع الزمنية بين المتحدثين. استخدم أدوات معالجة لاحقة أو diarization لتحديد هوية كل متحدث.
أي لغات يدعم؟
99 لغة باكتشاف تلقائي. تتفاوت الدقة حسب اللغة: الإنجليزية بـ 2.5% WER، ولغات أخرى بـ 5–15% WER.
أي نموذج Whisper يملك أفضل توازن سرعة/جودة؟
Large-v3-turbo أو distil-large-v3. كلاهما يحقق نحو 95% من دقة large-v3 بسرعة 4–6×. موصى بهما لمعظم حالات الاستخدام في الوقت الفعلي.
هل يتعامل Whisper مع الإنجليزية ذات اللكنة أو المتحدثين غير الأصليين؟
نعم، لكن WER يرتفع. الإنجليزية الأصلية: نحو 2.5%. لكنة قوية/غير أصلية: 5–12%. يتعامل large-v3 مع اللكنات أفضل من النماذج الأصغر.
هل يعمل Whisper للبودكاست ونسخ الموسيقى؟
البودكاست: نعم، ممتاز للمحتوى المنطوق. الموسيقى بكلمات: ضعيف — إذ دُرّب Whisper على الكلام. استخدم نماذج متخصصة للموسيقى.
ما مدى دقة Whisper مع المصطلحات التقنية؟
متفاوتة. المصطلحات التقنية الشائعة: جيدة. المصطلحات شديدة التخصص: قد تُنسَخ خطأً. استخدم خيار --prompt بالمفردات المتوقعة لتحسين الدقة.
هل يمكنني تشغيل عدة نسخ من Whisper على جهاز Mac؟
نعم، محدود بالذاكرة. M5 Pro 36GB: نسختان من large-v3 متزامنتان. M5 Max 128GB: 4–6 نسخ أو نسخة واحدة إضافةً إلى LLM/TTS.