Ожидает ли dask доступ к ресурсам, прежде чем запускать функцию? - PullRequest
1 голос
/ 18 мая 2019

Я работаю с кодом, который планирую запустить на сервере в ближайшем будущем.Прямо сейчас это работает на моей локальной машине, но несколько человек будут одновременно запускать программу.Я беспокоюсь, что они будут использовать больше оперативной памяти или Vram, чем доступно.Если я использую dask, будет ли он ждать доступных ресурсов перед выполнением вызова функции?

Пример кода

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from numba import njit
import numpy as np
from dask.distributed import Client, LocalCluster

@njit
def addingNumbers (big_array, big_array2, save_array):
    for i in range (big_array.shape[0]):
        for j in range (big_array.shape[1]):
            save_array[i][j] = big_array[i][j] * big_array2[i][j]

    return save_array


if __name__ == "__main__":
    cluster = LocalCluster()
    client = Client(cluster)


    big_array = np.random.random_sample((100, 3000))
    big_array2  = np.random.random_sample((100, 3000))
    save_array = np.zeros(shape=(100, 3000))


    x = client.submit(addingNumbers, big_array, big_array2, save_array)
    y = client.gather(x)

Если несколько человек одновременно запускали вышеуказанный код одновременновремя и сервер почти не занят, будет ли dask ждать, пока ram будет доступен для отправки функции, или он отправит ее, и сервер получит ошибку нехватки памяти?

Если dask не ждетпока оперативная память доступна, как бы вы поставили в очередь вызов функции?Спасибо

1 Ответ

2 голосов
/ 18 мая 2019

Если я использую dask, будет ли он ждать доступных ресурсов перед выполнением вызова функции?

Dask не может предсказать, сколько оперативной памяти потребуется вашей функции. Однако вы можете установить ограничение памяти для хранимых данных, и если Dask достигнет этого предела, он прекратит выполнение задач, как только достигнет этого предела, и вместо этого вытолкнет некоторые из них на диск. Смотри https://distributed.dask.org/en/latest/worker.html#memory-management

как бы вы поставили в очередь вызов функции?

Самое простое решение - ограничить число активных потоков в работнике или использовать Ресурсы рабочего , чтобы ограничить параллелизм только определенных задач на одного работника.

...