تثبيت Ollama: دليل تشغيل نماذج اللغة الكبيرة محلياً
تثبيت Ollama، تشغيل نماذج LLM المحلية (Llama 3، Mistral، Gemma)، استخدام API، إدارة النماذج، تسريع GPU والنشر عبر Docker.
تثبيت OpenAI Whisper، النسخ السريع مع faster-whisper، دعم اللغات المتعددة، خادم API، نشر Docker وتحسين التعرف على الكلام.
OpenAI Whisper هو نموذج ذكاء اصطناعي قوي قادر على التعرف على الكلام والنسخ في 99 لغة. بتشغيله على خادمك الخاص، يمكنك إجراء نسخ غير محدود، وحماية خصوصيتك، والتخلص من تكاليف API. يغطي هذا الدليل تثبيت Whisper و faster-whisper، وإنشاء خادم API، ونشر Docker.
Whisper هو نموذج التعرف التلقائي على الكلام (ASR) طورته OpenAI. تم تدريبه على 680,000 ساعة من البيانات متعددة اللغات. الميزات الرئيسية:
| النموذج | المعلمات | VRAM | السرعة | الدقة |
|---|---|---|---|---|
| tiny | 39 م | ~1 جيجابايت | سريع جداً | منخفضة |
| base | 74 م | ~1 جيجابايت | سريع | متوسطة |
| small | 244 م | ~2 جيجابايت | متوسط | جيدة |
| medium | 769 م | ~5 جيجابايت | بطيء | جيدة جداً |
| large-v3 | 1.55 ب | ~10 جيجابايت | الأبطأ | الأفضل |
# بيئة Python الافتراضية
python3 -m venv whisper-env
source whisper-env/bin/activate
# تثبيت Whisper
pip install openai-whisper
# تثبيت FFmpeg (لمعالجة الصوت)
sudo apt-get install -y ffmpeg
# النسخ الأساسي
whisper audio.mp3 --model medium --language Arabic
# الترجمة إلى الإنجليزية
whisper audio.mp3 --model medium --task translate
# تنسيق ترجمة SRT
whisper audio.mp3 --model medium --language Arabic --output_format srt
# طوابع زمنية على مستوى الكلمات
whisper audio.mp3 --model medium --language Arabic --word_timestamps True
import whisper
# تحميل النموذج
model = whisper.load_model("medium")
# النسخ
result = model.transcribe(
"audio.mp3",
language="ar",
task="transcribe",
word_timestamps=True
)
print(result["text"])
for segment in result["segments"]:
start = segment["start"]
end = segment["end"]
text = segment["text"]
print(f"[{start:.2f} - {end:.2f}] {text}")
Faster-whisper هو تنفيذ Whisper قائم على CTranslate2. يعمل أسرع حتى 4 مرات من الأصلي ويستخدم ذاكرة أقل.
pip install faster-whisper
from faster_whisper import WhisperModel
# تحميل النموذج (GPU)
model = WhisperModel(
"large-v3",
device="cuda",
compute_type="float16"
)
# لوضع CPU
# model = WhisperModel("large-v3", device="cpu", compute_type="int8")
segments, info = model.transcribe(
"audio.mp3",
language="ar",
beam_size=5,
word_timestamps=True,
vad_filter=True
)
print(f"اللغة المكتشفة: {info.language} (الاحتمال: {info.language_probability:.2f})")
for segment in segments:
print(f"[{segment.start:.2f}ث -> {segment.end:.2f}ث] {segment.text}")
from fastapi import FastAPI, UploadFile, File
from faster_whisper import WhisperModel
import tempfile
import os
app = FastAPI(title="Whisper API")
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
@app.post("/v1/audio/transcriptions")
async def transcribe(
file: UploadFile = File(...),
language: str = None,
response_format: str = "json"
):
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as tmp:
content = await file.read()
tmp.write(content)
tmp_path = tmp.name
try:
segments, info = model.transcribe(tmp_path, language=language, beam_size=5, vad_filter=True)
segments_list = list(segments)
full_text = " ".join([s.text.strip() for s in segments_list])
return {
"text": full_text,
"language": info.language,
"duration": info.duration,
"segments": [{"start": s.start, "end": s.end, "text": s.text.strip()} for s in segments_list]
}
finally:
os.unlink(tmp_path)
@app.get("/health")
async def health():
return {"status": "ok", "model": "large-v3"}
FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y \
python3 python3-pip ffmpeg \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY whisper_api.py .
EXPOSE 9000
CMD ["uvicorn", "whisper_api:app", "--host", "0.0.0.0", "--port", "9000"]
version: '3.8'
services:
whisper:
build: .
container_name: whisper-api
ports:
- "9000:9000"
volumes:
- whisper_cache:/root/.cache
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
whisper_cache:
# النسخ مع تحميل ملف
curl -X POST http://localhost:9000/v1/audio/transcriptions \
-F "file=@meeting.mp3" \
-F "language=ar"
# الكشف التلقائي عن اللغة
curl -X POST http://localhost:9000/v1/audio/transcriptions \
-F "file=@audio.wav"
import requests
def transcribe_audio(file_path, language=None):
url = "http://localhost:9000/v1/audio/transcriptions"
with open(file_path, "rb") as f:
files = {"file": f}
data = {"language": language} if language else {}
response = requests.post(url, files=files, data=data)
return response.json()
result = transcribe_audio("meeting.mp3", language="ar")
print(f"النص: {result['text']}")
print(f"المدة: {result['duration']:.1f} ثانية")
import os, glob
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
audio_files = glob.glob("audio_files/*.mp3") + glob.glob("audio_files/*.wav")
for audio_file in audio_files:
print(f"المعالجة: {audio_file}")
segments, info = model.transcribe(audio_file, language="ar", vad_filter=True)
output_file = os.path.splitext(audio_file)[0] + ".txt"
with open(output_file, "w", encoding="utf-8") as f:
for segment in segments:
f.write(f"[{segment.start:.2f} - {segment.end:.2f}] {segment.text}\n")
print(f" تم الحفظ: {output_file}")
قم بالتعرف على الكلام والنسخ بسرعة عالية مع Whisper على خوادم REXE GPU. احصل على نتائج عالية الدقة في 99 لغة مع نموذج large-v3.
Whisper يدعم MP3 و WAV و M4A و FLAC و OGG و WMA والعديد من تنسيقات الصوت الأخرى. طالما أن FFmpeg مثبت، يمكنه استخراج الصوت من جميع تنسيقات الصوت والفيديو تقريباً ونسخها.
faster-whisper هو تنفيذ قائم على CTranslate2 يعمل أسرع حتى 4 مرات من الأصلي. كما يستخدم ذاكرة أقل. مع دعم تكميم INT8 يعمل بكفاءة في وضع CPU أيضاً.
نعم، Whisper يعمل في وضع CPU أيضاً. لكن GPU يوفر نتائج أسرع بكثير. في وضع CPU يمكنك تحسين الأداء باستخدام faster-whisper مع تكميم INT8. نماذج small أو base مناسبة لـ CPU.
نموذج Whisper large-v3 يوفر دقة عالية بالعربية. مع تسجيلات صوتية نظيفة يمكن تحقيق دقة تزيد عن 95%. قد تنخفض الدقة في البيئات الصاخبة أو مع اللهجات.
Whisper يقسم الملفات الصوتية تلقائياً إلى مقاطع مدتها 30 ثانية. يمكن معالجة الملفات التي تستمر لساعات أيضاً. مرشح VAD في faster-whisper يقصر وقت المعالجة بتخطي الأقسام الصامتة.
Whisper يعمل أساساً على الملفات، لكن يمكن تحقيق نسخ شبه فوري بتقسيم البث الصوتي إلى أجزاء صغيرة. يمكن استخدام مشاريع مثل whisper-streaming لهذا الغرض.
تثبيت Ollama، تشغيل نماذج LLM المحلية (Llama 3، Mistral، Gemma)، استخدام API، إدارة النماذج، تسريع GPU والنشر عبر Docker.
تثبيت Open WebUI عبر Docker، التكامل مع Ollama، إدارة المستخدمين، RAG (استعلام المستندات)، إدارة النماذج ودعم المستخدمين المتعددين.
تثبيت تعريفات NVIDIA، مجموعة أدوات CUDA، nvidia-container-toolkit، خدمة النماذج مع vLLM، مراقبة GPU ونشر نماذج AI مع Docker.