# Spaces ZeroGPU: Spaces için Dinamik GPU Ataması

ZeroGPU, Hugging Face Spaces'teki yapay zeka modelleri ve demolar için GPU kullanımını optimize eden paylaşımlı bir altyapıdır. İhtiyaç duyuldukça NVIDIA RTX Pro 6000 Blackwell GPU'larını dinamik olarak tahsis eder ve serbest bırakır; şu avantajları sunar:

1. **Ücretsiz GPU Erişimi**: Spaces için maliyet etkin GPU kullanımını sağlar.
2. **Çoklu GPU Desteği**: Uygulamaların tek bir uygulama üzerinde birden fazla GPU'yu eşzamanlı olarak kullanmasına olanak tanır.

Geleneksel tek GPU tahsislerinin aksine, ZeroGPU'nun verimli sistemi, kaynak kullanımını ve güç verimliliğini en üst düzeye çıkararak geliştiricilerin, araştırmacıların ve kuruluşların yapay zeka modellerini dağıtması için engelleri azaltır.

## ZeroGPU Spaces'ı kullanma ve barındırma

- **Mevcut ZeroGPU Spaces'leri kullanma**
  - ZeroGPU Spaces tüm kullanıcılara ücretsiz olarak kullanılabilir. ([derlenmiş listeye](https://huggingface.co/spaces/enzostvs/zero-gpu-spaces) göz atın).
  - [PRO kullanıcıları](https://huggingface.co/subscribe/pro), günlük kullanım kotasının 8 katını, GPU kuyruklarında en yüksek önceliği ve herhangi bir ZeroGPU Spaces kullanırken önceden ödenmiş kredilerle günlük kotanın ötesine geçme imkânını elde eder.
- **Kendi ZeroGPU Spaces'inizi barındırma**
  - Ücretsiz kişisel hesaplar: iyi durumda olan hesaplar (doğrulanmış e-posta, 30 günden eski hesap) ücretsiz olarak en fazla 2 ZeroGPU Spaces barındırabilir.
  - PRO hesapları: Hesabınız altında en fazla 10 ZeroGPU Spaces barındırmak için [PRO'ya abone olun](https://huggingface.co/settings/billing/subscription).
  - Kuruluşlar: Kuruluşun tüm üyeleri için ZeroGPU Spaces'i etkinleştirmek için [Team veya Enterprise planına abone olun](https://huggingface.co/enterprise).

## Teknik Özellikler

ZeroGPU iki GPU boyutunu destekler

| GPU boyutu            | Destek donanımı                   | Vram | Kota maliyeti |
|---------------------|------------------------------------|------|------------|
| `large` *(varsayılan)* | Yarım NVIDIA RTX Pro 6000 Blackwell | 48GB | 1×         |
| `xlarge`            | Tam NVIDIA RTX Pro 6000 Blackwell | 96GB | 2×         |

> [!NOTE]
> Boyutları nasıl kullanacağınızı öğrenmek için [GPU boyutu seçimi](#gpu-size-selection) bölümüne bakın

## Uyumluluk

ZeroGPU Spaces, çoğu PyTorch tabanlı GPU Spaces ile uyumlu olacak şekilde tasarlanmıştır. `transformers` ve `diffusers` gibi üst düzey Hugging Face kütüphaneleri için uyumluluk artırılmış olsa da, kullanıcıların şunu bilmesi gerekir:

- Şu anda ZeroGPU Spaces yalnızca **Gradio SDK** ile uyumludur.
- ZeroGPU Spaces, standart GPU Spaces'e kıyasla sınırlı uyumluluğa sahip olabilir.
- Bazı senaryolarda beklenmedik sorunlar ortaya çıkabilir.

### Desteklenen Sürümler

- **Gradio**: 4+
- **PyTorch**: **2.8.0**'dan **en son** sürüme kadar neredeyse tüm sürümler desteklenir
  
    Tam listeyi görüntüle

    - 2.8.0  
    - 2.9.1  
    - 2.10.0  
    - 2.11.0  
    - 2.12.1  
    - 2.13.0  

  
- **Python**:
  - 3.12.12  
  - 3.10.13  

## ZeroGPU ile başlangıç

Space'inizde ZeroGPU'yı kullanmak için şu adımları izleyin:

1. Space ayarlarınızda ZeroGPU donanımının seçildiğinden emin olun.
2. `spaces` modülünü içe aktarın.
3. GPU'ya bağımlı işlevleri `@spaces.GPU` ile süsleyin.

Bu süsleme işlemi, Space'in fonksiyon çağrıldığında bir GPU talep etmesine ve tamamlanınca bunu serbest bırakmasına olanak tanır.

> [!NOTE]
> `@spaces.GPU` dekoratörü, ZeroGPU olmayan ortamlarda etki yaratmayacak şekilde tasarlanmıştır ve bu sayede farklı kurulumlar arasında uyumluluk sağlanır.

### Örnek Kullanım

```python
import spaces
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(...)
pipe.to('cuda')

@spaces.GPU
def generate(prompt):
    return pipe(prompt).images

gr.Interface(
    fn=generate,
    inputs=gr.Text(),
    outputs=gr.Gallery(),
).launch()
```

### Model yükleme

Gerçek bir GPU yalnızca `@spaces.GPU` işlevlerinin içinde kullanılabilir olsa da, modellerin kök modül seviyesinde `cuda` üzerine yerleştirilmesi gerekir (yukarıdaki örnekte gösterildiği gibi).

`@spaces.GPU` içinde modelleri tembel yüklemek veya CUDA'ya taşımak önerilmez, çünkü bu işlem önemli ölçüde daha az verimlidir (CUDA aktarımları, başlangıç sırasında yapılan yerleştirmeler için optimize edilmiştir).

> [!NOTE]
> Modül seviyesinde modelleri `cuda` üzerinde yüklemek, `@spaces.GPU` işlevlerinin dışında etkinleştirilen PyTorch CUDA emülasyon modu sayesinde çalışır; bu mod, gerçek bir GPU olmadan CUDA işlemlerine olanak tanır. `@spaces.GPU` içinde gerçek CUDA kullanılır.

## GPU boyutu seçimi

`@spaces.GPU` tarafından kullanılan varsayılan boyut `large`'dır (yarım NVIDIA RTX Pro 6000 Blackwell).

`size="xlarge"` belirterek tam bir NVIDIA RTX Pro 6000 Blackwell açıkça talep edebilirsiniz:

``` python
@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
```

> [!NOTE]
> - `xlarge`, `large`'den **2×** daha fazla günlük kota tüketir (ör. 45 sn'lik **etkin** görev süresi 90 sn kota tüketir) - `xlarge` genellikle daha yüksek kuyruk bekleme olasılığı ve daha uzun bekleme süreleri anlamına gelir - `xlarge`'yi yalnızca iş yükünüzun ek hesaplama veya bellekten gerçekten faydalandığı durumlarda kullanın

## Süre Yönetimi

Varsayılan 60 saniyelik GPU çalışma süresini aşması beklenen işlevler için özel bir süre belirtebilirsiniz:

```python
@spaces.GPU(duration=120)
def generate(prompt):
   return pipe(prompt).images
```

Bu, maksimum işlev çalışma süresini 120 saniye olarak ayarlar. Daha hızlı işlevler için daha kısa süreler belirtmek, Space ziyaretçileri için kuyruk önceliğini iyileştirir.

### Dinamik süre

`@spaces.GPU` dinamik süreleri de destekler.

Süre değerini doğrudan geçirmek yerine, süslenmiş fonksiyonunuzla aynı girdileri alan ve bir süre değeri döndüren bir çağrılabilir nesne (callable) geçin:

```python
def get_duration(prompt, steps):
    step_duration = 3.75
    return steps * step_duration

@spaces.GPU(duration=get_duration)
def generate(prompt, steps):
   return pipe(prompt, num_inference_steps=steps).images
```

## Derleme

ZeroGPU, `torch.compile` desteklememektedir ancak PyTorch **önceden derleme** özelliğini kullanabilirsiniz (torch `2.8+` gerektirir)

ZeroGPU'da derleme öncesi (ahead-of-time) derleme hakkında kapsamlı bir rehber için bu [blog yazısına](https://huggingface.co/blog/zerogpu-aoti) göz atın.

## Kullanım Kademeleri

GPU kullanımı, hesap katmanına göre **günlük** kota sınırlarına tabidir:

| Hesap türü                   | Dahili günlük GPU kotası | Kuyruk önceliği  |
| ------------------------------ | ------------------------ | --------------- |
| Kimlik doğrulanmamış                | 2 dakika                | Düşük             |
| Ücretsiz hesap                   | 5 dakika                | Orta          |
| PRO hesabı                    | 40 dakika (genişletilebilir)  | En yüksek         |
| Ekip organizasyonu üyesi       | 40 dakika (genişletilebilir)  | En yüksek         |
| Kurumsal kuruluş üyesi | 60 dakika (genişletilebilir)  | En yüksek         |

Dahili günlük kota, ilk GPU kullanımınızdan tam 24 saat sonra sıfırlanır.

> [!NOTE]
> Kalan kota, ZeroGPU kuyruklarındaki önceliği doğrudan etkiler.

### Kredilerle kota genişletme

PRO, Team ve Enterprise kullanıcıları, dahili günlük kota dışında, GPU süresinin dakikası başına **10 dakikaya 1 $** oranında ön ödemeli kredileri harcayarak ZeroGPU Spaces'i kullanmaya devam edebilir. Günlük kotanız tükendiğinde, ek GPU kullanımı otomatik olarak kredi bakiyenizden tahsil edilir.

[faturalandırma ayarlarınızdan](https://huggingface.co/settings/billing) kredi ekleyebilirsiniz.

## Barındırma Kısıtlamaları

- **Ücretsiz kişisel hesaplar**: İyi durumda olan hesaplar için (doğrulanmış e-posta, 30 günden eski hesap) en fazla 2 ZeroGPU Spaces.
- **Kişisel hesaplar ([PRO aboneleri](https://huggingface.co/subscribe/pro))**: En fazla 10 ZeroGPU Spaces.
- **Organizasyon hesapları ([Team & Enterprise](https://huggingface.co/enterprise))**: En fazla 50 ZeroGPU Spaces.

ZeroGPU'dan yararlanarak geliştiriciler, GPU kullanımını en üst düzeye çıkarırken maliyetleri en aza indiren daha verimli ve ölçeklenebilir Spaces oluşturabilir.

## Öneriler

Demo'nuz büyük bir model kullanıyorsa, önceden derleme (ahead-of-time compilation) ve flash-attention 3 gibi optimizasyonları kullanmanızı öneririz. Bu optimizasyonları ZeroGPU ile nasıl kullanabileceğinizi [bu gönderide](https://huggingface.co/blog/zerogpu-aoti) öğrenebilirsiniz. Bu optimizasyonlar, ZeroGPU saatlerinden en iyi şekilde yararlanmanıza ve daha iyi bir kullanıcı deneyimi sunmanıza yardımcı olacaktır.

## Geri bildirim

Spaces ZeroGPU ile ilgili geri bildirimlerinizi doğrudan HF Hub üzerinden paylaşabilirsiniz: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

