mirror of
https://github.com/XuehaiPan/nvitop.git
synced 2026-05-15 06:06:12 -06:00
129 lines
4.3 KiB
Python
129 lines
4.3 KiB
Python
# This file is part of nvitop, the interactive NVIDIA-GPU process viewer.
|
|
#
|
|
# Copyright 2021-2025 Xuehai Pan. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
# ==============================================================================
|
|
"""An interactive NVIDIA-GPU process viewer and beyond, the one-stop solution for GPU process management."""
|
|
|
|
# pylint: disable=invalid-name
|
|
|
|
__version__ = '1.6.2'
|
|
__license__ = 'Apache-2.0 AND GPL-3.0-only'
|
|
__author__ = __maintainer__ = 'Xuehai Pan'
|
|
__email__ = 'XuehaiPan@pku.edu.cn'
|
|
__release__ = False
|
|
|
|
if not __release__:
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
root_dir = Path(__file__).absolute().parent.parent
|
|
try:
|
|
prefix, sep, suffix = (
|
|
subprocess.check_output( # noqa: S603
|
|
[ # noqa: S607
|
|
'git',
|
|
f'--git-dir={root_dir / ".git"}',
|
|
'describe',
|
|
'--abbrev=7',
|
|
],
|
|
cwd=root_dir,
|
|
stderr=subprocess.DEVNULL,
|
|
text=True,
|
|
encoding='utf-8',
|
|
timeout=120.0,
|
|
)
|
|
.strip()
|
|
.lstrip('v')
|
|
.replace('-', '.dev', 1)
|
|
.replace('-', '+', 1)
|
|
.partition('.dev')
|
|
)
|
|
if sep:
|
|
version_prefix, dot, version_tail = prefix.rpartition('.')
|
|
prefix = f'{version_prefix}{dot}{int(version_tail) + 1}'
|
|
__version__ = f'{prefix}{sep}{suffix}'
|
|
del version_prefix, dot, version_tail
|
|
else:
|
|
__version__ = prefix
|
|
del prefix, sep, suffix
|
|
except (OSError, RuntimeError, subprocess.SubprocessError):
|
|
pass
|
|
|
|
del Path, subprocess, root_dir
|
|
|
|
|
|
# The package `nvidia-ml-py` is not backward compatible over releases. This may
|
|
# cause problems with Old versions of NVIDIA drivers.
|
|
# The ideal solution is to let the user install the best-fit version of `nvidia-ml-py`.
|
|
PYNVML_VERSION_CANDIDATES = (
|
|
# Sync with pyproject.toml and requirements.txt
|
|
'11.450.51', # the last version supports the R430 driver (CUDA 10.x)
|
|
'11.450.129', # requires at least the R450 driver
|
|
'11.460.79',
|
|
'11.470.66',
|
|
'11.495.46',
|
|
'11.510.69', # the first version supports the `nvmlMemory_v2` API
|
|
'11.515.48',
|
|
'11.515.75',
|
|
'11.525.84',
|
|
'11.525.112',
|
|
'11.525.131',
|
|
'11.525.150',
|
|
'12.535.77',
|
|
'12.535.108',
|
|
'12.535.133',
|
|
'12.535.161',
|
|
'12.550.52',
|
|
'12.550.89',
|
|
'12.555.43',
|
|
'12.560.30',
|
|
'12.570.86',
|
|
'12.570.172',
|
|
'12.575.51',
|
|
'13.580.65',
|
|
'13.580.82',
|
|
'13.580.126',
|
|
'13.590.44',
|
|
'13.590.48',
|
|
'13.595.45',
|
|
)
|
|
"""The list of supported ``nvidia-ml-py`` versions.
|
|
See also: `nvidia-ml-py's Release History <https://pypi.org/project/nvidia-ml-py/#history>`_.
|
|
|
|
To install ``nvitop`` with a specific version of ``nvidia-ml-py``, use:
|
|
|
|
.. code:: bash
|
|
|
|
pip3 install nvidia-ml-py==xx.yyy.zz nvitop
|
|
|
|
or
|
|
|
|
.. code:: bash
|
|
|
|
pip3 install 'nvitop[cudaXX]'
|
|
|
|
Note:
|
|
The package ``nvidia-ml-py`` is not backward compatible over releases. This may cause problems
|
|
such as *"Function Not Found"* errors with old versions of NVIDIA drivers (e.g. the NVIDIA R430
|
|
driver on Ubuntu 16.04 LTS).
|
|
The ideal solution is to let the user install the best-fit version of ``nvidia-ml-py``.
|
|
See also: `nvidia-ml-py's Release History <https://pypi.org/project/nvidia-ml-py/#history>`_.
|
|
|
|
``nvidia-ml-py==11.450.51`` is the last version supports the NVIDIA R430 driver (CUDA 10.x).
|
|
Since ``nvidia-ml-py>=11.450.129``, the definition of struct ``nvmlProcessInfo_t`` has introduced
|
|
two new fields ``gpuInstanceId`` and ``computeInstanceId`` (GI ID and CI ID in newer ``nvidia-smi``)
|
|
which are incompatible with some old NVIDIA drivers. ``nvitop`` may not display the processes
|
|
correctly due to this incompatibility.
|
|
"""
|