__init__.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # Copyright (c) Microsoft Corporation.
  2. # SPDX-License-Identifier: Apache-2.0
  3. # DeepSpeed Team
  4. import sys
  5. import os
  6. import pkgutil
  7. import importlib
  8. from .builder import get_default_compute_capabilities, OpBuilder
  9. # Do not remove, required for abstract accelerator to detect if we have a deepspeed or 3p op_builder
  10. __deepspeed__ = True
  11. # List of all available op builders from deepspeed op_builder
  12. try:
  13. import deepspeed.ops.op_builder # noqa: F401 # type: ignore
  14. op_builder_dir = "deepspeed.ops.op_builder"
  15. except ImportError:
  16. op_builder_dir = "op_builder"
  17. __op_builders__ = []
  18. this_module = sys.modules[__name__]
  19. def builder_closure(member_name):
  20. if op_builder_dir == "op_builder":
  21. # during installation time cannot get builder due to torch not installed,
  22. # return closure instead
  23. def _builder():
  24. from deepspeed.accelerator import get_accelerator
  25. builder = get_accelerator().create_op_builder(member_name)
  26. return builder
  27. return _builder
  28. else:
  29. # during runtime, return op builder class directly
  30. from deepspeed.accelerator import get_accelerator
  31. builder = get_accelerator().get_op_builder(member_name)
  32. return builder
  33. # reflect builder names and add builder closure, such as 'TransformerBuilder()' creates op builder wrt current accelerator
  34. for _, module_name, _ in pkgutil.iter_modules([os.path.dirname(this_module.__file__)]):
  35. if module_name != 'all_ops' and module_name != 'builder':
  36. module = importlib.import_module(f".{module_name}", package=op_builder_dir)
  37. for member_name in module.__dir__():
  38. if member_name.endswith('Builder') and member_name != "OpBuilder" and member_name != "CUDAOpBuilder":
  39. # assign builder name to variable with same name
  40. # the following is equivalent to i.e. TransformerBuilder = "TransformerBuilder"
  41. this_module.__dict__[member_name] = builder_closure(member_name)