Ubuntu) GPU 확인 방법

2021. 7. 31. 13:57꿀팁 분석 환경 설정/Linux 관련 팁

728x90

목차

     

    GPU 사용량 보기

    nvidia-smi

    모니터링 방법 (1)

     

    # 0.5초 간격으로 모니터링
    watch -n 0.5 nvidia-smi

    모니터링 방법 (2)

    # 1초마다 갱신(개인적으로 방법 1을 선호)
    nvidia-smi -l 1

     

     

    GPU를 사용 중인 PID 정보 얻기 

    ps -up `nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//'`

     

    파이썬) GPU 정보, device별, pid 별로 얻기

      pip install pynvml
      pip install beautifulsoup4
      pip install lxml
    import pynvml , pandas as pd
    
    pynvml.nvmlInit()
    result = []
    for dev_id in range(pynvml.nvmlDeviceGetCount()):
        handle = pynvml.nvmlDeviceGetHandleByIndex(dev_id)
        for proc in pynvml.nvmlDeviceGetComputeRunningProcesses(handle):
            result.append([proc.pid, proc.usedGpuMemory, dev_id])
    gpu_usage = pd.DataFrame(result,columns=["pid","bytes of memory", "device"])
    gpu_usage["MB of memory"] = gpu_usage["bytes of memory"] / (1024*1024)
    gpu_usage["GB of memory"] = gpu_usage["bytes of memory"] / (1024*1024*1024)

    pid 별로 얻기

    현재 아쉬운 점) `GPU를 사용중인 PID 정보 얻기` 있는 결과물을 뽑아낼 수 있다면 각 pid 마다 어떤 코드인지를 확인할 수 있는데, 이것을 파이썬에서 어떻게 해야 할지를 아직 잘 모르겠다........

    gpu_usage_by_id_r = gpu_usage.groupby("pid").apply(lambda x : ", ".join([str(i) for i in x["device"].tolist()])).reset_index(drop=False)
    gpu_usage_by_id_r.columns = ["pid","device_list"]
    gpu_usage_by_id_l = gpu_usage.groupby("pid").agg({"MB of memory" : "sum","GB of memory" : "sum",}).reset_index(drop=False)
    gpu_usage_by_id = gpu_usage_by_id_l.merge(gpu_usage_by_id_r,on="pid",how="left")
    gpu_usage_by_id

    device 별로 얻기 

    from pynvml.smi import nvidia_smi
    import numpy as np
    total_gpu_usage = pd.DataFrame([list(i.values())[0] for i in nvsmi.DeviceQuery('memory.free, memory.total, memory.id')["gpu"]])
    total_gpu_usage["device"] = np.arange(len(total_gpu_usage))
    
    
    d = gpu_usage.groupby(["device","device_name"]).agg({"MB of memory" : "sum","GB of memory" : "sum",})
    d = d.reset_index(drop=False)
    device_gpusage = d.merge(total_gpu_usage,on="device",how="left")
    device_gpusage

     

    content url
    pid를 통해서 돌아가는 script 확인  https://stackoverflow.com/questions/50264491/how-to-customize-nvidia-smi-s-output-to-show-pid-username
       
       
       
       
       
    728x90