flask获取硬件资源信息

1.获取gpu信息
[root@ks-devops python]# cat gpu_info.py 
import pynvml
UNIT = 1024 * 1024


def GpuInfo():
    pynvml.nvmlInit() #初始化
    gpuDeriveInfo = pynvml.nvmlSystemGetDriverVersion()
    print("Drive: ", str(gpuDeriveInfo, encoding='utf-8')) #显示驱动信息


    gpuDeviceCount = pynvml.nvmlDeviceGetCount()#获取Nvidia GPU块数
    print("GPU", gpuDeviceCount )

    gpu_list = []
    for i in range(gpuDeviceCount):

        handle = pynvml.nvmlDeviceGetHandleByIndex(i)#获取GPU i的handle,后续通过handle来处理
        gpuName = str(pynvml.nvmlDeviceGetName(handle), encoding='utf-8')

        memoryInfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
        print("GPU", i, ":", gpuName, memoryInfo.total/UNIT,"MB")
        gpu_list.append(str(i)+":"+gpuName+" "+str(memoryInfo.total/UNIT)+"MB")
    return gpu_list



if __name__ == "__main__":
    gpu_info = GpuInfo()
    pynvml.nvmlShutdown()
    #print(gpu_devices)

 

2.硬件序列号设定(自定义的,随机大小写字母+时间)
[root@ks-devops python]# cat sn_code.py 
import string
import random
import time
def sncode():
    # Randomly choose a letter from all the ascii_letters
    str = ""
    for num in range(9):
        randomLetter = random.choice(string.ascii_letters)
        str += randomLetter
        #print(randomLetter,end="")
        
    now =  time.localtime()
    now_time = time.strftime("%Y%m%d%H%M%S", now)
    #print(now_time)
    print(str+now_time)
    return str+now_time
#sncode()

if __name__ == '__main__':
    #sncode()
    pass

 

3.flask框架接口定义
[root@ks-devops python]# cat app.py 
from flask import Flask,jsonify
from gpu_info import GpuInfo
from sn_code import sncode
app = Flask(__name__)

@app.route('/gpuinfo')
def gpu_info():
    gi = jsonify("gpuinfo",GpuInfo())
    return gi

@app.route('/sncode')
def sn_code():
    sn = jsonify("sn",sncode())
    return sn

@app.route('/health')
def status():
    return "ok"

@app.route('/')
def index():
    return "test lipc"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
    

 

4.制作python底层镜像
(1)下载centos:7基础镜像
docker pull centos:72)运行临时容器
docker run -it --rm --name python-test centos:73)安装python环境和flask库
yum -y install python3
python3 -m pip install --upgrade --force pip
pip3 install sanic
pip3 install flask
pip3 install pynvml
yum clean all
(4)将容器打包成镜像
#查看容器id
docker ps |grep python-test   
#将容器打包成镜像
docker commit f185eb722b13  172.16.4.17:8888/base/centos-py3:v1

5.制作python运行镜像
#当前目录下的文件
[root@ks-devops python]# ls
app.py    Dockerfile  gpu_info.py   py_base_images.sh  sn_code.py  start.sh1)编写dockerfile
[root@ks-devops python]# cat Dockerfile 
FROM 172.16.4.17:8090/base/centos-py3:v2
WORKDIR /data
RUN virtualenv venv
RUN source ./venv/bin/activate
COPY . /data/venv
HEALTHCHECK --interval=5s --timeout=3s  --retries=3 \
    CMD curl -fs http://127.0.0.1:5000/health || exit 1
ENTRYPOINT ["sh","/data/venv/start.sh"] 

(2)制作镜像
docker build . -t 172.16.4.17:8888/test/up-lipc:v1.13)运行容器
docker run -itd --name flask-test --network host --gpus all  172.16.4.17:8888/test/up-lipc:v1.14)查看容器运行状态
docker ps

 

6.访问测试

 

 

 

posted @ 2022-10-02 10:37  Leonardo-li  阅读(119)  评论(0编辑  收藏  举报