لماذا تستضيف Whisper on premise على خادم VPS
الفوائد العملية من الاستضافة الذاتية
- سرية كاملة: ملفاتك الصوتية لا تغادر خوادمك أبدًا
- تكلفة منضبطة: نسخ 60 دقيقة يكلف بضعة سنتات من CPU، بلا فواتير بالدقيقة
- واجهة API خاصة لا تُكشف إلا عبر بروكسي عكسي محمي بمفتاح أو JWT
- توافر مستمر دون الاعتماد على سياسة تسعير OpenAI
- اختيار النموذج حسب حجم RAM: من 1 GB (tiny) إلى 10 GB (large-v3)
- امتثال مبسط للوائح حماية البيانات: المعالجة في مركز بياناتك لا عند متعاقد أمريكي
المتطلبات الأساسية للأجهزة والبرمجيات
للنشر على CPU (نموذج small أو base): 2 vCPU و4 GB RAM و20 GB قرص. لنموذج medium: يُنصح بـ8 GB RAM. لـlarge-v3 مع GPU: 10 GB VRAM كحد أدنى (بطاقة NVIDIA مع مشغلات CUDA 12+). على صعيد البرمجيات، لا تحتاج سوى إلى Docker Engine 24+ وDocker Compose v2 — دون تثبيت Python أو PyTorch على الخادم.
اختيار نموذج Whisper: مقارنة RAM والسرعة والدقة
نماذج Whisper المتاحة
مرّر الجدول أفقيًا
| النموذج | عدد المعاملات | RAM مطلوبة | WER (إنجليزي) | السرعة (زمن حقيقي) |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | ~7.6% | ~10× |
| base | 74 M | ~1 GB | ~5.0% | ~7× |
| small | 244 M | ~2 GB | ~3.4% | ~4× |
| medium | 769 M | ~5 GB | ~2.9% | ~2× |
| large-v3 | 1 550 M | ~10 GB | ~2.4% | ~1× |
| large-v3-turbo | 809 M | ~6 GB | ~2.5% | ~5× |
نموذج small هو الأنسب لخادم VPS بـ4 GB بدون GPU. وnموذج large-v3-turbo يُقدم جودة قريبة من large-v3 بسرعة 5× أكبر على خادم بـ8 GB.
Whisper.cpp: البديل الذي يعمل على CPU فقط بدون CUDA
إذا لم يتوفر لديك GPU من NVIDIA، فـWhisper.cpp (github.com/ggerganov/whisper.cpp) هو البديل الأمثل. إنه منفذ بلغة C/C++ خالصة لنموذج Whisper يعمل على CPU دون الحاجة إلى Python أو PyTorch أو CUDA. يستخدم تعليمات SIMD (AVX2 على x86، NEON على ARM) لتسريع الاستنتاج. على خادم VPS بـ4 vCPU، يُفرّغ نموذج small حوالي 3× أسرع من النسخة المعتمدة على Python. حجم صورة Docker الرسمية ~150 MB فقط مقابل ~2 GB للصورة Python. إنه الخيار الموصى به لخوادم VPS الاقتصادية (2–4 GB RAM).
النشر خطوة بخطوة عبر Docker (openai-whisper-asr-webservice v1.10.0)
تحضير الخادم
ثبّت Docker Engine وDocker Compose:
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER. أغلق المنفذ 9000 من الخارج:ufw deny 9000/tcp.إنشاء مجلد العمل
mkdir -p ~/whisper && cd ~/whisperكتابة ملف docker-compose.yml
services: whisper: image: onerahmet/openai-whisper-asr-webservice:latest restart: unless-stopped ports: - "127.0.0.1:9000:9000" environment: - ASR_MODEL=small - ASR_ENGINE=faster_whisper - ASR_MODEL_PATH=/data/models volumes: - ./models:/data/modelsاختيار النموذج والتشغيل
استبدل ASR_MODEL=small بالنموذج المناسب لحجم RAM لديك (راجع الجدول أعلاه). ثم:
docker compose up -d.التحقق من تشغيل API
curl http://127.0.0.1:9000/docs curl -F "[email protected]" http://127.0.0.1:9000/asr?encode=true&task=transcribe&language=arإعداد Nginx كبروكسي عكسي
أعد توجيه /whisper/ نحو http://127.0.0.1:9000/ مع إلزامية وجود مفتاح X-Api-Key في الترويسة.
حماية API بمفتاح سري
لا تكشف API Whisper دون مصادقة أبدًا. أنشئ مفتاحًا:
openssl rand -hex 32.اختبار النسخ عبر API المؤمّنة
curl -H "X-Api-Key: YOUR_SECRET_KEY" \ -F "[email protected]" \ https://your-domain.com/whisper/asr?task=transcribe&language=ar
التكامل الفعلي: ربط Whisper بـn8n أو Nextcloud Talk
بعد تشغيل API، يمكنك دمجها في سير عملك الحالي. في n8n، أضف عقدة HTTP Request تشير إلى https://your-domain.com/whisper/asr مع ترويسة X-Api-Key وأرفق ملفك الصوتي بتنسيق multipart/form-data. أما في Nextcloud Talk، فإن ملحق talk_recording يُسجّل المكالمات ويرسل الملف تلقائيًا إلى نقطة نهاية Whisper — تعود النسخة النصية إلى محادثة الفريق في ثوانٍ.
معايير الأداء: CPU مقابل GPU على خادم VPS نموذجي من ServOrbit
على خادم VPS بـ4 vCPU / 8 GB RAM (محرك faster-whisper، نموذج small): تُنسخ دقيقة واحدة من الصوت في نحو 18 ثانية (معدل 3.3× الزمن الحقيقي). على خادم 8 vCPU / 16 GB مع نموذج medium: ~25 ثانية لكل دقيقة صوت. مع GPU NVIDIA RTX 4090 ونموذج large-v3: ~4 ثوانٍ لكل دقيقة (15×). للمعالجة الدفعية، خادم CPU بـ8 GB مع نموذج small يوفر نسبة أداء/تكلفة مثلى. لنسخ في الوقت الفعلي (زمن استجابة < 5 ثوانٍ)، يلزم خادم GPU مع large-v3-turbo.
الأمان: لا تكشف API Whisper أبدًا بدون مصادقة
قواعد أمان لا غنى عنها
- اربط منفذ Docker بـ127.0.0.1 فقط (
127.0.0.1:9000:9000) — لا تستخدم 0.0.0.0:9000 أبدًا - احمِ الوصول الخارجي بمفتاح API في البروكسي العكسي
- أضف تحديدًا لمعدل الطلبات في Nginx لتجنب الإساءة
- فعّل TLS على نطاقك — لا ترسل الصوت بنص صريح عبر الشبكة
- لا تحتفظ بالملفات الصوتية على القرص أكثر من الضروري
- قيّد نقطة النهاية بعناوين IP الداخلية إذا كانت الخدمة للاستخدام الداخلي فقط
استكشاف الأخطاء وإصلاحها
المشكلات الشائعة وحلولها
- خطأ CUDA not found: استخدم الصورة :latest (CPU) بدلًا من :latest-gpu، أو تحقق من تثبيت nvidia-container-toolkit ومشغلات CUDA 12+.
- النموذج لم يُنزَّل / FileNotFoundError: الحجم غير مُوصل صحيحًا أو انقطع التنزيل. احذف محتوى ./models وأعد
docker compose up -d. - OOMKilled / نفاد الذاكرة: النموذج يتجاوز RAM المتاحة. انتقل لنموذج أصغر أو زد RAM الخادم.
- 422 Unprocessable Entity: يجب إرسال الملف الصوتي بتنسيق multipart/form-data باسم الحقل audio_file مع encode=true في معاملات الاستعلام.
لخوادم VPS بدون GPU، استخدم Whisper.cpp (CPU فقط، ~150 MB) مع نموذج small مكمّ 4 بت (-m models/ggml-small-q5_1.bin): تُخفض استهلاك RAM بـ~2.5× مع الحفاظ على دقة قريبة من النموذج الكامل.
نشر Whisper من Marketplace ServOrbit
تُقدم ServOrbit تطبيق Whisper جاهزًا مسبقًا في سوقها للذكاء الاصطناعي. بنقرة واحدة يصبح خادمك جاهزًا: Docker مثبَّت، الصورة onerahmet/openai-whisper-asr-webservice:latest منشورة، Nginx مُعدَّ مع TLS ومفتاح API مُولَّد تلقائيًا. تختار النموذج (من tiny إلى large-v3) عند التثبيت وتستفيد من تحديثات بنقرة واحدة.