Сколько потоков использует работник dask в планировщике потоков? - PullRequest
0 голосов
/ 07 ноября 2018

При выполнении тестового примера с dask я вижу 400% + использование ЦП, хотя я указываю 1 работника несколькими способами. На Activity Monitor в OSX я вижу 2 процесса, один с 1 потоком, другой с 8 потоками с ThreadPool. Я вижу 2 процесса, 1 поток и 4 потока с single-threaded. Есть идеи, для чего все эти темы?

Похожие: Какие темы активны у Dask Workers?

import dask
import dask.array as da
from dask.diagnostics import Profiler, ResourceProfiler, CacheProfiler, visualize
from multiprocessing.pool import ThreadPool

def main():
    a = da.random.random(size=(20000, 1000), chunks=(1000, 1000))
    q, r = da.linalg.qr(a)
    a2 = q.dot(r)
    out = a2.compute()


if __name__ == "__main__":
    with Profiler() as prof, ResourceProfiler(dt=0.25) as rprof:
        #with dask.config.set(pool=ThreadPool(1)):
        #with dask.config.set(num_workers=1):  # 1 worker, 400% usage
        #with dask.config.set(num_workers=1, scheduler='single-threaded'):  # 1 worker, 400% usage
        with dask.config.set(pool=ThreadPool(1)):  # 1 worker, 400% usage
            main()
    visualize([prof, rprof])

Редактировать: если я закомментирую профилировщики и импорт ThreadPool, я получу 1 процесс с 4 потоками после указания num_workers=1, scheduler='single-threaded'.

1 Ответ

0 голосов
/ 07 ноября 2018

Dask запускает только одну задачу за раз, но эти задачи могут использовать много потоков внутри. В вашем случае это, вероятно, происходит потому, что ваша реализация BLAS / LAPACK является многопоточным.

Возможно, вы можете управлять этим с помощью переменных окружения, таких как OMP_NUM_THREADS=1. В зависимости от вашей реализации BLAS существуют более конкретные переменные среды.

...