Takip et

DigitalOcean GPU Droplet’lerinde Qwen-3 Dağıtımı: Kapsamlı Bir Rehber

DigitalOcean GPU Droplet’lerinde Qwen-3 Dağıtımı: Kapsamlı Bir Rehber Bu kapsamlı teknik makale, DigitalOcean’ın güçlü GPU Droplet’leri üz

DigitalOcean GPU Droplet’lerinde Qwen-3 Dağıtımı: Kapsamlı Bir Rehber

Bu kapsamlı teknik makale, DigitalOcean’ın güçlü GPU Droplet’leri üzerinde Aliyun tarafından geliştirilen açık kaynaklı büyük dil modeli (LLM) Qwen-3’ü başarıyla dağıtmak için adım adım bir rehber sunmaktadır. Yapay zeka ve makine öğrenimi projeleri için bulut tabanlı çözümler arayan geliştiriciler ve araştırmacılar için tasarlanmıştır. Bu rehber, bir GPU Droplet’in hazırlanmasından Qwen-3 modelinin yüklenmesine ve çalıştırılmasına kadar tüm süreci detaylandıracak, ayrıca performans optimizasyonları ve sık karşılaşılan sorunlara çözümler sunacaktır.

Giriş: Qwen-3 ve DigitalOcean GPU Droplet’leri

Büyük dil modelleri (LLM’ler), doğal dil işleme alanında devrim yaratmaya devam ederken, bu modelleri dağıtmak ve çalıştırmak için güçlü donanım altyapısına olan ihtiyaç da artmaktadır. Aliyun’un geliştirdiği Qwen-3, hem akademik araştırmacılar hem de endüstriyel geliştiriciler için güçlü bir araç sunan, geniş ölçekli, çok dilli ve çok modlu yeteneklere sahip açık kaynaklı bir LLM ailesidir. Farklı boyutlarda (örneğin, 2B, 7B, 72B parametreler) sunulan Qwen-3 modelleri, kodlama, metin özetleme, çeviri ve diyalog sistemleri gibi çeşitli görevlerde üstün performans sergilemektedir. Bu modellerin verimli bir şekilde çalıştırılması genellikle yüksek performanslı GPU’lar gerektirir.

DigitalOcean, geliştiricilere kolay erişilebilir, uygun maliyetli ve ölçeklenebilir bulut altyapısı sağlamasıyla bilinir. Son zamanlarda kullanıma sunulan GPU Droplet’leri, özellikle makine öğrenimi iş yükleri için tasarlanmış olup, NVIDIA’nın güçlü GPU’larını (genellikle A100 veya H100 gibi) barındırarak bu tür modellerin eğitimi ve çıkarımı için ideal bir platform sunmaktadır. DigitalOcean’ın basit kullanıcı arayüzü ve geliştirici dostu ekosistemi, karmaşık AI modellerinin buluta dağıtımını daha erişilebilir hale getirmektedir.

Bu rehberin amacı, Qwen-3’ün tüm potansiyelini DigitalOcean GPU Droplet’lerinde ortaya çıkarmak için gerekli tüm teknik adımları ve en iyi uygulamaları sağlamaktır. Okuyucular, bu rehberin sonunda kendi Qwen-3 dağıtımlarını başarıyla gerçekleştirebilecek ve yapay zeka projelerine hız kazandırabileceklerdir.

Önkoşullar

Bu rehberdeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olmanız gerekmektedir:

* DigitalOcean Hesabı: Aktif bir DigitalOcean hesabınız olmalı ve kredi kartı bilgileriniz tanımlanmış olmalıdır. GPU Droplet’leri, standart Droplet’lerden daha yüksek maliyetli olduğundan, yeterli bakiyeniz veya kredi limitiniz olduğundan emin olun.
* Temel Linux Komut Satırı Bilgisi: SSH aracılığıyla sunucuya bağlanma, dosya sistemi navigasyonu, paket yükleme ve temel sistem komutlarını kullanma konusunda bilgi sahibi olmalısınız.
* SSH İstemcisi: Sunucunuza güvenli bir şekilde bağlanmak için bir SSH istemcisine ihtiyacınız olacak (örneğin, Linux/macOS için ssh komutu, Windows için PuTTY veya Windows Terminal’de OpenSSH).
* Büyük Dil Modellerine Genel Aşinalık: transformers kütüphanesi, model yükleme ve çıkarım kavramlarına aşina olmak, süreci daha iyi anlamanıza yardımcı olacaktır.

Doğru DigitalOcean GPU Droplet’ini Seçmek

Qwen-3 modelinin performansı ve maliyeti üzerinde doğrudan etkisi olacak en kritik adımlardan biri, doğru GPU Droplet’ini seçmektir. DigitalOcean, farklı GPU seçenekleri ve yapılandırmaları sunabilir.

GPU Seçenekleri

Qwen-3 gibi büyük dil modelleri, yüksek paralel işleme kapasitesine sahip GPU’lara ihtiyaç duyar. DigitalOcean’ın sunduğu GPU seçenekleri genellikle şunları içerir:

* NVIDIA A100: Genellikle yüksek performanslı AI iş yükleri için endüstri standardı kabul edilen güçlü bir GPU’dur. Yüksek GPU belleği (genellikle 40GB veya 80GB) ve Tensor Core’ları sayesinde Qwen-3’ün büyük versiyonlarını bile verimli bir şekilde çalıştırabilir.
* NVIDIA H100: A100’den daha yeni ve daha güçlü bir GPU’dur. Eğer DigitalOcean bu seçeneği sunuyorsa ve bütçeniz uygunsa, en yüksek performansı H100 ile elde edersiniz.

Qwen-3’ün hangi versiyonunu çalıştırmak istediğinize bağlı olarak GPU belleği ihtiyacınız değişecektir:

* Qwen-3-2B-Chat: Genellikle 8GB-16GB GPU belleği yeterli olabilir.
* Qwen-3-7B-Chat: Minimum 16GB, tercihen 24GB+ GPU belleği önerilir.
* Qwen-3-72B-Chat: Bu model için en az 40GB GPU belleği, hatta 80GB belleğe sahip bir A100 veya H100 GPU gereklidir. Quantized (nicelendirilmiş) versiyonlar daha az bellek tüketir ancak performans düşüşleri yaşanabilir.

CPU, RAM ve Depolama

GPU’nun yanı sıra, Droplet’in CPU, RAM ve depolama kaynakları da önemlidir:

* CPU: Model yükleme, ön işleme ve bazı çıkarım adımları CPU üzerinde gerçekleşir. Yeterli sayıda vCPU (genellikle 4-8 vCPU) performansı olumlu etkiler.
* RAM: Modelin tamamı GPU belleğine sığmasa bile, bazı kısımları veya ara katmanları RAM’de tutulabilir. Ayrıca Python çalışma zamanı ve diğer kütüphaneler için de RAM gereklidir. GPU belleğiniz ne kadar azsa, RAM ihtiyacınız o kadar artabilir. Genellikle 32GB veya 64GB RAM, 7B veya 72B modeller için iyi bir başlangıç noktasıdır.
* Depolama (SSD): Model dosyaları oldukça büyüktür (72B model için onlarca GB). Yüksek hızlı SSD depolama, modelin hızlı bir şekilde yüklenmesini sağlar. En az 100GB, hatta 200GB+ depolama alanı ayırmanız önerilir.

Bölge Seçimi

DigitalOcean, farklı coğrafi bölgelerde veri merkezleri sunar. Kullanıcılara olan coğrafi yakınlık, gecikme süresini (latency) azaltır. Ayrıca, bazı bölgelerde GPU Droplet’lerinin mevcudiyeti veya fiyatlandırması farklılık gösterebilir. Projenizin hedef kitlesine en yakın ve GPU Droplet’lerinin mevcut olduğu bir bölgeyi seçin.

İşletim Sistemi

GPU Droplet’leri için genellikle Ubuntu LTS (Long Term Support) sürümleri önerilir (örneğin, Ubuntu 22.04 LTS). Bu sürümler, kararlılıkları, geniş topluluk desteği ve güncel yazılım paketlerine erişim kolaylığı nedeniyle tercih edilir.

DigitalOcean GPU Droplet’inizi Kurmak

DigitalOcean kontrol paneli üzerinden GPU Droplet’inizi oluşturmak oldukça basittir.

Droplet Oluşturma Adımları

1. DigitalOcean Kontrol Paneline Giriş Yapın: Tarayıcınızdan DigitalOcean hesabınıza giriş yapın.
2. “Create” (Oluştur) Butonuna Tıklayın: Sağ üst köşede bulunan “Create” butonuna ve ardından “Droplets” seçeneğine tıklayın.
3. Bölgeyi Seçin: Projeniz için en uygun coğrafi bölgeyi seçin. Unutmayın, GPU Droplet’leri her bölgede mevcut olmayabilir.
4. Görüntüyü (Image) Seçin: İşletim sistemi olarak “Ubuntu” ve en son LTS sürümünü (örneğin, 22.04 LTS) seçin.
5. Droplet Tipini ve Planını Seçin: Burası en önemli adımdır.
* “Choose a plan” (Bir plan seçin) bölümünde, genellikle “GPU Optimized” (GPU Optimize Edilmiş) veya benzeri bir kategori bulacaksınız.
* Qwen-3 modelinizin boyutuna ve bütçenize uygun GPU modelini (örneğin, NVIDIA A100) ve onunla birlikte gelen CPU, RAM ve depolama yapılandırmasını seçin.
6. Kimlik Doğrulama (Authentication) Yöntemini Seçin: SSH anahtarı kullanmanız şiddetle tavsiye edilir. Mevcut bir SSH anahtarınızı ekleyebilir veya yeni bir tane oluşturabilirsiniz. Bu, sunucuya güvenli bir şekilde bağlanmanızı sağlar.
7. Ek Seçenekler (İsteğe Bağlı):
* VPC Network: Eğer birden fazla Droplet’iniz varsa ve özel bir ağda iletişim kurmalarını istiyorsanız seçebilirsiniz.
* Monitoring: DigitalOcean’ın varsayılan izleme araçları genellikle etkindir.
* Backups: Veri kaybına karşı düzenli yedeklemeler için etkinleştirebilirsiniz (ek ücrete tabidir).
8. Hostname (Ana Bilgisayar Adı) ve Etiketler: Droplet’inize kolayca tanıyabileceğiniz bir isim verin (örneğin, qwen3-gpu-droplet).
9. “Create Droplet” (Droplet Oluştur) Butonuna Tıklayın: Droplet’iniz birkaç dakika içinde oluşturulacak ve size IP adresi verilecektir.

SSH Erişimi

Droplet’iniz oluştuktan sonra, SSH anahtarınızı kullanarak ona bağlanabilirsiniz:

ssh root@

yerine DigitalOcean kontrol panelinde gördüğünüz IP adresini yazın. Eğer ilk kez bağlanıyorsanız, sunucunun parmak izini kabul etmeniz istenebilir.

İlk Sunucu Kurulumu ve Güvenlik

Sunucuya bağlandıktan sonra, ilk güvenlik ve güncelleme adımlarını uygulamanız önemlidir:

1. Sistem Güncellemeleri:

sudo apt update
    sudo apt upgrade -y

Bu komutlar, sistemdeki tüm paketleri en son sürümlerine güncelleyecektir.
2. Güvenlik Duvarı (UFW) Yapılandırması: Yalnızca gerekli portlara erişime izin vermek için bir güvenlik duvarı kurmak önemlidir.

sudo apt install ufw -y
    sudo ufw allow OpenSSH
    # Eğer bir web API dağıtacaksanız, HTTP/HTTPS portlarını da açın
    # sudo ufw allow http
    # sudo ufw allow https
    sudo ufw enable
    sudo ufw status

ufw status komutu, güvenlik duvarının durumunu ve izin verilen kuralları gösterecektir.

NVIDIA Sürücülerini ve CUDA Toolkit’i Kurmak

Qwen-3 modelinin GPU üzerinde çalışabilmesi için NVIDIA sürücülerinin ve CUDA Toolkit’in doğru şekilde kurulması hayati önem taşır. DigitalOcean GPU Droplet’lerinde bu sürücüler önceden yüklü gelebilir, ancak en güncel ve uyumlu sürümleri kontrol etmek ve gerekirse kurmak her zaman iyi bir uygulamadır.

Mevcut Sürücüleri Kontrol Etme

İlk olarak, nvidia-smi komutunu çalıştırarak NVIDIA sürücülerinin yüklü olup olmadığını ve GPU’nuzun tanınıp tanınmadığını kontrol edin:

nvidia-smi

Eğer bu komut GPU bilgilerinizi (sürücü versiyonu, CUDA versiyonu, GPU belleği kullanımı vb.) gösteriyorsa, sürücüleriniz muhtemelen zaten yüklüdür. Eğer hata alıyorsanız veya komut bulunamıyorsa, sürücüleri manuel olarak yüklemeniz gerekecektir.

NVIDIA Sürücülerini Yükleme (Gerekirse)

DigitalOcean genellikle GPU Droplet’lerine uygun sürücüleri önceden yükler. Ancak, manuel yükleme gerekirse:

1. NVIDIA Depolarını Ekleme:

sudo apt update
    sudo apt install software-properties-common -y
    sudo add-apt-repository ppa:graphics-drivers/ppa -y
    sudo apt update

2. Önerilen Sürücüyü Bulma ve Yükleme:

ubuntu-drivers devices

Bu komut, sisteminiz için önerilen NVIDIA sürücüsünü listeleyecektir (örneğin, nvidia-driver-535). Önerilen sürücüyü yükleyin:

sudo apt install nvidia-driver- -y
    # Örneğin: sudo apt install nvidia-driver-535 -y

3. Sistemi Yeniden Başlatma: Sürücülerin düzgün çalışması için sistemi yeniden başlatmanız gerekebilir:

sudo reboot

Yeniden başlattıktan sonra SSH üzerinden tekrar bağlanın ve nvidia-smi komutunu tekrar çalıştırarak sürücülerin doğru şekilde yüklendiğini doğrulayın.

CUDA Toolkit Kurulumu

CUDA Toolkit, GPU üzerinde paralel hesaplama yapmak için NVIDIA’nın yazılım geliştirme kitidir. PyTorch ve Transformers gibi kütüphaneler, GPU hızlandırması için CUDA’ya bağımlıdır.

