xingzhaohu's picture
Add files using upload-large-folder tool
e0a61be verified
Raw
History Blame Contribute Delete
2.89 kB
import torch.distributed as dist
from torch.distributed.device_mesh import init_device_mesh
_SP_MESH = None
_DP_MESH = None
_TP_MESH = None
_SP_GROUP = None
_DP_GROUP = None
_TP_GROUP = None
_SP_WORLD_SIZE = None
_DP_WORLD_SIZE = None
_TP_WORLD_SIZE = None
def setup_sp(sp_size):
world_size = dist.get_world_size()
assert world_size % sp_size == 0
dp_size = world_size // sp_size
device_mesh = init_device_mesh(
'cuda', (dp_size, sp_size), mesh_dim_names=('dp', 'sp'))
global _SP_MESH, _DP_MESH
_SP_MESH = device_mesh['sp']
_DP_MESH = device_mesh['dp']
global _SP_GROUP, _DP_GROUP
_SP_GROUP = device_mesh.get_group('sp')
_DP_GROUP = device_mesh.get_group('dp')
def setup_tp(tp_size):
world_size = dist.get_world_size()
assert world_size % tp_size == 0
dp_size = world_size // tp_size
device_mesh = init_device_mesh(
'cuda', (dp_size, tp_size), mesh_dim_names=('dp', 'tp'))
global _TP_MESH, _DP_MESH
_TP_MESH = device_mesh['tp']
_DP_MESH = device_mesh['dp']
global _TP_GROUP, _DP_GROUP
_TP_GROUP = device_mesh.get_group('tp')
_DP_GROUP = device_mesh.get_group('dp')
def setup_dp():
world_size = dist.get_world_size()
device_mesh = init_device_mesh(
'cuda', (world_size, ), mesh_dim_names=('dp', ))
global _DP_MESH
_DP_MESH = device_mesh['dp']
global _DP_GROUP
_DP_GROUP = device_mesh.get_group('dp')
def setup_parallel(sp_size=1, tp_size=1):
assert not (sp_size > 1 and tp_size > 1), \
('DeepSpeed Sequence Parallel can not be used with '
'Megatron-LM Tensor Parallel')
if sp_size > 1:
setup_sp(sp_size)
elif tp_size > 1:
setup_tp(tp_size)
else:
setup_dp()
def get_dp_mesh():
return _DP_MESH
def get_dp_group():
return _DP_GROUP
def get_dp_world_size():
global _DP_WORLD_SIZE
if _DP_WORLD_SIZE is not None:
return _DP_WORLD_SIZE
if not dist.is_initialized() or (_DP_GROUP is None):
_DP_WORLD_SIZE = 1
else:
_DP_WORLD_SIZE = dist.get_world_size(_DP_GROUP)
return _DP_WORLD_SIZE
def get_sp_mesh():
return _SP_MESH
def get_sp_group():
return _SP_GROUP
def get_sp_world_size():
global _SP_WORLD_SIZE
if _SP_WORLD_SIZE is not None:
return _SP_WORLD_SIZE
if not dist.is_initialized() or (_SP_GROUP is None):
_SP_WORLD_SIZE = 1
else:
_SP_WORLD_SIZE = dist.get_world_size(_SP_GROUP)
return _SP_WORLD_SIZE
def get_tp_mesh():
return _TP_MESH
def get_tp_group():
return _TP_GROUP
def get_tp_world_size():
global _TP_WORLD_SIZE
if _TP_WORLD_SIZE is not None:
return _TP_WORLD_SIZE
if not dist.is_initialized() or (_TP_GROUP is None):
_TP_WORLD_SIZE = 1
else:
_TP_WORLD_SIZE = dist.get_world_size(_TP_GROUP)
return _TP_WORLD_SIZE