Example #1
0
 def initialize(self, log=False):
     """ Initialize pynvml """
     if not self.initialized:
         if K.backend() == "plaidml.keras.backend":
             loglevel = "INFO"
             if self.logger:
                 self.logger.debug("plaidML Detected. Using plaidMLStats")
                 loglevel = self.logger.getEffectiveLevel()
             self.plaid = plaidlib(loglevel=loglevel, log=log)
         elif IS_MACOS:
             if self.logger:
                 self.logger.debug("macOS Detected. Using pynvx")
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 if self.logger:
                     self.logger.debug("OS is not macOS. Using pynvml")
                 pynvml.nvmlInit()
             except (pynvml.NVMLError_LibraryNotFound,  # pylint: disable=no-member
                     pynvml.NVMLError_DriverNotLoaded,  # pylint: disable=no-member
                     pynvml.NVMLError_NoPermission) as err:  # pylint: disable=no-member
                 if plaidlib is not None:
                     self.plaid = plaidlib(log=log)
                 else:
                     raise err
         self.initialized = True
         self.get_device_count()
         self.get_active_devices()
         self.get_handles()
Example #2
0
 def initialize(self):
     """ Initialize pynvml """
     if not self.initialized:
         if IS_MACOS:
             if self.logger:
                 self.logger.debug("macOS Detected. Using pynvx")
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 if self.logger:
                     self.logger.debug("OS is not macOS. Using pynvml")
                 pynvml.nvmlInit()
             except (pynvml.NVMLError_LibraryNotFound,  # pylint: disable=no-member
                     pynvml.NVMLError_DriverNotLoaded,  # pylint: disable=no-member
                     pynvml.NVMLError_NoPermission):  # pylint: disable=no-member
                 self.initialized = True
                 return
         self.initialized = True
         self.get_device_count()
         self.get_active_devices()
         self.get_handles()
Example #3
0
 def initialize(self):
     """ Initialize pynvml """
     if not self.initialized:
         if IS_MACOS:
             if self.logger:
                 self.logger.debug("macOS Detected. Using pynvx")
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 if self.logger:
                     self.logger.debug("OS is not macOS. Using pynvml")
                 pynvml.nvmlInit()
             except (
                     pynvml.NVMLError_LibraryNotFound,  # pylint: disable=no-member
                     pynvml.NVMLError_DriverNotLoaded,  # pylint: disable=no-member
                     pynvml.NVMLError_NoPermission):  # pylint: disable=no-member
                 self.initialized = True
                 return
         self.initialized = True
         self.get_device_count()
         self.get_active_devices()
         self.get_handles()
Example #4
0
    def _initialize(self, log=False):
        """ Initialize the library that will be returning stats for the system's GPU(s).
        For Nvidia (on Linux and Windows) the library is `pynvml`. For Nvidia (on macOS) the
        library is `pynvx`. For AMD `plaidML` is used.

        Parameters
        ----------
        log: bool, optional
            Whether the class should output information to the logger. There may be occasions where
            the logger has not yet been set up when this class is queried. Attempting to log in
            these instances will raise an error. If GPU stats are being queried prior to the
            logger being available then this parameter should be set to ``False``. Otherwise set
            to ``True``. Default: ``False``
        """
        if not self._initialized:
            if get_backend() == "amd":
                self._log("debug", "AMD Detected. Using plaidMLStats")
                loglevel = "INFO" if self._logger is None else self._logger.getEffectiveLevel()
                self._plaid = plaidlib(log_level=loglevel, log=log)
            elif IS_MACOS:
                self._log("debug", "macOS Detected. Using pynvx")
                try:
                    pynvx.cudaInit()
                except RuntimeError:
                    self._initialized = True
                    return
            else:
                try:
                    self._log("debug", "OS is not macOS. Trying pynvml")
                    pynvml.nvmlInit()
                except (pynvml.NVMLError_LibraryNotFound,  # pylint: disable=no-member
                        pynvml.NVMLError_DriverNotLoaded,  # pylint: disable=no-member
                        pynvml.NVMLError_NoPermission) as err:  # pylint: disable=no-member
                    if plaidlib is not None:
                        self._log("debug", "pynvml errored. Trying plaidML")
                        self._plaid = plaidlib(log=log)
                    else:
                        msg = ("There was an error reading from the Nvidia Machine Learning "
                               "Library. Either you do not have an Nvidia GPU (in which case "
                               "this warning can be ignored) or the most likely cause is "
                               "incorrectly installed drivers. If this is the case, Please remove "
                               "and reinstall your Nvidia drivers before reporting."
                               "Original Error: {}".format(str(err)))
                        self._log("warning", msg)
                        self._initialized = True
                        return
                except Exception as err:  # pylint: disable=broad-except
                    msg = ("An unhandled exception occured loading pynvml. "
                           "Original error: {}".format(str(err)))
                    if self._logger:
                        self._logger.error(msg)
                    else:
                        print(msg)
                    self._initialized = True
                    return
            self._initialized = True
            self._get_device_count()
            self._get_active_devices()
            self._get_handles()
