zealousness

prometheus及gpu,k8s

2020-07-31 17:23  ZealouSnesS  阅读(895)  评论(0编辑  收藏  举报

prometheus及gpu,k8s

原文地址:https://www.cnblogs.com/g2thend/p/11515560.html

##一,物理节点安装配置(简单配置,未涉及报警及grafana图形展示)

1,prometheus 官网下载安装

下载安装
# pwd
/usr/local/src
https://github.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz
# tar xvf prometheus-2.11.1.linux-amd64.tar.gz
# ln -sv /usr/local/src/prometheus-2.11.1.linux-amd64 /usr/local/prometheus
# cd /usr/local/prometheus

服务启动脚本
# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/usr/local/prometheus/
ExecStart=/usr/local/prometheus/prometheus --
config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target

配置所监控的node
cd /usr/local/prometheus
# grep -v "#" prometheus.yml | grep -v "^$"
global:
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: \'prometheus\'
    static_configs:
    - targets: [\'localhost:9090\']
  - job_name: \'promethues-node\'
    static_configs:
    - targets: [\'192.168.7.110:9100\',\'192.168.7.111:9100\']


修改配置文件后需要重启服务
启动
# systemctl daemon-reload
# systemctl restart prometheus
# systemctl enable prometheus
查看端口是否监听正常

2,节点安装

# pwd
/usr/local/src

https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
# tar xvf node_exporter-0.18.1.linux-amd64.tar.gz
# ln -sv /usr/local/src/node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter
# cd /usr/local/node_exporter


启动脚本
# vim /etc/systemd/system/node-exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target


启动
# systemctl daemon-reload
# systemctl restart node-exporter
# systemctl enable node-exporter
 
查看端口是否监听正常,关闭防火墙和selinxu

3,监控k8s

参考https://github.com/NVIDIA/gpu-monitoring-tools/tree/master/exporters/prometheus-dcgm

起gpu特定容器做监控

#######################################################

docker 使用GPU

查看docker 使用的runtime

docker   info  |  grep  Runtime
更改默认的runtime 
配置daemon的默认运行时
是否已安装
ls  /usr/bin/nvidia-container-runtime
nvidia-docker 命令是否出现
指定默认的runtime    "default-runtime": "nvidia"  添加加速代理镜像源

vim  /etc/docker/daemon.json 
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": [],
            "registry-mirrors": ["https://gemfield.mirror.aliyuncs.com"]
        }
    }
}

重启服务
	sudo systemctl restart docker
	
	ldconfig -p 
	 dpkg -S /usr/lib/x86_64-linux-gnu/libcuda.so.1   dpkg -S命令来检查下它属于哪个package

https://gitlab.com/nvidia/cuda/blob/master/dist/ubuntu16.04/10.1/base/Dockerfile

apt-get install pciutils
apt-get install kmod    安装lspci
 apt install dirmngr

https://github.com/NVIDIA/nvidia-docker
 Docker中使用GPU
https://cloud.tencent.com/developer/article/1142345
 
 export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo \'--device {}:{}\')
docker run -it --rm $DEVICES -v /usr/lib64/nvidia/:/usr/local/nvidia/lib64 tensorflow/tensorflow:latest-gpu bash


#nvidia-docker run -it -p 8888:8888 --name ten tensorflow/tensorflow:0.11.0rc0-gpu  /bin/sh

jupyter_jianhang_v5.1_gpu


进入容器输入nvidia-smi,输入显卡信息,说明安装是正确的。

制作docker 镜像 Anaconda3 + tensorflow-gpu part2 Dockerfile nvidia docker
https://blog.csdn.net/weixin_41270857/article/details/83449964

指定显存大小使用gpu

https://yq.aliyun.com/articles/690623?utm_content=g_1000041607

在k8s上调度GPU

http://longlongloves.life/2018-05-23/%E5%9C%A8k8s%E4%B8%8A%E8%B0%83%E5%BA%A6GPU.html

Kubernetes 多container组成的Pod

https://blog.csdn.net/liumiaocn/article/details/52490444

kubernetes单个pod运行两个容器yaml文件实践
https://blog.csdn.net/zhangxiangui40542/article/details/63273746

Docker 及 nvidia-docker 使用
https://www.cnblogs.com/makefile/p/docker-usage.html



 sudo -u nvidia-docker sh -c \'echo $PATH\'  /sbin:/bin:/usr/sbin:/usr/bin

安装 CUDA

安装步骤官网
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#verify-you-have-cuda-enabled-system
博客
https://blog.csdn.net/weixin_42652125/article/details/81178943
https://www.cnblogs.com/luofeel/p/8654964.html
https://blog.csdn.net/QLULIBIN/article/details/78714596


ubuntu安装cuda驱动实现nvidia-smi命令
https://blog.csdn.net/weixin_42652125/article/details/81178943

显卡监控



显卡信息
lspci | grep -i vga
使用nvidia GPU可以:
lspci | grep -i nvidia
[GeForce GTX 960M] (rev a2)
命令行中输入cat /proc/driver/nvidia/version查看显卡信息

https://us.download.nvidia.cn/XFree86/Linux-x86_64/384.130/NVIDIA-Linux-x86_64-384.130.run  

前边的序号 "00:0f.0"是显卡的代号(这里是用的虚拟机);
查看指定显卡的详细信息用以下指令:
lspci -v -s 00:0f.0
nvidia-smi

表头释义:
Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A;
Temp:显卡内部的温度,单位是摄氏度;
Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
Pwr:GPU能耗表示;
Bus-Id:涉及GPU总线的相关信息;
Disp.A:是Display Active的意思,表示GPU的显示是否初始化;
Memory Usage:显存的使用率;
Volatile GPU-Util:浮动的GPU利用率;
Compute M:计算模式;
下边的Processes显示每块GPU上每个进程所使用的显存情况。

如果要周期性的输出显卡的使用情况,可以用watch指令实现:

watch -n 10 nvidia-smi

#nvidia-smi
 nvidia-smi -L     #列出gpu 及id 
 GPU 0: GeForce GTX 960M (UUID: GPU-4d52e430-b8c7-a0b9-7fda-4aa825af5c97)
 
nvidia-smi –i   gpuid   # 指定gpuid  0,1,2,
nvidia-smi –l xxx
动态刷新信息(默认5s刷新一次),按Ctrl+C停止,可指定刷新频率,以秒为单位
nvidia-smi –f xxx
将查询的信息输出到具体的文件中,不在终端显示
nvidia-smi -q   查询所有GPU的当前详细信息
nvidia-smi –q –i xxx
指定具体的GPU或unit信息
nvidia-smi –q –f xxx
将查询的信息输出到具体的文件中,不在终端显示
nvidia-smi –q –x
将查询的信息以xml的形式输出
nvidia-smi -q –d xxx
指定显示GPU卡某些信息,xxx参数可以为MEMORY, UTILIZATION, ECC, TEMPERATURE, POWER,CLOCK, COMPUTE, PIDS, PERFORMANCE, SUPPORTED_CLOCKS, PAGE_RETIREMENT,ACCOUNTING
nvidia-smi –q –l xxx
动态刷新信息,按Ctrl+C停止,可指定刷新频率,以秒为单位
nvidia-smi --query-gpu=gpu_name,gpu_bus_id,vbios_version--format=csv
选择性查询选项,可以指定显示的属性选项
可查看的属性有:timestamp,driver_version,pci.bus,pcie.link.width.current等。(可查看nvidia-smi--help-query–gpu来查看有哪些属性)

2.3  设备修改选项
可以手动设置GPU卡设备的状态选项
nvidia-smi –pm 0/1
设置持久模式:0/DISABLED,1/ENABLED
nvidia-smi –e 0/1
切换ECC支持:0/DISABLED, 1/ENABLED
nvidia-smi –p 0/1
重置ECC错误计数:0/VOLATILE, 1/AGGREGATE
nvidia-smi –c
设置计算应用模式:0/DEFAULT,1/EXCLUSIVE_PROCESS,2/PROHIBITED
nvidia-smi –r
GPU复位
nvidia-smi –vm
设置GPU虚拟化模式
nvidia-smi –ac xxx,xxx
设置GPU运行的工作频率。e.g. nvidia-smi –ac2000,800
nvidia-smi –rac
将时钟频率重置为默认值
nvidia-smi –acp 0/1
切换-ac和-rac的权限要求,0/UNRESTRICTED, 1/RESTRICTED
nvidia-smi –pl
指定最大电源管理限制(瓦特)
nvidia-smi –am 0/1
启用或禁用计数模式,0/DISABLED,1/ENABLED
nvidia-smi –caa
清除缓冲区中的所有已记录PID,0/DISABLED,1/ENABLED

