Настройка, как работники переключаются между несколькими задачами? - PullRequest
0 голосов
/ 03 октября 2018

Мы наблюдаем странное поведение распределенного планировщика dask.

С 200 работниками мы распределяем 1200 задач, которые по сути одинаковы, это длинные задачи, которые чередуются между привязкой к процессору и вводу-выводу.Каждому работнику назначено от 4 до 7 задач.

Мы видим, что каждый работник будет тратить время на выполнение каждой из своих задач всякий раз, когда начинается операция ввода-вывода.По-видимому, это приводит к тому, что на каждом работнике сохраняется большой объем памяти, мы подозреваем, что это приводит к созданию дампов на жестком диске и значительному замедлению работы.

При тестировании мы обнаружили, что (используя ту же задачу, что и в тесте), если бы мы назначали ~ 2 задачи на одного работника, замедления не было бы.Но около ~ 5 задач на одного работника будет существенное замедление.Дело в том, что у рабочего действительно мало времени, чтобы переключиться с задачи на задачу.

Как мы можем заставить каждого работника последовательно выполнять свои задачи?Мы хотим, чтобы работники работали над одной задачей за раз, чтобы избежать такого большого использования ОЗУ.

Такое чувство, что мы могли бы написать оболочку для подачи n * 2 задач за раз (где n = количество рабочих) в планировщик, но наверняка есть способ настроить это поведение?

Версия Dask :

0.19.1

Версия Kubectl :

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.6", GitTreeState:"clean", BuildDate:"2018-03-21T15:21:50Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

client.scheduler_info ()output :

{'type': 'Scheduler',
 'id': 'Scheduler-4b3d7cac-d536-4f66-b0bd-22d9ae19b260',
 'address': 'tcp://192.168.152.162:8786',
 'services': {'bokeh': 8787},
 'workers': {'tcp://192.168.148.132:32860': {'type': 'Worker',
   'id': 'tcp://192.168.148.132:32860',
   'host': '192.168.148.132',
   'resources': {},
   'local_directory': '/dask-worker-space/worker-7nzwyqd6',
   'name': 'tcp://192.168.148.132:32860',
   'ncores': 1,
   'memory_limit': 3500000000,
   'last_seen': 1538522342.4690368,
   'services': {'nanny': 44983},
   'metrics': {'cpu': 2.0,
    'memory': 42975232,
    'time': 1538522342.0465984,
    'read_bytes': 0.0,
    'write_bytes': 0.0,
    'num_fds': 25,
    'executing': 0,
    'in_memory': 0,
    'ready': 0,
    'in_flight': 0}},
  'tcp://192.168.148.147:35760': {'type': 'Worker',
   'id': 'tcp://192.168.148.147:35760',
   'host': '192.168.148.147',
   'resources': {},
   'local_directory': '/dask-worker-space/worker-yuh3l9uh',
   'name': 'tcp://192.168.148.147:35760',
   'ncores': 1,
   'memory_limit': 3500000000,
   'last_seen': 1538522342.4663892,
   'services': {'nanny': 38760},
   'metrics': {'cpu': 2.0,
    'memory': 42905600,
    'time': 1538522342.0460682,
    'read_bytes': 0.0,
    'write_bytes': 0.0,
    'num_fds': 25,
    'executing': 0,
    'in_memory': 0,
    'ready': 0,
    'in_flight': 0}},
  (then there's a bunch more workers)

Дайте мне знать, если я могу предоставить какую-либо конкретную информацию о конфигурации.

1 Ответ

0 голосов
/ 03 октября 2018

Я бы просто дал каждому работнику отдельный поток

dask-worker  ... --nthreads 1

Вы можете посмотреть строку помощи для dask-worker

dask-worker --help
...