Dask’a giriş

Python ile Dask ile Paralel Programlama

James Fulton

Climate Informatics Researcher

Birden çok çekirdekle hesaplamaları hızlandırma

  • Bilgisayarların birden çok çekirdeği vardır
  • Kod bunları kullanacak şekilde yazılmalıdır
  • Bunun için Dask paketi kullanılabilir
  • Hesaplamaları daha hızlı tamamlayın
Python ile Dask ile Paralel Programlama

Eşzamanlı programlama

Görevler listesi ve içlerinden geçen tek bir yol gösteren diyagram.

Python ile Dask ile Paralel Programlama

Çok iş parçacığı

İkiye bölünmüş bir görev listesi.

Python ile Dask ile Paralel Programlama

Çok iş parçacığı

İki görev kümesi iki farklı CPU çekirdeğine gönderiliyor.

Python ile Dask ile Paralel Programlama

Çok iş parçacığı

İki görev kümesi aynı Python süreci içinden çalıştırılıyor.

Python ile Dask ile Paralel Programlama

Paralel işlem

İki görev kümesi artık iki farklı Python sürecinden çalıştırılıyor.

Python ile Dask ile Paralel Programlama

Paralel programlama

Çok iş parçacığı (multi-threading)

İki görev kümesi, aynı Python süreci içindeki iki CPU çekirdeği tarafından çalıştırılıyor.

Paralel işlem

İki görev kümesi, iki farklı Python sürecindeki iki CPU çekirdeği tarafından çalıştırılıyor.

Python ile Dask ile Paralel Programlama

Tembel değerlendirme (lazy evaluation)

  • Sonuç gerektiğinde hesaplanır
  • Gerekli adımlar sonradan yürütülmek üzere saklanır
  • Dask görevleri iş parçacıkları veya süreçler arasında böler
Python ile Dask ile Paralel Programlama

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Create delayed version of above function delayed_square_function = delayed(my_square_function)
Python ile Dask ile Paralel Programlama

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Create delayed version of above function
delayed_square_function = delayed(my_square_function)

# Use the delayed function with input 4
delayed_result = delayed_square_function(4)


# Print the delayed answer print(delayed_result)
Delayed('my_square_function-7f71b132-70a9-457a-aa52-604e8c34f8a7')
Python ile Dask ile Paralel Programlama

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Delay and use function
delayed_result = delayed(my_square_function)(4)

print(delayed_result)
Delayed('my_square_function-7f71b132-70a9-457a-aa52-604e8c34f8a7')
Python ile Dask ile Paralel Programlama

Sonucu hesaplama

from dask import delayed

def my_square_function(x):
    return x**2

delayed_result = delayed(my_square_function)(4)

real_result = delayed_result.compute() # <- This line is where the calculation happens

# Print the answer
print(real_result)
16
Python ile Dask ile Paralel Programlama

Gecikmeli nesnelerde işlemler kullanma

delayed_result1 = delayed(my_square_function)(4)

# Math operations return delayed object
delayed_result2 = (4 + delayed_result1) * 5

print(delayed_result2.compute())
100
Python ile Dask ile Paralel Programlama

Tembel değerlendirme

x_list = [30, 85, 14, 12, 27, 62, 89, 15, 78,  0]

sum_of_squares = 0

for x in x_list:
    # Square and add numbers
    sum_of_squares += delayed(my_square_function)(x)
Python ile Dask ile Paralel Programlama

Tembel değerlendirme

x_list = [30, 85, 14, 12, 27, 62, 89, 15, 78,  0]

sum_of_squares = 0

for x in x_list:
    # Square and add numbers
    sum_of_squares += delayed(my_square_function)(x)

result = sum_of_squares.compute()

# Print the answer
print(result)
27268
Python ile Dask ile Paralel Programlama

Hesaplamayı paylaşma

delayed_intermediate = delayed(my_square_function)(3)

# These two results both use delayed_intermediate
delayed_result1 = delayed_intermediate - 5
delayed_result2 = delayed_intermediate + 4

# delayed_3_squared will be computed twice
print('delayed_result1:', delayed_result1.compute())
print('delayed_result2:', delayed_result2.compute())
delayed_result1: 4
delayed_result2: 13
Python ile Dask ile Paralel Programlama

Hesaplamayı paylaşma

import dask

# delayed_intermediate will be computed once
comp_result1, comp_result2 = dask.compute(delayed_result1, delayed_result2)

print('comp_result1:', comp_result1)
print('comp_result2:', comp_result2)
delayed_result1: 4
delayed_result2: 13
Python ile Dask ile Paralel Programlama

Haydi pratik yapalım!

Python ile Dask ile Paralel Programlama

Preparing Video For Download...