首页 > 其他分享 >一个小工具识别哪个docker占用gpu

一个小工具识别哪个docker占用gpu

时间:2024-05-08 09:12:09浏览次数:18  
标签:name 占用 pid id1 ans gpu docker id

我们经常会为了组内谁在占用某块gpu卡而不使用 烦恼,通过简单的代码就能快速识别到这块卡上面的进程是哪个容器的。
下面的代码会给出如下图这样的结果

#! /miniconda3/bin/python
# -*- coding: utf-8 -*-
import psutil
import subprocess as sp



def pre():
    ans = sp.check_output('''nvidia-smi |grep MiB|grep -v Default|awk '{print $2"\t"$5}' ''',shell=True)
    ans = ans.strip().decode('utf-8')
    return ans


def pre1():
    id_name_di = {}
    ans = sp.check_output(''' docker ps|awk '{print $1"\t"$NF}' ''',shell=True)
    ans = ans.strip().decode('utf-8')

    for id_name in ans.strip().split('\n'):

      if 'CONTAINER' in id_name: continue
      id1_name = id_name.split()
      if len(id1_name) != 2: continue
      id1,name = id1_name
      id_name_di[id1]=name
    return id_name_di



def check(pid):
    p = psutil.Process(int(pid))
    for curpid in p.parents():
      if 'containerd-shim' in curpid.name():
         docker = curpid.cwd().strip().split('/')[-1]
         return docker
    return None


def get(ans,id_name_di):
    id_docker = []
    for id_pid in ans.split('\n'):
        id1_pid = id_pid.strip().split()
        if len(id1_pid) != 2: continue
        id1,pid = id1_pid
        anstmp = check(pid)
        if not anstmp: continue
        docker = anstmp[:12]
        if docker in id_name_di:
           id_docker.append({'id':id1,'pid':pid,'name': id_name_di[docker]})
        else:
           continue

    print('=================================')
    #print('\033[31m=================================\033[0m')
    for id_docker in id_docker:
      #print('卡号:\033[31m[{}]\033[0m\tdocker名称:\033[31m[{}]\033[0m'.format(id1,docker))
      id1 = id_docker['id']
      pid = id_docker['pid']
      docker = id_docker['name']
      print('卡号:[{}]\tpid:{}\tdocker名称:[{}]'.format(id1,pid,docker))





if __name__ == '__main__':
    ans = pre()
    id_name_di = pre1()
    get(ans,id_name_di)

标签:name,占用,pid,id1,ans,gpu,docker,id
From: https://www.cnblogs.com/shouhuxianjian/p/18178928

相关文章

  • 使用 docker-compose 部署 nexus
    本篇博客主要介绍如何通过docker-compose快速搭建nexus服务,毕竟目前采用容器化部署是一件更加快速轻松的方案。之前的博客已经介绍过nexus的搭建,以及为IDEA和VisualStudio提供代理服务,这里就不详细介绍了,提供出之前博客的链接。nexus在windows上的搭建:https://www......
  • docker-compose 安装 harbor
     参考:https://blog.csdn.net/ladymorgana/article/details/1299450101、在https://github.com/goharbor/harbor/releases下载harbor-offline-installer-v2.10.1.tgz 2、将下载的包上传到/opt并解压,解压完成后,在当前目录生成harbor目录/opt//harbortar-zxvfharbor-offlin......
  • GpuMalll智算云:重塑AI大模型时代的智能未来
    在数字化浪潮的推动下,人工智能(AI)技术正以前所未有的速度改变着世界。而AI大模型作为这一变革的核心驱动力,正逐步成为科技创新的制高点。GpuMall智算云,作为领先的AI大模型解决方案提供商,致力于为客户提供高效、智能、安全的AI服务,共同开启智能未来。一、GpuMall智算云AI大模型:赋......
  • Docker网络:Docker0、容器互联技术--link、自定义网络、实战部署Redis集群
    一、Docker网络●--理解Docker0在干净的Linux环境上安装docker(将docker的所有镜像、容器先删除,干干净净!)实验:1、查看本地网络信息ipaddr可见有三个网卡信息:lo:本地(回环)地址;ens:虚拟机或云服务器(内网)地址;docker0:docker网络地址。问题:docker是如何处理容器网络访问......
  • nginx在docker中 清理
    killall-9nginx lsof-iTCP-sTCP:LISTEN-P|grep:80 yuminstallpsmisc-y sudoss-tunlp|grep:8517 ll/proc/65844/cwd查找并停止占用端口的进程:使用以下命令找出哪个进程正在监听这些端口:sudolsof-i:80sudolsof-i:443或者使用netstat:sudone......
  • Docker 必知必会----初识
    什么是Docker?Docker是一个开源的容器管理引擎。开发者可以通过Docker直接管理应用程序所需要的容器。它的logo如下: 为什么需要Docker使用Docker主要有两个原因,1、屏蔽不同环境的硬件差异,减轻开发人员在不同环境上,为了适配环境差异所需要做的工作。如各项系统配置、环境变量、......
  • docker - [13] docker网络
    smosmosmo"狂神"omzomzomz 一、理解网络本机回环地址:127.0.0.1本机IP地址:192.168.2.131docker地址:172.17.0.1  1.1、docker如何处理容器网络访问的?首先,拉取一个tomcat镜像(我直接从之前制作的tomcat镜像拉取下来了)拉取之后修改了一下名字:dockertag<imageI......
  • linux 查看文件是否被占用
    在Linux系统中,若要查看一个文件或目录是否被占用(即是否被进程打开或正在使用),可以使用以下几个命令:方法一:使用lsof命令lsof+D/path/to/directory/or/file这条命令会显示指定目录及其子目录下所有被打开的文件。如果你想查看某个特定文件是否被占用,可以这样操作:lsof/path/......
  • [转]openEuler 22.03 (LTS-SP1)安装最新版Docker(踩坑及解决方案)
    原文地址:openEuler22.03(LTS-SP1)安装最新版Docker(踩坑及解决方案)_openeulerdocker-CSDN博客openEuler22.03LTS-SP1要是直接yuminstalldocker,默认安装docker是18.09.0,这个版本Docker有个bug,所以还是安装个最新版Docker。1、先增加docker官方仓库[[email protected]......
  • docker网络配置:bridge模式、host模式、container模式、none模式
    在docker平台里有四种网络模式,今天继续分享一下它们的常用知识,进一步加深对docker技术的理解。1、docker网络模式分类dockerrun创建Docker容器时,可以用--net选项指定容器的网络模式,Docker主要有以下4种网络模式。bridge模式:--net=bridge如果不指定的话默认设置。host模式......