Когда я отправляю небольшое обучение Tensorflow как отдельное задание, оно запускает дополнительные потоки. Когда я нажимаю Ctrl+C
и поднимаю KeyboardInterrupt
, моя задача закрывается, но основные потоки не очищаются, и обучение продолжается.
Изначально я думал, что это проблема Tensorflow (не очистки потоков), но после тестирования я понимаю, что проблема возникает со стороны Dask, которая, вероятно, не заполняет сигнал SIGTERM дальше к функции задачи. Мой вопрос, как я могу настроить Dask для заполнения сигнала SIGTERM для запущенной задачи?
Пример желаемого потока:
Локальный процесс -> Нажмите Ctrl + C -> Планировщик Dask -> Рабочий Dask -> Сигнал SIGTERM -> Запуск одной задачи с обучением Tensorflow.
Спасибо.
P.S. Если вам нужна дополнительная информация, просто спросите.
Обновление:
Пример кода:
c = Client('<remote-scheduler>')
def task():
# tensorflow training
model = ...
model.fit(x_train, y_train)
training = c.submit(task)
training.result()
Теперь во время обучения, когда я нажимаю Ctrl+C
, задача отменяется, но потоки / процессы тензорного потока остаются.
Обновление 2 :
ps -f -u [username]
вывод команды.
Кластер Dask (1 планировщик, 1 рабочий, один и тот же сервер), без запущенных задач:
UID PID PPID C STIME TTY TIME CMD
vladysl+ 16547 1 0 12:40 ? 00:00:00 /lib/systemd/systemd --user
vladysl+ 16550 16547 0 12:40 ? 00:00:00 (sd-pam)
vladysl+ 16805 16311 0 12:40 ? 00:00:00 sshd: vladyslav@pts/45
vladysl+ 16811 16805 0 12:40 pts/45 00:00:00 -bash
vladysl+ 18946 16811 4 12:41 pts/45 00:00:24 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-scheduler --port 42001
vladysl+ 22284 22175 0 12:46 ? 00:00:00 sshd: vladyslav@pts/38
vladysl+ 22285 22284 0 12:46 pts/38 00:00:00 -bash
vladysl+ 23138 16811 1 12:48 pts/45 00:00:03 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-worker localhost:42001 --worker-port 420011 --memory-limit $
vladysl+ 23143 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(11)
vladysl+ 23145 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23151 23145 99 12:48 pts/45 00:03:48 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23536 23151 0 12:49 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(25)
vladysl+ 26150 22285 0 12:51 pts/38 00:00:00 ps -f -u vladyslav
Во время выполнения задачи:
UID PID PPID C STIME TTY TIME CMD
vladysl+ 16547 1 0 12:40 ? 00:00:00 /lib/systemd/systemd --user
vladysl+ 16811 16805 0 12:40 pts/45 00:00:00 -bash
vladysl+ 18946 16811 4 12:41 pts/45 00:00:30 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-scheduler --port 42001
vladysl+ 22285 22284 0 12:46 pts/38 00:00:00 -bash
vladysl+ 23138 16811 1 12:48 pts/45 00:00:06 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-worker localhost:42001 --worker-port 420011 --memory-limit $
vladysl+ 23143 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(11)
vladysl+ 23145 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23151 23145 99 12:48 pts/45 00:07:55 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23536 23151 0 12:49 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(25)
vladysl+ 27079 22285 0 12:54 pts/38 00:00:00 ps -f -u vladyslav
После нажатия Ctrl+C
задача отменяется, но тензорный поток продолжает работать:
UID PID PPID C STIME TTY TIME CMD
vladysl+ 16811 16805 0 12:40 pts/45 00:00:00 -bash
vladysl+ 18946 16811 4 12:41 pts/45 00:00:31 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-scheduler --port 42001
vladysl+ 22285 22284 0 12:46 pts/38 00:00:00 -bash
vladysl+ 23138 16811 1 12:48 pts/45 00:00:06 /home/vladyslav/miniconda3/envs/py3.6/bin/python /home/vladyslav/miniconda3/envs/py3.6/bin/dask-worker localhost:42001 --worker-port 420011 --memory-limit $
vladysl+ 23143 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(11)
vladysl+ 23145 23138 0 12:48 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23151 23145 99 12:48 pts/45 00:09:32 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.forkserver import main; main(15, 16, ['distributed'], **{'sys_path': ['/home/vlady$
vladysl+ 23536 23151 0 12:49 pts/45 00:00:00 /home/vladyslav/miniconda3/envs/py3.6/bin/python -c from multiprocessing.semaphore_tracker import main;main(25)
vladysl+ 27117 22285 0 12:54 pts/38 00:00:00 ps -f -u vladyslav
Как видите, ничего нового не появляется.