install_cuda.py 3.62 KB
Newer Older
Titus von Koeller's avatar
Titus von Koeller committed
1
2
import os
import subprocess
Aarni Koskela's avatar
Aarni Koskela committed
3
import sys
Titus von Koeller's avatar
Titus von Koeller committed
4
5
6
7
from urllib.request import urlretrieve

cuda_versions = {
    "118": "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run",
8
9
10
11
    "120": "https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_525.85.12_linux.run",
    "121": "https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run",
    "122": "https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run",
    "123": "https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda_12.3.2_545.23.08_linux.run",
12
    "124": "https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run",
13
14
    "125": "https://developer.download.nvidia.com/compute/cuda/12.5.1/local_installers/cuda_12.5.1_555.42.06_linux.run",
    "126": "https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run",
Titus von Koeller's avatar
Titus von Koeller committed
15
16
}

Ruff's avatar
Ruff committed
17

Titus von Koeller's avatar
Titus von Koeller committed
18
19
20
21
22
23
24
25
26
27
def install_cuda(version, base_path, download_path):
    formatted_version = f"{version[:-1]}.{version[-1]}"
    folder = f"cuda-{formatted_version}"
    install_path = os.path.join(base_path, folder)

    if os.path.exists(install_path):
        print(f"Removing existing CUDA version {version} at {install_path}...")
        subprocess.run(["rm", "-rf", install_path], check=True)

    url = cuda_versions[version]
Ruff's avatar
Ruff committed
28
    filename = url.split("/")[-1]
Titus von Koeller's avatar
Titus von Koeller committed
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    filepath = os.path.join(download_path, filename)

    if not os.path.exists(filepath):
        print(f"Downloading CUDA version {version} from {url}...")
        urlretrieve(url, filepath)
    else:
        print(f"Installer for CUDA version {version} already downloaded.")

    # Make the installer executable
    subprocess.run(["chmod", "+x", filepath], check=True)

    # Install CUDA
    print(f"Installing CUDA version {version}...")
    install_command = [
Ruff's avatar
Ruff committed
43
44
45
46
47
48
49
50
        "bash",
        filepath,
        "--no-drm",
        "--no-man-page",
        "--override",
        "--toolkitpath=" + install_path,
        "--toolkit",
        "--silent",
Titus von Koeller's avatar
Titus von Koeller committed
51
52
53
    ]

    print(f"Running command: {' '.join(install_command)}")
54

Titus von Koeller's avatar
Titus von Koeller committed
55
56
57
58
59
60
61
62
63
64
65
    try:
        subprocess.run(install_command, check=True)
    except subprocess.CalledProcessError as e:
        print(f"Installation failed for CUDA version {version}: {e}")
        return
    finally:
        # Delete the installer file
        os.remove(filepath)

    print(f"CUDA version {version} installed at {install_path}")

Ruff's avatar
Ruff committed
66

Titus von Koeller's avatar
Titus von Koeller committed
67
68
69
70
71
72
73
def main():
    user_base_path = os.path.expanduser("~/cuda")
    system_base_path = "/usr/local/cuda"
    base_path = user_base_path  # default to user-specific installation
    download_path = "/tmp"  # default download path

    if len(sys.argv) < 2:
74
        print("Usage: python install_cuda.py <version/all> [user/system] [download_path]")
Titus von Koeller's avatar
Titus von Koeller committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        sys.exit(1)

    version = sys.argv[1]
    if len(sys.argv) > 2:
        base_path = system_base_path if sys.argv[2] == "system" else user_base_path
    if len(sys.argv) > 3:
        download_path = sys.argv[3]

    if not os.path.exists(base_path):
        os.makedirs(base_path)
    if not os.path.exists(download_path):
        os.makedirs(download_path)

    # Install CUDA version(s)
    if version == "all":
Yuanyuan Chen's avatar
Yuanyuan Chen committed
90
        for ver in cuda_versions:
Titus von Koeller's avatar
Titus von Koeller committed
91
92
93
94
            install_cuda(ver, base_path, download_path)
    elif version in cuda_versions:
        install_cuda(version, base_path, download_path)
    else:
95
        print(f"Invalid CUDA version: {version}. Available versions are: {', '.join(cuda_versions.keys())}")
Titus von Koeller's avatar
Titus von Koeller committed
96
97
        sys.exit(1)

Ruff's avatar
Ruff committed
98

Titus von Koeller's avatar
Titus von Koeller committed
99
if __name__ == "__main__":
100
    main()