惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
V2EX - 技术
V2EX - 技术
Jina AI
Jina AI
有赞技术团队
有赞技术团队
美团技术团队
月光博客
月光博客
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
人人都是产品经理
人人都是产品经理
Security Latest
Security Latest
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
宝玉的分享
宝玉的分享
罗磊的独立博客
J
Java Code Geeks
博客园 - Franky
V
Vulnerabilities – Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
小众软件
小众软件
P
Privacy & Cybersecurity Law Blog
量子位
T
Threatpost
T
Tailwind CSS Blog
V
Visual Studio Blog
C
Cisco Blogs
雷峰网
雷峰网
博客园 - 【当耐特】
T
Tor Project blog
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页
H
Heimdal Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 聂微东
爱范儿
爱范儿
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Threat Research - Cisco Blogs
T
Troy Hunt's Blog
H
Hacker News: Front Page
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint

博客园 - 仙守

用audit审计去记录谁用了docker docker容器大小使用限制 docker容器的磁盘使用进行限额 sentry私有化部署: 在8c16g上降低资源使用 私有化部署sentry: 获取dsn 私有化部署sentry:卷备份及恢复 docker 保存所有镜像 私有化部署sentry:镜像构建 docker拉取代理脚本 vscode密钥从windows连接远程linux 基于docker构建es集群 在es中进行update+upsert milvus遍历查询全部数据 简单剖析qwen-agent回答是怎么获取tool的 一个中转代码,底层调用openai,上层模拟openai NLP之预训练语言模型BERT NLP之预训练语言模型GPT NLP之引言 [推荐系统]粗排之FSCD
一个小工具识别哪个docker占用gpu
仙守 · 2024-05-08 · via 博客园 - 仙守

我们经常会为了组内谁在占用某块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)