system info (#1234)

* system info

* update big info

* test script

* update config

* rename script

* import path
This commit is contained in:
Jirka Borovec
2020-03-27 08:45:52 -04:00
committed by GitHub
parent 1a9719c1c8
commit 61177cd1c8
4 changed files with 103 additions and 7 deletions
+1
View File
@@ -25,3 +25,4 @@ steps:
- coverage run --source pytorch_lightning -m py.test pytorch_lightning tests -v --doctest-modules # --flake8
- coverage report
- codecov --token $CODECOV_TOKEN # --pr $DRONE_PULL_REQUEST --build $DRONE_BUILD_NUMBER --branch $DRONE_BRANCH --commit $DRONE_COMMIT --tag $DRONE_TAG
- python tests/collect_env_details.py
+2 -2
View File
@@ -40,12 +40,12 @@ Minimal means having the shortest code but still preserving the bug. -->
### Environment
Please copy and paste the output from our
[environment collection script](https://raw.githubusercontent.com/pytorch/pytorch/master/torch/utils/collect_env.py)
[environment collection script](https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/tests/collect_env_details.py)
(or fill out the checklist below manually).
You can get the script and run it with:
```
wget https://raw.githubusercontent.com/pytorch/pytorch/master/torch/utils/collect_env.py
wget https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/tests/collect_env_details.py
# For security purposes, please check the contents of collect_env.py before running it.
python collect_env.py
```
+2 -5
View File
@@ -13,10 +13,6 @@ markers =
filterwarnings
gpus_param_tests
[pycodestyle]
ignore = E731,W504
max-line-length = 120
[coverage:report]
exclude_lines =
pragma: no-cover
@@ -56,4 +52,5 @@ license_file = LICENSE
convention = pep257
# D104, D107: Ignore missing docstrings in __init__ files and methods.
# D202: Ignore a blank line after docstring (collision with Python Black in decorators)
add-ignore = D104, D107, D202
add-ignore = D104,D107,D202
max-line-length = 120
+98
View File
@@ -0,0 +1,98 @@
"""Diagnose your system and show basic information
This server mainly to get detail info for better bug reporting.
"""
import os
import re
import sys
import platform
import numpy
import tensorboard
import torch
import tqdm
sys.path += [os.path.abspath('..'), os.path.abspath('.')]
import pytorch_lightning # noqa: E402
LEVEL_OFFSET = '\t'
KEY_PADDING = 20
def run_and_parse_first_match(run_lambda, command, regex):
"""Runs command using run_lambda, returns the first regex match if it exists"""
rc, out, _ = run_lambda(command)
if rc != 0:
return None
match = re.search(regex, out)
if match is None:
return None
return match.group(1)
def get_running_cuda_version(run_lambda):
return run_and_parse_first_match(run_lambda, 'nvcc --version', r'V(.*)$')
def info_system():
return {
'OS': platform.system(),
'architecture': platform.architecture(),
'version': platform.version(),
'processor': platform.processor(),
'python': platform.python_version(),
}
def info_cuda():
return {
'GPU': set([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': numpy.__version__,
"pyTorch_version": torch.__version__,
'pyTorch_debug': torch.version.debug,
'pytorch-lightning': pytorch_lightning.__version__,
'tensorboard': tensorboard.__version__,
'tqdm': tqdm.__version__,
}
def nice_print(details, level=0):
lines = []
for k in sorted(details):
key = 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():
details = {
"system": info_system(),
'cuda': info_cuda(),
'packages': info_packages(),
}
lines = nice_print(details)
text = os.linesep.join(lines)
print(text)
if __name__ == '__main__':
main()