-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.py
62 lines (54 loc) · 1.91 KB
/
utils.py
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
# https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/requirements/collect_env_details.py
import numpy as np
import os
import platform
import psutil
import pytorch_lightning as pl
import torch
import tqdm
def info_system():
return {
"OS": platform.system(),
"architecture": platform.architecture(),
"version": platform.version(),
"processor": platform.processor(),
"python": platform.python_version(),
"ram": psutil.virtual_memory().total,
}
def info_cuda():
return {
"GPU": [torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())],
# 'nvidia_driver': get_nvidia_driver_version(run_lambda),
"available": torch.cuda.is_available(),
"version": torch.version.cuda,
}
def info_packages():
return {
"numpy": np.__version__,
"pyTorch_version": torch.__version__,
"pyTorch_debug": torch.version.debug,
"pytorch-lightning": pl.__version__,
"tqdm": tqdm.__version__,
}
def nice_print(details, level=0):
LEVEL_OFFSET = "\t"
KEY_PADDING = 20
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 collect_env_details():
details = {"System": info_system(), "CUDA": info_cuda(), "Packages": info_packages()}
lines = nice_print(details)
text = os.linesep.join(lines)
return text