1. CUDA Sürümü Uyumluluğu: nvidia-smi çıktısında gördüğünüz CUDA sürümünün, kullanmayı planladığınız PyTorch sürümüyle uyumlu olduğundan emin olun. Genellikle, NVIDIA’nın web sitesinden en son CUDA Toolkit’i indirmek ve kurmak en iyisidir.
2. CUDA Toolkit’i İndirme: NVIDIA’nın resmi sitesinden (developer.nvidia.com/cuda-downloads) Ubuntu için uygun .deb veya runfile paketini indirin. SSH üzerinden doğrudan sunucuya indirmek için wget kullanabilirsiniz.
Örnek (Ubuntu 22.04 için CUDA 12.x):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
    sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda-repo-ubuntu2204-12-3-local_12.3.2-1_amd64.deb
    sudo dpkg -i cuda-repo-ubuntu2204-12-3-local_12.3.2-1_amd64.deb
    sudo cp /var/cuda-repo-ubuntu2204-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt update
    sudo apt install cuda -y

Not: Yukarıdaki URL ve sürüm numaraları zamanla değişebilir. Her zaman NVIDIA’nın resmi web sitesindeki en güncel talimatları kontrol edin.
3. Ortam Değişkenlerini Ayarlama: CUDA’nın doğru şekilde çalışması için ortam değişkenlerini ayarlamanız gerekir. .bashrc dosyanıza aşağıdaki satırları ekleyin:

echo 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
    source ~/.bashrc

4. Kurulumu Doğrulama:

nvcc --version

Bu komut, yüklü CUDA derleyicisinin sürümünü göstermelidir.

cuDNN Kurulumu (İsteğe Bağlı ama Önerilir)

cuDNN, derin öğrenme için GPU hızlandırmalı ilkel fonksiyonlar kütüphanesidir. Performansı önemli ölçüde artırabilir. NVIDIA Geliştirici programına kaydolmanız ve cuDNN’i manuel olarak indirip kurmanız gerekebilir. Genellikle CUDA Toolkit ile birlikte gelen bir versiyonu olsa da, en güncel ve optimize edilmiş cuDNN versiyonunu kurmak faydalıdır.

Python Ortamını Kurmak

Qwen-3 modelini çalıştırmak için izole ve iyi yapılandırılmış bir Python ortamına ihtiyacımız var.

1. Python 3.9+ Kurulumu: DigitalOcean Ubuntu Droplet’leri genellikle Python 3’ün güncel bir sürümüyle gelir. Mevcut sürümü kontrol edin:

python3 --version

Eğer 3.9’dan düşükse veya farklı bir sürüm istiyorsanız:

sudo apt install python3.9 python3.9-venv -y

2. Sanal Ortam Oluşturma: Projeleriniz için sanal ortamlar kullanmak en iyi uygulamadır. Bu, bağımlılık çakışmalarını önler ve ortamı temiz tutar.

mkdir qwen3_deployment
    cd qwen3_deployment
    python3.9 -m venv venv

3. Sanal Ortamı Etkinleştirme:

source venv/bin/activate

Komut satırınızın başında (venv) gördüğünüzde, sanal ortamınızın etkin olduğu anlamına gelir.
4. Pip’i Güncelleme:

pip install --upgrade pip

Qwen-3 Dağıtımı İçin Hazırlık

Şimdi Qwen-3 modelini yüklemek ve çalıştırmak için gerekli Python kütüphanelerini kuralım.

1. Temel Kütüphaneleri Yükleme:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
    pip install transformers accelerate sentencepiece bitsandbytes

* torch: PyTorch derin öğrenme çatısı. cu121 kısmı, CUDA 12.1 ile uyumlu PyTorch sürümünü yüklediğimizi belirtir. Kendi CUDA sürümünüze göre bu kısmı değiştirmelisiniz (örneğin, cu118 için CUDA 11.8).
* transformers: Hugging Face’in popüler kütüphanesi, Qwen-3 gibi LLM’leri kolayca yüklemenizi ve kullanmanızı sağlar.
* accelerate: Büyük modelleri birden fazla GPU’ya veya CPU/GPU karışımına yüklemek için Hugging Face tarafından geliştirilen bir kütüphane.
* sentencepiece: Qwen-3’ün kullandığı tokenizasyon kütüphanesi.
* bitsandbytes: Modelleri nicelendirmek (quantization) için kullanılır, bu da modelin GPU belleğinde daha az yer kaplamasını ve daha hızlı çalışmasını sağlar (özellikle 4-bit veya 8-bit nicelendirme için).
2. Flash Attention (İsteğe Bağlı, Performans İçin): Eğer GPU’nuz ve CUDA sürümünüz Flash Attention’ı destekliyorsa, bu kütüphane dikkat mekanizmalarını önemli ölçüde hızlandırabilir.

pip install flash-attn --no-build-isolation

