setup.py 2.81 KB
Newer Older
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
1
2
3
4
#!/usr/bin/env python3

# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.

Jun Ru Anderson's avatar
Jun Ru Anderson committed
5
import os
6
import re
Jun Ru Anderson's avatar
Jun Ru Anderson committed
7
8
import warnings

Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
9
import setuptools
Jun Ru Anderson's avatar
Jun Ru Anderson committed
10
11
import torch
from torch.utils.cpp_extension import CUDA_HOME, BuildExtension, CUDAExtension
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
12

13
14
this_dir = os.path.dirname(os.path.abspath(__file__))

Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
15
16
17
18
19
20
21

def fetch_requirements():
    with open("requirements.txt") as f:
        reqs = f.read().strip().split("\n")
    return reqs


22
23
24
25
26
27
28
29
30
# https://packaging.python.org/guides/single-sourcing-package-version/
def find_version(version_file_path):
    with open(version_file_path) as version_file:
        version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file.read(), re.M)
        if version_match:
            return version_match.group(1)
        raise RuntimeError("Unable to find version string.")


Jun Ru Anderson's avatar
Jun Ru Anderson committed
31
32
33
34
35
36
37
38
39
extensions = []
cmdclass = {}

force_cuda = os.getenv("FORCE_CUDA", "0") == "1"
if (torch.cuda.is_available() and CUDA_HOME is not None) or force_cuda:
    extensions.extend(
        [
            CUDAExtension(
                name="fairscale.fused_adam_cuda",
40
                include_dirs=[os.path.join(this_dir, "fairscale/clib/fused_adam_cuda")],
Jun Ru Anderson's avatar
Jun Ru Anderson committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
                sources=[
                    "fairscale/clib/fused_adam_cuda/fused_adam_cuda.cpp",
                    "fairscale/clib/fused_adam_cuda/fused_adam_cuda_kernel.cu",
                ],
                extra_compile_args={"cxx": ["-O3"], "nvcc": ["-O3", "--use_fast_math"]},
            )
        ]
    )

    cmdclass["build_ext"] = BuildExtension
else:
    warnings.warn("Cannot install FusedAdam cuda.")


Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
55
56
57
if __name__ == "__main__":
    setuptools.setup(
        name="fairscale",
58
        description="fairscale: A PyTorch library for large-scale and high-performance training.",
59
        version=find_version("fairscale/__init__.py"),
Myle Ott's avatar
Myle Ott committed
60
        setup_requires=["ninja"],  # ninja is required to build extensions
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
61
62
63
        install_requires=fetch_requirements(),
        include_package_data=True,
        packages=setuptools.find_packages(exclude=("tests", "tests.*")),
Jun Ru Anderson's avatar
Jun Ru Anderson committed
64
65
        ext_modules=extensions,
        cmdclass=cmdclass,
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
66
67
68
        python_requires=">=3.6",
        author="Facebook AI Research",
        author_email="todo@fb.com",
69
70
        long_description="FairScale is a PyTorch extension library for high performance and large scale training on one or multiple machines/nodes. This library extends basic PyTorch capabilities while adding new experimental ones.",
        long_description_content_type="text/markdown",
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
71
72
73
        classifiers=[
            "Programming Language :: Python :: 3.7",
            "Programming Language :: Python :: 3.8",
74
            "Programming Language :: Python :: 3.9",
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
75
76
77
78
79
            "License :: OSI Approved :: BSD License",
            "Topic :: Scientific/Engineering :: Artificial Intelligence",
            "Operating System :: OS Independent",
        ],
    )