|
|
|
|
|
|
|
|
|
|
|
import os |
|
from .async_io import AsyncIOBuilder |
|
|
|
|
|
class GDSBuilder(AsyncIOBuilder): |
|
BUILD_VAR = "DS_BUILD_GDS" |
|
NAME = "gds" |
|
|
|
def __init__(self): |
|
super().__init__() |
|
|
|
def absolute_name(self): |
|
return f'deepspeed.ops.gds.{self.NAME}_op' |
|
|
|
def lib_sources(self): |
|
src_list = ['csrc/gds/py_lib/deepspeed_py_gds_handle.cpp', 'csrc/gds/py_lib/deepspeed_gds_op.cpp'] |
|
return super().lib_sources() + src_list |
|
|
|
def sources(self): |
|
return self.lib_sources() + ['csrc/gds/py_lib/py_ds_gds.cpp'] |
|
|
|
def cxx_args(self): |
|
return super().cxx_args() + ['-lcufile'] |
|
|
|
def include_paths(self): |
|
import torch |
|
CUDA_INCLUDE = [os.path.join(torch.utils.cpp_extension.CUDA_HOME, "include")] |
|
return ['csrc/aio/py_lib', 'csrc/aio/common'] + CUDA_INCLUDE |
|
|
|
def extra_ldflags(self): |
|
return super().extra_ldflags() + ['-lcufile'] |
|
|
|
def is_compatible(self, verbose=False): |
|
if self.is_rocm_pytorch(): |
|
if verbose: |
|
self.warning(f'{self.NAME} is not compatible with ROCM') |
|
return False |
|
|
|
try: |
|
import torch.utils.cpp_extension |
|
except ImportError: |
|
if verbose: |
|
self.warning("Please install torch if trying to pre-compile GDS") |
|
return False |
|
|
|
CUDA_HOME = torch.utils.cpp_extension.CUDA_HOME |
|
if CUDA_HOME is None: |
|
if verbose: |
|
self.warning("Please install torch CUDA if trying to pre-compile GDS with CUDA") |
|
return False |
|
|
|
CUDA_LIB64 = os.path.join(CUDA_HOME, "lib64") |
|
gds_compatible = self.has_function(funcname="cuFileDriverOpen", |
|
libraries=("cufile", ), |
|
library_dirs=( |
|
CUDA_HOME, |
|
CUDA_LIB64, |
|
), |
|
verbose=verbose) |
|
|
|
return gds_compatible and super().is_compatible(verbose) |
|
|