setup.py 4.34 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

sangwz's avatar
sangwz committed
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
def get_abi():
    try:
        command = "echo '#include <string>' | gcc -x c++ -E -dM - | fgrep _GLIBCXX_USE_CXX11_ABI"
        result = subprocess.run(command, shell=True, capture_output=True, text=True)
        output = result.stdout.strip()
        abi = "abi" + output.split(" ")[-1]
        return abi
    except Exception:
        return 'abiUnknown'
tmpversion = find_version("fairscale/version.py")
dcu_version = tmpversion
dcu_version +='+das1.1'
sha = "Unknown"
cwd = os.path.dirname(os.path.abspath(__file__))
import subprocess
try:
    sha = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=cwd).decode("ascii").strip()
except Exception:
    pass

if sha != 'Unknown':
    dcu_version += '.git' + sha[:7]
dcu_version += "." + get_abi()
if os.getenv("ROCM_PATH"):
    rocm_path = os.getenv('ROCM_PATH', "")
    rocm_version_path = os.path.join(rocm_path, '.info', "rocm_version")
    with open(rocm_version_path, 'r',encoding='utf-8') as file:
        lines = file.readlines()
    rocm_version=lines[0][:-2].replace(".", "")
    dcu_version += ".dtk" + rocm_version
# torch version
import torch
dcu_version += ".torch" + torch.__version__[:]
def write_version_file():
    cwd = os.path.dirname(os.path.abspath(__file__))
    version_path = os.path.join(cwd, "fairscale", "version.py")
    with open(version_path, "a") as f:
        f.write(f"\n__dcu_version__ = '{dcu_version}'")
70

Jun Ru Anderson's avatar
Jun Ru Anderson committed
71
72
73
extensions = []
cmdclass = {}

74
75
76
if os.getenv("BUILD_CUDA_EXTENSIONS", "0") == "1":
    from torch.utils.cpp_extension import BuildExtension, CUDAExtension

Jun Ru Anderson's avatar
Jun Ru Anderson committed
77
78
79
80
    extensions.extend(
        [
            CUDAExtension(
                name="fairscale.fused_adam_cuda",
81
                include_dirs=[os.path.join(this_dir, "fairscale/clib/fused_adam_cuda")],
Jun Ru Anderson's avatar
Jun Ru Anderson committed
82
83
84
85
86
87
88
89
90
91
92
93
                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
94
if __name__ == "__main__":
sangwz's avatar
sangwz committed
95
    write_version_file()
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
96
97
    setuptools.setup(
        name="fairscale",
98
        description="FairScale: A PyTorch library for large-scale and high-performance training.",
sangwz's avatar
sangwz committed
99
        version=dcu_version,
Myle Ott's avatar
Myle Ott committed
100
        setup_requires=["ninja"],  # ninja is required to build extensions
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
101
102
103
        install_requires=fetch_requirements(),
        include_package_data=True,
        packages=setuptools.find_packages(exclude=("tests", "tests.*")),
Jun Ru Anderson's avatar
Jun Ru Anderson committed
104
105
        ext_modules=extensions,
        cmdclass=cmdclass,
Min Xu's avatar
Min Xu committed
106
107
        python_requires=">=3.8",
        author="Foundational AI Research @ Meta AI",
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
108
        author_email="todo@fb.com",
109
110
        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",
111
        entry_points={"console_scripts": ["wgit = fairscale.experimental.wgit.__main__:main"]},
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
112
113
        classifiers=[
            "Programming Language :: Python :: 3.8",
114
            "Programming Language :: Python :: 3.9",
Min Xu's avatar
Min Xu committed
115
            "Programming Language :: Python :: 3.10",
Mandeep Singh Baines's avatar
Mandeep Singh Baines committed
116
117
118
119
120
            "License :: OSI Approved :: BSD License",
            "Topic :: Scientific/Engineering :: Artificial Intelligence",
            "Operating System :: OS Independent",
        ],
    )