NVIDIA GPU资源管理

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
所有文档
menu
没有找到结果,请重新输入

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
  • 文档中心
  • arrow
  • 智能边缘BIE
  • arrow
  • 备份
  • arrow
  • NVIDIA GPU资源管理
本页目录
  • GPU监控
  • 依赖条件
  • 设置docker runtime为nvidia
  • 动态修改AI加速卡类型
  • GPU资源分配device-plugin
  • GPU显存共享功能
  • 功能说明
  • 依赖条件
  • 配置步骤
  • 分配应用gpu显存
  • 多卡分配逻辑
  • GPU显存共享调度实战
  • 单机单卡
  • 单机多卡
  • 总结

NVIDIA GPU资源管理

更新时间:2025-08-21

针对容器模式的节点,提供了GPU的资源管理功能。具体包含GPU监控、资源分配和GPU共享。GPU监控支持NVIDIA GPU,包括amd64与arm64平台(jetson)。GPU资源分配支持jetson、比特大陆1684、昇腾310 GPU。GPU共享仅支持NVIDIA。

GPU监控

如果边缘节点是一个GPU设备,需要云端监控GPU资源情况,则在创建节点的时候,AI加速卡 选择 NVIDIA GPU或NVIDIA JETSON,如下图所示:

单机创建选择GPU监控.png

依赖条件

创建节点时如果选择了上述两种加速卡之一,云端会默认为其配置一个gpu-metrics系统应用,用于采集边缘gpu状态。gpu-metrics同时还依赖边缘GPU服务器的一些外部环境,主要包括:

  • 边缘节点要求有NVIDIA GPU,可以是amd64架构的NVIDIA GPU,也可以是arm64架构的jetson gpu。
  • 边缘节点安装了NVIDIA docker,具体安装方式参考官网。
  • 边缘节点的docker runtime 设置为了NVIDIA。依赖NVIDIA docker 已安装。
  • 边缘节点使用容器模式运行。

设置docker runtime为nvidia

设备Docker的默认runtime可能不是nvidia。可以通过执行 docker info | grep Runtime 查看docker的默认runtime。

查看docker runtime.png

如果不是nvidia,此时需要更改Docker的daemon.json配置文件,文件路径通常为/etc/docker/daemon.json,添加如下配置即可。

Plain Text
1{
2    "default-runtime": "nvidia",
3    "runtimes": {
4        "nvidia": {
5            "path": "/usr/bin/nvidia-container-runtime",
6            "runtimeArgs": []
7        }
8    }
9}

编辑完毕以后,重启docker,执行如下命令:

Plain Text
1sudo systemctl daemon-reload
2sudo systemctl restart docker

动态修改AI加速卡类型

如果创建节点时没有选择AI加速卡,后续可以在这里进行修改。

image.png

GPU资源分配device-plugin

GPU资源分配功能用于支持边缘应用使用节点的GPU资源。支持Jetson、比特大陆1684、昇腾310 GPU。针对这3种GPU,需要在创建节点时选择对应的加速卡。

创建节点选择加速卡

也可以在创建节点后修改AI加速卡。

以Jetson为例,在创建节点时选择了NVIDIA Jetson加速卡,在节点的详情页,查看AI加速卡子菜单。

jetson加速卡页

点击【配置】弹出弹出对话框,复制应用安装命令,在边缘节点上执行。

jetson资源分配对话框

执行过程中会列出当前集群节点,需要输入节点确认。在这里只有一个节点jetson,输入jetson并回车即可。

jetson加速卡选择节点

jetson资源分配组件安装

安装完成后,可以执行kubectl get pod -n kube-system,查看资源分配组件已运行。

jetson资源分配组件安装完成

卸载资源分配组件是类似的流程。点击【配置】弹出对话框,复制应用卸载命令,在边缘节点上执行。

jetson资源分配组件卸载1

jetson资源分配组件卸载2

输入当前节点jetson回车即可完成应用卸载。

比特大陆1684和昇腾310的资源分配组件安装过程和jetson安装过程一致,针对昇腾或比特大陆设备选择加速卡后,点击AI加速卡子菜单的【配置】,弹出对话框后复制应用安装或卸载命令在边缘设备上执行。后续步骤和jetson资源分配组件完全一致。

比特大陆1684资源分配:

比特大陆资源分配

昇腾310资源分配:

昇腾资源分配

安装好GPU资源分配组件后,在节点关联的应用中可以配置GPU资源。在应用服务配置中,选择高级配置:

