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

推荐订阅源

GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Jina AI
Jina AI
H
Help Net Security
月光博客
月光博客
Y
Y Combinator Blog
I
InfoQ
博客园 - Franky
W
WeLiveSecurity
The Register - Security
The Register - Security
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Blog — PlanetScale
Blog — PlanetScale
H
Hacker News: Front Page
L
LangChain Blog
S
Security @ Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
罗磊的独立博客
V2EX - 技术
V2EX - 技术
H
Heimdal Security Blog
博客园_首页
SecWiki News
SecWiki News
N
News and Events Feed by Topic
B
Blog RSS Feed
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Google Online Security Blog
Google Online Security Blog
MongoDB | Blog
MongoDB | Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
WordPress大学
WordPress大学
小众软件
小众软件
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
PCI Perspectives
PCI Perspectives
博客园 - 聂微东
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Martin Fowler
Martin Fowler
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
博客园 - 司徒正美
Forbes - Security
Forbes - Security
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Security Affairs

博客园 - 仙守

用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)