Example #5
0
 def initialize(self, log=False):
     """ Initialize pynvml """
     if not self.initialized:
         if K.backend() == "plaidml.keras.backend":
             loglevel = "INFO"
             if self.logger:
                 self.logger.debug("plaidML Detected. Using plaidMLStats")
                 loglevel = self.logger.getEffectiveLevel()
             self.plaid = plaidlib(loglevel=loglevel, log=log)
         elif IS_MACOS:
             if self.logger:
                 self.logger.debug("macOS Detected. Using pynvx")
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 if self.logger:
                     self.logger.debug("OS is not macOS. Using pynvml")
                 pynvml.nvmlInit()
             except (
                     pynvml.NVMLError_LibraryNotFound,  # pylint: disable=no-member
                     pynvml.NVMLError_DriverNotLoaded,  # pylint: disable=no-member
                     pynvml.NVMLError_NoPermission) as err:  # pylint: disable=no-member
                 if plaidlib is not None:
                     self.plaid = plaidlib(log=log)
                 else:
                     msg = (
                         "There was an error reading from the Nvidia Machine Learning "
                         "Library. Either you do not have an Nvidia GPU (in which case "
                         "this warning can be ignored) or the most likely cause is "
                         "incorrectly installed drivers. If this is the case, Please remove "
                         "and reinstall your Nvidia drivers before reporting."
                         "Original Error: {}".format(str(err)))
                     if self.logger:
                         self.logger.warning(msg)
                     self.initialized = True
                     return
             except Exception as err:  # pylint: disable=broad-except
                 msg = ("An unhandled exception occured loading pynvml. "
                        "Original error: {}".format(str(err)))
                 if self.logger:
                     self.logger.error(msg)
                 else:
                     print(msg)
                 self.initialized = True
                 return
         self.initialized = True
         self.get_device_count()
         self.get_active_devices()
         self.get_handles()
Example #6
0
 def initialize(self):
     """ Initialize pynvml """
     if not self.initialized:
         if is_macos:
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 pynvml.nvmlInit()
             except pynvml.NVMLError_LibraryNotFound:
                 self.initialized = True
                 return
         self.initialized = True
         self.get_device_count()
         self.get_handles()
Example #7
0
 def initialize(self):
     """ Initialize pynvml """
     if not self.initialized:
         if IS_MACOS:
             if self.logger:
                 self.logger.debug("macOS Detected. Using pynvx")
             try:
                 pynvx.cudaInit()
             except RuntimeError:
                 self.initialized = True
                 return
         else:
             try:
                 if self.logger:
                     self.logger.debug("OS is not macOS. Using pynvml")
                 pynvml.nvmlInit()
             except pynvml.NVMLError_LibraryNotFound:
                 self.initialized = True
                 return
         self.initialized = True
         self.get_device_count()
         self.get_handles()
Example #8
0
    def _initialize(self) -> None:
        """ Initialize PyNvx for Nvidia GPUs on Apple.

        If :attr:`_is_initialized` is ``True`` then this function just returns performing no
        action. Otherwise :attr:`is_initialized` is set to ``True`` after successfully
        initializing NVML.

        Raises
        ------
        FaceswapError
            If the NVML library could not be successfully loaded
        """
        if self._is_initialized:
            return
        self._log("debug", "Initializing Pynvx for Apple Nvidia GPU.")
        try:
            pynvx.cudaInit()  # pylint:disable=no-member
        except RuntimeError as err:
            msg = (
                "An unhandled exception occured reading from the Nvidia Machine Learning "
                f"Library. Original error: {str(err)}")
            raise FaceswapError(msg) from err
        super()._initialize()
Example #9
0
def print_info():
    try:
        pynvx.cudaInit()
    except RuntimeError as e:
        print(e)
        return

    print('================ CUDA INFO =====================')
    print('Driver Version  : {}'.format(pynvx.cudaSystemGetDriverVersion()))
    print('Runtime Version : {}'.format(pynvx.cudaSystemGetRuntimeVersion()))
    print('Device Count    : {}'.format(pynvx.cudaDeviceGetCount()))

    handles = pynvx.cudaDeviceGetHandles()
    for handle in handles:
        print('------------------------------------------------')
        print('Device {}:'.format(handle))
        print('Device Name              : {}'.format(
            pynvx.cudaGetName(handle)))
        print('Device ClockRate         : {} MHz'.format(
            pynvx.cudaGetClockRate(handle) / 1024))
        print('Device ComputeCapability : {}'.format(
            pynvx.cudaGetComputeCapability(handle)))
        print('Device ProcessorCount    : {}'.format(
            pynvx.cudaGetMultiProcessorCount(handle)))
        print('Device PciBusID          : {}'.format(
            pynvx.cudaGetPciBusID(handle)))
        print('Device PciDeviceID       : {}'.format(
            pynvx.cudaGetPciDeviceID(handle)))
        print('Device PciDomainID       : {}'.format(
            pynvx.cudaGetPciDomainID(handle)))
        print('Device MemTotal          : {} MiB'.format(
            pynvx.cudaGetMemTotal(handle) / (1024 * 1024)))
        print('Device MemFree           : {} MiB'.format(
            pynvx.cudaGetMemFree(handle) / (1024 * 1024)))
        print('Device MemUsed           : {} MiB'.format(
            pynvx.cudaGetMemUsed(handle) / (1024 * 1024)))
Example #10
0
def test_init():
    v = m.cudaInit(ignore=True)
    assert isinstance(v, int)