nvidia-smi pmon
nvidia-smi pmon –i xxx
用逗号分隔GPU索引,PCI总线ID或UUID
nvidia-smi pmon –d xxx
指定刷新时间(默认为1秒,最大为10秒)
nvidia-smi pmon –c xxx
显示指定数目的统计信息并退出
nvidia-smi pmon –s xxx
指定显示哪些监控指标(默认为u),其中:
u:GPU使用率
m:FB内存使用情况
nvidia-smi pmon –o D/T
指定显示的时间格式D:YYYYMMDD,THH:MM:SS
nvidia-smi pmon –f xxx
将查询的信息输出到具体的文件中,不在终端显示

阿里云GPU监控指标

MetricName 单位 名称
gpu_memory_freespace Byte GPU维度显存空闲量
gpu_memory_totalspace Byte GPU维度显存总量
gpu_memory_usedspace Byte GPU维度显存使用量
gpu_gpu_usedutilization % GPU维度GPU使用率
gpu_encoder_utilization % GPU维度编码器使用率
gpu_decoder_utilization % GPU维度解码器使用率
gpu_gpu_temperature GPU维度GPU温度
gpu_power_readings_power_draw W GPU维度GPU功率
gpu_memory_freeutilization % GPU维度显存空闲率
gpu_memory_useutilization % GPU维度显存使用率

基于阿里云容器服务监控 Kubernetes集群GPU指标 https://www.jianshu.com/p/1c7ddf18e8b2

检测脚本 #未测试
monitor.sh
GPU跨平台通用监控脚本
功能: Useage: monitor.sh fast|mem|gpu|temp|all|[pathToLog sleepTimeNum]
注意: ./monitor.sh fast速度最快

#nvidia-smi pmon -h#!/bin/bash
#. /etc/profile
#. ~/.bash_profile
#. ~/.bashrc
# 判断nvidia-smi命令是否存在
#/usr/bin/nvidia-smi > /dev/nullif 
# if [ $? -eq 0 ];then  
#       echo \'nvidia-smi check pass\' `date`
#    else  
#       echo \'nvidia-smi not exists\'   
#       exit 1
#  fi

        # 获取GPU Count
  get_gpu_list()
 {
        count=`nvidia-smi -L|wc -l` 
        echo $count
  }
        #获取GPU id对应uuid
get_uuid()
{
    uuid=`nvidia-smi -q -i $1|grep \'UUID\'|awk \'{print $4}\'`   echo $uuid
}
    #获取显存使用率 
get_memory_usage()
{
    usage=`nvidia-smi -q -d MEMORY -i $1|grep -E \'Total|Used\'|head -2|awk \'{print $3}\'|xargs echo|awk \'{print $2/$1}\'`   
    echo $usage
} 
   #获取内存详细信息
get_memory_detail()
{
    detail=`nvidia-smi -q -d MEMORY -i $1|grep -E \'Total|Used|Free\'|head -3|awk \'{print $3}\'|xargs echo`  
    echo $detail
} 
   #获取GPU使用率
 get_volatile_gpu(){

    vol=`nvidia-smi -q -d UTILIZATION -i $1 |grep -A 5 "GPU Utilization"|tail -1|awk \'{print $3}\'`  
    echo $vol
}
    #获取GPU Current 温度
 get_temperature()
{  
    temp=`nvidia-smi -q -d Temperature -i $1|grep \'GPU Current\'|awk \'{print $5}\'`  
    echo $temp
}
    #获取Pod_id
get_pod_id()
{
    echo `hostname`
} 
#数据output
    #output $1 $2 $3 $4 $5
    #$1 字段名 $2 pod_id $3 gpu编号 $4 uuid $5 监控值
output(){
    echo $1"{podid=\""$2"\",gpu=\""$3"\",uuid=\""$4"\"}" $5
}   
 #输出mem prometheus格式数据
    #dcgm_mem_usage{pod_id="localhost"}