Not: Flash Attention kurulumu karmaşık olabilir ve belirli CUDA/PyTorch/GPU kombinasyonlarına bağlıdır. Kurulumda sorun yaşarsanız, bu adımı atlayabilirsiniz.
3. Hugging Face Girişi (İsteğe Bağlı): Eğer Qwen-3’ün bazı özel veya gated (erişimi kısıtlı) modellerini kullanacaksanız veya Hugging Face API sınırlarına takılmak istemiyorsanız, giriş yapmanız gerekebilir.

huggingface-cli login

Size bir token girmeniz istenecek. Hugging Face hesabınızdan bir erişim tokenı oluşturup buraya yapıştırın.

Qwen-3 Modelini İndirme ve Yükleme

Şimdi Qwen-3 modelini DigitalOcean GPU Droplet’inize indireceğiz ve PyTorch ile belleğe yükleyeceğiz.

Model Varyantı Seçimi

Qwen-3’ün Hugging Face Hub’da birçok varyantı bulunmaktadır. İhtiyaçlarınıza ve GPU belleğinize uygun olanı seçmelisiniz:

* Qwen/Qwen-3-2B-Chat: En küçük ve en hızlı model.
* Qwen/Qwen-3-7B-Chat: Orta büyüklükte, iyi performans/bellek dengesi.
* Qwen/Qwen-3-72B-Chat: En büyük ve en yetenekli model, ancak yüksek GPU belleği gerektirir.

Ayrıca, nicelendirilmiş (quantized) versiyonları da mevcuttur (örneğin, Qwen/Qwen-3-7B-Chat-AWQ veya Qwen/Qwen-3-7B-Chat-Int4). Bu versiyonlar daha az GPU belleği tüketir ancak hafif bir performans düşüşü yaşanabilir.

Python Betiği ile Modeli Yükleme

Aşağıdaki Python betiğini qwen3_inference.py adıyla kaydedin:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

1. Modeli ve Tokenizer'ı Tanımla

Kullanmak istediğiniz Qwen-3 modelinin Hugging Face adını buraya girin.

Örnek: "Qwen/Qwen-3-7B-Chat"

Eğer 4-bit nicelendirilmiş bir model kullanacaksanız, model adını ona göre güncelleyin.

Örneğin: "Qwen/Qwen-3-7B-Chat-Int4" veya "Qwen/Qwen-3-7B-Chat-AWQ"

model_name = "Qwen/Qwen-3-7B-Chat" # Lütfen kendi seçiminize göre güncelleyin

GPU kullanılabilirliğini kontrol et

device = "cuda" if torch.cuda.is_available() else "cpu" print(f"Kullanılan cihaz: {device}")

2. Nicelendirme (Quantization) Yapılandırması (İsteğe Bağlı, Bellek Optimizasyonu İçin)

Eğer GPU belleğiniz kısıtlıysa 4-bit veya 8-bit nicelendirme kullanabilirsiniz.

7B model için 4-bit nicelendirme genellikle 16-24GB civarında bellek kullanır.

72B model için 4-bit nicelendirme genellikle 40-50GB civarında bellek kullanır.

use_4bit_quantization = True # Eğer bellek sıkıntınız varsa True yapın use_8bit_quantization = False # Eğer bellek sıkıntınız varsa True yapın (4-bit'ten daha az sıkıştırma) bnb_config = None if use_4bit_quantization: bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, ) elif use_8bit_quantization: bnb_config = BitsAndBytesConfig( load_in_8bit=True )

3. Modeli ve Tokenizer'ı Yükle

print(f"{model_name} modelini ve tokenizer'ı yüklüyor...")

Modelin daha büyük versiyonları için device_map="auto" kullanmak çok önemlidir.

Bu, modeli mevcut GPU'lara ve/veya CPU belleğine otomatik olarak dağıtır.

Nicelendirme kullanmıyorsanız, torch_dtype'ı ayarlamak da önemlidir (bfloat16 veya float16).

try: if bnb_config: model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto", trust_remote_code=True ) else: model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.bfloat16, # Veya torch.float16, GPU'nuzun desteğine bağlı device_map="auto", trust_remote_code=True ) tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) print("Model ve tokenizer başarıyla yüklendi.") except Exception as e: print(f"Model yüklenirken bir hata oluştu: {e}") print("Lütfen model adını, GPU belleğini ve nicelendirme ayarlarını kontrol edin.") exit()

Modelin GPU'ya yüklendiğini doğrula

if device == "cuda": print(f"Model GPU belleği kullanımı: {torch.cuda.memory_allocated() / (10243):.2f} GB")

4. Basit Bir Çıkarım (Inference) Örneği

def generate_response(prompt_text, max_new_tokens=512, temperature=0.7): messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_text} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) generated_ids = model.generate( model_inputs.input_ids, max_new_tokens=max_new_tokens, temperature=temperature, do_sample=True, # Daha yaratıcı yanıtlar için pad_token_id=tokenizer.eos_token_id, # Qwen için EOS token ID'yi belirtin ) generated_ids = [ output_ids[len(model_inputs.input_ids[0]):] for output_ids in generated_ids ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] return response if __name__ == "__main__": print("\nQwen-3 ile sohbet etmeye başlayabilirsiniz (çıkmak için 'exit' yazın).") while True: user_input = input("Siz: ") if user_input.lower() == 'exit': print("Çıkış yapılıyor...") break print("Qwen-3 Düşünüyor...") response = generate_response(user_input) print(f"Qwen-3: {response}")

Kodu Çalıştırma

Sanal ortamınız etkin durumdayken, betiği çalıştırın:

python qwen3_inference.py

Model ilk kez indirilirken biraz zaman alabilir. İndirme tamamlandığında ve model belleğe yüklendiğinde, Siz: istemini göreceksiniz ve Qwen-3 ile etkileşime geçmeye başlayabilirsiniz.

Qwen-3 ile Etkileşim Kurmak

Yukarıdaki betik, Qwen-3 ile temel bir sohbet arayüzü sağlar. Modeli yükledikten sonra, konsolda metin girdileri sağlayarak yanıtlar alabilirsiniz.

Siz: Türkiye'nin başkenti neresidir?
Qwen-3 Düşünüyor...
Qwen-3: Türkiye'nin başkenti Ankara'dır.

Siz: Bana yapay zeka hakkında ilginç bir bilgi ver.
Qwen-3 Düşünüyor...
Qwen-3: Yapay zeka, insan beynindeki nöronların çalışma prensibinden ilham alarak tasarlanmış yapay sinir ağları sayesinde öğrenme ve karar verme yeteneğine sahiptir. Bu ağlar, milyarlarca veri noktasını analiz ederek karmaşık desenleri tanıyabilir ve bu sayede örneğin dil çevirisi, görüntü tanıma veya oyun oynama gibi görevleri gerçekleştirebilir.

Prompt Mühendisliği Temelleri

Büyük dil modellerinden en iyi yanıtları almak için iyi prompt’lar yazmak önemlidir:

* Açık ve Net Olun: Modelden ne istediğinizi spesifik olarak belirtin.
* Rol Ataması Yapın: Modele bir rol atayarak (örneğin, “Sen bir tarih profesörüsün…”) yanıt stilini yönlendirebilirsiniz.
* Kısıtlamalar Belirtin: Yanıtın uzunluğu, formatı veya içeriği hakkında kısıtlamalar koyun.
* Örnekler Verin (Few-shot prompting): Modelin istenen çıktıyı daha iyi anlaması için birkaç örnek sağlayın.

Optimizasyon Teknikleri

Qwen-3 gibi büyük modelleri DigitalOcean GPU Droplet’lerinde daha verimli çalıştırmak için çeşitli optimizasyon teknikleri mevcuttur.

Nicelendirme (Quantization)

Nicelendirme, model parametrelerinin daha düşük hassasiyetli veri tiplerine (örneğin, 32-bit float yerine 8-bit veya 4-bit integer) dönüştürülmesidir. Bu, modelin diskte ve GPU belleğinde daha az yer kaplamasını sağlar ve çıkarım hızını artırabilir.

* bitsandbytes ile 4-bit/8-bit Nicelendirme: Yukarıdaki Python betiğinde BitsAndBytesConfig kullanarak bu yöntemi zaten gösterdik. load_in_4bit=True veya load_in_8bit=True parametreleri ile modeli otomatik olarak nicelendirilmiş bir şekilde yükleyebilirsiniz. Özellikle 72B gibi büyük modeller için bellek tasarrufu açısından kritik öneme sahiptir.

Flash Attention

Flash Attention, Transformer mimarisindeki dikkat (attention) mekanizmasının hesaplama ve bellek verimliliğini artıran bir algoritmadır. Desteklenen GPU’larda (genellikle NVIDIA A100 ve H100) kullanıldığında, çıkarım hızını önemli ölçüde artırabilir ve bellek tüketimini azaltabilir. Kurulumu biraz karmaşık olabilir ancak performansa etkisi büyüktür.

Batching (Toplu İşleme)

Birden fazla isteği tek bir GPU işlemi olarak birleştirmek (batching), GPU’nun paralel işlem gücünü daha etkin kullanmasını sağlar. Özellikle bir API üzerinden birden fazla kullanıcı isteği alıyorsanız, bu teknik gecikmeyi düşürür ve verimi artırır.

torch.compile (PyTorch 2.0+)

PyTorch 2.0 ve sonraki sürümler, torch.compile adlı bir özellik sunar. Bu, PyTorch kodunu optimize edilmiş bir çekirdek kodu derleyerek performansı artırabilir. Modelinizi yükledikten sonra basitçe:

model = torch.compile(model)

Bu satırı ekleyerek performansı deneyebilirsiniz.

İsteğe Bağlı: Qwen-3’ü Bir API Olarak Dağıtma

Qwen-3’ü bir web uygulaması veya başka servisler tarafından kullanılabilir hale getirmek için bir REST API olarak dağıtmak yaygın bir senaryodur. FastAPI bu amaç için mükemmel bir seçimdir.

1. Gerekli Kütüphaneleri Yükleme:

pip install fastapi uvicorn

2. app.py Oluşturma: Aşağıdaki kodu app.py adıyla kaydedin. Bu, Qwen-3 modelini yükleyen ve bir çıkarım (inference) endpoint’i sağlayan basit bir FastAPI uygulamasıdır.

from fastapi import FastAPI, HTTPException
    from pydantic import BaseModel
    import torch
    from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
    import os

    app = FastAPI()

    # Model yükleme için global değişkenler
    model = None
    tokenizer = None
    device = "cuda" if torch.cuda.is_available() else "cpu"

    class PromptRequest(BaseModel):
        prompt: str
        max_new_tokens: int = 512
        temperature: float = 0.7

    @app.on_event("startup")
    async def load_model():
        global model, tokenizer
        print("Model ve tokenizer yükleniyor...")
        model_name = os.getenv("QWEN_MODEL_NAME", "Qwen/Qwen-3-7B-Chat")
        use_4bit_quantization = os.getenv("USE_4BIT_QUANT", "False").lower() == "true"

        bnb_config = None
        if use_4bit_quantization:
            bnb_config = BitsAndBytesConfig(
                load_in_4bit=True,
                bnb_4bit_quant_type="nf4",
                bnb_4bit_compute_dtype=torch.bfloat16,
                bnb_4bit_use_double_quant=True,
            )

        try:
            if bnb_config:
                model = AutoModelForCausalLM.from_pretrained(
                    model_name,
                    quantization_config=bnb_config,
                    device_map="auto",
                    trust_remote_code=True
                )
            else:
                model = AutoModelForCausalLM.from_pretrained(
                    model_name,
                    torch_dtype=torch.bfloat16,
                    device_map="auto",
                    trust_remote_code=True
                )
            tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
            print("Model ve tokenizer başarıyla yüklendi.")
        except Exception as e:
            print(f"Model yüklenirken bir hata oluştu: {e}")
            raise HTTPException(status_code=500, detail="Model yüklenemedi.")

    @app.post("/generate")
    async def generate_text(request: PromptRequest):
        if model is None or tokenizer is None:
            raise HTTPException(status_code=503, detail="Model henüz yüklenmedi.")
        
        messages = [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": request.prompt}
        ]
        text = tokenizer.apply_chat_template(
            messages,
            tokenize=False,
            add_generation_prompt=True
        )
        model_inputs = tokenizer([text], return_tensors="pt").to(device)

        try:
            generated_ids = model.generate(
                model_inputs.input_ids,
                max_new_tokens=request.max_new_tokens,
                temperature=request.temperature,
                do_sample=True,
                pad_token_id=tokenizer.eos_token_id,
            )
            generated_ids = [
                output_ids[len(model_inputs.input_ids[0]):] for output_ids in generated_ids
            ]
            response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
            return {"response": response}
        except Exception as e:
            raise HTTPException(status_code=500, detail=f"Metin üretilirken hata oluştu: {e}")

    # Uygulamayı başlatmak için: uvicorn app:app --host 0.0.0.0 --port 8000

3. Uygulamayı Çalıştırma:

# Ortam değişkenlerini ayarlayın (isteğe bağlı)
    export QWEN_MODEL_NAME="Qwen/Qwen-3-7B-Chat"
    export USE_4BIT_QUANT="True" # Bellek kısıtlıysa True yapın

    uvicorn app:app --host 0.0.0.0 --port 8000

Bu komut, uygulamanızı 8000 portunda başlatacaktır. Droplet’inizin IP adresi üzerinden (http://:8000/docs) FastAPI’nin Swagger UI’ına erişerek API’yi test edebilirsiniz.

4. Üretim Ortamı için Gunicorn/Nginx (İsteğe Bağlı):
Üretim ortamında uvicorn‘u doğrudan çalıştırmak yerine, gunicorn gibi bir WSGI sunucusu ve nginx gibi bir ters proxy kullanmak daha sağlam bir çözümdür.
* Gunicorn Kurulumu: pip install gunicorn
* Nginx Kurulumu: sudo apt install nginx -y
* Gunicorn ile Çalıştırma: gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app -b 0.0.0.0:8000 (4 worker ile)
* Nginx Yapılandırması: /etc/nginx/sites-available/default dosyasını düzenleyerek gelen 80/443 portu isteklerini 8000 portundaki Gunicorn’a yönlendirebilirsiniz.

İzleme ve Bakım

Dağıttığınız Qwen-3 modelinin performansını ve Droplet’inizin kaynak kullanımını izlemek önemlidir.

* GPU Kullanımı:

watch -n 1 nvidia-smi

Bu komut, GPU kullanımını, bellek tüketimini ve sıcaklığını her saniye güncellenen bir şekilde gösterecektir.
* CPU ve RAM Kullanımı:

htop

htop aracı, CPU çekirdeklerinin kullanımını, RAM tüketimini ve çalışan süreçleri detaylı bir şekilde gösterir.
* DigitalOcean İzleme: DigitalOcean kontrol panelindeki Droplet’inizin “Graphs” (Grafikler) sekmesi, CPU kullanımı, ağ trafiği ve disk G/Ç gibi temel metrikleri izlemenizi sağlar.
* Güncellemeler: İşletim sisteminizi ve Python kütüphanelerinizi düzenli olarak güncel tutmak, güvenlik açıklarını kapatır ve yeni özelliklerden faydalanmanızı sağlar.

sudo apt update && sudo apt upgrade -y
    pip install --upgrade transformers torch accelerate bitsandbytes

Sık Karşılaşılan Sorunları Giderme

* CUDA Out of Memory (CUDA Bellek Hatası): Bu, GPU belleğinizin yetersiz olduğu anlamına gelir.
* Daha küçük bir Qwen-3 modeli kullanın (örneğin, 72B yerine 7B).
* 4-bit veya 8-bit nicelendirme kullanın (BitsAndBytesConfig).
* device_map="auto" kullandığınızdan emin olun.
* Gereksiz Python değişkenlerini veya modellerini bellekten temizleyin (del model; torch.cuda.empty_cache()).
* Daha fazla GPU belleğine sahip bir Droplet’e yükseltin.
* NVIDIA Sürücü Uyuşmazlıkları: nvidia-smi komutu hata veriyorsa veya PyTorch GPU’yu tanımıyorsa, sürücülerin ve CUDA Toolkit’in doğru şekilde yüklendiğinden ve ortam değişkenlerinin ayarlandığından emin olun. Gerekirse sürücüleri yeniden yükleyin.
* Bağımlılık Çakışmaları: Sanal ortam kullanmak bu sorunu büyük ölçüde önler. Eğer hala çakışmalar yaşıyorsanız, pip freeze > requirements.txt ile bağımlılıklarınızı listeleyin ve gereksiz paketleri kaldırın.
* Ağ Sorunları: API olarak dağıtırken dışarıdan erişilemiyorsa, güvenlik duvarı (UFW) ayarlarınızı ve Nginx yapılandırmanızı kontrol edin.

Maliyet Yönetimi

GPU Droplet’leri, standart Droplet’lere göre önemli ölçüde daha pahalıdır. Maliyetleri yönetmek için:

* Kullanım Dışı Olduğunda Kapatın: Eğer Droplet’i sürekli kullanmıyorsanız, DigitalOcean kontrol panelinden kapatarak (power off) yalnızca depolama için ücret ödersiniz. Açık kaldığı sürece GPU ve CPU için saatlik ücretlendirme devam eder.
* Doğru Boyutu Seçin: İhtiyaçlarınızdan daha büyük bir Droplet seçmeyin. Qwen-3’ün en küçük modelini çalıştırabiliyorsanız, daha büyük bir GPU’ya yatırım yapmanıza gerek yoktur.
* İzleme: Kullanım alışkanlıklarınızı izleyerek gereksiz harcamaları tespit edin.

Sonuç

Bu rehberde, DigitalOcean GPU Droplet’lerinde Qwen-3 büyük dil modelini dağıtmak için gereken tüm temel adımları ve en iyi uygulamaları ele aldık. Bir Droplet’in oluşturulmasından, NVIDIA sürücülerinin ve CUDA Toolkit’in kurulumuna, Python ortamının hazırlanmasına ve Qwen-3 modelinin yüklenmesine kadar her aşamayı detaylandırdık. Ayrıca, performansı artırmak için nicelendirme ve Flash Attention gibi optimizasyon tekniklerini ve Qwen-3’ü bir web API olarak dağıtma seçeneğini de inceledik.

DigitalOcean’ın erişilebilir altyapısı ve Qwen-3’ün açık kaynak doğası, geliştiricilere ve araştırmacılara güçlü yapay zeka uygulamaları oluşturma konusunda büyük bir esneklik sunmaktadır. Bu rehber, kendi Qwen-3 dağıtımınızı başarıyla gerçekleştirmeniz ve yapay zeka projelerinize hız kazandırmanız için sağlam bir temel sağlamıştır. Artık kendi deneylerinizi yapmaya, modeli farklı görevler için kullanmaya ve belki de model üzerinde ince ayar (fine-tuning) yapmaya hazırsınız. Yapay zekanın sunduğu sınırsız olasılıkları keşfetmeye devam edin!

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık