Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00

251 lines
7.4 KiB
Python

# Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import multiprocessing
import os
from site import getsitepackages
import paddle
paddle_includes = []
for site_packages_path in getsitepackages():
paddle_includes.append(os.path.join(site_packages_path, "paddle", "include"))
paddle_includes.append(os.path.join(site_packages_path, "paddle", "include", "third_party"))
paddle_includes.append(os.path.join(site_packages_path, "nvidia", "cudnn", "include"))
def get_gencode_flags(compiled_all=False):
if not compiled_all:
prop = paddle.device.cuda.get_device_properties()
cc = prop.major * 10 + prop.minor
return ["-gencode", "arch=compute_{0},code=sm_{0}".format(cc)]
else:
return [
"-gencode",
"arch=compute_80,code=sm_80",
"-gencode",
"arch=compute_75,code=sm_75",
"-gencode",
"arch=compute_70,code=sm_70",
]
def get_sm_version():
prop = paddle.device.cuda.get_device_properties()
cc = prop.major * 10 + prop.minor
return cc
def run_single(func):
p = multiprocessing.Process(target=func)
p.start()
p.join()
cc_flag = get_gencode_flags(compiled_all=False)
cc = get_sm_version()
def setup_fast_ln():
from paddle.utils.cpp_extension import CUDAExtension, setup
setup(
name="fast_ln",
ext_modules=CUDAExtension(
include_dirs=paddle_includes,
sources=[
"fast_ln/ln_api.cpp",
"fast_ln/ln_bwd_semi_cuda_kernel.cu",
"fast_ln/ln_fwd_cuda_kernel.cu",
],
extra_compile_args={
"cxx": ["-O3"],
"nvcc": [
"-O3",
"-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",
]
+ cc_flag,
},
),
)
def setup_fused_ln():
from paddle.utils.cpp_extension import CUDAExtension, setup
setup(
name="fused_ln",
ext_modules=CUDAExtension(
include_dirs=paddle_includes,
sources=[
"fused_ln/layer_norm_cuda.cu",
],
extra_compile_args={
"cxx": ["-O3"],
"nvcc": [
"-O3",
"-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",
"-maxrregcount=50",
]
+ cc_flag,
},
),
)
def setup_causal_conv1d():
from paddle.utils.cpp_extension import CUDAExtension, setup
sources = [
"causal_conv1d/causal_conv1d.cpp",
"causal_conv1d/causal_conv1d_fwd.cu",
"causal_conv1d/causal_conv1d_bwd.cu",
"causal_conv1d/causal_conv1d_update.cu",
]
if cc >= 75:
cc_flag.append("-DCUDA_BFLOAT16_AVAILABLE")
extra_compile_args = {
"cxx": ["-O3"],
"nvcc": [
"-O3",
"-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__",
"--expt-relaxed-constexpr",
"--expt-extended-lambda",
"--use_fast_math",
"--ptxas-options=-v",
"-lineinfo",
"--threads",
"4",
]
+ cc_flag,
}
setup(
name="causal_conv1d_cuda_pd",
ext_modules=CUDAExtension(
sources=sources,
extra_compile_args=extra_compile_args,
),
)
def setup_selective_scan():
from paddle.utils.cpp_extension import CUDAExtension, setup
real_complex_list = ["real"]
dtype_list = ["fp16", "fp32"]
if cc > 75:
dtype_list.insert(1, "bf16")
cc_flag.append("-DCUDA_BFLOAT16_AVAILABLE")
sources = [
"selective_scan/selective_scan.cpp",
]
for real_or_complex in real_complex_list:
for dtype in dtype_list:
sources.append(f"selective_scan/selective_scan_fwd_{dtype}_{real_or_complex}.cu")
sources.append(f"selective_scan/selective_scan_bwd_{dtype}_{real_or_complex}.cu")
extra_compile_args = {
"cxx": ["-O3", "-std=c++17"],
"nvcc": [
"-O3",
"-std=c++17",
"-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__",
"--expt-relaxed-constexpr",
"--expt-extended-lambda",
"--use_fast_math",
"--ptxas-options=-v",
"-lineinfo",
"--threads",
"4",
]
+ cc_flag,
}
setup(
name="selective_scan_cuda_pd",
ext_modules=CUDAExtension(
include_dirs=paddle_includes,
sources=sources,
extra_compile_args=extra_compile_args,
),
)
def setup_paddle_bwd_ops():
from paddle.utils.cpp_extension import CUDAExtension, setup
sources = ["paddle_bwd_ops/flash_attn_bwd.cc", "paddle_bwd_ops/add_bwd.cc", "paddle_bwd_ops/matmul_bwd.cc"]
try:
from paddle.nn.functional.flash_attention import ( # noqa: F401
flash_attention_with_sparse_mask,
)
sources.append("paddle_bwd_ops/flash_attn_with_sparse_mask_bwd.cc")
except ImportError:
from paddle.nn.functional.flash_attention import ( # noqa: F401
flashmask_attention,
)
sources.append("paddle_bwd_ops/flashmask_attn_bwd.cc")
setup(
name="paddle_bwd_ops",
ext_modules=CUDAExtension(
include_dirs=paddle_includes,
sources=sources,
extra_compile_args={}
),
)
if __name__ == "__main__":
setup_fast_ln()
setup_fused_ln()
setup_causal_conv1d()
setup_selective_scan()
setup_paddle_bwd_ops()