GPU应用配置

GPU应用高级配置

点击添加资源限制:

GPU资源限制

GPU资源分配

分配GPU资源仅支持大于等于1的整数,且不能超过边缘节点的所有GPU数量。如配置了超过边缘节点的GPU数量,应用无法启动。比特大陆1684不支持配置数量,数值只可为1。配置完资源限制后,点击【确定】即可在边缘应用生效。

GPU显存共享功能

功能说明

GPU共享功能主要是为了支持多个边缘AI服务可以运行在多张GPU卡上这个特性。当边缘节点上运行多个AI服务的时候,默认情况下,多个AI服务都会运行在GPU卡1上。这样即使边缘节点有多张AI计算卡,也无法动态调用到GPU卡2。使用GPU共享功能,通过设置边缘AI服务的显存容量需求,实现边缘AI服务在多卡之间的动态调度。GPU共享功能仅支持NVIDIA GPU amd64架构。

安装GPU共享功能后,与节点关联的应用可以配置应用的GPU资源限制。如未安装GPU共享功能,应用即使设置GPU资源限制,也无法生效,并且应用也无法在设备上部署运行。

依赖条件

  • GPU共享功能依赖于GPU监控功能,所以需要先完成前面的 GPU监控 配置。
  • k3s环境,在安装完毕gpushare组件以后,需要重启一次k3s,可以使用命令systemctl restart k3s。
  • k8s环境,需要使用官网推荐的kubeadm方式创建集群,参考官网安装指南。使用这种方案安装的k8s集群,在master节点的/etc/kubernetes/manifests目录下,会有kube-scheduler.yaml文件,这个是开启gpushare依赖的配置文件,如下图所示:

image.png

正常启动k8s,可以看到有kube-scheduler这个pod,如下图所示:

Plain Text
1kubectl get pod -n kube-system

image.png

配置步骤

1、进入节点详解页面,找到GPU应用,如下图所示:

GPU共享配置1.png

2、点击【配置】弹出对话框,包括有安装和卸载GPU共享的命令,将命令复制并在设备上执行。以安装GPU共享为例,先复制对话框中的应用安装命令:

GPU共享配置2.png

3、在设备上执行该命令。

4、然后会要求用户选择有GPU的子节点,并给相应节点添加标签。当前节点只有一个,输入提示的节点名即可。

GPU共享配置4.png

5、随后等安装完成,设备即具备GPU共享功能。由于该功能安装应用的镜像较大,拉取镜像时间可能较长。需要等待镜像拉取完成并启动后才会完成安装。

6、查看kube-system命名空间下的pod,确认两个GPU共享服务都已经正常运行即表示安装成功。

GPU共享配置5.png

7、卸载GPU共享的过程和安装时类似,复制GPU共享配置对话框中的应用卸载命令:

GPU共享配置6.png

8、在设备上执行,输入具有GPU的子节点并确认。

GPU共享配置7.png

9、查看kube-system命名空间下的pod,确认两个GPU共享服务都已经删除即表示成功卸载GPU共享功能。

GPU共享配置8.png

分配应用gpu显存

在边缘节点上安装完毕GPU共享命令以后,我们进入到【应用管理】,找到一个测试的GPU应用,然后在服务配置当中,指定AI服务需要只用的显存容器,最小单位是256MiB,现在如下图所示,给测试AI服务分配了1G显存,限制量就是设置为4。

image.png

多卡分配逻辑

假定GPU服务器有2张AI加速卡,加速卡信息如下,卡1有4G显存,卡2也有4G显存。当前有ai-service-1和ai-server-2两个AI服务。根据对着2个ai-service的不同资源限制,可以控制2个ai-service具体调用的AI计算卡。

  • 当ai-service-1和ai-service-2都分配2G显存时,ai-service-1和ai-service-2都将调用卡1的资源,因为卡1刚好能够支持2个ai-service。
  • 当ai-service-1分配2G显存,ai-service-2分配3G显存时,这2个ai-service会分别运行在卡1和卡2上。因为没有一张卡的显存容量支持运行2个ai-service。

说明:GPU显存的单位是MiB,需要查看GPU卡具体的显存容量,有些显卡说有2G显存,但是具体的容量没有到2048MiB。

GPU显存共享调度实战

单机单卡

查看gpu服务属性,执行nvidia-smi,可以看到这个一台3090显卡的GPU服务器,显存24259MiB

