"vscode:/vscode.git/clone" did not exist on "385411e674e0ae2f1b1b9555b5c8a9e8561b6c17"
setup.py 4.83 KB
Newer Older
Zhekai Zhang's avatar
Zhekai Zhang committed
1
2
3
4
5
import os

import setuptools
from torch.utils.cpp_extension import BuildExtension, CUDAExtension

sxtyzhangzk's avatar
sxtyzhangzk committed
6
7
8
9
10
class CustomBuildExtension(BuildExtension):
    def build_extensions(self):
        for ext in self.extensions:
            if not "cxx" in ext.extra_compile_args:
                ext.extra_compile_args["cxx"] = []
sxtyzhangzk's avatar
sxtyzhangzk committed
11
12
            if not "nvcc" in ext.extra_compile_args:
                ext.extra_compile_args["nvcc"] = []
sxtyzhangzk's avatar
sxtyzhangzk committed
13
14
            if self.compiler.compiler_type == "msvc":
                ext.extra_compile_args["cxx"] += ext.extra_compile_args["msvc"]
sxtyzhangzk's avatar
sxtyzhangzk committed
15
                ext.extra_compile_args["nvcc"] += ext.extra_compile_args["nvcc_msvc"]
sxtyzhangzk's avatar
sxtyzhangzk committed
16
17
18
19
            else:
                ext.extra_compile_args["cxx"] += ext.extra_compile_args["gcc"]
        super().build_extensions()

Zhekai Zhang's avatar
Zhekai Zhang committed
20
21
22
23
24
25
26
27
28
29
30
31
if __name__ == "__main__":
    fp = open("nunchaku/__version__.py", "r").read()
    version = eval(fp.strip().split()[-1])

    ROOT_DIR = os.path.dirname(__file__)

    INCLUDE_DIRS = [
        "src",
        "third_party/cutlass/include",
        "third_party/json/include",
        "third_party/mio/include",
        "third_party/spdlog/include",
Zhekai Zhang's avatar
Zhekai Zhang committed
32
        "third_party/Block-Sparse-Attention/csrc/block_sparse_attn",
Zhekai Zhang's avatar
Zhekai Zhang committed
33
34
    ]

sxtyzhangzk's avatar
sxtyzhangzk committed
35
    INCLUDE_DIRS = [ROOT_DIR + "/" + dir for dir in INCLUDE_DIRS]
Zhekai Zhang's avatar
Zhekai Zhang committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

    DEBUG = False

    def ncond(s) -> list:
        if DEBUG:
            return []
        else:
            return [s]

    def cond(s) -> list:
        if DEBUG:
            return [s]
        else:
            return []

sxtyzhangzk's avatar
sxtyzhangzk committed
51
    GCC_FLAGS = ["-DENABLE_BF16=1", "-DBUILD_NUNCHAKU=1", "-fvisibility=hidden", "-g", "-std=c++20", "-UNDEBUG", "-Og"]
sxtyzhangzk's avatar
sxtyzhangzk committed
52
    MSVC_FLAGS = ["/DENABLE_BF16=1", "/DBUILD_NUNCHAKU=1", "/std:c++20", "/UNDEBUG", "/Zc:__cplusplus"]
Zhekai Zhang's avatar
Zhekai Zhang committed
53
    NVCC_FLAGS = [
sxtyzhangzk's avatar
sxtyzhangzk committed
54
        "-DENABLE_BF16=1",
Zhekai Zhang's avatar
Zhekai Zhang committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
        "-DBUILD_NUNCHAKU=1",
        "-gencode", "arch=compute_86,code=sm_86",
        "-gencode", "arch=compute_89,code=sm_89",
        "-g",
        "-std=c++20",
        "-UNDEBUG",
        "-Xcudafe",
        "--diag_suppress=20208",  # spdlog: 'long double' is treated as 'double' in device code
        *cond("-G"),
        "-U__CUDA_NO_HALF_OPERATORS__",
        "-U__CUDA_NO_HALF_CONVERSIONS__",
        "-U__CUDA_NO_HALF2_OPERATORS__",
        "-U__CUDA_NO_HALF2_CONVERSIONS__",
        "-U__CUDA_NO_BFLOAT16_OPERATORS__",
        "-U__CUDA_NO_BFLOAT16_CONVERSIONS__",
        "-U__CUDA_NO_BFLOAT162_OPERATORS__",
        "-U__CUDA_NO_BFLOAT162_CONVERSIONS__",
        "--threads=2",
        "--expt-relaxed-constexpr",
        "--expt-extended-lambda",
        "--generate-line-info",
        "--ptxas-options=--allow-expensive-optimizations=true",
    ]
sxtyzhangzk's avatar
sxtyzhangzk committed
78
79
80
81
    # https://github.com/NVIDIA/cutlass/pull/1479#issuecomment-2052300487
    NVCC_MSVC_FLAGS = [
        "-Xcompiler", "/Zc:__cplusplus"
    ]
Zhekai Zhang's avatar
Zhekai Zhang committed
82
83
84
85
86
87
88
89
90
91
92

    nunchaku_extension = CUDAExtension(
        name="nunchaku._C",
        sources=[
            "nunchaku/csrc/pybind.cpp",
            "src/interop/torch.cpp",
            "src/activation.cpp",
            "src/layernorm.cpp",
            "src/Linear.cpp",
            *ncond("src/FluxModel.cpp"),
            "src/Serialization.cpp",
Zhekai Zhang's avatar
Zhekai Zhang committed
93
94
95
96
97
98
99
100
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_hdim64_fp16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_hdim64_bf16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_hdim128_fp16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_hdim128_bf16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_block_hdim64_fp16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_block_hdim64_bf16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_block_hdim128_fp16_sm80.cu"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/src/flash_fwd_block_hdim128_bf16_sm80.cu"),
Zhekai Zhang's avatar
Zhekai Zhang committed
101
102
103
104
105
106
107
            "src/kernels/activation_kernels.cu",
            "src/kernels/layernorm_kernels.cu",
            "src/kernels/misc_kernels.cu",
            "src/kernels/gemm_w4a4.cu",
            "src/kernels/gemm_batched.cu",
            "src/kernels/gemm_f16.cu",
            "src/kernels/awq/gemv_awq.cu",
Zhekai Zhang's avatar
Zhekai Zhang committed
108
109
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/flash_api.cpp"),
            *ncond("third_party/Block-Sparse-Attention/csrc/block_sparse_attn/flash_api_adapter.cpp"),
Zhekai Zhang's avatar
Zhekai Zhang committed
110
        ],
sxtyzhangzk's avatar
sxtyzhangzk committed
111
        extra_compile_args={"gcc": GCC_FLAGS, "msvc": MSVC_FLAGS, "nvcc": NVCC_FLAGS, "nvcc_msvc": NVCC_MSVC_FLAGS},
sxtyzhangzk's avatar
sxtyzhangzk committed
112
        include_dirs=INCLUDE_DIRS,
Zhekai Zhang's avatar
Zhekai Zhang committed
113
114
115
116
117
118
119
    )

    setuptools.setup(
        name="nunchaku",
        version=version,
        packages=setuptools.find_packages(),
        ext_modules=[nunchaku_extension],
sxtyzhangzk's avatar
sxtyzhangzk committed
120
        cmdclass={"build_ext": CustomBuildExtension},
Zhekai Zhang's avatar
Zhekai Zhang committed
121
    )