| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| import os |
| import glob |
|
|
| import torch |
|
|
| from torch.utils.cpp_extension import CUDA_HOME |
| from torch.utils.cpp_extension import CppExtension |
| from torch.utils.cpp_extension import CUDAExtension |
|
|
| from setuptools import find_packages |
| from setuptools import setup |
|
|
| requirements = ["torch", "torchvision"] |
|
|
| def get_extensions(): |
| this_dir = os.path.dirname(os.path.abspath(__file__)) |
| extensions_dir = os.path.join(this_dir, "src") |
|
|
| main_file = glob.glob(os.path.join(extensions_dir, "*.cpp")) |
| source_cpu = glob.glob(os.path.join(extensions_dir, "cpu", "*.cpp")) |
| source_cuda = glob.glob(os.path.join(extensions_dir, "cuda", "*.cu")) |
|
|
| sources = main_file + source_cpu |
| extension = CppExtension |
| extra_compile_args = {"cxx": []} |
| define_macros = [] |
|
|
| |
| if (os.environ.get('FORCE_CUDA') or torch.cuda.is_available()) and CUDA_HOME is not None: |
| extension = CUDAExtension |
| sources += source_cuda |
| define_macros += [("WITH_CUDA", None)] |
| extra_compile_args["nvcc"] = [ |
| "-DCUDA_HAS_FP16=1", |
| "-D__CUDA_NO_HALF_OPERATORS__", |
| "-D__CUDA_NO_HALF_CONVERSIONS__", |
| "-D__CUDA_NO_HALF2_OPERATORS__", |
| ] |
| else: |
| if CUDA_HOME is None: |
| raise NotImplementedError('CUDA_HOME is None. Please set environment variable CUDA_HOME.') |
| else: |
| raise NotImplementedError('No CUDA runtime is found. Please set FORCE_CUDA=1 or test it by running torch.cuda.is_available().') |
|
|
| sources = [os.path.join(extensions_dir, s) for s in sources] |
| include_dirs = [extensions_dir] |
| ext_modules = [ |
| extension( |
| "MultiScaleDeformableAttention", |
| sources, |
| include_dirs=include_dirs, |
| define_macros=define_macros, |
| extra_compile_args=extra_compile_args, |
| ) |
| ] |
| return ext_modules |
|
|
| setup( |
| name="MultiScaleDeformableAttention", |
| version="1.0", |
| author="Weijie Su", |
| url="https://github.com/fundamentalvision/Deformable-DETR", |
| description="PyTorch Wrapper for CUDA Functions of Multi-Scale Deformable Attention", |
| packages=find_packages(exclude=("configs", "tests",)), |
| ext_modules=get_extensions(), |
| cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension}, |
| ) |
|
|