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

# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
4
5
6
#
# This source code is licensed under the BSD license found in the
# LICENSE file in the root directory of this source tree.
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
7

Jun Ru Anderson's avatar
Jun Ru Anderson committed
8
import os
9
import re
Jun Ru Anderson's avatar
Jun Ru Anderson committed
10

Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
11
12
import setuptools

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
# https://packaging.python.org/guides/single-sourcing-package-version/
Anupam Bhatnagar's avatar
Anupam Bhatnagar committed
23
def find_version(version_file_path) -> str:
24
    with open(version_file_path) as version_file:
Min Xu's avatar
Min Xu committed
25
        version_match = re.search(r"^__version_tuple__ = (.*)", version_file.read(), re.M)
26
        if version_match:
Min Xu's avatar
Min Xu committed
27
28
29
30
            ver_tup = eval(version_match.group(1))
            ver_str = ".".join([str(x) for x in ver_tup])
            return ver_str
        raise RuntimeError("Unable to find version tuple.")
31
32


Jun Ru Anderson's avatar
Jun Ru Anderson committed
33
34
extensions = []
cmdclass = {}
Min Xu's avatar
Min Xu committed
35
setup_requires = []
Jun Ru Anderson's avatar
Jun Ru Anderson committed
36

37
38
39
if os.getenv("BUILD_CUDA_EXTENSIONS", "0") == "1":
    from torch.utils.cpp_extension import BuildExtension, CUDAExtension

Min Xu's avatar
Min Xu committed
40
    setup_requires = ["ninja"]
Jun Ru Anderson's avatar
Jun Ru Anderson committed
41
42
43
44
    extensions.extend(
        [
            CUDAExtension(
                name="fairscale.fused_adam_cuda",
45
                include_dirs=[os.path.join(this_dir, "fairscale/clib/fused_adam_cuda")],
Jun Ru Anderson's avatar
Jun Ru Anderson committed
46
47
48
49
50
51
52
53
54
55
56
57
                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


Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
58
59
60
if __name__ == "__main__":
    setuptools.setup(
        name="fairscale",
61
        description="FairScale: A PyTorch library for large-scale and high-performance training.",
Anupam Bhatnagar's avatar
Anupam Bhatnagar committed
62
        version=find_version("fairscale/version.py"),
Min Xu's avatar
Min Xu committed
63
        setup_requires=setup_requires,
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
64
65
        install_requires=fetch_requirements(),
        include_package_data=True,
Min Xu's avatar
Min Xu committed
66
        packages=setuptools.find_packages(include=["fairscale*"]),  # Only include code within fairscale.
Jun Ru Anderson's avatar
Jun Ru Anderson committed
67
68
        ext_modules=extensions,
        cmdclass=cmdclass,
Min Xu's avatar
Min Xu committed
69
70
        python_requires=">=3.8",
        author="Foundational AI Research @ Meta AI",
Min Xu's avatar
Min Xu committed
71
72
73
74
75
76
        author_email="todo@meta.com",
        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."
        ),
77
        long_description_content_type="text/markdown",
78
        entry_points={"console_scripts": ["wgit = fairscale.experimental.wgit.__main__:main"]},
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
79
80
        classifiers=[
            "Programming Language :: Python :: 3.8",
81
            "Programming Language :: Python :: 3.9",
Min Xu's avatar
Min Xu committed
82
            "Programming Language :: Python :: 3.10",
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
83
84
85
86
87
            "License :: OSI Approved :: BSD License",
            "Topic :: Scientific/Engineering :: Artificial Intelligence",
            "Operating System :: OS Independent",
        ],
    )