PyTorch'ta CUDA desteği, hesaplamaların desteklenen bir NVIDIA ekran kartının GPU çekirdeklerinde çalıştırılabilmesi anlamına gelir. Böylece özellikle büyük tensör işlemleri, derin öğrenme modellerinin eğitimi ve çıkarım süreçleri CPU'ya göre daha hızlı yürütülebilir. Ancak CUDA desteğinin kurulu olması tek başına PyTorch'un GPU kullandığını kanıtlamaz; ekran kartının, uygun sürücülerin ve CUDA destekli PyTorch kurulumunun birlikte çalışması gerekir. Sonucu
CUDA, NVIDIA GPU'larının genel amaçlı hesaplamalarda kullanılmasını sağlayan platformdur. PyTorch tensörleri ve model parametrelerini CPU yerine CUDA aygıtına taşıdığınızda, CUDA destekli işlemler GPU üzerinde yürütülür.
Örneğin varsayımsal olarak 10.000 x 10.000 boyutlu iki tensörü çarpan bir işlem, CPU'da işlemci çekirdeklerini; CUDA aygıtında ise NVIDIA GPU'yu kullanabilir. PyTorch'un hangi aygıtı kullanacağını kendiliğinden her zaman değiştirmediğini unutmayın. Tensörü veya modeli açıkça CUDA aygıtına taşımanız gerekir.
CUDA desteği şu üç şeyin aynı anda doğru olmasını gerektirir:
Aşağıdaki örnek, kurulu PyTorch'un CUDA aygıtını görüp görmediğini kontrol eder. Kodun çalışması için PyTorch'un bulunduğu aynı Python ortamında çalıştırılması gerekir.
CUDA derlemesi kullanıyorsanız
CUDA kullanılabilirliğini kontrol ettikten sonra model ile modele verilen veriyi aynı aygıta taşıyın. Aşağıdaki küçük örnekte model ve giriş tensörü aynı
CUDA erişilebiliyorsa aygıt çıktıları genellikle
Kodun CPU'da veya CUDA aygıtında çalışması çoğu zaman yalnızca aygıt seçimiyle değişir. Asıl hız farkı, tensör boyutu, model yapısı, veri aktarım maliyeti ve GPU'nun özelliklerine bağlıdır. Küçük işlemlerde GPU'ya veri gönderip geri almak, beklenen hız kazancını azaltabilir.
Bu nedenle yalnızca bilgisayarda NVIDIA GPU bulunması yeterli değildir.
CUDA desteği, her PyTorch işleminin GPU'da çalışacağı, her modelin hızlanacağı veya GPU belleğinin sınırsız olduğu anlamına gelmez. Bazı işlemler seçtiğiniz yapılandırmaya göre CPU'da kalabilir. Ayrıca model ve ara tensörler GPU belleğine sığmazsa bellek hatası alabilirsiniz.
GPU kullanırken sonuçları CPU tarafındaki koda vermeniz gerekiyorsa tensörü açıkça CPU'ya taşıyabilirsiniz:
Bu koddan sonra
Özetle, PyTorch'ta CUDA desteği GPU'yu kullanabilme yeteneğidir; GPU kullanımının gerçekleşmesi için uygun ortamı doğrulamanız, ortak bir
torch.cuda.is_available() ile kontrol ederek model ve verileri aynı cihaza taşımalısınız.CUDA, PyTorch içinde neyi değiştirir?
CUDA, NVIDIA GPU'larının genel amaçlı hesaplamalarda kullanılmasını sağlayan platformdur. PyTorch tensörleri ve model parametrelerini CPU yerine CUDA aygıtına taşıdığınızda, CUDA destekli işlemler GPU üzerinde yürütülür.
Örneğin varsayımsal olarak 10.000 x 10.000 boyutlu iki tensörü çarpan bir işlem, CPU'da işlemci çekirdeklerini; CUDA aygıtında ise NVIDIA GPU'yu kullanabilir. PyTorch'un hangi aygıtı kullanacağını kendiliğinden her zaman değiştirmediğini unutmayın. Tensörü veya modeli açıkça CUDA aygıtına taşımanız gerekir.
CUDA desteği şu üç şeyin aynı anda doğru olmasını gerektirir:
- Bilgisayarda CUDA çalıştırabilen uygun bir NVIDIA GPU bulunmalıdır.
- İşletim sistemindeki NVIDIA sürücüsü GPU'yu tanıyabilmelidir.
- Kurulu PyTorch paketi CUDA kullanabilecek şekilde hazırlanmış olmalıdır.
torch.cuda.is_available() sonucu False ise bu durum genellikle GPU'nun yokluğunu değil; sürücü, PyTorch paketi, uyumluluk veya ortam seçimi sorunlarından birini gösterir. Bu sonuç, model kodunun otomatik olarak CPU'ya geçeceğini de tek başına garanti etmez; kodunuzun bu durumu nasıl ele aldığına bağlıdır.CUDA desteğini ve kullanılacak aygıtı kontrol etme
Aşağıdaki örnek, kurulu PyTorch'un CUDA aygıtını görüp görmediğini kontrol eder. Kodun çalışması için PyTorch'un bulunduğu aynı Python ortamında çalıştırılması gerekir.
Python:
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("CUDA kullanılabilir mi?", torch.cuda.is_available())
print("Kullanılacak aygıt:", device)
if torch.cuda.is_available():
print("GPU sayısı:", torch.cuda.device_count())
print("GPU adı:", torch.cuda.get_device_name(0))
CUDA derlemesi kullanıyorsanız
True çıktısı PyTorch'un en az bir CUDA aygıtına erişebildiğini gösterir. ROCm/HIP derlemeleri de aynı torch.cuda API'sini ve cuda aygıt adını kullanır; bu nedenle True sonucu tek başına NVIDIA donanımını kanıtlamaz. Derleme ayrımı için torch.version.cuda ve torch.version.hip değerlerine bakın. Bu, bütün model işlemlerinin otomatik olarak GPU'da çalıştığını kanıtlamaz; model ve kullandığınız tensörler ayrıca CUDA aygıtına taşınmalıdır. False çıktısı ise bu Python ortamında kullanılabilir CUDA aygıtı bulunmadığını gösterir.Model ve tensörleri GPU'ya taşıma
CUDA kullanılabilirliğini kontrol ettikten sonra model ile modele verilen veriyi aynı aygıta taşıyın. Aşağıdaki küçük örnekte model ve giriş tensörü aynı
device değişkenini kullanır:
Python:
import torch
import torch.nn as nn
class BasitModel(nn.Module):
def __init__(self):
super().__init__()
self.layer = nn.Linear(4, 2)
def forward(self, x):
return self.layer(x)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = BasitModel().to(device)
girdi = torch.tensor([[1.0, 2.0, 3.0, 4.0]], device=device)
with torch.no_grad():
cikti = model(girdi)
print("Model aygıtı:", next(model.parameters()).device)
print("Girdi aygıtı:", girdi.device)
print("Çıktı aygıtı:", cikti.device)
print("Çıktı boyutu:", cikti.shape)
CUDA erişilebiliyorsa aygıt çıktıları genellikle
cuda:0; erişilemiyorsa cpu olur. Çıktı boyutunun torch.Size([1, 2]) olması, dört özellikli tek girdinin modeldeki iki çıkışlı katmandan geçtiğini gösterir. Bu çıktı, modelin doğru eğitildiğini veya GPU'nun CPU'dan daha hızlı olduğunu kanıtlamaz; yalnızca örnekteki aygıt yerleşiminin tutarlı olduğunu doğrular.CPU ve CUDA kullanımının farkı
Kodun CPU'da veya CUDA aygıtında çalışması çoğu zaman yalnızca aygıt seçimiyle değişir. Asıl hız farkı, tensör boyutu, model yapısı, veri aktarım maliyeti ve GPU'nun özelliklerine bağlıdır. Küçük işlemlerde GPU'ya veri gönderip geri almak, beklenen hız kazancını azaltabilir.
| Durum | Çalışan aygıt | Ne anlama gelir? |
|---|---|---|
| CUDA kullanılamıyor | CPU | İşlemler işlemci üzerinde yürütülür; kodun CUDA'ya özel işlemler yapmaması gerekir. |
| CUDA kullanılabilir, model CPU'da | CPU | GPU erişilebilir olsa da model ve veriler GPU'ya taşınmadığı için bu işlemde kullanılmaz. |
| Model ve veriler CUDA'da | CUDA derlemesinde NVIDIA GPU | CUDA destekli işlemler GPU üzerinde yürütülebilir. |
| Model CUDA'da, veri CPU'da | Uyumsuz yerleşim | Birçok işlem aygıt uyuşmazlığı hatasına neden olur; model ile girdiyi aynı aygıta taşımalısınız. |
model.device benzeri tek bir değer yerine model parametresinin ve giriş tensörünün aygıtını birlikte kontrol etmek daha güvenilirdir. Örnekteki next(model.parameters()).device ve girdi.device çıktıları farklıysa, işlemden önce ikisini aynı device değerine taşıyın.CUDA desteği neyi garanti etmez?
CUDA desteği, her PyTorch işleminin GPU'da çalışacağı, her modelin hızlanacağı veya GPU belleğinin sınırsız olduğu anlamına gelmez. Bazı işlemler seçtiğiniz yapılandırmaya göre CPU'da kalabilir. Ayrıca model ve ara tensörler GPU belleğine sığmazsa bellek hatası alabilirsiniz.
GPU kullanırken sonuçları CPU tarafındaki koda vermeniz gerekiyorsa tensörü açıkça CPU'ya taşıyabilirsiniz:
Python:
cpu_cikti = cikti.cpu()
print(cpu_cikti.device)
Bu koddan sonra
cpu_cikti.device değeri cpu olur. .cpu() çağrısı çıktıyı CPU belleğine alır; tensör zaten CPU'daysa yeni bir kopya oluşturulmaz ve aynı nesne döner. Bu çağrı modelin CUDA desteğini kapatmaz. Modeli CPU'da çalıştırmak isterseniz modeli de model.to("cpu") ile taşımanız gerekir.Özetle, PyTorch'ta CUDA desteği GPU'yu kullanabilme yeteneğidir; GPU kullanımının gerçekleşmesi için uygun ortamı doğrulamanız, ortak bir
device seçmeniz ve model ile tüm ilgili verileri bu aygıta taşımanız gerekir. En temel doğrulama, torch.cuda.is_available() sonucunu görmek ve işlem sırasında model ile girdinin gerçekten aynı aygıtta olduğunu kontrol etmektir.
Son düzenleme: