You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

launcher.py 2.2 kB

5 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import argparse
  2. import yaml
  3. import os
  4. import signal
  5. import multiprocessing
  6. import hetu as ht
  7. _procs = []
  8. def signal_handler(signal, frame):
  9. print("SIGINT signal caught, stop Training")
  10. for proc in _procs:
  11. proc.kill()
  12. exit(0)
  13. def launch(target, args):
  14. file_path = args.config
  15. settings = yaml.load(open(file_path).read(), Loader=yaml.FullLoader)
  16. for k, v in settings['shared'].items():
  17. os.environ[k] = str(v)
  18. args.num_local_worker = int(settings["launch"]["worker"])
  19. for i in range(args.num_local_worker):
  20. proc = multiprocessing.Process(
  21. target=start_worker, args=[target, args])
  22. _procs.append(proc)
  23. for i in range(int(settings["launch"]["server"])):
  24. proc = multiprocessing.Process(target=start_server)
  25. _procs.append(proc)
  26. if settings["launch"]["scheduler"] != 0:
  27. proc = multiprocessing.Process(target=start_sched)
  28. _procs.append(proc)
  29. signal.signal(signal.SIGINT, signal_handler)
  30. for proc in _procs:
  31. proc.start()
  32. for proc in _procs:
  33. proc.join()
  34. def start_sched():
  35. os.environ["DMLC_ROLE"] = "scheduler"
  36. ht.scheduler_init()
  37. ht.scheduler_finish()
  38. def start_server():
  39. os.environ["DMLC_ROLE"] = "server"
  40. ht.server_init()
  41. ht.server_finish()
  42. def start_worker(target, args):
  43. os.environ["DMLC_ROLE"] = "worker"
  44. ht.worker_init()
  45. target(args)
  46. ht.worker_finish()
  47. if __name__ == '__main__':
  48. signal.signal(signal.SIGINT, signal_handler)
  49. parser = argparse.ArgumentParser()
  50. parser.add_argument("config")
  51. parser.add_argument("-n", type=int, default=1)
  52. parser.add_argument("--sched", action="store_true")
  53. args = parser.parse_args()
  54. file_path = args.config
  55. settings = yaml.load(open(file_path).read(), Loader=yaml.FullLoader)
  56. for k, v in settings['shared'].items():
  57. os.environ[k] = str(v)
  58. if args.sched:
  59. _procs.append(multiprocessing.Process(target=start_sched))
  60. for i in range(args.n):
  61. _procs.append(multiprocessing.Process(target=start_server))
  62. for proc in _procs:
  63. proc.start()
  64. for proc in _procs:
  65. proc.join()
  66. __all__ = [
  67. 'launch'
  68. ]