Úvod do Dasku

Parallel Programming with Dask in Python

James Fulton

Climate Informatics Researcher

Zrychlení výpočtů pomocí více jader

  • Počítače mají více jader
  • Kód je třeba napsat tak, aby je využíval
  • K tomu slouží balíček Dask
  • Výpočty budou rychlejší
Parallel Programming with Dask in Python

Souběžné programování

Diagram zobrazující seznam úloh a jednu cestu, která jimi prochází.

Parallel Programming with Dask in Python

Multi-threading

Seznam úloh rozdělený do dvou částí.

Parallel Programming with Dask in Python

Multi-threading

Dvě sady úloh odesílané dvěma různým jádrům CPU.

Parallel Programming with Dask in Python

Multi-threading

Dvě sady úloh jsou spouštěny v rámci jednoho procesu Pythonu.

Parallel Programming with Dask in Python

Paralelní zpracování

Dvě sady úloh jsou nyní spouštěny ze dvou různých procesů Pythonu.

Parallel Programming with Dask in Python

Paralelní programování

Multi-threading

Dvě sady úloh zpracovávají dvě jádra CPU v rámci jednoho procesu Pythonu.

Paralelní zpracování

Dvě sady úloh zpracovávají dvě jádra CPU ve dvou různých procesech Pythonu.

Parallel Programming with Dask in Python

Líné vyhodnocování

  • Výpočty se nespustí, dokud není výsledek potřeba
  • Kroky potřebné k výpočtu jsou uloženy pro pozdější použití
  • Dask rozdělí úlohy mezi vlákna nebo procesy
Parallel Programming with Dask in Python

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)
Parallel Programming with Dask in Python

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')
Parallel Programming with Dask in Python

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')
Parallel Programming with Dask in Python

Výpočet výsledku

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
Parallel Programming with Dask in Python

Operace s delayed objekty

delayed_result1 = delayed(my_square_function)(4)

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

print(delayed_result2.compute())
100
Parallel Programming with Dask in Python

Líné vyhodnocování

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)
Parallel Programming with Dask in Python

Líné vyhodnocování

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
Parallel Programming with Dask in Python

Sdílení výpočtů

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
Parallel Programming with Dask in Python

Sdílení výpočtů

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
Parallel Programming with Dask in Python

Pojďme si procvičit!

Parallel Programming with Dask in Python

Preparing Video For Download...