Tablouri Dask

Programare paralelă cu Dask în Python

James Fulton

Climate informatics researcher

Împărțirea tablourilor în blocuri

Arată un tablou ca o singură bucată

Programare paralelă cu Dask în Python

Împărțirea tablourilor în blocuri

Arată un tablou împărțit în mai multe blocuri

Programare paralelă cu Dask în Python

NumPy vs. Dask: tablouri

Arată un tablou ca o singură bucată

import numpy as np

x = np.ones((4000, 6000))
print(x.sum())
24000000.0
  • Durează 740 de milisecunde

Arată un tablou împărțit în mai multe blocuri

import dask.array as da

x = da.ones((4000, 6000), chunks=(1000,2000))
print(x.sum().compute())
24000000.0
  • Durează 60 de milisecunde
Programare paralelă cu Dask în Python

Graful de sarcini al tabloului Dask

Arată cum ramurile grafului de sarcini converg spre un rezultat final.

Programare paralelă cu Dask în Python

Metode pentru tablouri Dask

Tablourile Dask au aproape toate metodele tablourilor NumPy.

  • x.max()
  • x.min()
  • x.sum()
  • x.mean()
  • etc.
print(sum_down_columns.compute())
array([1000., 1000., 1000., 1000., 
    1000., 1000., 1000., 1000., 1000.,
    1000.])
Programare paralelă cu Dask în Python

Utilizarea tablourilor Dask ca tablouri NumPy

# Lazy mathematics with Dask array
y1 = x**2 + 2*x + 1

# Lazy slicing
y2 = x[:10]

# Applying NumPy functions is lazy too
y3 = np.sin(x)
print(y1)
dask.array<add, shape=(1000, 10), ...
print(y2)
dask.array<getitem, shape=(10, 10), ...
print(y3)
dask.array<sin, shape=(1000, 10), ...
Programare paralelă cu Dask în Python

Încărcarea tablourilor de imagini

import dask.array as da

import da.image
image_array = da.image.imread('images/*.png')
print(image_array)
dask.array<imread, shape=(40000, 256, 256, 3), dtype=uint8, 
    chunksize=(1, 256, 256, 3), chunktype=numpy.ndarray>
Programare paralelă cu Dask în Python

Aplicarea funcțiilor personalizate pe blocuri

def instagram_filter(image):
    ...
    return pretty_image

# Apply function to each image independently pretty_image_array = image_array.map_blocks(instagram_filter)
print(pretty_image_array)
dask.array<instagram_filter, shape=(40000, 256, 256, 3), dtype=uint8, 
    chunksize=(1, 256, 256, 3), chunktype=numpy.ndarray>
Programare paralelă cu Dask în Python

Să exersăm!

Programare paralelă cu Dask în Python

Preparing Video For Download...