Unverified Commit f63dac80 authored by Masaki Kozuki's avatar Masaki Kozuki Committed by GitHub
Browse files

Add `--threads 4` to `extra_compile_args["nvcc"]` (#1251)

* apply formatter & remove duplicate func def

* dry CUDA_HOME None check

* `--threads 4`
parent 1cd1181d
...@@ -10,6 +10,7 @@ import os ...@@ -10,6 +10,7 @@ import os
# ninja build does not work unless include_dirs are abs path # ninja build does not work unless include_dirs are abs path
this_dir = os.path.dirname(os.path.abspath(__file__)) this_dir = os.path.dirname(os.path.abspath(__file__))
def get_cuda_bare_metal_version(cuda_dir): def get_cuda_bare_metal_version(cuda_dir):
raw_output = subprocess.check_output([cuda_dir + "/bin/nvcc", "-V"], universal_newlines=True) raw_output = subprocess.check_output([cuda_dir + "/bin/nvcc", "-V"], universal_newlines=True)
output = raw_output.split() output = raw_output.split()
...@@ -20,88 +21,97 @@ def get_cuda_bare_metal_version(cuda_dir): ...@@ -20,88 +21,97 @@ def get_cuda_bare_metal_version(cuda_dir):
return raw_output, bare_metal_major, bare_metal_minor return raw_output, bare_metal_major, bare_metal_minor
def check_cuda_torch_binary_vs_bare_metal(cuda_dir):
raw_output, bare_metal_major, bare_metal_minor = get_cuda_bare_metal_version(cuda_dir)
torch_binary_major = torch.version.cuda.split(".")[0]
torch_binary_minor = torch.version.cuda.split(".")[1]
print("\nCompiling cuda extensions with")
print(raw_output + "from " + cuda_dir + "/bin\n")
if (bare_metal_major != torch_binary_major) or (bare_metal_minor != torch_binary_minor):
raise RuntimeError(
"Cuda extensions are being compiled with a version of Cuda that does "
"not match the version used to compile Pytorch binaries. "
"Pytorch binaries were compiled with Cuda {}.\n".format(torch.version.cuda)
+ "In some cases, a minor-version mismatch will not cause later errors: "
"https://github.com/NVIDIA/apex/pull/323#discussion_r287021798. "
"You can try commenting out this check (at your own risk)."
)
def raise_if_cuda_home_none(global_option: str) -> None:
if CUDA_HOME is not None:
return
raise RuntimeError(
f"{global_option} was requested, but nvcc was not found. Are you sure your environment has nvcc available? "
"If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, "
"only images whose names contain 'devel' will provide nvcc."
)
def append_nvcc_threads(nvcc_extra_args):
return nvcc_extra_args + ["--threads", "4"]
if not torch.cuda.is_available(): if not torch.cuda.is_available():
# https://github.com/NVIDIA/apex/issues/486 # https://github.com/NVIDIA/apex/issues/486
# Extension builds after https://github.com/pytorch/pytorch/pull/23408 attempt to query torch.cuda.get_device_capability(), # Extension builds after https://github.com/pytorch/pytorch/pull/23408 attempt to query torch.cuda.get_device_capability(),
# which will fail if you are compiling in an environment without visible GPUs (e.g. during an nvidia-docker build command). # which will fail if you are compiling in an environment without visible GPUs (e.g. during an nvidia-docker build command).
print('\nWarning: Torch did not find available GPUs on this system.\n', print(
'If your intention is to cross-compile, this is not an error.\n' "\nWarning: Torch did not find available GPUs on this system.\n",
'By default, Apex will cross-compile for Pascal (compute capabilities 6.0, 6.1, 6.2),\n' "If your intention is to cross-compile, this is not an error.\n"
'Volta (compute capability 7.0), Turing (compute capability 7.5),\n' "By default, Apex will cross-compile for Pascal (compute capabilities 6.0, 6.1, 6.2),\n"
'and, if the CUDA version is >= 11.0, Ampere (compute capability 8.0).\n' "Volta (compute capability 7.0), Turing (compute capability 7.5),\n"
'If you wish to cross-compile for a single specific architecture,\n' "and, if the CUDA version is >= 11.0, Ampere (compute capability 8.0).\n"
'export TORCH_CUDA_ARCH_LIST="compute capability" before running setup.py.\n') "If you wish to cross-compile for a single specific architecture,\n"
'export TORCH_CUDA_ARCH_LIST="compute capability" before running setup.py.\n',
)
if os.environ.get("TORCH_CUDA_ARCH_LIST", None) is None: if os.environ.get("TORCH_CUDA_ARCH_LIST", None) is None:
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME) _, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME)
if int(bare_metal_major) == 11: if int(bare_metal_major) == 11:
os.environ["TORCH_CUDA_ARCH_LIST"] = "6.0;6.1;6.2;7.0;7.5;8.0" os.environ["TORCH_CUDA_ARCH_LIST"] = "6.0;6.1;6.2;7.0;7.5;8.0;8.6"
else: else:
os.environ["TORCH_CUDA_ARCH_LIST"] = "6.0;6.1;6.2;7.0;7.5" os.environ["TORCH_CUDA_ARCH_LIST"] = "6.0;6.1;6.2;7.0;7.5"
print("\n\ntorch.__version__ = {}\n\n".format(torch.__version__)) print("\n\ntorch.__version__ = {}\n\n".format(torch.__version__))
TORCH_MAJOR = int(torch.__version__.split('.')[0]) TORCH_MAJOR = int(torch.__version__.split(".")[0])
TORCH_MINOR = int(torch.__version__.split('.')[1]) TORCH_MINOR = int(torch.__version__.split(".")[1])
if TORCH_MAJOR == 0 and TORCH_MINOR < 4: if TORCH_MAJOR == 0 and TORCH_MINOR < 4:
raise RuntimeError("Apex requires Pytorch 0.4 or newer.\n" + raise RuntimeError(
"The latest stable release can be obtained from https://pytorch.org/") "Apex requires Pytorch 0.4 or newer.\nThe latest stable release can be obtained from https://pytorch.org/"
)
cmdclass = {} cmdclass = {}
ext_modules = [] ext_modules = []
extras = {} extras = {}
if "--pyprof" in sys.argv: if "--pyprof" in sys.argv:
string = "\n\nPyprof has been moved to its own dedicated repository and will " + \ string = (
"soon be removed from Apex. Please visit\n" + \ "\n\nPyprof has been moved to its own dedicated repository and will "
"https://github.com/NVIDIA/PyProf\n" + \ "soon be removed from Apex. Please visit\n"
"for the latest version." "https://github.com/NVIDIA/PyProf\n"
"for the latest version."
)
warnings.warn(string, DeprecationWarning) warnings.warn(string, DeprecationWarning)
with open('requirements.txt') as f: with open("requirements.txt") as f:
required_packages = f.read().splitlines() required_packages = f.read().splitlines()
extras['pyprof'] = required_packages extras["pyprof"] = required_packages
try: sys.argv.remove("--pyprof")
sys.argv.remove("--pyprof")
except:
pass
else: else:
warnings.warn("Option --pyprof not specified. Not installing PyProf dependencies!") warnings.warn("Option --pyprof not specified. Not installing PyProf dependencies!")
if "--cpp_ext" in sys.argv or "--cuda_ext" in sys.argv: if "--cpp_ext" in sys.argv or "--cuda_ext" in sys.argv:
if TORCH_MAJOR == 0: if TORCH_MAJOR == 0:
raise RuntimeError("--cpp_ext requires Pytorch 1.0 or later, " raise RuntimeError(
"found torch.__version__ = {}".format(torch.__version__)) "--cpp_ext requires Pytorch 1.0 or later, " "found torch.__version__ = {}".format(torch.__version__)
)
if "--cpp_ext" in sys.argv: if "--cpp_ext" in sys.argv:
sys.argv.remove("--cpp_ext") sys.argv.remove("--cpp_ext")
ext_modules.append( ext_modules.append(CppExtension("apex_C", ["csrc/flatten_unflatten.cpp"]))
CppExtension('apex_C',
['csrc/flatten_unflatten.cpp',]))
def get_cuda_bare_metal_version(cuda_dir):
raw_output = subprocess.check_output([cuda_dir + "/bin/nvcc", "-V"], universal_newlines=True)
output = raw_output.split()
release_idx = output.index("release") + 1
release = output[release_idx].split(".")
bare_metal_major = release[0]
bare_metal_minor = release[1][0]
return raw_output, bare_metal_major, bare_metal_minor
def check_cuda_torch_binary_vs_bare_metal(cuda_dir):
raw_output, bare_metal_major, bare_metal_minor = get_cuda_bare_metal_version(cuda_dir)
torch_binary_major = torch.version.cuda.split(".")[0]
torch_binary_minor = torch.version.cuda.split(".")[1]
print("\nCompiling cuda extensions with")
print(raw_output + "from " + cuda_dir + "/bin\n")
if (bare_metal_major != torch_binary_major) or (bare_metal_minor != torch_binary_minor):
raise RuntimeError("Cuda extensions are being compiled with a version of Cuda that does " +
"not match the version used to compile Pytorch binaries. " +
"Pytorch binaries were compiled with Cuda {}.\n".format(torch.version.cuda) +
"In some cases, a minor-version mismatch will not cause later errors: " +
"https://github.com/NVIDIA/apex/pull/323#discussion_r287021798. "
"You can try commenting out this check (at your own risk).")
# Set up macros for forward/backward compatibility hack around # Set up macros for forward/backward compatibility hack around
...@@ -111,358 +121,462 @@ def check_cuda_torch_binary_vs_bare_metal(cuda_dir): ...@@ -111,358 +121,462 @@ def check_cuda_torch_binary_vs_bare_metal(cuda_dir):
# https://github.com/pytorch/pytorch/commit/eb7b39e02f7d75c26d8a795ea8c7fd911334da7e#diff-4632522f237f1e4e728cb824300403ac # https://github.com/pytorch/pytorch/commit/eb7b39e02f7d75c26d8a795ea8c7fd911334da7e#diff-4632522f237f1e4e728cb824300403ac
version_ge_1_1 = [] version_ge_1_1 = []
if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 0): if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 0):
version_ge_1_1 = ['-DVERSION_GE_1_1'] version_ge_1_1 = ["-DVERSION_GE_1_1"]
version_ge_1_3 = [] version_ge_1_3 = []
if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 2): if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 2):
version_ge_1_3 = ['-DVERSION_GE_1_3'] version_ge_1_3 = ["-DVERSION_GE_1_3"]
version_ge_1_5 = [] version_ge_1_5 = []
if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 4): if (TORCH_MAJOR > 1) or (TORCH_MAJOR == 1 and TORCH_MINOR > 4):
version_ge_1_5 = ['-DVERSION_GE_1_5'] version_ge_1_5 = ["-DVERSION_GE_1_5"]
version_dependent_macros = version_ge_1_1 + version_ge_1_3 + version_ge_1_5 version_dependent_macros = version_ge_1_1 + version_ge_1_3 + version_ge_1_5
if "--distributed_adam" in sys.argv: if "--distributed_adam" in sys.argv:
sys.argv.remove("--distributed_adam") sys.argv.remove("--distributed_adam")
raise_if_cuda_home_none("--distributed_adam")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--distributed_adam was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="distributed_adam_cuda",
ext_modules.append( sources=[
CUDAExtension(name='distributed_adam_cuda', "apex/contrib/csrc/optimizers/multi_tensor_distopt_adam.cpp",
sources=['apex/contrib/csrc/optimizers/multi_tensor_distopt_adam.cpp', "apex/contrib/csrc/optimizers/multi_tensor_distopt_adam_kernel.cu",
'apex/contrib/csrc/optimizers/multi_tensor_distopt_adam_kernel.cu'], ],
include_dirs=[os.path.join(this_dir, 'csrc')], include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros, extra_compile_args={
'nvcc':['-O3', "cxx": ["-O3"] + version_dependent_macros,
'--use_fast_math'] + version_dependent_macros})) "nvcc": append_nvcc_threads(["-O3", "--use_fast_math"] + version_dependent_macros),
},
)
)
if "--distributed_lamb" in sys.argv: if "--distributed_lamb" in sys.argv:
sys.argv.remove("--distributed_lamb") sys.argv.remove("--distributed_lamb")
raise_if_cuda_home_none("--distributed_lamb")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--distributed_lamb was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="distributed_lamb_cuda",
ext_modules.append( sources=[
CUDAExtension(name='distributed_lamb_cuda', "apex/contrib/csrc/optimizers/multi_tensor_distopt_lamb.cpp",
sources=['apex/contrib/csrc/optimizers/multi_tensor_distopt_lamb.cpp', "apex/contrib/csrc/optimizers/multi_tensor_distopt_lamb_kernel.cu",
'apex/contrib/csrc/optimizers/multi_tensor_distopt_lamb_kernel.cu'], ],
include_dirs=[os.path.join(this_dir, 'csrc')], include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros, extra_compile_args={
'nvcc':['-O3', "cxx": ["-O3"] + version_dependent_macros,
'--use_fast_math'] + version_dependent_macros})) "nvcc": append_nvcc_threads(["-O3", "--use_fast_math"] + version_dependent_macros),
},
)
)
if "--cuda_ext" in sys.argv: if "--cuda_ext" in sys.argv:
sys.argv.remove("--cuda_ext") sys.argv.remove("--cuda_ext")
raise_if_cuda_home_none("--cuda_ext")
check_cuda_torch_binary_vs_bare_metal(CUDA_HOME)
ext_modules.append(
CUDAExtension(
name="amp_C",
sources=[
"csrc/amp_C_frontend.cpp",
"csrc/multi_tensor_sgd_kernel.cu",
"csrc/multi_tensor_scale_kernel.cu",
"csrc/multi_tensor_axpby_kernel.cu",
"csrc/multi_tensor_l2norm_kernel.cu",
"csrc/multi_tensor_l2norm_kernel_mp.cu",
"csrc/multi_tensor_l2norm_scale_kernel.cu",
"csrc/multi_tensor_lamb_stage_1.cu",
"csrc/multi_tensor_lamb_stage_2.cu",
"csrc/multi_tensor_adam.cu",
"csrc/multi_tensor_adagrad.cu",
"csrc/multi_tensor_novograd.cu",
"csrc/multi_tensor_lamb.cu",
"csrc/multi_tensor_lamb_mp.cu",
],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(
[
"-lineinfo",
"-O3",
# '--resource-usage',
"--use_fast_math",
]
+ version_dependent_macros
),
},
)
)
ext_modules.append(
CUDAExtension(
name="syncbn",
sources=["csrc/syncbn.cpp", "csrc/welford.cu"],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
},
)
)
ext_modules.append(
CUDAExtension(
name="fused_layer_norm_cuda",
sources=["csrc/layer_norm_cuda.cpp", "csrc/layer_norm_cuda_kernel.cu"],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(["-maxrregcount=50", "-O3", "--use_fast_math"] + version_dependent_macros),
},
)
)
ext_modules.append(
CUDAExtension(
name="mlp_cuda",
sources=["csrc/mlp.cpp", "csrc/mlp_cuda.cu"],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
},
)
)
ext_modules.append(
CUDAExtension(
name="fused_dense_cuda",
sources=["csrc/fused_dense.cpp", "csrc/fused_dense_cuda.cu"],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
},
)
)
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--cuda_ext was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="scaled_upper_triang_masked_softmax_cuda",
check_cuda_torch_binary_vs_bare_metal(CUDA_HOME) sources=[
"csrc/megatron/scaled_upper_triang_masked_softmax.cpp",
ext_modules.append( "csrc/megatron/scaled_upper_triang_masked_softmax_cuda.cu",
CUDAExtension(name='amp_C', ],
sources=['csrc/amp_C_frontend.cpp', include_dirs=[os.path.join(this_dir, "csrc")],
'csrc/multi_tensor_sgd_kernel.cu', extra_compile_args={
'csrc/multi_tensor_scale_kernel.cu', "cxx": ["-O3"] + version_dependent_macros,
'csrc/multi_tensor_axpby_kernel.cu', "nvcc": append_nvcc_threads(
'csrc/multi_tensor_l2norm_kernel.cu', [
'csrc/multi_tensor_l2norm_kernel_mp.cu', "-O3",
'csrc/multi_tensor_l2norm_scale_kernel.cu', "-U__CUDA_NO_HALF_OPERATORS__",
'csrc/multi_tensor_lamb_stage_1.cu', "-U__CUDA_NO_HALF_CONVERSIONS__",
'csrc/multi_tensor_lamb_stage_2.cu', "--expt-relaxed-constexpr",
'csrc/multi_tensor_adam.cu', "--expt-extended-lambda",
'csrc/multi_tensor_adagrad.cu', ]
'csrc/multi_tensor_novograd.cu', + version_dependent_macros
'csrc/multi_tensor_lamb.cu', ),
'csrc/multi_tensor_lamb_mp.cu'], },
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, )
'nvcc':['-lineinfo', )
'-O3',
# '--resource-usage', ext_modules.append(
'--use_fast_math'] + version_dependent_macros})) CUDAExtension(
ext_modules.append( name="scaled_masked_softmax_cuda",
CUDAExtension(name='syncbn', sources=["csrc/megatron/scaled_masked_softmax.cpp", "csrc/megatron/scaled_masked_softmax_cuda.cu"],
sources=['csrc/syncbn.cpp', include_dirs=[os.path.join(this_dir, "csrc")],
'csrc/welford.cu'], extra_compile_args={
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, "cxx": ["-O3"] + version_dependent_macros,
'nvcc':['-O3'] + version_dependent_macros})) "nvcc": append_nvcc_threads(
[
ext_modules.append( "-O3",
CUDAExtension(name='fused_layer_norm_cuda', "-U__CUDA_NO_HALF_OPERATORS__",
sources=['csrc/layer_norm_cuda.cpp', "-U__CUDA_NO_HALF_CONVERSIONS__",
'csrc/layer_norm_cuda_kernel.cu'], "--expt-relaxed-constexpr",
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, "--expt-extended-lambda",
'nvcc':['-maxrregcount=50', ]
'-O3', + version_dependent_macros
'--use_fast_math'] + version_dependent_macros})) ),
},
ext_modules.append( )
CUDAExtension(name='mlp_cuda', )
sources=['csrc/mlp.cpp',
'csrc/mlp_cuda.cu'],
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros,
'nvcc':['-O3'] + version_dependent_macros}))
ext_modules.append(
CUDAExtension(name='fused_dense_cuda',
sources=['csrc/fused_dense.cpp',
'csrc/fused_dense_cuda.cu'],
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros,
'nvcc':['-O3'] + version_dependent_macros}))
ext_modules.append(
CUDAExtension(name='scaled_upper_triang_masked_softmax_cuda',
sources=['csrc/megatron/scaled_upper_triang_masked_softmax.cpp',
'csrc/megatron/scaled_upper_triang_masked_softmax_cuda.cu'],
include_dirs=[os.path.join(this_dir, 'csrc')],
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros,
'nvcc':['-O3',
'-U__CUDA_NO_HALF_OPERATORS__',
'-U__CUDA_NO_HALF_CONVERSIONS__',
'--expt-relaxed-constexpr',
'--expt-extended-lambda'] + version_dependent_macros}))
ext_modules.append(
CUDAExtension(name='scaled_masked_softmax_cuda',
sources=['csrc/megatron/scaled_masked_softmax.cpp',
'csrc/megatron/scaled_masked_softmax_cuda.cu'],
include_dirs=[os.path.join(this_dir, 'csrc')],
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros,
'nvcc':['-O3',
'-U__CUDA_NO_HALF_OPERATORS__',
'-U__CUDA_NO_HALF_CONVERSIONS__',
'--expt-relaxed-constexpr',
'--expt-extended-lambda'] + version_dependent_macros}))
if "--bnp" in sys.argv: if "--bnp" in sys.argv:
sys.argv.remove("--bnp") sys.argv.remove("--bnp")
raise_if_cuda_home_none("--bnp")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--bnp was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="bnp",
ext_modules.append( sources=[
CUDAExtension(name='bnp', "apex/contrib/csrc/groupbn/batch_norm.cu",
sources=['apex/contrib/csrc/groupbn/batch_norm.cu', "apex/contrib/csrc/groupbn/ipc.cu",
'apex/contrib/csrc/groupbn/ipc.cu', "apex/contrib/csrc/groupbn/interface.cpp",
'apex/contrib/csrc/groupbn/interface.cpp', "apex/contrib/csrc/groupbn/batch_norm_add_relu.cu",
'apex/contrib/csrc/groupbn/batch_norm_add_relu.cu'], ],
include_dirs=[os.path.join(this_dir, 'csrc')], include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={'cxx': [] + version_dependent_macros, extra_compile_args={
'nvcc':['-DCUDA_HAS_FP16=1', "cxx": [] + version_dependent_macros,
'-D__CUDA_NO_HALF_OPERATORS__', "nvcc": append_nvcc_threads(
'-D__CUDA_NO_HALF_CONVERSIONS__', [
'-D__CUDA_NO_HALF2_OPERATORS__'] + version_dependent_macros})) "-DCUDA_HAS_FP16=1",
"-D__CUDA_NO_HALF_OPERATORS__",
"-D__CUDA_NO_HALF_CONVERSIONS__",
"-D__CUDA_NO_HALF2_OPERATORS__",
]
+ version_dependent_macros
),
},
)
)
if "--xentropy" in sys.argv: if "--xentropy" in sys.argv:
sys.argv.remove("--xentropy") sys.argv.remove("--xentropy")
raise_if_cuda_home_none("--xentropy")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--xentropy was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="xentropy_cuda",
ext_modules.append( sources=["apex/contrib/csrc/xentropy/interface.cpp", "apex/contrib/csrc/xentropy/xentropy_kernel.cu"],
CUDAExtension(name='xentropy_cuda', include_dirs=[os.path.join(this_dir, "csrc")],
sources=['apex/contrib/csrc/xentropy/interface.cpp', extra_compile_args={
'apex/contrib/csrc/xentropy/xentropy_kernel.cu'], "cxx": ["-O3"] + version_dependent_macros,
include_dirs=[os.path.join(this_dir, 'csrc')], "nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, },
'nvcc':['-O3'] + version_dependent_macros})) )
)
if "--deprecated_fused_adam" in sys.argv: if "--deprecated_fused_adam" in sys.argv:
sys.argv.remove("--deprecated_fused_adam") sys.argv.remove("--deprecated_fused_adam")
raise_if_cuda_home_none("--deprecated_fused_adam")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--deprecated_fused_adam was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="fused_adam_cuda",
ext_modules.append( sources=[
CUDAExtension(name='fused_adam_cuda', "apex/contrib/csrc/optimizers/fused_adam_cuda.cpp",
sources=['apex/contrib/csrc/optimizers/fused_adam_cuda.cpp', "apex/contrib/csrc/optimizers/fused_adam_cuda_kernel.cu",
'apex/contrib/csrc/optimizers/fused_adam_cuda_kernel.cu'], ],
include_dirs=[os.path.join(this_dir, 'csrc')], include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros, extra_compile_args={
'nvcc':['-O3', "cxx": ["-O3"] + version_dependent_macros,
'--use_fast_math'] + version_dependent_macros})) "nvcc": append_nvcc_threads(["-O3", "--use_fast_math"] + version_dependent_macros),
},
)
)
if "--deprecated_fused_lamb" in sys.argv: if "--deprecated_fused_lamb" in sys.argv:
sys.argv.remove("--deprecated_fused_lamb") sys.argv.remove("--deprecated_fused_lamb")
raise_if_cuda_home_none("--deprecated_fused_lamb")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--deprecated_fused_lamb was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="fused_lamb_cuda",
ext_modules.append( sources=[
CUDAExtension(name='fused_lamb_cuda', "apex/contrib/csrc/optimizers/fused_lamb_cuda.cpp",
sources=['apex/contrib/csrc/optimizers/fused_lamb_cuda.cpp', "apex/contrib/csrc/optimizers/fused_lamb_cuda_kernel.cu",
'apex/contrib/csrc/optimizers/fused_lamb_cuda_kernel.cu', "csrc/multi_tensor_l2norm_kernel.cu",
'csrc/multi_tensor_l2norm_kernel.cu'], ],
include_dirs=[os.path.join(this_dir, 'csrc')], include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros, extra_compile_args={
'nvcc':['-O3', "cxx": ["-O3"] + version_dependent_macros,
'--use_fast_math'] + version_dependent_macros})) "nvcc": append_nvcc_threads(["-O3", "--use_fast_math"] + version_dependent_macros),
},
)
)
# Check, if ATen/CUDAGenerator.h is found, otherwise use the new ATen/CUDAGeneratorImpl.h, due to breaking change in https://github.com/pytorch/pytorch/pull/36026 # Check, if ATen/CUDAGenerator.h is found, otherwise use the new ATen/CUDAGeneratorImpl.h, due to breaking change in https://github.com/pytorch/pytorch/pull/36026
generator_flag = [] generator_flag = []
torch_dir = torch.__path__[0] torch_dir = torch.__path__[0]
if os.path.exists(os.path.join(torch_dir, 'include', 'ATen', 'CUDAGenerator.h')): if os.path.exists(os.path.join(torch_dir, "include", "ATen", "CUDAGenerator.h")):
generator_flag = ['-DOLD_GENERATOR'] generator_flag = ["-DOLD_GENERATOR"]
if "--fast_layer_norm" in sys.argv: if "--fast_layer_norm" in sys.argv:
sys.argv.remove("--fast_layer_norm") sys.argv.remove("--fast_layer_norm")
raise_if_cuda_home_none("--fast_layer_norm")
# Check, if CUDA11 is installed for compute capability 8.0
cc_flag = []
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME)
if int(bare_metal_major) >= 11:
cc_flag.append("-gencode")
cc_flag.append("arch=compute_80,code=sm_80")
ext_modules.append(
CUDAExtension(
name="fast_layer_norm",
sources=[
"apex/contrib/csrc/layer_norm/ln_api.cpp",
"apex/contrib/csrc/layer_norm/ln_fwd_cuda_kernel.cu",
"apex/contrib/csrc/layer_norm/ln_bwd_semi_cuda_kernel.cu",
],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros + generator_flag,
"nvcc": append_nvcc_threads(
[
"-O3",
"-gencode",
"arch=compute_70,code=sm_70",
"-U__CUDA_NO_HALF_OPERATORS__",
"-U__CUDA_NO_HALF_CONVERSIONS__",
"-U__CUDA_NO_BFLOAT16_OPERATORS__",
"-U__CUDA_NO_BFLOAT16_CONVERSIONS__",
"-U__CUDA_NO_BFLOAT162_OPERATORS__",
"-U__CUDA_NO_BFLOAT162_CONVERSIONS__",
"-I./apex/contrib/csrc/layer_norm/",
"--expt-relaxed-constexpr",
"--expt-extended-lambda",
"--use_fast_math",
]
+ version_dependent_macros
+ generator_flag
+ cc_flag
),
},
include_dirs=[os.path.join(this_dir, "apex/contrib/csrc/layer_norm")],
)
)
if CUDA_HOME is None:
raise RuntimeError("--fast_layer_norm was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.")
else:
# Check, if CUDA11 is installed for compute capability 8.0
cc_flag = []
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME)
if int(bare_metal_major) >= 11:
cc_flag.append('-gencode')
cc_flag.append('arch=compute_80,code=sm_80')
ext_modules.append(
CUDAExtension(name='fast_layer_norm',
sources=['apex/contrib/csrc/layer_norm/ln_api.cpp',
'apex/contrib/csrc/layer_norm/ln_fwd_cuda_kernel.cu',
'apex/contrib/csrc/layer_norm/ln_bwd_semi_cuda_kernel.cu',
],
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros + generator_flag,
'nvcc':['-O3',
'-gencode', 'arch=compute_70,code=sm_70',
'-U__CUDA_NO_HALF_OPERATORS__',
'-U__CUDA_NO_HALF_CONVERSIONS__',
'-U__CUDA_NO_BFLOAT16_OPERATORS__',
'-U__CUDA_NO_BFLOAT16_CONVERSIONS__',
'-U__CUDA_NO_BFLOAT162_OPERATORS__',
'-U__CUDA_NO_BFLOAT162_CONVERSIONS__',
'-I./apex/contrib/csrc/layer_norm/',
'--expt-relaxed-constexpr',
'--expt-extended-lambda',
'--use_fast_math'] + version_dependent_macros + generator_flag + cc_flag},
include_dirs=[os.path.join(this_dir, "apex/contrib/csrc/layer_norm")]))
if "--fmha" in sys.argv: if "--fmha" in sys.argv:
sys.argv.remove("--fmha") sys.argv.remove("--fmha")
raise_if_cuda_home_none("--fmha")
# Check, if CUDA11 is installed for compute capability 8.0
cc_flag = []
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME)
if int(bare_metal_major) < 11:
raise RuntimeError("--fmha only supported on SM80")
cc_flag.append("-gencode")
cc_flag.append("arch=compute_80,code=sm_80")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--fmha was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="fmhalib",
# Check, if CUDA11 is installed for compute capability 8.0 sources=[
cc_flag = [] "apex/contrib/csrc/fmha/fmha_api.cpp",
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME) "apex/contrib/csrc/fmha/src/fmha_noloop_reduce.cu",
if int(bare_metal_major) < 11: "apex/contrib/csrc/fmha/src/fmha_fprop_fp16_128_64_kernel.sm80.cu",
raise RuntimeError("--fmha only supported on SM80") "apex/contrib/csrc/fmha/src/fmha_fprop_fp16_256_64_kernel.sm80.cu",
"apex/contrib/csrc/fmha/src/fmha_fprop_fp16_384_64_kernel.sm80.cu",
ext_modules.append( "apex/contrib/csrc/fmha/src/fmha_fprop_fp16_512_64_kernel.sm80.cu",
CUDAExtension(name='fmhalib', "apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_128_64_kernel.sm80.cu",
sources=[ "apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_256_64_kernel.sm80.cu",
'apex/contrib/csrc/fmha/fmha_api.cpp', "apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_384_64_kernel.sm80.cu",
'apex/contrib/csrc/fmha/src/fmha_noloop_reduce.cu', "apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_512_64_kernel.sm80.cu",
'apex/contrib/csrc/fmha/src/fmha_fprop_fp16_128_64_kernel.sm80.cu', ],
'apex/contrib/csrc/fmha/src/fmha_fprop_fp16_256_64_kernel.sm80.cu', extra_compile_args={
'apex/contrib/csrc/fmha/src/fmha_fprop_fp16_384_64_kernel.sm80.cu', "cxx": ["-O3"] + version_dependent_macros + generator_flag,
'apex/contrib/csrc/fmha/src/fmha_fprop_fp16_512_64_kernel.sm80.cu', "nvcc": append_nvcc_threads(
'apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_128_64_kernel.sm80.cu', [
'apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_256_64_kernel.sm80.cu', "-O3",
'apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_384_64_kernel.sm80.cu', "-U__CUDA_NO_HALF_OPERATORS__",
'apex/contrib/csrc/fmha/src/fmha_dgrad_fp16_512_64_kernel.sm80.cu', "-U__CUDA_NO_HALF_CONVERSIONS__",
], "--expt-relaxed-constexpr",
extra_compile_args={'cxx': ['-O3', "--expt-extended-lambda",
] + version_dependent_macros + generator_flag, "--use_fast_math",
'nvcc':['-O3', ]
'-gencode', 'arch=compute_80,code=sm_80', + version_dependent_macros
'-U__CUDA_NO_HALF_OPERATORS__', + generator_flag
'-U__CUDA_NO_HALF_CONVERSIONS__', + cc_flag
'--expt-relaxed-constexpr', ),
'--expt-extended-lambda', },
'--use_fast_math'] + version_dependent_macros + generator_flag + cc_flag}, include_dirs=[
include_dirs=[os.path.join(this_dir, "apex/contrib/csrc"), os.path.join(this_dir, "apex/contrib/csrc/fmha/src")])) os.path.join(this_dir, "apex/contrib/csrc"),
os.path.join(this_dir, "apex/contrib/csrc/fmha/src"),
],
)
)
if "--fast_multihead_attn" in sys.argv: if "--fast_multihead_attn" in sys.argv:
sys.argv.remove("--fast_multihead_attn") sys.argv.remove("--fast_multihead_attn")
raise_if_cuda_home_none("--fast_multihead_attn")
if CUDA_HOME is None:
raise RuntimeError("--fast_multihead_attn was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") # Check, if CUDA11 is installed for compute capability 8.0
else: cc_flag = []
# Check, if CUDA11 is installed for compute capability 8.0 _, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME)
cc_flag = [] if int(bare_metal_major) >= 11:
_, bare_metal_major, _ = get_cuda_bare_metal_version(CUDA_HOME) cc_flag.append("-gencode")
if int(bare_metal_major) >= 11: cc_flag.append("arch=compute_80,code=sm_80")
cc_flag.append('-gencode') cc_flag.append("-gencode")
cc_flag.append('arch=compute_80,code=sm_80') cc_flag.append("arch=compute_86,code=sm_86")
cc_flag.append('-gencode')
cc_flag.append('arch=compute_86,code=sm_86') subprocess.run(["git", "submodule", "update", "--init", "apex/contrib/csrc/multihead_attn/cutlass"])
ext_modules.append(
subprocess.run(["git", "submodule", "update", "--init", "apex/contrib/csrc/multihead_attn/cutlass"]) CUDAExtension(
ext_modules.append( name="fast_multihead_attn",
CUDAExtension( sources=[
name='fast_multihead_attn', "apex/contrib/csrc/multihead_attn/multihead_attn_frontend.cpp",
sources=[ "apex/contrib/csrc/multihead_attn/additive_masked_softmax_dropout_cuda.cu",
'apex/contrib/csrc/multihead_attn/multihead_attn_frontend.cpp', "apex/contrib/csrc/multihead_attn/masked_softmax_dropout_cuda.cu",
'apex/contrib/csrc/multihead_attn/additive_masked_softmax_dropout_cuda.cu', "apex/contrib/csrc/multihead_attn/encdec_multihead_attn_cuda.cu",
"apex/contrib/csrc/multihead_attn/masked_softmax_dropout_cuda.cu", "apex/contrib/csrc/multihead_attn/encdec_multihead_attn_norm_add_cuda.cu",
"apex/contrib/csrc/multihead_attn/encdec_multihead_attn_cuda.cu", "apex/contrib/csrc/multihead_attn/self_multihead_attn_cuda.cu",
"apex/contrib/csrc/multihead_attn/encdec_multihead_attn_norm_add_cuda.cu", "apex/contrib/csrc/multihead_attn/self_multihead_attn_bias_additive_mask_cuda.cu",
"apex/contrib/csrc/multihead_attn/self_multihead_attn_cuda.cu", "apex/contrib/csrc/multihead_attn/self_multihead_attn_bias_cuda.cu",
"apex/contrib/csrc/multihead_attn/self_multihead_attn_bias_additive_mask_cuda.cu", "apex/contrib/csrc/multihead_attn/self_multihead_attn_norm_add_cuda.cu",
"apex/contrib/csrc/multihead_attn/self_multihead_attn_bias_cuda.cu", ],
"apex/contrib/csrc/multihead_attn/self_multihead_attn_norm_add_cuda.cu", extra_compile_args={
], "cxx": ["-O3"] + version_dependent_macros + generator_flag,
extra_compile_args={ "nvcc": append_nvcc_threads(
'cxx': ['-O3'] + version_dependent_macros + generator_flag, [
'nvcc': [ "-O3",
'-O3', '-gencode', 'arch=compute_70,code=sm_70', '-U__CUDA_NO_HALF_OPERATORS__', "-gencode",
'-U__CUDA_NO_HALF_CONVERSIONS__', '--expt-relaxed-constexpr', '--expt-extended-lambda', "arch=compute_70,code=sm_70",
'--use_fast_math'] + version_dependent_macros + generator_flag + cc_flag, "-U__CUDA_NO_HALF_OPERATORS__",
}, "-U__CUDA_NO_HALF_CONVERSIONS__",
include_dirs=[os.path.join(this_dir, "apex/contrib/csrc/multihead_attn/cutlass")], "--expt-relaxed-constexpr",
) "--expt-extended-lambda",
"--use_fast_math",
]
+ version_dependent_macros
+ generator_flag
+ cc_flag
),
},
include_dirs=[os.path.join(this_dir, "apex/contrib/csrc/multihead_attn/cutlass")],
) )
)
if "--transducer" in sys.argv: if "--transducer" in sys.argv:
sys.argv.remove("--transducer") sys.argv.remove("--transducer")
raise_if_cuda_home_none("--transducer")
if CUDA_HOME is None: ext_modules.append(
raise RuntimeError("--transducer was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") CUDAExtension(
else: name="transducer_joint_cuda",
ext_modules.append( sources=[
CUDAExtension(name='transducer_joint_cuda', "apex/contrib/csrc/transducer/transducer_joint.cpp",
sources=['apex/contrib/csrc/transducer/transducer_joint.cpp', "apex/contrib/csrc/transducer/transducer_joint_kernel.cu",
'apex/contrib/csrc/transducer/transducer_joint_kernel.cu'], ],
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, extra_compile_args={
'nvcc': ['-O3'] + version_dependent_macros}, "cxx": ["-O3"] + version_dependent_macros,
include_dirs=[os.path.join(this_dir, 'csrc'), os.path.join(this_dir, "apex/contrib/csrc/multihead_attn")])) "nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
ext_modules.append( },
CUDAExtension(name='transducer_loss_cuda', include_dirs=[os.path.join(this_dir, "csrc"), os.path.join(this_dir, "apex/contrib/csrc/multihead_attn")],
sources=['apex/contrib/csrc/transducer/transducer_loss.cpp', )
'apex/contrib/csrc/transducer/transducer_loss_kernel.cu'], )
include_dirs=[os.path.join(this_dir, 'csrc')], ext_modules.append(
extra_compile_args={'cxx': ['-O3'] + version_dependent_macros, CUDAExtension(
'nvcc':['-O3'] + version_dependent_macros})) name="transducer_loss_cuda",
sources=[
"apex/contrib/csrc/transducer/transducer_loss.cpp",
"apex/contrib/csrc/transducer/transducer_loss_kernel.cu",
],
include_dirs=[os.path.join(this_dir, "csrc")],
extra_compile_args={
"cxx": ["-O3"] + version_dependent_macros,
"nvcc": append_nvcc_threads(["-O3"] + version_dependent_macros),
},
)
)
if "--fast_bottleneck" in sys.argv: if "--fast_bottleneck" in sys.argv:
sys.argv.remove("--fast_bottleneck") sys.argv.remove("--fast_bottleneck")
raise_if_cuda_home_none("--fast_bottleneck")
if CUDA_HOME is None: subprocess.run(["git", "submodule", "update", "--init", "apex/contrib/csrc/cudnn-frontend/"])
raise RuntimeError("--fast_bottleneck was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.") ext_modules.append(
else: CUDAExtension(
subprocess.run(["git", "submodule", "update", "--init", "apex/contrib/csrc/cudnn-frontend/"]) name="fast_bottleneck",
ext_modules.append( sources=["apex/contrib/csrc/bottleneck/bottleneck.cpp"],
CUDAExtension(name='fast_bottleneck', include_dirs=[os.path.join(this_dir, "apex/contrib/csrc/cudnn-frontend/include")],
sources=['apex/contrib/csrc/bottleneck/bottleneck.cpp'], extra_compile_args={"cxx": ["-O3"] + version_dependent_macros + generator_flag},
include_dirs=[os.path.join(this_dir, 'apex/contrib/csrc/cudnn-frontend/include')], )
extra_compile_args={'cxx': ['-O3',] + version_dependent_macros + generator_flag})) )
setup( setup(
name='apex', name="apex",
version='0.1', version="0.1",
packages=find_packages(exclude=('build', packages=find_packages(
'csrc', exclude=("build", "csrc", "include", "tests", "dist", "docs", "tests", "examples", "apex.egg-info",)
'include', ),
'tests', description="PyTorch Extensions written by NVIDIA",
'dist',
'docs',
'tests',
'examples',
'apex.egg-info',)),
description='PyTorch Extensions written by NVIDIA',
ext_modules=ext_modules, ext_modules=ext_modules,
cmdclass={'build_ext': BuildExtension} if ext_modules else {}, cmdclass={"build_ext": BuildExtension} if ext_modules else {},
extras_require=extras, extras_require=extras,
) )
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment