Source code for bluemist.environment

"""
Initialize Bluemist-AI's environment
"""

# Author: Shashank Agrawal
# License: MIT
# Version: 0.1.2
# Email: dew@bluemist-ai.one
# Created: Feb 10, 2023
# Last modified: June 22, 2023

import logging
import os
import platform
import shutil
import sysconfig
import traceback
from logging import config

from termcolor import colored

from bluemist.utils.constants import CPU_BRAND_INTEL, GPU_BRAND_INTEL, GPU_BRAND_NVIDIA

os.environ["BLUEMIST_PATH"] = os.path.realpath(os.path.dirname(__file__))
BLUEMIST_PATH = os.getenv("BLUEMIST_PATH")

os.chdir(BLUEMIST_PATH)

config.fileConfig(BLUEMIST_PATH + '/' + 'logging.config')
logger = logging.getLogger("bluemist")
logging.captureWarnings(True)
logger.info('BLUEMIST_PATH {}'.format(BLUEMIST_PATH))

available_gpu = None
available_cpu = None


[docs]def initialize( log_level='DEBUG', enable_acceleration_extensions=False, cleanup_resources=True ): """ log_level : {'CRITICAL', 'FATAL', 'ERROR', 'WARNING', 'WARN', 'INFO', 'DEBUG'}, default='DEBUG' Controls the logging level for bluemist.log enable_acceleration_extensions : {True, False}, default=False - Enables NVIDIA GPU acceleration/Intel CPU acceleration based on the underlying GPU/CPU infrastructure - NVIDIA GPU acceleration is provided by RAPIDS cuML. For the list of supported algorithms, please refer https://docs.rapids.ai/api/cuml/stable/api/#regression-and-classification - Intel CPU acceleration is provided by Intel® Extension for Scikit-learn. For the list of supported algorithms, please refer https://intel.github.io/scikit-learn-intelex/algorithms.html#on-cpu cleanup_resources : {True, False}, default=True Cleanup artifacts from previous runs """ global available_gpu global available_cpu banner = """ ██████╗ ██╗ ██╗ ██╗███████╗███╗ ███╗██╗███████╗████████╗ █████╗ ██╗ ██╔══██╗██║ ██║ ██║██╔════╝████╗ ████║██║██╔════╝╚══██╔══╝ ██╔══██╗██║ ██████╔╝██║ ██║ ██║█████╗ ██╔████╔██║██║███████╗ ██║ ███████║██║ ██╔══██╗██║ ██║ ██║██╔══╝ ██║╚██╔╝██║██║╚════██║ ██║ ██╔══██║██║ ██████╔╝███████╗╚██████╔╝███████╗██║ ╚═╝ ██║██║███████║ ██║ ██║ ██║██║ (version 0.1.3 - WordCraft) """ print(colored(banner, 'blue')) print('Bluemist path :: {}'.format(BLUEMIST_PATH)) print('System platform :: {}, {}, {}, {}, {}'.format(os.name, platform.system(), platform.release(), sysconfig.get_platform(), platform.architecture())) logger.info('System platform :: {}, {}, {}, {}, {}'.format(os.name, platform.system(), platform.release(), sysconfig.get_platform(), platform.architecture())) logger.debug('Printing environment variables...') for key, value in os.environ.items(): logger.debug(f'{key}={value}') if log_level.upper() in ['CRITICAL', 'FATAL', 'ERROR', 'WARNING', 'WARN', 'INFO', 'DEBUG']: logger.setLevel(logging.getLevelName(log_level)) logger.handlers[0].doRollover() if enable_acceleration_extensions: gpu_brand = check_gpu_brand() cpu_brand = check_cpu_brand() print("GPU Brand ::", gpu_brand) print("CPU Brand ::", cpu_brand) if gpu_brand == GPU_BRAND_NVIDIA: try: import cuml cuml_version = cuml.__version__ available_gpu = gpu_brand print("cuML version", str(cuml_version)) print("NVIDIA GPU support is available via RAPIDS cuML ", str(cuml_version)) except Exception as e: print("NVIDIA GPU support is NOT available !") logger.error("Error: %s", str(e)) logger.error(traceback.format_exc()) if cpu_brand == CPU_BRAND_INTEL: try: from sklearnex import patch_sklearn patch_sklearn() available_cpu = cpu_brand print("CPU Acceleration enabled via Intel® Extension for Scikit-learn") except Exception as e: print("Intel CPU Acceleration is NOT available !") logger.error("Error: %s", str(e)) logger.error(traceback.format_exc()) # cleaning and building artifacts directory if bool(cleanup_resources): directories = ['artifacts/data', 'artifacts/eda', 'artifacts/experiments', 'artifacts/models', 'artifacts/preprocessor', 'mlruns'] for directory in directories: directory_path = BLUEMIST_PATH + '/' + directory if os.path.exists(directory_path): logger.debug('Removing directory :: {}'.format(directory_path)) shutil.rmtree(directory_path) if not os.path.exists(directory_path): logger.debug('Creating directory :: {}'.format(directory_path)) os.mkdir(directory_path) with open(BLUEMIST_PATH + '/' + 'artifacts/api/predict.py', 'w') as f: logger.debug('Clearing file content of {}'.format(BLUEMIST_PATH + '/' + 'artifacts/api/predict.py')) f.truncate()
def check_gpu_brand(): import subprocess # Check for NVIDIA GPU try: subprocess.check_output(['nvidia-smi', '--help']) return GPU_BRAND_NVIDIA except (FileNotFoundError, subprocess.CalledProcessError): pass # Check for Intel GPU try: subprocess.check_output(['intel_gpu_top', '-h']) return GPU_BRAND_INTEL except (FileNotFoundError, subprocess.CalledProcessError): pass return "Unknown GPU brand !!" def check_cpu_brand(): import cpuinfo cpu_brand = cpuinfo.get_cpu_info()['vendor_id_raw'] # get only the brand name return cpu_brand