Ollama Kurulumu: Yerel LLM Çalıştırma Rehberi
Ollama kurulumu, yerel LLM modelleri çalıştırma (Llama 3, Mistral, Gemma), API kullanımı, model yönetimi, GPU hızlandırma ve Docker ile deployment.
OpenAI Whisper kurulumu, faster-whisper ile hızlı transkripsiyon, çoklu dil desteği, API sunucusu, Docker deployment ve ses tanıma optimizasyonu rehberi.
OpenAI Whisper, 99 dilde ses tanıma ve transkripsiyon yapabilen güçlü bir yapay zeka modelidir. Kendi sunucunuzda çalıştırarak sınırsız transkripsiyon yapabilir, gizliliğinizi koruyabilir ve API maliyetlerinden kurtulabilirsiniz. Bu rehberde Whisper ve faster-whisper kurulumunu, API sunucusu oluşturmayı ve Docker ile deployment'ı ele alacağız.
Whisper, OpenAI tarafından geliştirilen otomatik konuşma tanıma (ASR) modelidir. 680.000 saat çoklu dil verisinde eğitilmiştir. Temel özellikleri:
| Model | Parametre | VRAM | Hız | Doğruluk |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | Çok hızlı | Düşük |
| base | 74 M | ~1 GB | Hızlı | Orta |
| small | 244 M | ~2 GB | Orta | İyi |
| medium | 769 M | ~5 GB | Yavaş | Çok iyi |
| large-v3 | 1.55 B | ~10 GB | En yavaş | En iyi |
# Python sanal ortam
python3 -m venv whisper-env
source whisper-env/bin/activate
# Whisper kurulumu
pip install openai-whisper
# FFmpeg kurulumu (ses işleme için)
sudo apt-get install -y ffmpeg
# Temel transkripsiyon
whisper audio.mp3 --model medium --language Turkish
# İngilizce'ye çeviri
whisper audio.mp3 --model medium --task translate
# SRT altyazı formatında çıktı
whisper audio.mp3 --model medium --language Turkish --output_format srt
# Kelime bazında zaman damgası
whisper audio.mp3 --model medium --language Turkish --word_timestamps True
import whisper
# Model yükleme
model = whisper.load_model("medium")
# Transkripsiyon
result = model.transcribe(
"audio.mp3",
language="tr",
task="transcribe",
word_timestamps=True
)
print(result["text"])
# Segment bazında çıktı
for segment in result["segments"]:
start = segment["start"]
end = segment["end"]
text = segment["text"]
print(f"[{start:.2f} - {end:.2f}] {text}")
Faster-whisper, CTranslate2 tabanlı bir Whisper implementasyonudur. Orijinal Whisper'dan 4 kata kadar hızlı çalışır ve daha az bellek kullanır.
# Faster-whisper kurulumu
pip install faster-whisper
from faster_whisper import WhisperModel
# Model yükleme (GPU)
model = WhisperModel(
"large-v3",
device="cuda",
compute_type="float16"
)
# CPU modu için
# model = WhisperModel("large-v3", device="cpu", compute_type="int8")
# Transkripsiyon
segments, info = model.transcribe(
"audio.mp3",
language="tr",
beam_size=5,
word_timestamps=True,
vad_filter=True # Sessiz bölümleri atla
)
print(f"Algılanan dil: {info.language} (olasılık: {info.language_probability:.2f})")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {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"
):
# Geçici dosyaya kaydet
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])
if response_format == "text":
return full_text
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"}
pip install fastapi uvicorn python-multipart
uvicorn whisper_api:app --host 0.0.0.0 --port 9000
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"]
faster-whisper>=1.0.0
fastapi>=0.104.0
uvicorn>=0.24.0
python-multipart>=0.0.6
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:
# Dosya yükleme ile transkripsiyon
curl -X POST http://localhost:9000/v1/audio/transcriptions \
-F "file=@meeting.mp3" \
-F "language=tr"
# Otomatik dil algılama
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 = {}
if language:
data["language"] = language
response = requests.post(url, files=files, data=data)
return response.json()
# Kullanım
result = transcribe_audio("meeting.mp3", language="tr")
print(f"Metin: {result['text']}")
print(f"Süre: {result['duration']:.1f} saniye")
for seg in result["segments"]:
print(f" [{seg['start']:.1f}s] {seg['text']}")
import os
import glob
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
# Dizindeki tüm ses dosyalarını transkribe et
audio_files = glob.glob("audio_files/*.mp3") + glob.glob("audio_files/*.wav")
for audio_file in audio_files:
print(f"İşleniyor: {audio_file}")
segments, info = model.transcribe(audio_file, language="tr", 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" Kaydedildi: {output_file}")
def generate_srt(segments, output_path):
with open(output_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(segments, 1):
start = format_timestamp(segment.start)
end = format_timestamp(segment.end)
f.write(f"{i}\n{start} --> {end}\n{segment.text.strip()}\n\n")
def format_timestamp(seconds):
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds % 1) * 1000)
return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"
# Kullanım
segments, info = model.transcribe("video.mp4", language="tr")
generate_srt(list(segments), "subtitles.srt")
# VAD filtresi ile sessiz bölümleri atlama
segments, _ = model.transcribe("audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500))
# INT8 quantization (CPU modunda hız artışı)
model = WhisperModel("large-v3", device="cpu", compute_type="int8")
# Float16 (GPU modunda optimal)
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
REXE GPU sunucularında Whisper ile yüksek hızda ses tanıma ve transkripsiyon yapabilirsiniz. Large-v3 modeli ile Türkçe dahil 99 dilde yüksek doğrulukta sonuçlar elde edin.
Whisper; MP3, WAV, M4A, FLAC, OGG, WMA ve daha birçok ses formatını destekler. FFmpeg kurulu olduğu sürece neredeyse tüm ses ve video formatlarından ses çıkarabilir ve transkribe edebilir.
Faster-whisper, CTranslate2 tabanlı bir implementasyondur ve orijinal Whisper'dan 4 kata kadar hızlı çalışır. Ayrıca daha az bellek kullanır. INT8 quantization desteği ile CPU modunda da verimli çalışır.
Evet, Whisper CPU modunda da çalışır. Ancak GPU ile çok daha hızlı sonuç alırsınız. CPU modunda faster-whisper ile INT8 quantization kullanarak performansı artırabilirsiniz. Small veya base model CPU için uygundur.
Whisper large-v3 modeli Türkçe'de yüksek doğruluk sağlar. Temiz ses kayıtlarında %95+ doğruluk elde edilebilir. Gürültülü ortamlarda veya aksanlı konuşmalarda doğruluk düşebilir. VAD filtresi kullanmak doğruluğu artırır.
Whisper otomatik olarak ses dosyasını 30 saniyelik segmentlere böler. Saatlerce süren dosyalar da işlenebilir. Faster-whisper'ın VAD filtresi sessiz bölümleri atlayarak işlem süresini kısaltır.
Whisper temel olarak dosya tabanlı çalışır, ancak ses akışını küçük parçalara bölerek gerçek zamanlıya yakın transkripsiyon yapılabilir. whisper-streaming gibi projeler bu amaçla kullanılabilir.
Ollama kurulumu, yerel LLM modelleri çalıştırma (Llama 3, Mistral, Gemma), API kullanımı, model yönetimi, GPU hızlandırma ve Docker ile deployment.
Open WebUI kurulumu Docker ile, Ollama entegrasyonu, kullanıcı yönetimi, RAG (belge sorgulama), model yönetimi, özel promptlar ve çoklu kullanıcı desteği.
NVIDIA sürücü kurulumu, CUDA toolkit, nvidia-container-toolkit, vLLM ile model serving, GPU monitoring ve Docker ile AI model deployment rehberi.