Transformers Kütüphanesi Kurulumu ve İlk Model Testi

Makine öğrenmesi dünyasına adım atmak istiyorsanız, Hugging Face’in geliştirdiği transformers kütüphanesi muhtemelen ilk durağınız olacak. PyTorch veya TensorFlow üzerine inşa edilmiş bu kütüphane, binlerce önceden eğitilmiş modele erişmenizi ve bunları dakikalar içinde kullanmaya başlamanızı sağlıyor. Ama “kurulumu yaptım, şimdi ne yapacağım?” noktasında çoğu sysadmin kaybolabiliyor. Bu yazıda kurulumdan başlayıp gerçek bir model testi yapana kadar her adımı ele alacağız.

Ortam Hazırlığı ve Gereksinimler

Başlamadan önce neye ihtiyacınız olduğunu netleştirelim. transformers kütüphanesi Python 3.8 ve üzerini destekliyor. GPU kullanmak zorunda değilsiniz, ancak büyük modellerde CPU ile çalışmak sabır gerektirir.

Sistem gereksinimlerini şöyle özetleyebilirim:

  • Python: 3.8 veya üzeri (3.10+ önerilir)
  • RAM: Minimum 8 GB, büyük modeller için 16 GB+
  • Disk: Model boyutuna göre değişir, küçük modeller 500 MB, büyükler 10+ GB yer kaplar
  • GPU (opsiyonel): NVIDIA CUDA destekli kart, VRAM 4 GB minimum

İlk olarak Python versiyonunuzu kontrol edin:

python3 --version
pip3 --version

Ben her zaman sanal ortam kullanmayı öneriyorum. Sistem Python’unu kirletmemek ve bağımlılık çakışmalarından kaçınmak için bu şart gibi bir şey:

# Sanal ortam oluşturma
python3 -m venv ~/huggingface-env

# Aktivasyon (Linux/macOS)
source ~/huggingface-env/bin/activate

# Aktivasyon (Windows PowerShell)
# .huggingface-envScriptsActivate.ps1

# Ortamın aktif olduğunu doğrulama
which python

Transformers Kütüphanesini Kurma

Sanal ortam aktifken kuruluma geçebiliriz. Temel kurulum için pip yeterli, ancak PyTorch’u ayrıca kurmamız gerekiyor çünkü transformers bunu otomatik getirmiyor:

# Önce pip'i güncelleyelim
pip install --upgrade pip

# CPU için PyTorch kurulumu
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

# CUDA 11.8 için PyTorch (GPU kullanacaksanız)
# pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# Transformers ve gerekli ek paketler
pip install transformers
pip install accelerate
pip install sentencepiece
pip install tokenizers

Kurulumun başarılı olduğunu doğrulamak için hızlı bir test yapalım:

python3 -c "import transformers; print(transformers.__version__)"
python3 -c "import torch; print(torch.__version__); print('CUDA:', torch.cuda.is_available())"

Eğer CUDA çıktısı True veriyorsa, GPU destekli çalışma yapabilirsiniz. False görüyorsanız CPU modunda devam edeceğiz, bu da tamamen geçerli.

Hugging Face Hub Yapılandırması

Model indirmeden önce Hugging Face Hub’ı yapılandırmak faydalı. Özellikle bazı modeller lisans kabul gerektiriyor ya da özel repo’lardan geliyor. Ücretsiz hesap açmanızı ve API token almanızı öneririm:

# Hugging Face CLI kurulumu
pip install huggingface_hub

# Giriş yapma (token ile)
huggingface-cli login

# Ya da token'ı doğrudan environment variable olarak set etme
export HUGGINGFACE_TOKEN="hf_xxxxxxxxxxxxx"

Model cache dizinini özelleştirmek de önemli. Varsayılan olarak modeller ~/.cache/huggingface/hub altına kaydediliyor. Disk alanı sıkıntısı yaşıyorsanız bunu değiştirebilirsiniz:

# Cache dizinini değiştirme
export HF_HOME="/data/huggingface_cache"
export TRANSFORMERS_CACHE="/data/huggingface_cache/transformers"

# Kalıcı hale getirmek için .bashrc veya .bash_profile'a ekleyin
echo 'export HF_HOME="/data/huggingface_cache"' >> ~/.bashrc
echo 'export TRANSFORMERS_CACHE="/data/huggingface_cache/transformers"' >> ~/.bashrc
source ~/.bashrc

