WITOWITO Summit’teydim

Also in English
can.sys
/articles/Promptun görünmez ağırlığı: Yapay zekâ gerçekte ne tüketiyor?
ARTICLEtarih : süre : 6 dk okumayapay zekâenerjidonanım

Promptun görünmez ağırlığı: Yapay zekâ gerçekte ne tüketiyor?

Bir mühendislik öğrencisi olarak, yapay zekâya gönderilen bir isteğin gerçekte neye mal olduğunu, yanılsamalarla değil watt cinsinden, neden öğrenmek istedim?

Geçen gün, sırf meraktan, bir yapay zekâya basit bir soru sordum: Bir GPU ne kadar enerji tüketir? Bir proje için değil, bir ders için de değil: sadece bu konuda hiçbir fikrim olmadığını fark ettiğim için. Günlerimi prompt göndererek geçiriyorum ve bunun perde arkasında neler yaktığını bir saniye bile düşünmemiştim.

Aldığım cevap biraz soğuk duş etkisi yarattı. Yeni nesil tek bir veri merkezi kartı (bir H100) tam yükte 700 W'a kadar güç çekebiliyor. Sekiz kartlık bir düğüm (node) neredeyse 8 kW demek: küçük bir evi besleyecek kadar güç, hem de tek bir modeli çalıştırmak için.

İşte o anda mühendis refleksim uyandı. I&C ve V&V alanlarında zamanımızın çoğu boyutlandırmakla, ölçmekle, bir sistemin ne tükettiğini ve ne kadar pay bıraktığını sorgulamakla geçer. Ama en çok kullandığım araç için bu refleksi hiç devreye sokmamıştım. Sanki prompt bedavaymış gibi. Sanki hiçbir ağırlığı yokmuş gibi.

Spoiler: Bir ağırlığı var. Bahsetmek istediğim de tam olarak bu.

I. Bulut yanılsaması: Bir prompt asla bedava değildir#

“Bulut” kelimesi tam anlamıyla bir pazarlama başarısı. Havada süzülen, maddesiz, sonsuz bir şey çağrıştırıyor. Oysa bulutun arkasında metal, silisyum ve her şeyden önce elektrik var. Hem de çok fazla elektrik.

Önce iki çalışma rejimini birbirinden ayırmak gerekiyor, çünkü ikisi birbirine hiç benzemiyor:

  • Eğitim (training): Modeli üretiyoruz. Binlerce GPU günlerce, hatta haftalarca çalışıyor. Devasa bir iş, ama tek seferlik.
  • Çıkarım (inference): Önceden eğitilmiş modeli kullanıyoruz. Her prompt gönderdiğimde olan şey bu. Tek başına ele alındığında çok daha hafif: optimize edilmiş bir altyapıda, metin tabanlı bir istek için 0,24 Wh mertebesinde.

0,24 Wh gülünç derecede az. Bir LED ampulün birkaç saniyesi. Ama bu rakam bir tuzak, çünkü hiçbir zaman tek bir prompt göndermiyoruz. Gezegen ölçeğinde her gün milyarlarcasını gönderiyoruz. Gülünç olanın devasa hâle geldiği yer de tam burası: Önemli olan birim maliyet değil, durmaksızın prompt gönderen koca bir dünyayla çarpılan maliyet.

Ham rakamın tuzağını zaten her mühendis iyi bilir. TDP'si 700 W olarak verilen bir kart sürekli 700 W çekmez: Bu, yüke, frekansa ve batch boyutuna bağlıdır. Ölçüm yapılan bir 8×H100 düğümünde, teorik kapasite 10 kW'a yaklaşırken tepe değer yaklaşık 8,4 kW olarak kaydedilmişti. Maksimum güç ≠ gerçek güç. Üstelik tek başına GPU gücü ≠ sistemin tüketimi: Buna soğutmayı, güç kaynaklarını ve altyapının geri kalanını da eklemek gerekir. Gerçek fatura, teknik föydeki “GPU” satırından her zaman daha kabarıktır.

II. Donanım tarafında verimlilik bir ayrıntı değildir#

İyi haber şu: Bu maliyet bir kader değil. Geleceğin mühendisi olarak beni en çok ilgilendiren kısım da onu azaltmak için donanım düzeyinde neler yapılabileceği. Başvurulabilecek birkaç yöntem var ve bazılarının etkisi çarpıcı.

Sayısal hassasiyeti düşürmek. En güçlü yöntem bu. FP32 (32 bit kayan nokta) ile yapılan bir hesap pahalıdır; aynı hesap FP16, INT8 veya INT4 ile yapıldığında çok daha basit aritmetik birimleri, dolayısıyla çok daha az enerjiyi devreye sokar. Tensor Core'lar tam da bunun için optimize edilmiştir. Çıkarımda kuantizasyon (quantization), donanımın tek bir vidasına dokunmadan tüketimi 4 ila 10 kat azaltabilir. Neredeyse bedava bir optimizasyon.

Gücü sınırlamak (undervolting, power capping). Sunucu GPU'larında tek bir komutla güç sınırı koyabilirsiniz:

# Bir H100'ü 700 W yerine 400 W ile sınırla
nvidia-smi -i 0 -pl 400

Frekansı sabit tutarken gerilimi düşürürsünüz. Tipik sonuç: tüketimde %10 ila %30 düşüş, buna karşılık performansta yalnızca %5 ila %15 kayıp. Oran o kadar elverişli ki optimize edilmiş veri merkezleri bunu sistematik olarak yapıyor. Frenlemek, çoğu zaman sonuna kadar zorlamaktan daha akıllıcadır.

Isıyı kontrol altında tutmak. Isınan bir GPU throttle eder ve verim kaybeder. Sıvı soğutma, daldırma soğutma, daha iyi ısı boruları: Bunlar konforun ötesinde, doğrudan bir verimlilik meselesidir. Kazanımlar dolaylıdır (daha az fan, daha kararlı çalışma) ve %5 ila %15 mertebesindedir, ama diğerlerinin üzerine eklenir.

Donanımı değiştirmek. Genel amaçlı bir GPU, çıkarım için en verimli seçenek değildir. Özel çipler (TPU, NPU türü ASIC'ler) belirli bir iş yükünde (workload) klasik bir GPU'dan 5 ila 20 kat daha az tüketebilir. En radikal yöntem bu, ama aynı zamanda en az esnek olanı: Bir ASIC tek bir işi yapar, çok iyi yapar ve başka hiçbir şey yapmaz.

Geri kalanı israf etmemek. Genellikle unutulan iki kalem var: bellek ve iş zamanlaması (scheduling). VRAM (HBM), GPU enerjisinin %20 ila %35'ini oluşturabilir; batch boyutlarını uyarlamanın, seyreklikten (sparsity) yararlanmanın ve ağırlıkları sıkıştırmanın önemi de buradan gelir. Tek bir GPU'nun yeteceği bir iş için sekiz GPU'yu açık bırakmak ise enerjiyi düpedüz çöpe atmaktır: Dinamik zamanlama ve boştaki bileşenlerin uyku moduna alınması bu israfı geri kazandırır.

YöntemTipik kazanımMaliyet / kısıt
Kuantizasyon (FP16 → INT8/INT4)÷4 ila ÷10İzlenmesi gereken hassasiyet kaybı
Güç sınırlama−%10 ila −%30−%5 ila −%15 performans
Özel donanım (ASIC, TPU, NPU)÷5 ila ÷20Esneklik yok: tek bir iş yükü
Isı yönetimi (sıvı, daldırma)%5 ila %15Altyapı yatırımı
Bellek ve zamanlamaDeğişkenYazılım karmaşıklığı

Tek cümleyle özetlemem gerekirse: En büyük kazanımlar, kuantizasyon ve güç sınırlamayla birleştirilen özel donanımdan gelir; ısı yönetimi ve bellek ise ardından, tamamlayıcı olarak gelir.

III. Asıl mesele: güç yarışı karşısında ölçülülük#

Ancak bir tuzak var ve en rahatsız edici olanı da bu. Tüm bu verimlilik kazanımları ölçek tarafından yutulup gidebilir.

Bu eski bir paradoks, Jevons paradoksu: Bir kaynağı kullanmak daha verimli hâle geldiğinde ondan daha az değil, daha fazla tüketiriz. Bir promptun enerjisini on kat azaltmak, aynı dönemde prompt sayısını yüz katına çıkarırsak küresel faturayı düşürmez. Bugünkü gidişat da tam olarak bu: Daha verimli hâle geldikçe daha erişilebilir oluyor, daha erişilebilir oldukça da onu her yere koyuyoruz.

Dolayısıyla donanım verimliliği gerekli ama yeterli değil. Asıl soru bir adım önce geliyor: Bu hesaplamaya gerçekten ihtiyacımız var mı? Küçük bir modelin, hatta basit bir scriptin gayet iyi halledeceği bir iş için gerçekten dev bir model çalıştırmak mı gerekiyor? Yine bir mühendis mantığına dönüyoruz: doğru boyutlandırmak, rahatlık uğruna aşırı boyutlandırmamak.

İşte bu noktada konu beni doğrudan ilgilendiriyor. Birkaç yıl içinde bu sistemleri tasarlayacak, devreye alacak ve boyutlandıracak olan benim kuşağım. Enerjiyi görünmez bir değişken gibi (“başka bir yerde”, barındırma sağlayıcısında halledilen bir şeymiş gibi) ele alırsak, her yerde yapılan hatayı tekrarlarız: performansı optimize etmek, sonucu görmezden gelmek. Enerji verimliliği bir tasarım kısıtı olmalı, tıpkı gecikme (latency) ya da maliyet gibi. Sonradan işaretlenen bir kutucuk değil.

Sonuç: yapay zekâyı bir mühendis gibi düşünmek#

Yapay zekâyı kullanmayı bırakmayacağım: Bu hem saçma olurdu hem de benim açımdan düpedüz ikiyüzlülük olurdu. Ama bir GPU'nun tüketimine dair o basit sorudan beri promptlara aynı gözle bakmıyorum. Prompt, bir buluta uçup giden maddesiz bir istek değil. Şu anda, bir yerlerde silisyumdan geçen elektrik.

Yapay zekâyı bir mühendis gibi düşünmek, ona sihirli bir şeymiş gibi davranmayı bırakmaktır. Kendimize üç basit soru sormaktır: Gerçekten neye ihtiyacım var, gerçek maliyet ne ve aynı işi daha azıyla yapabilir miyim? Ölçeklendirmeden önce ölçmek. Dev bir model yerine doğru boyutta bir modeli tercih etmek. Minicik bir rakamın, bütün dünyayla çarpıldığında devasa hâle geldiğini bilmek.

Bir süre önce, yapay zekâya fazla şey devretmenin beynime neye mal olduğunu sorgulamıştım. Bugün aynı soruyu gezegen için soruyorum. Aynı refleks, farklı ölçek: Her kolaylığın arkasında bir maliyet var. Mühendisin işi de tam olarak bunu hiçbir zaman gözden kaçırmamaktır.

Ölçmediğimiz şeyin bedelini er geç mutlaka öderiz.