Gradio ile Yapay Zeka İş Akışları: Kablolayın, Çalıştırın, Dağıtın
Gradio'nun yeni gr.Workflow özelliği, yapay zeka modellerini görsel bir arayüzle birleştirip REST API olarak sunuyor. Bu makalede, iş akışlarının nasıl oluşturulduğunu ve Hugging Face Spaces'a tek komutla nasıl dağıtıldığını örneklerle inceliyoruz.
Giriş: Gradio ile İş Akışı Devrimi
Makine öğrenmesi modellerini kullanıma sunmak, çoğu zaman karmaşık altyapı ve kodlama gerektirir. Gradio, bu süreci basitleştiren bir araç olarak biliniyor. Şimdi ise `gr.Workflow` ile iş akışları (workflow) doğrudan arayüzün kendisi haline geliyor. Bu yeni özellik, bir boru hattını (pipeline) görsel bir grafik olarak tanımlamanıza ve her adımı ayrı ayrı çalıştırmanıza olanak tanıyor. Üstelik bu grafik, aynı zamanda bir REST API ve tek komutla Hugging Face Spaces'a dağıtılabilir bir uygulama sunuyor. Bu makalede, `gr.Workflow`'un nasıl çalıştığını, sunduğu esneklikleri ve gerçek dünya örneklerini inceleyeceğiz.
Görsel Arayüz ve Çalışma Mantığı
`gr.Workflow`'un en dikkat çekici özelliği, boru hattını görsel bir tuval üzerinde oluşturmanıza izin vermesidir. Her adım, belirli bir türde düğüm (node) olarak temsil edilir: girdiler (references), işlemler (operators) ve çıktılar (subjects). İşlemler, kendi Python fonksiyonlarınız, Hugging Face Inference Providers üzerindeki bir model, başka bir Gradio Space veya bir Hub veri kümesi satırı olabilir. Düğümleri sürükleyip bağlayarak bir grafik oluşturursunuz ve 'Run' butonuna bastığınızda her sonuç yerinde görünür. Bu, hem kod yazmadan hızlı prototipleme hem de karmaşık modelleri görsel olarak yönetme imkanı sunar.
Örneğin, bir görsel düzenleme uygulaması düşünün. Bir görsel yükleyip 'karlı bir kış sahnesine dönüştür' gibi bir metin girdiğinizde, uygulama Qwen-Image-Edit modelini çağırarak düzenlenmiş görseli döndürür. Bu uygulamanın tamamı, tek bir düğümden oluşan bir grafiktir. Bu basitlik, `gr.Workflow`'un gücünü gösteriyor.
Çoklu Boru Hattı ve Paralel İşleme
`gr.Workflow`'un asıl potansiyeli, tek bir grafikte birden fazla boru hattını birleştirebilmesidir. Örnek bir uygulamada, bir konu başlığından üç farklı çıktı üretilir: FLUX ile bir görsel, arka planı kaldırılmış bir çıkartma, metinden konuşmaya (text-to-speech) ile bir seslendirme ve bir LLM ile bölüm başlığı. Bu üç işlem paralel olarak çalışır ve her biri ayrı bir REST uç noktasına (`/sticker`, `/voiceover`, `/episode_title`) sahiptir. Böylece, arayüzü açmadan doğrudan kod üzerinden bu uç noktaları çağırabilirsiniz. Bu, fan-out deseni olarak bilinir: tek bir girdi, birden fazla işlemi aynı anda besleyebilir.
Başka bir örnekte, bir Hugging Face veri kümesi kimliği (örneğin `stanfordnlp/imdb`) girdi olarak verilir ve dört farklı işlem düğümü veri kümesini canlı olarak analiz eder: genel bakış kartı, ilk birkaç satırın önizlemesi, sütun istatistikleri ve dağılım grafiği. Tüm bu işlemler bağımsız ve paralel çalışır. Bu, büyük veri kümeleri üzerinde hızlı keşif yapmak için oldukça kullanışlıdır.
GPU ile Yerel Model Çalıştırma
`gr.Workflow` yalnızca harici servislere bağımlı değildir. Bir `fn` düğümü, aslında bir Python fonksiyonudur ve bu fonksiyon, Space içinde bir GPU üzerinde model çalıştırabilir. `@spaces.GPU` dekoratörü ile işaretlenen bir fonksiyon, çalıştırıldığında ZeroGPU sayesinde otomatik olarak bir GPU tahsis eder, modeli çalıştırır ve GPU'yu serbest bırakır. Bu sayede, Inference Providers veya mevcut Gradio Spaces'e bağımlı kalmadan kendi modellerinizi çalıştırabilirsiniz. Örneğin, Lightricks/LTX-Video modelini Diffusers ile yükleyip bir görseli animasyona dönüştüren bir demo, tamamen tek bir düğümle çalışır. `gr.Workflow`, GPU kurulumunuzla ilgilenmez; sadece bağlı fonksiyonu çağırır.
REST API ve Dağıtım Kolaylığı
Her `gr.Workflow` grafiği, ekstra işlem gerektirmeden bir API'ye dönüşür. Her çıktı, etiketine göre adlandırılmış bir REST uç noktası haline gelir ve Gradio istemcisi (client) ile Python'dan çağrılabilir. Örneğin, aşağıdaki kod, canlı bir Space üzerindeki `/word_count` ve `/fahrenheit` uç noktalarını çağırır:
```python from gradio_client import Client client = Client("ysharma/gr-workflow-multi-endpoint-API") print(client.predict("hello there friend", api_name="/word_count")) # -> 3 print(client.predict(20, api_name="/fahrenheit")) # -> 68.0 ```
Model veya Space çağıran uç noktalar, Hugging Face token'ı gerektirir. Token'ı istemci oluştururken iletebilirsiniz. Ayrıca, her uç noktaya düz HTTP ile curl üzerinden de erişilebilir. Bu, farklı dillerdeki uygulamalardan veya komut satırından kolayca kullanılabilirlik sağlar.
Hızlı Başlangıç ve Özelleştirme
`gr.Workflow` ile başlamak oldukça kolaydır. Yukarıdaki demoları açıp 'Duplicate' butonuna tıklayarak kendi kopyanızı oluşturabilir ve düğümleri yeniden bağlayabilirsiniz. Python'dan ise sadece birkaç satır kod yeterlidir:
```python import gradio as gr
def your_function(text: str) -> str: pass
gr.Workflow(bind=[your_function]).launch() ```
Daha kapsamlı bir kılavuz için Gradio dokümantasyonundaki resmi `gr.Workflow` rehberine göz atabilirsiniz. Bu rehberde, işlem türleri, JSON şeması ve yeniden kullanılabilir desenler ayrıntılı olarak açıklanmaktadır. Hatta `gr.Workflow` ile AUTOMATIC1111 gibi karmaşık bir uygulama bile oluşturulabilir. Bir sonraki yazıda, bunun adım adım nasıl yapılacağını göstereceğiz.
Neden Önemli?
Türkiye'de yapay zeka alanında çalışan geliştiriciler ve araştırmacılar için `gr.Workflow`, prototipleme ve üretime geçiş sürecini önemli ölçüde hızlandırabilir. Görsel bir arayüzle iş akışı oluşturmak, kod yazma ihtiyacını azaltır ve ekip içi iş birliğini kolaylaştırır. Ayrıca, her iş akışının otomatik olarak REST API'ye dönüşmesi, modellerin farklı uygulamalara entegrasyonunu basitleştirir. Bu, özellikle küçük ekiplerin veya bireysel geliştiricilerin güçlü yapay zeka hizmetlerini hızlıca sunabilmesi anlamına geliyor. Hugging Face Spaces ile tek komutla dağıtım yapabilmek, altyapı yönetimi derdini ortadan kaldırır ve Türkiye'deki yapay zeka ekosisteminin daha hızlı büyümesine katkı sağlayabilir. `gr.Workflow`'un sunduğu bu esneklik, hem eğitim amaçlı hem de ticari uygulamalar için büyük bir potansiyel barındırıyor.