Tableaux Dask

Programmation parallèle avec Dask en Python

James Fulton

Climate informatics researcher

Découper les tableaux en blocs

Montre un tableau en un seul bloc

Programmation parallèle avec Dask en Python

Découper les tableaux en blocs

Montre un tableau découpé en plusieurs blocs

Programmation parallèle avec Dask en Python

Tableaux NumPy vs Dask

Montre un tableau en un seul bloc

import numpy as np

x = np.ones((4000, 6000))
print(x.sum())
24000000.0
  • Exécution en 740 millisecondes

Montre un tableau découpé en plusieurs blocs

import dask.array as da

x = da.ones((4000, 6000), chunks=(1000,2000))
print(x.sum().compute())
24000000.0
  • Exécution en 60 millisecondes
Programmation parallèle avec Dask en Python

Graphe de tâches d'un tableau Dask

Montre comment les branches du graphe de tâches convergent vers une réponse finale.

Programmation parallèle avec Dask en Python

Méthodes des tableaux Dask

Les tableaux Dask offrent presque toutes les méthodes des tableaux 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.])
Programmation parallèle avec Dask en Python

Utiliser les tableaux Dask comme des tableaux NumPy

# Calculs paresseux avec Dask array
y1 = x**2 + 2*x + 1

# Découpage paresseux
y2 = x[:10]

# Appliquer des fonctions NumPy est aussi paresseux
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), ...
Programmation parallèle avec Dask en Python

Charger des tableaux d'images

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>
Programmation parallèle avec Dask en Python

Appliquer des fonctions personnalisées sur les blocs

def instagram_filter(image):
    ...
    return pretty_image

# Appliquer la fonction à chaque image indépendamment 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>
Programmation parallèle avec Dask en Python

Passons à la pratique !

Programmation parallèle avec Dask en Python

Preparing Video For Download...