İlk Model Testi: Metin Sınıflandırma

Şimdi asıl eğlenceli kısma geldik. En basit kullanım senaryosuyla başlayalım: duygu analizi. Bu pipeline, metni alıp olumlu/olumsuz olarak sınıflandırıyor:

from transformers import pipeline

# Pipeline oluşturma (model otomatik indirilir)
classifier = pipeline("sentiment-analysis")

# Test
sonuc = classifier("Bugün harika bir gün, her şey mükemmel gidiyor!")
print(sonuc)

# Birden fazla metin
metinler = [
    "Bu ürün berbat, hiç beğenmedim.",
    "Kesinlikle tavsiye ederim, çok memnun kaldım.",
    "Fiyat performans açısından idare eder."
]

sonuclar = classifier(metinler)
for metin, sonuc in zip(metinler, sonuclar):
    print(f"Metin: {metin[:50]}...")
    print(f"Etiket: {sonuc['label']}, Skor: {sonuc['score']:.4f}")
    print()

Bu kod ilk çalıştırmada modeli indirecek. distilbert-base-uncased-finetuned-sst-2-english modeli kullanıyor varsayılan olarak, yaklaşık 250 MB boyutunda. İkinci çalıştırmada cache’den yükleyeceği için çok daha hızlı başlayacak.

Farklı Pipeline Türleri

transformers pipeline API’si birçok farklı görevi destekliyor. Gerçek dünya senaryolarında en çok kullanacaklarınızı ele alalım:

Metin Üretimi (Text Generation):

from transformers import pipeline

# GPT-2 ile metin üretimi
generator = pipeline("text-generation", model="gpt2")

sonuc = generator(
    "Sistem yöneticileri için en önemli şey",
    max_length=100,
    num_return_sequences=2,
    temperature=0.7,
    do_sample=True
)

for idx, metin in enumerate(sonuc):
    print(f"--- Seçenek {idx + 1} ---")
    print(metin['generated_text'])
    print()

Soru Cevaplama (Question Answering):

from transformers import pipeline

qa_pipeline = pipeline("question-answering")

context = """
Linux, Linus Torvalds tarafından 1991 yılında geliştirilen açık kaynaklı bir işletim sistemi çekirdeğidir.
Sunucu dünyasında en yaygın kullanılan işletim sistemi olup internet altyapısının büyük çoğunluğunu oluşturur.
Ubuntu, CentOS, Debian ve Red Hat Enterprise Linux en popüler dağıtımlar arasında yer almaktadır.
"""

sorular = [
    "Linux kim tarafından geliştirildi?",
    "Linux ne zaman geliştirildi?",
    "En popüler Linux dağıtımları hangileri?"
]

for soru in sorular:
    yanit = qa_pipeline(question=soru, context=context)
    print(f"Soru: {soru}")
    print(f"Yanıt: {yanit['answer']} (Güven: {yanit['score']:.4f})")
    print()

Model ve Tokenizer’ı Manuel Kullanma

Pipeline API pratik ama daha fazla kontrol istiyorsanız model ve tokenizer’ı ayrı ayrı kullanabilirsiniz. Bu yaklaşım production ortamlarında tercih edilir çünkü batch boyutunu, padding stratejisini ve çıktı formatını tam kontrol edebilirsiniz:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_adi = "distilbert-base-uncased-finetuned-sst-2-english"

# Tokenizer ve model yükleme
tokenizer = AutoTokenizer.from_pretrained(model_adi)
model = AutoModelForSequenceClassification.from_pretrained(model_adi)

# Model'i eval moduna al (inference için şart)
model.eval()

def metin_siniflandir(metin):
    # Tokenize etme
    inputs = tokenizer(
        metin,
        return_tensors="pt",
        truncation=True,
        padding=True,
        max_length=512
    )

    # Gradient hesaplamayı devre dışı bırak (bellek tasarrufu)
    with torch.no_grad():
        outputs = model(**inputs)

    # Softmax ile olasılık hesaplama
    probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)
    tahmin = torch.argmax(probabilities, dim=-1).item()

    etiketler = {0: "NEGATIVE", 1: "POSITIVE"}
    return {
        "etiket": etiketler[tahmin],
        "negatif_oran": probabilities[0][0].item(),
        "pozitif_oran": probabilities[0][1].item()
    }

# Test
test_metinleri = [
    "Server crashed again at 3 AM, what a nightmare.",
    "The new deployment went smoothly, very happy!",
    "Performance is acceptable but could be better."
]

for metin in test_metinleri:
    sonuc = metin_siniflandir(metin)
    print(f"Metin: {metin}")
    print(f"Sonuç: {sonuc}")
    print()

Gerçek Dünya Senaryosu: Log Analizi

Şimdi sysadmin olarak bizi doğrudan ilgilendiren bir örnek yapalım. Sistem loglarını analiz edip kritik hataları tespit etmek için bir basit pipeline kuruyoruz:

from transformers import pipeline
import re
from datetime import datetime

# Zero-shot classification kullanarak log kategorileme
classifier = pipeline(
    "zero-shot-classification",
    model="facebook/bart-large-mnli"
)

# Örnek log satırları
log_satirlari = [
    "2024-01-15 03:42:11 ERROR disk usage on /dev/sda1 reached 95%",
    "2024-01-15 03:43:22 WARNING memory consumption exceeded 80% threshold",
    "2024-01-15 03:44:01 INFO backup process completed successfully",
    "2024-01-15 03:45:15 ERROR connection refused to database server",
    "2024-01-15 03:46:30 CRITICAL kernel panic detected on node-03",
    "2024-01-15 03:47:00 INFO scheduled maintenance window started"
]

kategoriler = ["kritik acil durum", "performans uyarısı", "normal operasyon", "güvenlik ihlali"]

print("=== Log Analiz Raporu ===n")

for log in log_satirlari:
    sonuc = classifier(log, kategoriler)
    en_yuksek_kategori = sonuc['labels'][0]
    en_yuksek_skor = sonuc['scores'][0]

    # Kritik durumları işaretle
    if en_yuksek_skor > 0.5 and "kritik" in en_yuksek_kategori:
        oncelik = ">>> ACIL <<<"
    elif en_yuksek_skor > 0.4 and "uyarı" in en_yuksek_kategori:
        oncelik = "! UYARI !"
    else:
        oncelik = "  bilgi  "

    print(f"[{oncelik}] {log[-50:]}...")
    print(f"         Kategori: {en_yuksek_kategori} (Skor: {en_yuksek_skor:.3f})")
    print()

Bu örnekte facebook/bart-large-mnli modeli ilk indirmede yaklaşık 1.6 GB yer kaplıyor. Production’da bunu bir kez indirip cache’de tutmanız gerekiyor.

Performans ve Optimizasyon İpuçları

Model çalıştırırken karşılaşacağınız en büyük sorun bellek ve hız. Birkaç pratik önlem:

# Mevcut GPU belleğini kontrol etme
python3 -c "import torch; print(torch.cuda.memory_summary())"

# Model cache'deki dosyaları listeleme
huggingface-cli scan-cache

# Kullanmadığınız modelleri temizleme
huggingface-cli delete-cache

Kod tarafında da optimizasyonlar yapabilirsiniz:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# 8-bit quantization ile bellek tasarrufu (bitsandbytes gerekli)
# pip install bitsandbytes

model_adi = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_adi)

# Yarı hassasiyette yükleme (GPU'da bellek tasarrufu)
model = AutoModelForCausalLM.from_pretrained(
    model_adi,
    torch_dtype=torch.float16,  # float32 yerine float16
    low_cpu_mem_usage=True       # CPU bellek kullanımını azalt
)

# Device map ile otomatik dağıtım
# model = AutoModelForCausalLM.from_pretrained(
#     model_adi,
#     device_map="auto"  # GPU varsa GPU'ya, yoksa CPU'ya
# )

print(f"Model parametreleri: {sum(p.numel() for p in model.parameters()):,}")
print(f"Model boyutu (MB): {sum(p.numel() * p.element_size() for p in model.parameters()) / 1024**2:.1f}")

Batch processing ile throughput’u artırabilirsiniz:

from transformers import pipeline

# Batch işleme için pipeline yapılandırması
classifier = pipeline(
    "sentiment-analysis",
    batch_size=16,  # Aynı anda 16 metin işle
    device=0 if torch.cuda.is_available() else -1  # GPU varsa kullan
)

