-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsystem_diagnostic.py
More file actions
72 lines (55 loc) · 1.99 KB
/
system_diagnostic.py
File metadata and controls
72 lines (55 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
70
71
72
"""
Diagnose your system and show basic information.
This server mainly to get detail info for better bug reporting.
"""
import os
import platform
import sys
import pkg_resources
import torch
sys.path += [os.path.abspath(".."), os.path.abspath("")]
LEVEL_OFFSET = "\t"
KEY_PADDING = 20
def info_system() -> dict:
return {
"OS": platform.system(),
"architecture": platform.architecture(),
"version": platform.version(),
"processor": platform.processor(),
"python": platform.python_version(),
}
def info_cuda() -> dict:
return {
"GPU": [torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())] or None,
"available": torch.cuda.is_available(),
"version": torch.version.cuda,
}
def info_packages() -> dict:
"""Get name and version of all installed packages."""
packages = {}
for dist in pkg_resources.working_set:
package = dist.as_requirement()
packages[package.key] = package.specs[0][1]
return packages
def nice_print(details: dict, level: int = 0) -> list:
lines = []
for k in sorted(details):
key = f"* {k}:" if level == 0 else f"- {k}:"
if isinstance(details[k], dict):
lines += [level * LEVEL_OFFSET + key]
lines += nice_print(details[k], level + 1)
elif isinstance(details[k], (set, list, tuple)):
lines += [level * LEVEL_OFFSET + key]
lines += [(level + 1) * LEVEL_OFFSET + "- " + v for v in details[k]]
else:
template = "{:%is} {}" % KEY_PADDING
key_val = template.format(key, details[k])
lines += [(level * LEVEL_OFFSET) + key_val]
return lines
def main() -> None:
details = {"System": info_system(), "CUDA": info_cuda(), "Packages": info_packages()}
details["Lightning"] = {k: v for k, v in details["Packages"].items() if "torch" in k or "lightning" in k}
lines = nice_print(details)
text = os.linesep.join(lines)
print(text)
main()