Skip to content

Commit

Permalink
system info (Lightning-AI#1234)
Browse files Browse the repository at this point in the history
* system info

* update big info

* test script

* update config

* rename script

* import path
  • Loading branch information
Borda authored and akarnachev committed Apr 3, 2020
1 parent 7efeff2 commit 5dc6352
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 7 deletions.
1 change: 1 addition & 0 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -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://github.com/raw/pytorch/pytorch/master/torch/utils/collect_env.py)
[environment collection script](https://github.com/raw/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://github.com/raw/pytorch/pytorch/master/torch/utils/collect_env.py
wget https://github.com/raw/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
```
Expand Down
7 changes: 2 additions & 5 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ markers =
filterwarnings
gpus_param_tests

[pycodestyle]
ignore = E731,W504
max-line-length = 120

[coverage:report]
exclude_lines =
pragma: no-cover
Expand Down Expand Up @@ -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 changes: 98 additions & 0 deletions tests/collect_env_details.py
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit 5dc6352

Please sign in to comment.