R'da yüksek performanslı programlama I: Yorumlayıcı bir dil olarak R

R'da yüksek performanslı programlama I: Yorumlayıcı bir dil olarak R

Bu yazı dizisinde R’da yüksek performanslı kodlara neden ihtiyaç duyulduğunu ve bu kodları nasıl yazabileceğimizi konuşuyoruz.
Onur Boyar05 Nis 2021

R’ı nasıl daha verimli bir şekilde kullanabiliriz? Büyük verinin getirdiği performans sorunlarını nasıl çözebiliriz? Bu yazı dizisinde R’da yüksek performanslı kodlara neden ihtiyaç duyulduğu ve bu kodları nasıl yazabileceğimiz sorularına eğileceğiz. R’ın neden büyük verilerde yapılan işlemlerde yavaş kaldığını anlayacak ve ardından bu yavaşlığı gidermenin yöntemlerini öğreneceğiz. Bu serideki örneklerin ve anlatımların bir bölümü Lim ve Tjhi’nin “R High Performance Programming” kitabından alınmıştır.

İlk olarak R’ın nasıl bir programlama dili olduğunu konuşalım.

R derleyici değil, yorumlayıcı bir dildir. Peki yorumlayıcı olması ne anlama gelmektedir? Yorumlayıcı diller çalıştırdığımız kodu farklı bir programlama diline çevirir ve ardından derlenen bu kodlar çalışır. Her bir satır çalıştırıldığında yorumlama işlemi gerçekleşir. Bunun bir avantajı her satır sonunda bir sonuç elde edebilmemiz iken dezavantajı, bu yorumlama işleminin bizi yavaşlatmasıdır. Örnek vermek gerekirse Java yorumlayıcı değil, derleyici bir dildir ve bu nedenle yorumlama gibi bir işlem olmaksızın kodlar hızla çalışır. Çalışma “execution time” süresinde gerçekleşir.

Özetle R'da yazılan kodlar çalıştırıldığında iki ayrı işlem yapılır. Kodlar önce yorumlanır, sonra çalıştırılır. Bu da onu yavaş kılar.

R dilinin yavaş kalmasının bir diğer sebebi ise tek çekirdek ile çalışmasıdır. Aksi yönde bir aksiyon almadığımız müddetçe bilgisayarımız kaç çekirdekli olursa olsun R otomatik olarak tek çekirdek üzerinde çalışacaktır. Bu da bir performans düşüklüğüne sebep olmaktadır. Burada yapmamız gereken performans artırıcı çözümler bulmaktır.

R dilinin bu sıkıntılarını aşmak için birçok çözüm bulunuyor ve yazı dizisinde bunları konuşacak, hızlı çalışan programlar yazmayı öğreneceğiz. Fakat önce R üzerinde yarattığımız değişkenlerin nerede tutulduğunu ve bunun nasıl etkiler yaratabileceğini incelememiz gerekiyor.

R üzerinde çalıştığımız tüm veriler RAM’de tutulur. Yani veriyi yüklediğimiz an veri CPU tarafından anında işlenilebilir haldedir. Bu da esasında performans için harika bir durum. Fakat bunun bir de dezavantajı bulunuyor. İşleyebileceğimiz verinin maksimum büyüklüğü sahip olduğumuz RAM ile sınırlanıyor ve elbette sistemimizde bulunan RAM’in tamamı da R’a ayrılmıyor. Arkaplanda çalışan diğer işlemlerin de RAM kullanmakta olduğunu unutmamak gerek. 

Diyelim ki bilgisayarımızda 8 GB RAM bulunuyor. Bunun 6 GB’ı da R’a ayrılmış olsun. Bu demek oluyor ki işleyebileceğimiz verinin büyüklüğü 6 GB ile sınırlıdır. Diyelim ki kullanabileceğimiz tüm alanı kullandık. Sonrasında yapacağımız en ufak bir işlemde alacağımız hata aşağıdaki gibi olacaktır:

Error: cannot allocate a vector of size 800.1 Mb

Peki bu durum karşısında çaresiz miyiz? Hayır! RAM kullanımını optimize edecek çözümler de mevcut. Bunları yazı dizisinin ilerleyen bölümlerinde öğreneceğiz.

 

Veri bilimi hakkında daha geniş ve kapsamlı bilgiye erişmek, kariyerinizde fark yaratacak adımlar atmak isterseniz Miuul'un sunduğu Data Scientist Path eğitimine göz atabilirsiniz.

Miuul topluluğunun bir parçası ol!

Abone ol butonuna tıklayarak Miuul'dan pazarlama ve haber içerikleri almayı onaylıyorum.