image.png

  1. 云端创建3个以nvidia/cuda:11.0-base作为容器镜像的服务,并分配不同gpu限制,具体如下:

    • 应用1:nvidia-cuda11-base-1,NVIDIA资源限制:50单位,每个单位256MiB
    • 应用2:nvidia-cuda11-base-2,NVIDIA资源限制:40单位
    • 应用3:nvidia-cuda11-base-3,NVIDIA资源限制:1单位

如下图所示:

image.png

image.png

  • 容器镜像都是nvidia/cuda:11.0-base
  • 启动参数如下,是为了让容器一直running

    • /bin/sh
    • -c
    • while true; do echo $(date "+%Y-%m-%d %H:%M:%S"); sleep 1; done
  1. 将三个应用都部署到gpu服务器,查看pod状态,三个都是running状态,如下所示:

image.png

此时调度分配的GPU显存是91单位,即23296MiB,小于3090显卡的24259MiB。

  1. 修改应用3的NVIDIA资源限制单位为10,此时分配调度的资源是25600MiB,大于24259MiB,此时我们查看边缘pod运行状态。

首先nvidia-cuda11-base-3这个pod会处于Terminating状态:

image.png

然后会自动创建一个新的nvidia-cuda11-base-3 pod,处于Pending状态:

image.png

等Terminating状态的nvidia-cuda11-base-3清理掉以后,我们可以看到,剩下的那个nvidia-cuda11-base-3依然处于Pending状态:

image.png

查看这个pod

Plain Text
1kubectl describe pod nvidia-cuda11-base-3-dd84c5dd5-4ncpf -n baetyl-edge

我们发现提示资源不够。

Plain Text
1Events:
2  Type     Reason            Age   From               Message
3  ----     ------            ----  ----               -------
4  Warning  FailedScheduling  59s   default-scheduler  0/1 nodes are available: 1 Insufficient baidu.com/vcuda-memory.
5  Warning  FailedScheduling  59s   default-scheduler  0/1 nodes are available: 1 Insufficient baidu.com/vcuda-memory.

单机多卡

  1. 查看gpu服务器属性,这是一台2张P4卡的GPU服务器,每张卡的显存是7611MiB。对应每张卡最大29单位。

image.png

  1. 创建三个应用,应用现场分配情况如下:

    • 应用1:edgekit-gpu-cuda10-2,NVIDIA资源限制:4单位
    • 应用2:edgekit-gpu-cuda10-2-2,NVIDIA资源限制:20单位
    • 应用3:edgekit-gpu-cuda10-2-3,NVIDIA资源限制:20单位
  2. 将上述三个应用部署部署到gpu服务器:

image.png

  1. 查看这3个pod对应的gpu:
Plain Text
1kubectl exec edgekit-gpu-cuda10-2-7c766fddd4-h2djd -n baetyl-edge -- nvidia-smi -L
2kubectl exec edgekit-gpu-cuda10-2-2-6c6cdd6885-v284t -n baetyl-edge -- nvidia-smi -L
3kubectl exec edgekit-gpu-cuda10-2-3-599dddc6d4-75c6b -n baetyl-edge -- nvidia-smi -L
4nvidia-smi -L

image.png

  1. 我们可以看到部署情况如下:

    • GPU 0: Tesla P4 (UUID: GPU-9f12f917-e458-4bb8-3d9d-8dc7fd6cddf7)

      • edgekit-gpu-cuda10-2-2
    • GPU 1: Tesla P4 (UUID: GPU-7cf0b881-7598-8b1a-3270-94d6f5d2479a)

      • edgekit-gpu-cuda10-2
      • edgekit-gpu-cuda10-2-3

说明,kubectl exec命令输出的GPU卡,需要看UUID号,对应Pod来说,一个pod只有1个gpu,所以里面的GPU编号都是0,对应宿主机来说,GPU编号有0、1。

  1. 执行nvidia-smi,可以查看gpu的使用情况,如下图所示,总计有3个程序,运行在gpu当中,gpu1当中有2个程序。

image.png

总结

不论是单机单卡,还是单机多卡,当我们为一个应用分配一张显卡的大部分内存时(80%显存),我们可以做到让这个应用独占一张显卡,不会与其他应用分享。但是因为资源是抢占式的,如果重启k3s或者k8s,你不能保证还是上次的那个应用能够抢占到一张gpu显卡。不过在当gpu现在数量足够的情况下(比如gpu显卡有7张,当前规划的应用就3个),是可以做到应用按卡调度的。

上一篇
使用自定义modbus应用采集
下一篇
FAQ