Ubuntu는 Python 코드를 사용하여 GPU 및 CPU 사용량과 온도를 모니터링합니다.

Ubuntu는 Python 코드를 사용하여 GPU 및 CPU 사용량과 온도를 모니터링합니다.

질문:

해당 프로젝트에서 시작할 수 없는 프로그램이 있는 것으로 확인되었으며, 확인 결과 nvidia-smi 명령을 입력한 후 NVIDIA 그래픽 카드의 드라이버 정보가 인쇄되지 않는 것으로 확인되었습니다.

해결 방법 1:

재부팅 후 nvidia-smi -l 1 을 다시 입력하고 정상적으로 인쇄하세요.

해결 방법 2:

그 이유는 Ubuntu 커널 업그레이드로 인해 NVIDIA 드라이버를 연결할 수 없기 때문인 것으로 추측됩니다. 다음 방법을 통한 자동 커널 업데이트를 방지하려면 https://zhuanlan.zhihu.com/p/611276995?utm_id=0을 참조하세요.

다음 두 명령을 전달하고 해당 명령의 매개변수 값을 0으로 변경합니다.

vi /etc/apt/apt.conf.d/10periodic
vi /etc/apt/apt.conf.d/20auto-apgrades

다른,

이유를 추측해보세요:

드라이버가 자주 충돌하는 원인이 되는 열 방출 문제 때문일 수 있습니다.

그래서 5분마다 GPU와 CPU의 사용량과 온도를 txt 파일로 저장하는 파이썬 코드를 작성했습니다. 소스 코드는 다음과 같습니다.

涉及需要安装的python库
# pip3 install nvidia-ml-py3 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# pip3 install psutil
def print_gpu_info():
    # ref: https://blog.csdn.net/zxc120389574/article/details/106220612
    # 获取GPU的用量和温度
    # 这里假设使用的是NVIDIA显卡,需要安装nvidia-ml-py库
    

    print("---------GPU usage and T---------")
    import pynvml
    pynvml.nvmlInit()
    # Use device index to get gpu_device
    gpu_device = pynvml.nvmlDeviceGetHandleByIndex(0)

    # Use gpu_device to get device stats
    memory_info = pynvml.nvmlDeviceGetMemoryInfo(gpu_device)
    memoInfo = "Memory: Used/Total = {}/{}".format(memory_info.used / 1024 / 1024, memory_info.total / 1024 / 1024)

    powerUsage = pynvml.nvmlDeviceGetPowerUsage(gpu_device)
    powerState = pynvml.nvmlDeviceGetPowerState(gpu_device)

    # get GPU temperature
    gpu_device = pynvml.nvmlDeviceGetHandleByIndex(0)
    temperature = pynvml.nvmlDeviceGetTemperature(gpu_device, pynvml.NVML_TEMPERATURE_GPU)
    tempInfo = "Temperature:{0}°C".format(temperature)

    gpu_info ='gpu: ' + memoInfo + '  ' + tempInfo + '  '
    return gpu_info


def print_cpu_info():
    # 获取CPU的用量和温度 ()
    print("---------CPU usage and T---------")
    import psutil
    cpu_percent = psutil.cpu_percent()
    # psutil.sensors_temperatures() 官方文档这有说的只适用于 linux
    # 此程序在ubuntu上验证pass,
    cpu_temperature = psutil.sensors_temperatures()['coretemp'][0].current
    memoInfo = f"CPU utilization: {cpu_percent}%"
    tempInfo = f"CPU temperature: {cpu_temperature}°C"

    cpu_info = '    ||||    cpu: ' + memoInfo + ' ' + tempInfo + ' '
    return cpu_info
    
    
def write2Info(info):
    from datetime import datetime
    t = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
    print('info : ', info)
    info = t + '   '+ info + '\n'
    txtName = './GPUCPU_usage{}.txt'.format(1)
    with open(txtName, 'a', encoding='utf-8') as wf:
        wf.write(info)
        
        
if __name__ == '__main__':
    import time

    while True:
        gpu_info = print_gpu_info()
        cpu_info = print_cpu_info()  
        info = gpu_info + cpu_info
        write2Info(info)
        time.sleep(2)

또는 (상단과 하단의 코드는 같을 수 있으나 아래 코드는 테스트 실행에는 문제가 없습니다)



import psutil
import time

def print_gpu_info():
    #print("---------GPU usage and T---------")
    import pynvml
    pynvml.nvmlInit()
    # Use device index to get gpu_device
    gpu_device = pynvml.nvmlDeviceGetHandleByIndex(0)

    # Use gpu_device to get device stats
    memory_info = pynvml.nvmlDeviceGetMemoryInfo(gpu_device)
    memoInfo = "Memory: Used/Total = {}/{}".format(memory_info.used / 1024 / 1024, memory_info.total / 1024 / 1024)
    
    
    gpu_device = pynvml.nvmlDeviceGetHandleByIndex(0)
    temperature = pynvml.nvmlDeviceGetTemperature(gpu_device, pynvml.NVML_TEMPERATURE_GPU)
    tempInfo = "Temperature:{0}°C".format(temperature)
    # print(tempInfo)

    gpu_info ='gpu: ' + memoInfo + '  ' + tempInfo + '  '
    return gpu_info
    


def print_cpu_info():
    #print("---------CPU usage and T---------")
    import psutil
    cpu_percent = psutil.cpu_percent()
    # psutil.sensors_temperatures() 官方文档这有说的只适用于 linux
    # 此程序在ubuntu上验证pass,
    cpu_temperature = psutil.sensors_temperatures()['coretemp'][0].current
    memoInfo = f"CPU utilization: {cpu_percent}%"
    # print(memoInfo)
    tempInfo = f"CPU temperature: {cpu_temperature}°C"
    # print(tempInfo)

    cpu_info = '    ||||    cpu: ' + memoInfo + ' ' + tempInfo + ' '
    return cpu_info


def write2Info(info):
    from datetime import datetime
    t = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
    print('info : ', info)
    info = t + '   '+ info + '\n'
    txtName = './GPUCPU_usage{}.txt'.format(1)
    with open(txtName, 'a', encoding='utf-8') as wf:
        wf.write(info)


if __name__ == '__main__':
    import time

    while True:
        gpu_info = print_gpu_info()
        cpu_info = print_cpu_info()
        info = gpu_info + cpu_info
        write2Info(info)
        time.sleep(300)




연결하다

链接:https://pan.baidu.com/s/1ZoPp9mSeydqNuRobkChWsw 

추천

출처blog.csdn.net/qq_42835363/article/details/132103860