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.

profiler.py 2.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import argparse
  2. import getopt
  3. import os
  4. import runpy
  5. import sys
  6. from megengine.logger import get_logger
  7. from megengine.utils.profiler import Profiler, merge_trace_events
  8. def main():
  9. parser = argparse.ArgumentParser(
  10. prog="megengine.tools.profiler", description="Profiling megengine program"
  11. )
  12. parser.add_argument(
  13. "-m", "--module", action="store_true", help="whether launch program as module"
  14. )
  15. parser.add_argument("-o", "--output", type=str, help="output file location")
  16. parser.add_argument(
  17. "-f",
  18. "--format",
  19. action="append",
  20. type=str,
  21. help="output file format",
  22. choices=Profiler.valid_formats,
  23. )
  24. parser.add_argument(
  25. "--merge_trace_events", action="store_true",
  26. )
  27. parser.add_argument(
  28. "--clean", action="store_true",
  29. )
  30. for opt in Profiler.valid_options:
  31. parser.add_argument("--" + opt, type=int, default=None)
  32. args, extras = parser.parse_known_args(sys.argv[1:])
  33. prof_args = {}
  34. for opt in Profiler.valid_options:
  35. optval = getattr(args, opt, None)
  36. if optval is not None:
  37. prof_args[opt] = optval
  38. if args.output is not None:
  39. prof_args["path"] = args.output
  40. if args.format:
  41. prof_args["formats"] = args.format
  42. if args.clean:
  43. for file in os.listdir(profiler.directory):
  44. os.remove(os.path.join(profiler.directory, file))
  45. if len(extras) == 0:
  46. if not args.merge_trace_events:
  47. parser.print_usage()
  48. exit(1)
  49. else:
  50. filename = extras[0]
  51. if not args.module:
  52. if not os.path.exists(filename):
  53. get_logger().fatal("cannot find file {}".format(filename))
  54. exit(1)
  55. filename = os.path.realpath(filename)
  56. # Replace profiler's dir with script's dir in front of module search path.
  57. sys.path[0] = os.path.dirname(filename)
  58. sys.argv[:] = [filename, *extras[1:]]
  59. profiler = Profiler(**prof_args)
  60. with profiler:
  61. if args.module:
  62. runpy.run_module(filename)
  63. else:
  64. run_script(filename)
  65. profiler.dump()
  66. if args.merge_trace_events:
  67. merge_trace_events(profiler.directory)
  68. def run_module(modulename):
  69. runpy.run_module(modulename, None, "__main__", True)
  70. def run_script(filename):
  71. runpy.run_path(filename, None, "__main__")
  72. if __name__ == "__main__":
  73. main()

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台