# Büyük veri seti için batch işleme
buyuk_liste = ["örnek metin " + str(i) for i in range(100)]

sonuclar = classifier(buyuk_liste)
print(f"Toplam {len(sonuclar)} metin işlendi")

Troubleshooting: Sık Karşılaşılan Sorunlar

Sistemde kaçınılmaz olarak sorunlarla karşılaşacaksınız. En yaygınları ve çözümleri:

Model indirme timeout hatası:

# Timeout süresini artırma
export REQUESTS_TIMEOUT=300

# Proxy üzerinden indirme
export HTTPS_PROXY="http://proxy.sirket.com:8080"
export HTTP_PROXY="http://proxy.sirket.com:8080"

# Bağlantıyı test etme
python3 -c "from huggingface_hub import hf_hub_download; print('Hub erişilebilir')"

CUDA out of memory hatası:

# GPU belleğini temizleme (Python içinde)
# import torch; torch.cuda.empty_cache()

# Daha küçük model kullanma veya batch_size düşürme
# Alternatif: CPU'ya fallback
export CUDA_VISIBLE_DEVICES=""  # GPU'yu devre dışı bırak

Tokenizer encoding hatası:

# Özel karakterler için encoding düzeltme
tokenizer = AutoTokenizer.from_pretrained(
    model_adi,
    use_fast=True,
    clean_up_tokenization_spaces=True
)

# Uzun metinleri güvenli şekilde kırpma
inputs = tokenizer(
    uzun_metin,
    truncation=True,
    max_length=tokenizer.model_max_length,
    return_tensors="pt"
)

Offline Kullanım için Model İndirme

Air-gapped sunucularda çalışıyorsanız modelleri önceden indirip offline kullanmanız gerekiyor:

# Modeli lokal dizine indirme
python3 -c "
from transformers import AutoTokenizer, AutoModel

model_adi = 'distilbert-base-uncased'
kayit_dizini = '/opt/ai_models/distilbert'

tokenizer = AutoTokenizer.from_pretrained(model_adi)
model = AutoModel.from_pretrained(model_adi)

tokenizer.save_pretrained(kayit_dizini)
model.save_pretrained(kayit_dizini)
print(f'Model {kayit_dizini} dizinine kaydedildi')
"

# Lokal modelden yükleme
python3 -c "
from transformers import AutoTokenizer, AutoModel

lokal_dizin = '/opt/ai_models/distilbert'
tokenizer = AutoTokenizer.from_pretrained(lokal_dizin, local_files_only=True)
model = AutoModel.from_pretrained(lokal_dizin, local_files_only=True)
print('Model başarıyla lokal dizinden yüklendi')
"

Bu yaklaşım özellikle güvenlik politikaları nedeniyle internet erişimi kısıtlı datacenter ortamlarında hayat kurtarıyor. İnternete bağlı bir makinede indirip /opt/ai_models altına koyuyor, sonra da bu dizini hedef sunucuya rsync ile taşıyorsunuz.

Sonuç

Transformers kütüphanesi başta karmaşık görünebilir ama aslında oldukça düzenli bir API’ye sahip. Temel akış şöyle özetlenebilir: sanal ortam oluştur, PyTorch ve transformers’ı kur, pipeline veya manuel model yüklemesiyle başla, cache yönetimine dikkat et.

Sysadmin perspektifinden bakıldığında en kritik noktalar şunlar: disk alanını takip edin çünkü modeller çok yer kaplıyor, production’da modelleri lokal cache’de tutun ve her seferinde indirmeyin, büyük batch işlemler için GPU yoksa bile CPU üzerinde makul süreler elde edebilirsiniz küçük modellerle.

Bir sonraki adım olarak Hugging Face Model Hub’ı keşfetmenizi ve kendi kullanım senaryonuza uygun modeller aramanızı öneririm. Özellikle Türkçe NLP görevleri için dbmdz/bert-base-turkish-cased gibi Türkçe modeller mevcut ve bunlar log analizi, ticket sınıflandırma gibi işlerde gerçekten işe yarıyor. Kurulum zahmetini bir kez çektikten sonra gerisi oldukça akıcı ilerliyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir