NVIDIA GPU destekli Python paketleri kurarken, kullanıcılar genellikle karmaşık bir süreçle karşılaşmaktadır: pytorch.org, jax.dev, rapids.ai gibi sitelere giderek NVIDIA CUDA sürümünüze uygun paketi bulmak. Ardından, özel bir pip, uv veya diğer yükleyici komutunu kopyalayıp yapıştırmak gerekir. Bu basit bir kolaylık değil; günümüzün heterojen hesaplama ortamlarında Python paketlerinin donanım çeşitliliğini nasıl ele aldığına dair temel bir sınırlamayı temsil ediyor.
Mevcut wheel formatı, CPU tabanlı hesaplama için tasarlandı ve homojen bir yapıya sahip, ancak günümüzde heterojen hesaplama gerçekliğiyle başa çıkmakta zorlanıyor. Bu durumu gidermek ve birkaç başka sorunu ele almak amacıyla NVIDIA, WheelNext açık kaynak girişimini başlattı. Bu girişim, Python paketleme ekosistemindeki kullanıcı deneyimini geliştirerek, bilimsel hesaplama, yapay zeka ve yüksek performanslı hesaplama (HPC) kullanım durumlarına daha iyi hitap etmeyi amaçlıyor. Kapsamlı bilgiye ulaşmak için WheelNext GitHub reposuna göz atabilirsiniz.
CUDA Uyumluluğunun Teknik Zorlukları
Python wheel formatı, platformlara uygunluğu tanımlamak için etiketler kullanır: Python sürümü, ABI ve platform gibi. Örneğin, cp313-cp313-linux_x86_64
gibi bir etiket CPU tabanlı paketler için iyi bir şekilde çalışsa da, özel derlemeler için gerekli ince ayrıntılardan yoksundur: GPU’lar veya belirli CPU komutları (AVX512, ARMv9 vb.). Tek bir linux_x86_64
etiketi, GPU destekli bir paketin çalışması için gereken ek donanım hakkında hiçbir bilgi vermez. Bu ayrıntı eksikliği, paket geliştiricilerini alt optimal dağıtım stratejilerine yönlendiriyor.
Bu karmaşıklığı artıran bir diğer durum ise farklı CUDA bileşenleri arasındaki ilişki, bu durum çoğu zaman ek zorluklara yol açabiliyor. Bu bileşenler şunlardır:
- Kernel Mode Driver (KMD): NVIDIA donanımını işletim sistemi çekirdeği ile bağlayan düşük seviyeli firmware sürücüsü (
nvidia.ko
Linux’ta). - CUDA User Mode Driver (UMD): NVIDIA GPU’larında kod yazmak ve çalıştırmak için kullanılan kullanıcı modu sürücüsü (
libcuda.so
Linux’ta). - CUDA Runtime: Çoğu CUDA kütüphanesinin ve uygulamasının kullandığı yüksek seviyeli kullanıcı API’si (
libcudart.so
Linux’ta). - CUDA Toolkit: Derleyiciler, kütüphaneler ve araçlar dahil tam geliştirme ortamı.
Her bileşenin dağıtım sorunlarıyla ilgili ayrı uyumluluk kuralları vardır.
Wheel Variant Format Nedir?
Wheel Variant formatı, heterojen hesaplama çağında Python paketlerini geliştirmek için önerilen bir standarttır. Wheel Variants, mevcut wheel formatını genişleterek aynı paket sürümü, Python ABI ve platform için, spesifik donanım yapılandırmalarına optimize edilmiş birden fazla tekerlek oluşturmayı mümkün kılar.
Denemek için:
# Linux curl -LsSf https://astral.sh/uv/install.sh | INSTALLER_DOWNLOAD_URL=https://wheelnext.astral.sh sh # Windows powershell -c { $env:INSTALLER_DOWNLOAD_URL = 'https://wheelnext.astral.sh'; irm https://astral.sh/uv/install.ps1 | iex } uv pip install torch
Bilimsel Topluluklar için Bir İş Birliği Çözümü
Python paketleri için en düşük ortak paydadan daha fazla odaklanmak yerine, artık belirli donanımlar için özelleştirilebilirler ve bu da son kullanıcı deneyimi ile performansında önemli iyileştirmeler sağlar.
Wheel Variant tasarımı, her bir artifaktı tanımlamak ve tanımlamak için “varyant özellikleri” belirten basit bir sözdizimi önerir:
namespace :: feature :: value
Varyant özelliklerine birkaç örnek:
nvidia :: cuda_version_lower_bound :: 12.0
– CUDA Kullanıcı Modu Sürücüsü >=12.0’ı belirtir.nvidia :: sm_arch :: 100_real
– CMAKE bayrağı ile oluşturulmuş bir paketi belirtir.x86_64 :: level :: v3
– x86-64-v3 CPU mimarisi desteğini belirtir.aarch64 :: version :: 8.1a
– ARM mimarisi versiyonu 8.1a’yı belirtir.
Her varyant veya yapılandırma, özel bir etiket ya da varyant özelliklerinin otomatik olarak üretilen bir SHA-256 karma değeri ile benzersiz bir şekilde tanımlanır.
Bu etiket veya karma değeri daha sonra tekerlek dosyası adında yer alır:
torch-2.8.0-cp313-cp313-linux_x86_64-cu128.whl # Özel etiket torch-2.8.0-cp313-cp313-linux_x86_64-a7f3c2d9.whl # Hash tabanlı
Bu tasarım şu özellikleri garanti eder:
- Aynı Python platformları için ad çakışmalarını önler.
- Kullanıcılar için isteğe bağlı okunabilir bir etiket sunar.
- Önceki Wheel Regex ile eşleşmeyecek şekilde tasarlanmıştır.
Eklenti Mimarisi Nasıl Çalışır?
Büyü, yerel yazılım ve donanım yeteneklerini tespit eden sağlayıcı eklentileri aracılığıyla gerçekleşir. Eklentiler, kurulum anında hangi varyantın en iyi uyum sağladığını belirlemeye yardımcı olur.
[uv] pip install torch
komutunu çalıştırdığınızda, yükleyici, sisteminizin yeteneklerini anlamak için eklentileri sorgular.
Farklı varyant eklentileri, sisteminizde şu tür özellikleri tespit edebilir:
- CUDA sürücü 12.9 yüklü.
- NVIDIA RTX 4090 GPU (hesaplama yeteneği 8.9).
- Belirli CPU komutları desteği: (örneğin, AVX512-BF16).
Bu bilgilere dayanarak, yükleyici en iyi tekerlek varyantını otomatik olarak seçer:
- Artık manuel CUDA sürümü seçimine gerek yok.
- Yanlış “tadım” PyTorch’un indirilmesine engel olunuyor.
- En uygun paket otomatik olarak kurulur.
Wheel Variants ayrıca tam geriye dönük uyumluluğu korur. Varyantları anlamayan eski pip sürümleri, bunları görmezden gelir, böylece mevcut altyapı çalışmaya devam eder. Metadata üç farklı yerde bulunur:
pyproject.toml
– yapılandırma içinvariant.json
– tekerlek içinde*-variants.json
– paket dizininde bulunur.
NVIDIA GPU’ya Özel Uygulama Örneği
NVIDIA varyant eklentisi, kullanıcılara daha yaygın olarak karşılaşılan sorunları gidermek için bir öncelik sistemi uygular:
- Öncelik 1 (P1) – libcuda (Kullanıcı Modu Sürücüsü: UMD) Versiyon Algılama: En kritik özellik. UMD versiyonu, hangi CUDA zamanlama sürümlerinin kullanılabileceğini belirler.
- Öncelik 2 (P2) – Hesaplama Yetenekleri: Bir tekerleğin hangi sistemde kurulduğunda uyumlu olduğuna karar verir.
Örnek vermek gerekirse, CUDA sürücüsü 12.8 olan bir NVIDIA GPU kullanıcısı, [uv] pip install torch
komutunu çalıştırdığında:
- NVIDIA eklentisi, sürücü versiyonunu ve hesaplama yeteneğini tespit eder.
- Mewh tekerlekleri sorgular.
- Varyantları bulur (örneğin, CPU sadece, CUDA uyumlu vs.) ve en iyi eşleşeni indirip kurar.
Düzenli bir deneyim sağlamak için, CUDA ortamı bulunamazsa null varyanta otomatik olarak geri dönebilir.
Python Paket Kullanıcıları için Ekosistem Faydaları
Python paket kullanıcıları için faydalar hemen ve önemli olacaktır:
- Zero yapılandırma ile kurulum: En iyi eşleşen paketi bulmak için artık dış kaynaklara danışmaya gerek kalmıyor; yalnızca
[uv] pip install <package>
komutunu kullanmak yeterli. - Optimizasyon: Özel donanımınız için derlenmiş kodları alırsınız.
- Kullanıcı kontrolü: Gelişmiş kullanıcılar
--no-variant
ile seçimlerini geçersiz kılabilir.
Paket Geliştiricileri için Ekosistem Faydaları
Wheel Variants, paket geliştiricileri için uzun zamandır devam eden dağıtım sorunlarını çözmektedir:
- Basitleştirilmiş yayın matrisi: Tek bir paketin varyantlarını yayınlamak mümkün hale gelir.
- Hedefli optimizasyon: Spesifik mimariler için varyantlar geliştirilebilir.
- Geleceğe yönelik bir mimari: NVIDIA yeni GPU mimarisi yayınladığında, yeni bir varyant eklemek kolaylaşır.
NVIDIA GPU Kullanıcıları için Ekosistem Faydaları
Wheel Variants, kullanıcı deneyimini iyileştirmek için birçok sorunu ele almaktadır:
- Bağımlılık zincirlerinin çözülmesi: Varyantlara özgü bağımlılıklar ifade edilebilir.
- Ekosistem tutarlılığı: Tüm NVIDIA kütüphaneleri tutarlı varyant şemalarını kullanabilir.
- İnovasyonun teşvik edilmesi: Yeni NVIDIA GPU özellikleri, yeni varyantlar aracılığıyla sunulabilir.
Wheel Variants’ın Daha Geniş Uygulamaları
Wheel Variants’ın etkisi yalnızca PyTorch ve NVIDIA GPU hesaplamalarıyla sınırlı değildir; birçok alan için geçerlidir:
- Bilim İhtiyaçları: Farklı GPU’lara sahip heterojen yapılandırmalarla, araştırmacılar kurulum betiklerini yönetmek zorunda kalmazlar.
- Kutucuk Boyutu Optimizasyonu: ML ve AI iş yükleri için Docker imajları sık sık büyük olur, ancak Wheel Variants bunu azaltabilir.
- Paketleme Ekosistemi Sorunlarını Giderme: Örneğin, SciPy farklı BLAS uygulamaları için varyantlar sunabilir.
Wheel Variants Nasıl Oluşturulur?
Hedefe yönelik varyantları oluşturmak için, variantlib bir CLI aracı sağlar. Genel bilgi için aşağıdaki komutları kullanabilirsiniz:
variantlib make-variant -f "torch-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl" -o "output_dir/" --pyproject_toml "torch/pyproject.toml" --variant-label "cu129" --property "nvidia :: cuda_version_lower_bound :: 12.9"
Uygulama Yol Haritası
Wheel Variants girişimi, dikkatli, işbirlikçi bir geliştirme süreci ile ilerliyor:
- PyTorch 2.8.0: Wheel Variants için deneysel destek sağlayacak.
- PEP taslak olarak mevcut: Topluluk gözden geçirmesi ve yeniden şekillendirme süreci devam ediyor.
- Referans uygulamalar mevcut: variantlib ve diğer prototip uygulamalar geliştirilmiştir.
Gelecek için yol haritasında, ekosistem uyumluluğu ve kademeli benimseme öncelikli hedeflerdir.
Sonuç
Wheel Variants, yalnızca teknik bir iyileştirme değil, aynı zamanda Python paketlerinin giderek daha çeşitli hesaplama ortamlarına nasıl davrandığını temelden değiştiren bir evrimdir. NVIDIA ekosistemi için, hemen normlara yanıt verirken GPU hesaplamayı Python paketlemesinin bir parçası haline getirir.
PyTorch, Astral, Quansight ve NVIDIA arasındaki işbirliği, Python topluluğunun en iyi taraflarını göstermektedir. PyTorch 2.8 deneysel sürümü, Python paketleme sürecinde bir dönüm noktasını simgelemektedir.
Daha fazla bilgi için wheelnext.dev adresini ziyaret edin.