云服务器内容精选
-
约束与限制 init容器不支持进行GPU虚拟化。 对于单张GPU卡: 最多虚拟化为20个GPU虚拟设备。 最多调度20个使用隔离能力的Pod。 仅支持调度相同隔离模式(GPU虚拟化支持显存隔离、显存与算力隔离两种隔离模式。)的工作负载。 对于同一工作负载中的不同容器: 仅支持配置单一显卡型号,不支持混合配置两种及以上GPU显卡型号。 仅支持配置一致GPU使用模式,不支持混合配置虚拟化和非虚拟化模式。 使用GPU虚拟化后,该GPU节点不再支持调度使用共享GPU资源的工作负载。
-
验证GPU虚拟化隔离能力 工作负载创建成功后,您可以尝试验证GPU虚拟化的隔离能力。 登录容器查看容器被分配显存总量 kubectl exec -it gpu-app -- nvidia-smi 预期输出: Wed Apr 12 07:54:59 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.141.03 Driver Version: 470.141.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... Off | 00000000:21:01.0 Off | 0 | | N/A 27C P0 37W / 300W | 4792MiB / 5000MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+ 预期输出表明,该容器被分配显存总量为5000 MiB,实际使用了4792MiB。 查看所在节点的GPU显存隔离情况(在节点上执行)。 export PATH=$PATH:/usr/local/nvidia/bin;nvidia-smi 预期输出: Wed Apr 12 09:31:10 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.141.03 Driver Version: 470.141.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... Off | 00000000:21:01.0 Off | 0 | | N/A 27C P0 37W / 300W | 4837MiB / 16160MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 760445 C python 4835MiB | +-----------------------------------------------------------------------------+ 预期输出表明,GPU节点上的显存总量为16160 MiB,其中示例Pod使用了4837MiB。
-
前提条件 创建GPU类型节点,具体请参见创建节点。 安装gpu-device-plugin(原gpu-beta)插件,安装时注意要选择节点上GPU对应的驱动,具体请参见CCE AI套件(NVIDIA GPU)。 gpu-device-plugin(原gpu-beta)插件会把驱动的目录挂载到/usr/local/nvidia/lib64,在容器中使用GPU资源需要将/usr/local/nvidia/lib64追加到LD_LIBRARY_PATH环境变量中。 通常可以通过如下三种方式追加。 制作镜像的Dockerfile中配置LD_LIBRARY_PATH。(推荐) ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64:$LD_LIBRARY_PATH 镜像的启动命令中配置LD_LIBRARY_PATH。 /bin/bash -c "export LD_LIBRARY_PATH=/usr/local/nvidia/lib64:$LD_LIBRARY_PATH && ..." 创建工作负载时定义LD_LIBRARY_PATH环境变量(需确保容器内未配置该变量,不然会被覆盖)。 ... env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 ...
-
使用GPU 创建工作负载申请GPU资源,可按如下方法配置,指定显卡的数量。 apiVersion: apps/v1 kind: Deployment metadata: name: gpu-test namespace: default spec: replicas: 1 selector: matchLabels: app: gpu-test template: metadata: labels: app: gpu-test spec: containers: - image: nginx:perl name: container-0 resources: requests: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # 申请GPU的数量 limits: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # GPU数量的使用上限 imagePullSecrets: - name: default-secret 通过nvidia.com/gpu指定申请GPU的数量,支持申请设置为小于1的数量,比如nvidia.com/gpu: 0.5,这样可以多个Pod共享使用GPU。GPU数量小于1时,不支持跨GPU分配,如0.5 GPU只会分配到一张卡上。 使用nvidia.com/gpu参数指定GPU数量时,requests和limits值需要保持一致。 指定nvidia.com/gpu后,在调度时不会将负载调度到没有GPU的节点。如果缺乏GPU资源,会报类似如下的Kubernetes事件。 0/2 nodes are available: 2 Insufficient nvidia.com/gpu. 0/4 nodes are available: 1 InsufficientResourceOnSingleGPU, 3 Insufficient nvidia.com/gpu. 在CCE控制台使用GPU资源,只需在创建工作负载时,选择使用的GPU配额即可。 图1 使用GPU
-
访问Grafana Prometheus插件同时安装了Grafana(一款开源可视化工具),并且与Prometheus进行了对接。您可以创建一个公网LoadBalancer类型Service,这样就可以从公网访问Grafana,从Grafana中看到Prometheus的监控数据。 单击访问地址,访问Grafana,选择合适的DashBoard,即可以查到相应的聚合内容。 登录CCE控制台,选择一个已安装Prometheus插件的集群,在左侧导航栏中选择“服务”。 单击右上角“YAML创建”,为Grafana创建一个公网LoadBalancer类型Service。 apiVersion: v1 kind: Service metadata: name: grafana-lb #服务名称,可自定义 namespace: monitoring labels: app: grafana annotations: kubernetes.io/elb.id: 038ff*** #请替换为集群所在VPC下的ELB实例ID,且ELB实例为公网访问类型 spec: ports: - name: cce-service-0 protocol: TCP port: 80 #服务端口号,可自定义 targetPort: 3000 #Grafana的默认端口号,无需更改 selector: app: grafana type: LoadBalancer 创建完成后在浏览器访问“负载均衡公网IP地址:服务端口”,访问Grafana并选择合适的DashBoard,即可查看GPU资源状态。 图4 查看GPU虚拟化资源
-
监控GPU指标 创建一个使用GPU的工作负载,等工作负载正常运行后,访问Prometheus,在“Graph”页面中,查看GPU指标。 图3 查看GPU监控指标 表1 GPU基础监控指标 类型 指标 监控级别 说明 利用率指标 cce_gpu_utilization GPU卡 GPU卡算力使用率 cce_gpu_memory_utilization GPU卡 GPU卡显存使用率 cce_gpu_encoder_utilization GPU卡 GPU卡编码使用率 cce_gpu_decoder_utilization GPU卡 GPU卡解码使用率 cce_gpu_utilization_process GPU进程 GPU各进程算力使用率 cce_gpu_memory_utilization_process GPU进程 GPU各进程显存使用率 cce_gpu_encoder_utilization_process GPU进程 GPU各进程编码使用率 cce_gpu_decoder_utilization_process GPU进程 GPU各进程解码使用率 内存指标 cce_gpu_memory_used GPU卡 GPU显存使用量 cce_gpu_memory_total GPU卡 GPU显存总量 cce_gpu_memory_free GPU卡 GPU显存空闲量 cce_gpu_bar1_memory_used GPU卡 GPU bar1 内存使用量 cce_gpu_bar1_memory_total GPU卡 GPU bar1 内存总量 频率 cce_gpu_clock GPU卡 GPU时钟频率 cce_gpu_memory_clock GPU卡 GPU显存频率 cce_gpu_graphics_clock GPU卡 GPU图形处理器频率 cce_gpu_video_clock GPU卡 GPU视频处理器频率 物理状态数据 cce_gpu_temperature GPU卡 GPU温度 cce_gpu_power_usage GPU卡 GPU功率 cce_gpu_total_energy_consumption GPU卡 GPU总能耗 带宽数据 cce_gpu_pcie_link_bandwidth GPU卡 GPU PCIE 带宽 cce_gpu_nvlink_bandwidth GPU卡 GPU nvlink 带宽 cce_gpu_pcie_throughput_rx GPU卡 GPU PCIE 接收带宽 cce_gpu_pcie_throughput_tx GPU卡 GPU PCIE 发送带宽 cce_gpu_nvlink_utilization_counter_rx GPU卡 GPU nvlink 接收带宽 cce_gpu_nvlink_utilization_counter_tx GPU卡 GPU nvlink 发送带宽 隔离内存页面 cce_gpu_retired_pages_sbe GPU卡 GPU单比特错误隔离页数量 cce_gpu_retired_pages_dbe GPU卡 GPU双比特错误隔离页数量 表2 GPU虚拟化监控指标 指标 监控级别 说明 xgpu_memory_total GPU进程 GPU虚拟化显存总量。 xgpu_memory_used GPU进程 GPU虚拟化显存使用量。 xgpu_core_percentage_total GPU进程 GPU虚拟化算力总量。 xgpu_core_percentage_used GPU进程 GPU虚拟化算力使用量。 gpu_schedule_policy GPU卡 GPU虚拟化分三种模式: 0:显存隔离算力共享模式 1:显存算力隔离模式 2:默认模式,表示当前卡还没被用于GPU虚拟化设备分配。 xgpu_device_health GPU卡 GPU虚拟化设备的健康情况。 0:表示GPU虚拟化设备为健康状态。 1:表示GPU虚拟化设备为非健康状态。
-
故障定位步骤 NVML显存重映射行数查询异常 GPU驱动或GPU设备存在异常,请根据GPU设备所在的节点类型(E CS 或BMS),联系对应的客服进行处理。 GPU设备DBE错误与SBE错误总数过高 GPU驱动或GPU设备存在异常,请根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。 GPU设备存在Uncorrectable ECC错误 登录GPU隔离事件发生的节点。 进入/usr/local/nvidia/bin目录,执行nvidia-smi -q命令。 若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。 观察执行结果中的ECC ERROR(发生ECC故障的记录)。 Correctable Error:不会影响业务,不会触发GPU隔离。 Uncorrectable Error:会导致业务中断,会触发GPU隔离。 若存在Uncorrectable Error,可以尝试通过以下手段恢复: 配置目标节点污点(taints),驱逐目标节点存量的业务负载。 重启目标节点。 若重启后仍有该现象,则需要收集nvidia-smi -q命令的输出,然后根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。 NVML获取设备UUID异常 登录GPU隔离事件发生的节点。 进入/usr/local/nvidia/bin目录。 执行nvidia-smi,观察执行结果中的设备ID,例如:00:0D.0。 若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。 执行lspci | grep NVIDIA,观察执行结果中的设备ID。 比对上述两者结果,若存在不匹配的现象,收集两者输出结果,然后根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。 GPU设备存在Xid错误 登录GPU隔离事件发生的节点。 执行dmesg -T | grep -i NVRM,观察结果输出。 假如存在Xid(PCI:0000:00:0x): xx格式的信息,则需要收集错误码,根据Nvidia Xid Error页面中确认详细原因。然后将详细原因和错误信息,根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。 GPU虚拟化设备可用内存远小于GPU物理显存 登录GPU虚拟化节点。 执行/usr/local/nvidia/bin/nvidia-smi,观测目标GPU卡的物理显存,记录其序号。 执行cat /proc/xgpu/{GPU卡序号}/meminfo,注意替换命令中的{GPU卡序号}为步骤2获取的GPU卡序号,观测GPU虚拟化的可用显存。 比较步骤2和步骤3的可用显存。 由于GPU厂商的驱动程序,本身就会占用一定量的物理显存,量级在300MB左右,这属于正常现象。例如Tesla T4配套510.47.03,驱动程序默认会占用280MiB;而该显存占用与厂商的驱动程序版本也有一定相关性,例如535系列驱动比470系列占用更多。 若发现GPU虚拟化的可用显存远小于GPU卡的物理显存,一般是因为存在一些非GPU虚拟化发放的容器,占用了显存。 通过CCE控制台或kubectl命令,将目标节点的GPU负载排空。 执行rmmod xgpu_km,进行GPU虚拟化模块的删除。 通过CCE控制台或kubectl命令,将目标节点的nvidia-gpu-device-plugin Pod进行删除。 等待nvidia-gpu-device-plugin Pod重建完成后,重新按照步骤2和步骤3进行结果核验。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格