mem_prm()
{ 
  for((i=0;i<`get_gpu_list`;i++)) 
    do      
    name="dcgm_mem_usage"     
    pod_id=`get_pod_id`      
    uuid=`get_uuid $i`     
    value=`get_memory_usage $i`      
    output $name $pod_id $i $uuid $value  
    done
}
  #输出mem detail prometheus格式数据#dcgm_mem_detail{pod_id="localhost"}
 mem_detail_prm()
    { 
    for((i=0;i<`get_gpu_list`;i++)) 
    do    
    pod_id=`get_pod_id`      
    uuid=`get_uuid $i`    
    value=`get_memory_detail $i`    
    output "dcgm_fb_total" $pod_id $i $uuid `echo $value|awk \'{print $1}\'`     
    output "dcgm_fb_used" $pod_id $i $uuid `echo $value|awk \'{print $2}\'`      
    output "dcgm_fb_free" $pod_id $i $uuid `echo $value|awk \'{print $3}\'`  
    done
    }
    #输出gpu prometheus格式数据
    #dcgm_gpu_utilization{...}
 gpu_prm()
    {
    for((i=0;i<`get_gpu_list`;i++)) 
    do       
    name="dcgm_gpu_utilization"       
    pod_id=`get_pod_id`      
    uuid=`get_uuid $i`     
    value=`get_volatile_gpu $i`     
    output $name $pod_id $i $uuid $value  
    done
    }
    #输出温度 prometheus格式数据
    #dcgm_temp{...}
 temp_prm()
    {  
    for((i=0;i<`get_gpu_list`;i++)) 
    do      
    name="dcgm_temp"   
    pod_id=`get_pod_id`      
    uuid=`get_uuid $i`   
    value=`get_temperature $i`   
    output $name $pod_id $i $uuid $value  
    done
    }
allinone()
    { 
    mem_prm  
    mem_detail_prm 
    gpu_prm  
    temp_prm
    }
    #快速获取
 fast()
    {  
    nvidia-smi -q > /tmp/1 
    num=0  
    count=0 
    uuid=\'\'  
    first=0   
    for i in `cat /tmp/1|grep -E \'Minor Number|UUID|GPU Current Temp|Gpu|Total|Used|Free\'|cut -d \':\' -f2|awk \'{print $1}\'`  
    do   
    if [ $num -eq 0 ];then      
    uuid=$i   
    elif [ $num -eq 1 ];then   
    count=$i    
    elif [ $num -eq 2 ];then  
    if [ $first -lt 13 ];then   
    echo \'# HELP dcgm_fb_total Framebuffer memory total (in MiB).\'          
    echo \'# TYPE dcgm_fb_total gauge\'        
    fi        
    output \'dcgm_fb_total\' ${HOSTNAME} $count $uuid $i   
    elif [ $num -eq 3 ];then        
    if [ $first -lt 13 ];then          
    echo \'# HELP dcgm_fb_used Framebuffer memory used (in MiB).\'          
    echo \'# TYPE dcgm_fb_used gauge\'      
    fi       
    output \'dcgm_fb_used\' ${HOSTNAME} $count $uuid $i  
    elif [ $num -eq 4 ];then     
    if [ $first -lt 13 ];then       
    echo \'# HELP dcgm_fb_free Framebuffer memory free (in MiB).\'          
    echo \'# TYPE dcgm_fb_free gauge\'       
    fi       
    output \'dcgm_fb_free\' ${HOSTNAME} $count $uuid $i  
    elif [ $num -eq 8 ];then     
    if [ $first -lt 13 ];then      
    echo \'# HELP dcgm_gpu_utilization GPU utilization (in %).\'      
    echo \'# TYPE dcgm_gpu_utilization gauge\'   
    fi        
    output \'dcgm_gpu_utilization\' ${HOSTNAME} $count $uuid $i   
    elif [ $num -eq 13 ];then     
    if [ $first -le 13 ];then       
    echo \'# HELP dcgm_gpu_temp GPU temperature (in C).\'          
    echo \'# TYPE dcgm_gpu_temp gauge\'        
    fi     
    output \'dcgm_gpu_temp\' ${HOSTNAME} $count $uuid $i 
    fi    
    if [ $num -eq 13 ];then     
    num=0    
    else        
    ((num++))    
    fi     
    ((first++)) 
    done
    }
    case 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2021-12-20
  • 2022-01-07
  • 2021-12-27
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2021-11-07
  • 2022-01-30
  • 2022-01-15
  • 2021-11-12
相关资源
相似解决方案