CN115269341A - 一种gpu虚拟化资源使用率的多维度监控方法和系统 - Google Patents
一种gpu虚拟化资源使用率的多维度监控方法和系统 Download PDFInfo
- Publication number
- CN115269341A CN115269341A CN202211170215.9A CN202211170215A CN115269341A CN 115269341 A CN115269341 A CN 115269341A CN 202211170215 A CN202211170215 A CN 202211170215A CN 115269341 A CN115269341 A CN 115269341A
- Authority
- CN
- China
- Prior art keywords
- gpu
- list
- pod
- container
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种GPU虚拟化资源使用率的多维度监控方法和系统,该方法包括:查询Kubernetes云环境上所有pod信息,根据节点名称过滤查询各个节点上的pod列表;遍历pod列表,查询每个pod中的容器列表;遍历容器列表,查询每个容器中的所有进程的PID列表和容器挂载的GPU卡列表;遍历GPU卡列表,查询每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程实际的GPU资源使用量;对数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据。本发明实现GPU资源精细化管理,提升资源利用率,从而保证充分释放GPU性能,增加GPU使用寿命。
Description
技术领域
本发明涉及计算机技术领域,具体来说,涉及一种GPU虚拟化资源使用率的多维度监控方法和系统。
背景技术
随着Kubernetes的成熟,越来越多的企业把Kubernetes作为AI、大数据以及高性能批量计算的下一代基础设施,GPU作为一种用于矩阵计算的PCIe设备更是AI、大数据以及高性能批量计算场景下不可或缺的资源。
随着基于Kubernetes平台的各种GPU虚拟化方案应用,如今还缺少对GPU虚拟化资源的多维度监控方法和系统。用户无法实时查看多维度下GPU资源使用情况,开发人员无法根据GPU资源使用情况对科学计算任务优化,提升任务性能;管理人员无法了解任务消耗GPU算力和显存资源的范围值,任务在Kubernetes云环境部署应用时分配GPU虚拟资源会出现分配过多或过少情况,造成GPU虚拟资源浪费;在GPU使用异常的情况下,运维人员无法得知具体节点、pod、容器、GPU卡和科学计算任务进程出现异常,无法快速准确的做出判断和处置,导致GPU性能无法充分释放甚至减少使用寿命。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的问题,本发明提出一种GPU虚拟化资源使用率的多维度监控方法和系统,以克服现有相关技术所存在的上述技术问题。
为此,本发明采用的具体技术方案如下:
一种GPU虚拟化资源使用率的多维度监控方法和系统,该GPU虚拟化资源使用率的多维度监控方法包括以下步骤:
S1、查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表;
S2、遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表;
S3、遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表;
S4、遍历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量;
S5、使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据。
进一步的,所述GPU虚拟化资源为GPU在Kubernetes集群上的加载和注册,对GPU在算力和显存的粒度上进行虚拟化。
进一步的,所述多维度监控包括节点、pod、容器、GPU卡及进程维度。
进一步的,所述查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表包括以下步骤:
S11、根据os.Hostname()函数来获取所在节点的节点名hostName;
S12、根据Kubernetes客户端client-go,使用pod列表查询方法获取Kubernetes集群上所有正在运行的pod列表K8s_pod_List;
S13、遍历pod列表K8s_pod_List,列表中每个pod通过pod.Spec.NodeName获取其所在节点的节点名称,判断pod.Spec.NodeName与hostName是否相同,如果相同则将该pod加入新的列表,最后获得该节点上的pod列表Node_pod_List,若不相同将该pod过滤掉。
进一步的,所述遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表包括以下步骤:
S21、遍历节点上的pod列表Node_pod_List;
S22、使用pod中容器列表查询算法,并获取每个pod中的容器列表Container_List。
进一步的,所述遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表包括以下步骤:
S31、遍历每个pod中的容器列表Container_List,通过container.containerID获取列表中每个container的ID;
S32、使用container.containerID并通过Docker客户端和Linux文件系统查询获得容器中所有进程的PID列表Container_Process_List和容器挂载的GPU卡列表GPU_List。
进一步的,所述历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量包括以下步骤:
S41、遍历GPU卡列表GPU_List,通过GPU.ID获取列表中每个GPU卡的ID;
S42、使用GPU.ID通过显卡进程查询算法获取正在使用该GPU卡的所有进程信息列表GPU_Process_List。
进一步的,所述使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据包括以下步骤:
S51、进程维度,遍历GPU卡上正在使用GPU资源的自定义进程信息列表GPU_Process_List,通过Process.Core和Process.Mem分别获得进程实际GPU算力使用量和实际GPU显存使用量;
S52、GPU卡维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,记录该GPU卡上每个进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得GPU卡实际GPU算力使用量和实际GPU显存使用量;
S53、容器维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,如果进程的PID在容器中所有进程的PID列表Container_Process_List中,记录该进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得容器实际GPU算力使用量和实际GPU显存使用量;
S54、pod维度,遍历pod内的容器列表Container_List,记录该pod内每个容器的GPU资源使用量,对记录容器的GPU资源使用量作求和计算,并获得pod实际GPU算力使用量和实际GPU显存使用量;
S55、节点维度,遍历节点上的pod列表Node_pod_List,记录该节点上每个pod的GPU资源使用量,对记录pod的GPU资源使用量作求和计算,并获得节点实际GPU算力使用量和实际GPU显存使用量。
根据本发明的另一实施例,提供了一种GPU虚拟化资源使用率的多维度监控系统,该实现GPU虚拟化资源使用率的多维度监控系统包括:数据采集模块、数据处理模块及告警模块;
数据采集模块,安装在集群中每一个使用GPU虚拟化资源的节点上,用于采集该节点的GPU虚拟化资源使用信息;
数据处理模块,用于将所述数据采集模块采集到的数据信息收集、汇总和分析,将处理后的采集数据按照不同维度存储到不同的时序数据表中;
告警模块,用于配置多维度的告警规则,同时定时查询时序数据库内采集数据,根据告警规则生成多维度的告警日志,并按照配置的通知方式转发。
进一步的,所述数据处理模块可设置不同节点上数据采集模块的采集周期。
本发明的有益效果为:
1、本发明用户可实时监控节点、pod、容器、GPU卡和进程等不同维度下GPU资源使用情况,包括实际GPU算力使用大小、实际GPU显存使用大小、虚拟化GPU算力消耗值和虚拟化GPU显存消耗值,合理的分配GPU虚拟资源和快速准确处置异常情况有助于保证科学计算任务集群的稳定性和高可用性。
2、在科学计算任务开发阶段,开发人员可在进程维度下实时监控任务的GPU资源使用情况,并根据GPU资源使用情况对任务中参数存储、传递和计算进行优化,提升科学计算任务性能。实时监控科学计算任务的GPU资源使用情况便于管理人员了解任务消耗GPU算力和显存资源的范围值,防止科学计算任务在Kubernetes云环境部署应用时分配GPU虚拟资源出现过多或过少情况,合理的分配云环境内GPU虚拟资源,实现GPU资源精细化管理,提升资源利用率。
3、在科学计算任务应用阶段,当不同维度下GPU使用异常时,运维人员可迅速找到具体节点、pod、容器、GPU卡和科学计算任务进程,并快速准确的做出相应处置,从而保证充分释放GPU性能,增加GPU使用寿命。相应处置包括进程和GPU卡维度下挂起或终止程序;容器和pod维度下增加、减少GPU虚拟资源或终止容器和pod;节点维度下增加、减少GPU卡或关闭重启节点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的GPU虚拟化资源使用率的多维度监控方法的流程图;
图2是进程维度下GPU监控数据处理流程图;
图3是GPU卡维度下GPU监控数据处理流程图;
图4是容器维度下GPU监控数据处理流程图;
图5是pod维度下GPU监控数据处理流程图;
图6是节点维度下GPU监控数据处理流程图;
图7是根据本发明实施例的GPU虚拟化资源使用率的多维度监控系统的原理框图。
图中:
1、数据采集模块;2、数据处理模块;3、告警模块。
具体实施方式
为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
根据本发明的实施例,提供了一种GPU虚拟化资源使用率的多维度监控方法和系统。
现结合附图和具体实施方式对本发明进一步说明,如图1-7所示,根据本发明实施例的GPU虚拟化资源使用率的多维度监控方法和系统,该GPU虚拟化资源使用率的多维度监控方法包括以下步骤:
S1、查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表;
S2、遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表;
S3、遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表;
S4、遍历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量;
S5、使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据。
在一个实施例中,所述GPU虚拟化资源为GPU在Kubernetes集群上的加载和注册,对GPU在算力和显存的粒度上进行虚拟化。
在一个实施例中,所述多维度监控包括节点、pod、容器、GPU卡及进程维度。
在一个实施例中,所述查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表包括以下步骤:
S11、根据os.Hostname()函数来获取所在节点的节点名hostName;
S12、根据Kubernetes客户端client-go,使用pod列表查询方法获取Kubernetes集群上所有正在运行的pod列表K8s_pod_List;
具体的,pod列表查询方法如下所示:
K8s_pod_List =clientset.CoreV1().pods(namespace).List()。
S13、遍历pod列表K8s_pod_List,列表中每个pod通过pod.Spec.NodeName获取其所在节点的节点名称,判断pod.Spec.NodeName与hostName是否相同,如果相同则将该pod加入新的列表,最后获得该节点上的pod列表Node_pod_List,若不相同将该pod过滤掉。
具体的,判断逻辑如算法1所示:
算法1:筛选节点上的pod列表;
Input:包含Kubernetes集群上所有正在运行的pod列表,
K8s_pod_List;Kubernetes节点的节点名称,hostName
Output:节点名称为hostName的Kubernetes节点上正在运行的pod
列表,Node_pod_List
1. for pod in K8s_pod_List
2.if pod.Spec.NodeName == hostName then
3.Node_pod_List= append(Node_pod_List,pod )
4.end if
5. end for
其中,若某个pod所在节点的节点名称pod.Spec.NodeName==
hostName,则将通过Node_pod_List= append(Node_pod_List,pod )将
该pod加入节点名称为hostName的Kubernetes节点上正在运行的pod
列表Node_pod_List中。
在一个实施例中,所述遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表包括以下步骤:
S21、遍历节点上的pod列表Node_pod_List,
S22、使用pod中容器列表查询算法,并获取每个pod中的容器列表Container_List。
具体的,pod中容器列表查询算法如算法2所示:
算法2:pod中容器列表查询算法;
Input:节点上pod列表Node_pod_List中单个pod信息,pod
自定义容器信息结构体type containerInfo struct {
containerID int
Name string
requestCore float32
requestMem float32
}
Output:pod内所有容器信息列表,Container_List
1. var container containerInfo
2. for c1 in pod.Status.containerStatuses
3.for c2 in pod.Spec.containers
4.if c1.name == c2.name
5.container.containerID=c1.containerID
6.container.Name = c2.name
7.container.requestCore =
c2.resources.requests.tower/vcuda-core
8.container.requestMem =
c2.resources.requests.tower/vcuda-memory
9.Container_List =
append(Container_List,container)
11.end if
12.end for
13. end for
其中,首先遍历pod.Status.containerStatuses,之后再遍历pod.Spec.containers,若两列表内容器c1.name == c2.name,将容器ID:c1.containerID,容器名称:c2.name,容器申请的GPU虚拟化;
算力值:c2.resources.requests.tower/vcuda-core,容器申请的GPU;
虚拟化显存值:c2.resources.requests.tower/vcuda-memory,
分别赋予自定义容器信息结构体container;
通过Container_List = append(Container_List,container)
将该自定义容器信息加入pod内所有容器信息列表Container_List中。
在一个实施例中,所述遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表包括以下步骤:
S31、遍历每个pod中的容器列表Container_List,通过container.containerID获取列表中每个container的ID;
S32、使用container.containerID并通过Docker客户端和Linux文件系统查询获得容器中所有进程的PID列表Container_Process_List和容器挂载的GPU卡列表GPU_List。
在一个实施例中,所述历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量包括以下步骤:
S41、遍历GPU卡列表GPU_List,通过GPU.ID获取列表中每个GPU卡的ID;
S42、使用GPU.ID通过显卡进程查询算法获取正在使用该GPU卡的所有进程信息列表GPU_Process_List。
具体的,显卡进程查询算法如算法3所示:
算法3:显卡进程查询算法
Input:GPU卡ID,GPU.ID;自定义进程信息结构体type processInfo struct {
Pid int
Core float64
Mem float32
}
Output:ID为GPU.ID的GPU设备上,正在使用GPU资源的自定义进程信息列表,GPU_Process_List
1. dev := nvml.DeviceGetHandleByIndex(GPU.ID))
2. processOnDevices:=dev.DeviceGetComputeRunningProcesses()
3. processUseSms:= dev.DeviceGetProcessUtilization()
4. var process processInfo
5. for processDev in processOnDevices
6. for processSm in processUseSms
7. If processDev .Pid == processSm.Pid
8. process.Core = processSm.SmUtil
9. process.Mem = processDev .UsedGPUMemory
10. process.Pid = processDev .Pid
11. GPU_Process_List = append(GPU_Process_List,process)
12. end if
13. end for
14. end for
其中,首先获取ID为GPU.ID的GPU设备信息:dev;之后调用dev.nvmlDeviceGetComputeRunningProcesses()查询获得使用该GPU卡的进程列表processOnDevices;调用dev.DeviceGetProcessUtilization()查询获得使用该GPU卡算力资源的进程列表processUseSms;遍历processOnDevices后再遍历processUseSms,
若两列表内进程processDev.Pid==processSm.Pid,将进程算力使用量:processSm.SmUtil,进程显存使用量:processDev.UsedGPUMemory,进程Pid:processDev.Pid,分别赋予自定义进程信息结构体process;通过GPU_Process_List=append(GPU_Process_List,process)将该自定义进程信息加入正在使用GPU资源的自定义进程信息列表:GPU_Process_List中。
在一个实例中,所述使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据包括以下步骤:
S51、进程维度,遍历GPU卡上正在使用GPU资源的自定义进程信息列表GPU_Process_List,通过Process.Core和Process.Mem分别获得进程实际GPU算力使用量和实际GPU显存使用量;
具体的,通过计算,进程实际GPU算力使用量/该进程所在容器申请的虚拟化GPU算力值,获得进程维度的虚拟化GPU算力消耗值;通过计算,进程实际GPU显存使用量/该进程所在容器申请的虚拟化GPU显存值,获得进程维度的虚拟化GPU显存消耗值。
S52、GPU卡维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,记录该GPU卡上每个进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得GPU卡实际GPU算力使用量和实际GPU显存使用量;
具体的,通过计算,GPU卡实际GPU算力使用量/容器申请的虚拟化GPU算力值,获得GPU卡维度的虚拟化GPU算力消耗值;通过计算,GPU卡实际GPU显存使用量/容器申请的虚拟化GPU显存值,获得GPU卡维度的虚拟化GPU显存消耗值。
S53、容器维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,如果进程的PID在容器中所有进程的PID列表Container_Process_List中,记录该进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得容器实际GPU算力使用量和实际GPU显存使用量;
具体的,通过计算,容器实际GPU算力使用量/容器申请的虚拟化GPU算力值,获得容器维度的虚拟化GPU算力消耗值;通过计算,容器实际GPU显存使用量/容器申请的虚拟化GPU显存值,获得容器维度的虚拟化GPU显存消耗值。
S54、pod维度,遍历pod内的容器列表Container_List,记录该pod内每个容器的GPU资源使用量,对记录容器的GPU资源使用量作求和计算,并获得pod实际GPU算力使用量和实际GPU显存使用量;
具体的,通过计算,pod实际GPU算力使用量/pod内所有容器申请的虚拟化GPU算力总和,获得pod维度的虚拟化GPU算力消耗值;通过计算,pod实际GPU显存使用量/pod内所有容器申请的虚拟化GPU显存总和,获得pod维度的虚拟化GPU显存消耗值。
S55、节点维度,遍历节点上的pod列表Node_pod_List,记录该节点上每个pod的GPU资源使用量,对记录pod的GPU资源使用量作求和计算,并获得节点实际GPU算力使用量和实际GPU显存使用量。
具体的,通过计算,节点实际GPU算力使用量/节点上所有容器申请的虚拟化GPU算力总和,获得节点维度的虚拟化GPU算力消耗值;通过计算,节点实际GPU显存使用量/节点上所有容器申请的虚拟化GPU显存总和,获得节点维度的虚拟化GPU显存消耗值。
根据本发明的另一方面,提供了一种GPU虚拟化资源使用率的多维度监控系统,该实现GPU虚拟化资源使用率的多维度监控系统包括:数据采集模块、数据处理模块及告警模块;
数据采集模块1,安装在集群中每一个使用GPU虚拟化资源的节点上,用于采集该节点的GPU虚拟化资源使用信息;
数据处理模块2,用于将所述数据采集模块采集到的数据信息收集、汇总和分析,将处理后的采集数据按照不同维度存储到不同的时序数据表中;
告警模块3,用于配置多维度的告警规则,同时定时查询时序数据库内采集数据,根据告警规则生成多维度的告警日志,并按照配置的通知方式转发。
在一个实施例中,所述数据处理模块可设置不同节点上数据采集模块的采集周期。
具体的,告警模块的告警维度包括节点、pod、容器和进程;告警指标包括实际GPU算力使用值、实际GPU显存使用值、GPU虚拟化算力消耗值、GPU虚拟化显存消耗值;告警周期为数据采集模块的采集周期的倍数。
综上所述,借助于本发明的上述技术方案,通过本发明用户可实时监控节点、pod、容器、GPU卡和进程等不同维度下GPU资源使用情况,包括实际GPU算力使用大小、实际GPU显存使用大小、虚拟化GPU算力消耗值和虚拟化GPU显存消耗值,合理的分配GPU虚拟资源和快速准确处置异常情况有助于保证科学计算任务集群的稳定性和高可用性。在科学计算任务开发阶段,开发人员可在进程维度下实时监控任务的GPU资源使用情况,并根据GPU资源使用情况对任务中参数存储、传递和计算进行优化,提升科学计算任务性能。实时监控科学计算任务的GPU资源使用情况便于管理人员了解任务消耗GPU算力和显存资源的范围值,防止科学计算任务在Kubernetes云环境部署应用时分配GPU虚拟资源出现过多或过少情况,合理的分配云环境内GPU虚拟资源,实现GPU资源精细化管理,提升资源利用率。在科学计算任务应用阶段,当不同维度下GPU使用异常时,运维人员可迅速找到具体节点、pod、容器、GPU卡和科学计算任务进程,并快速准确的做出相应处置,从而保证充分释放GPU性能,增加GPU使用寿命。相应处置包括进程和GPU卡维度下挂起或终止程序;容器和pod维度下增加、减少GPU虚拟资源或终止容器和pod;节点维度下增加、减少GPU卡或关闭重启节点。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,该GPU虚拟化资源使用率的多维度监控方法包括以下步骤:
S1、查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表;
S2、遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表;
S3、遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表;
S4、遍历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量;
S5、使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据。
2.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述GPU虚拟化资源为GPU在Kubernetes集群上的加载和注册,对GPU在算力和显存的粒度上进行虚拟化。
3.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述多维度监控包括节点、pod、容器、GPU卡及进程维度。
4.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述查询Kubernetes云环境上所有pod信息,并根据节点名称过滤查询各个节点上的pod列表包括以下步骤:
S11、根据os.Hostname()函数来获取所在节点的节点名hostName;
S12、根据Kubernetes客户端client-go,使用pod列表查询方法获取Kubernetes集群上所有正在运行的pod列表K8s_pod_List;
S13、遍历pod列表K8s_pod_List,列表中每个pod通过pod.Spec.NodeName获取其所在节点的节点名称,判断pod.Spec.NodeName与hostName是否相同,如果相同则将该pod加入新的列表,最后获得该节点上的pod列表Node_pod_List,若不相同将该pod过滤掉。
5.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述遍历各个节点上的pod列表,并根据pod中容器列表查询算法来获取每个pod中的容器列表包括以下步骤:
S21、遍历节点上的pod列表Node_pod_List,
S22、使用pod中容器列表查询算法,并获取每个pod中的容器列表Container_List。
6.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述遍历每个pod中的容器列表,并通过Docker客户端和Linux文件系统查询每个容器中所有进程的PID列表和容器挂载的GPU卡列表包括以下步骤:
S31、遍历每个pod中的容器列表Container_List,通过container.containerID获取列表中每个container的ID;
S32、使用container.containerID并通过Docker客户端和Linux文件系统查询获得容器中所有进程的PID列表Container_Process_List和容器挂载的GPU卡列表GPU_List。
7.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述历容器挂载的GPU卡列表,并根据显卡进程查询算法来获取每个GPU卡上正在使用GPU资源的所有进程的PID列表及每个进程的实际GPU资源使用量包括以下步骤:
S41、遍历GPU卡列表GPU_List,通过GPU.ID获取列表中每个GPU卡的ID;
S42、使用GPU.ID通过显卡进程查询算法获取正在使用该GPU卡的所有进程信息列表GPU_Process_List。
8.根据权利要求1所述的一种GPU虚拟化资源使用率的多维度监控方法,其特征在于,所述使用多维度GPU虚拟化资源,并对S4中获取的数据进行处理,获得不同维度下GPU虚拟化资源使用率的监控数据包括以下步骤:
S51、进程维度,遍历GPU卡上正在使用GPU资源的自定义进程信息列表GPU_Process_List,通过Process.Core和Process.Mem分别获得进程实际GPU算力使用量和实际GPU显存使用量;
S52、GPU卡维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,记录该GPU卡上每个进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得GPU卡实际GPU算力使用量和实际GPU显存使用量;
S53、容器维度,遍历GPU卡上正在使用GPU资源的所有进程的PID列表GPU_Process_List,如果进程的PID在容器中所有进程的PID列表Container_Process_List中,记录该进程的GPU资源使用量,对记录进程的GPU资源使用量作求和计算,并获得容器实际GPU算力使用量和实际GPU显存使用量;
S54、pod维度,遍历pod内的容器列表Container_List,记录该pod内每个容器的GPU资源使用量,对记录容器的GPU资源使用量作求和计算,并获得pod实际GPU算力使用量和实际GPU显存使用量;
S55、节点维度,遍历节点上的pod列表Node_pod_List,记录该节点上每个pod的GPU资源使用量,对记录pod的GPU资源使用量作求和计算,并获得节点实际GPU算力使用量和实际GPU显存使用量。
9.一种GPU虚拟化资源使用率的多维度监控系统,用于实现权利要求1-8中任一项所述的GPU虚拟化资源使用率的多维度监控方法,其特征在于,该GPU虚拟化资源使用率的多维度监控系统包括:数据采集模块、数据处理模块及告警模块;
数据采集模块,安装在集群中每一个使用GPU虚拟化资源的节点上,用于采集该节点的GPU虚拟化资源使用信息;
数据处理模块,用于将所述数据采集模块采集到的数据信息收集、汇总和分析,将处理后的采集数据按照不同维度存储到不同的时序数据表中;
告警模块,用于配置多维度的告警规则,同时定时查询时序数据库内采集数据,根据告警规则生成多维度的告警日志,并按照配置的通知方式转发。
10.根据权利要求9所述的一种GPU虚拟化资源使用率的多维度监控系统,其特征在于,所述数据处理模块可设置不同节点上数据采集模块的采集周期。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211170215.9A CN115269341B (zh) | 2022-09-26 | 2022-09-26 | 一种gpu虚拟化资源使用率的多维度监控方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211170215.9A CN115269341B (zh) | 2022-09-26 | 2022-09-26 | 一种gpu虚拟化资源使用率的多维度监控方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115269341A true CN115269341A (zh) | 2022-11-01 |
CN115269341B CN115269341B (zh) | 2023-01-03 |
Family
ID=83756739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211170215.9A Active CN115269341B (zh) | 2022-09-26 | 2022-09-26 | 一种gpu虚拟化资源使用率的多维度监控方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115269341B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117593172A (zh) * | 2024-01-16 | 2024-02-23 | 北京趋动智能科技有限公司 | 进程管理方法、装置、介质及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326008A (zh) * | 2016-08-23 | 2017-01-11 | 成都卡莱博尔信息技术股份有限公司 | 一种面向集群系统的监控方法 |
CN108733531A (zh) * | 2017-04-13 | 2018-11-02 | 南京维拓科技有限公司 | 基于云计算的gpu性能监控系统 |
CN109753338A (zh) * | 2017-11-06 | 2019-05-14 | 阿里巴巴集团控股有限公司 | 虚拟gpu使用率的检测方法和装置 |
CN110247810A (zh) * | 2019-07-09 | 2019-09-17 | 浪潮云信息技术有限公司 | 一种收集容器服务监控数据的系统及方法 |
CN112181764A (zh) * | 2020-09-23 | 2021-01-05 | 南京南瑞继保电气有限公司 | Kubernetes资源数据的监视方法及装置 |
-
2022
- 2022-09-26 CN CN202211170215.9A patent/CN115269341B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326008A (zh) * | 2016-08-23 | 2017-01-11 | 成都卡莱博尔信息技术股份有限公司 | 一种面向集群系统的监控方法 |
CN108733531A (zh) * | 2017-04-13 | 2018-11-02 | 南京维拓科技有限公司 | 基于云计算的gpu性能监控系统 |
CN109753338A (zh) * | 2017-11-06 | 2019-05-14 | 阿里巴巴集团控股有限公司 | 虚拟gpu使用率的检测方法和装置 |
CN110247810A (zh) * | 2019-07-09 | 2019-09-17 | 浪潮云信息技术有限公司 | 一种收集容器服务监控数据的系统及方法 |
CN112181764A (zh) * | 2020-09-23 | 2021-01-05 | 南京南瑞继保电气有限公司 | Kubernetes资源数据的监视方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117593172A (zh) * | 2024-01-16 | 2024-02-23 | 北京趋动智能科技有限公司 | 进程管理方法、装置、介质及设备 |
CN117593172B (zh) * | 2024-01-16 | 2024-04-23 | 北京趋动智能科技有限公司 | 进程管理方法、装置、介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN115269341B (zh) | 2023-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109714192B (zh) | 一种监控云平台的监控方法及系统 | |
US11455189B2 (en) | Task scheduling simulation system | |
CN110290189B (zh) | 一种容器集群管理方法、装置及系统 | |
CN110502494B (zh) | 日志处理方法、装置、计算机设备及存储介质 | |
US9870269B1 (en) | Job allocation in a clustered environment | |
US8826286B2 (en) | Monitoring performance of workload scheduling systems based on plurality of test jobs | |
CN109271243B (zh) | 一种集群任务管理系统 | |
US10469616B2 (en) | Data driven bin packing implementation for data centers with variable node capabilities | |
CN112162829B (zh) | 一种边缘计算场景下的资源监控数据预处理系统 | |
CN106302628B (zh) | Arm架构网络集群中计算资源的统一管理调度方法 | |
CN115269341B (zh) | 一种gpu虚拟化资源使用率的多维度监控方法和系统 | |
CN102339233A (zh) | 云计算集中管理平台 | |
CN111984505B (zh) | 一种运维数据采集装置及采集方法 | |
CN102457578A (zh) | 一种基于事件机制的分布式网络监控方法 | |
CN114237891A (zh) | 资源调度方法、装置、电子设备及存储介质 | |
CN114020407A (zh) | 一种容器管理集群容器组调度优化方法、装置、设备 | |
CN115858499A (zh) | 一种数据库分区处理方法、装置、计算机设备和存储介质 | |
CN112667460A (zh) | 一种航空电子系统应用任务栈空间的监控方法 | |
CN113672472A (zh) | 磁盘监控方法及装置 | |
CN114328549B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113051079B (zh) | 一种计算机过载保护装置 | |
CN112732165B (zh) | 偏移量管理方法、装置及存储介质 | |
CN113900898B (zh) | 一种数据处理系统、设备及介质 | |
US20240303174A1 (en) | Device priority prediction using machine learning | |
CN117743085A (zh) | 一种基于Prometheus AlertManager的告警归档方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |