深度学习多进程GPU部署(二)- 深度学习部署

简介: 深度学习多进程GPU部署(二)- 深度学习部署

根据环境情况,实现深度学习算法应用分布式多进程,可以分为:


裸机部署

docker环境

kubernetes部署

下面针对使用多台裸机使用分布式的场景提供指导,总体而言,


强烈推荐使用 docker 环境部署使用分布式训练


当机器数量多于 5 台且长期使用时,建议使用 Kubernetes 部署 或其他类似集群管理工具使用


Fast API部署


Fast API 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。


使用FastAPI接口,如果想调用这个接口,启动接口,需要安装一个ASGI服务器,生产环境下可以使用Uvicorn或者Hypercorn


WSGI与ASGI


wsgi和ASGI都是web服务器网关接口,是一套Web Server与APP之间的接口标准协议/规范,确保不同Web服务器可以和不同的Python程序之间相互通信。


ASGI在WSGI的基础上实现了异步服务器网关接口

可以说ASGI就是WSGI的加强版


对于不同的生产环境框架,在实际生产环境中,Flask更适合app,Gunicorn/uswgi适合wsgi,Uvicorn 、Daphne 、Hypercorn 更适合asgi


安装


安装fastapi和Uvicorn


pip install fastapi
pip install "uvicorn[standard]"

fast_api接口实例


from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


启动接口服务


uvicorn main:app --reload


  • main:main.py 文件(一个 Python “模块”)。
  • app:在 main.py 文件中通过 app = FastAPI(),创建的对象。
  • –reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。

uvicorn 常用参数


参数 作用
app 运行py文件
host 访问的url
port 访问端口
reload 热更新,有内容修改自动重启服务器
debug 同reload
reload_dirs
log_level 设置日志级别


fast_api提供交互式API文档,访问 http://127.0.0.1:8000/docs


在这里可以输入传入到接口的参数,然后点进execute执行,就会得到对应的curl命令。

2f88a07eabba494d8bdfeae79549f45d.png


fast_api实现线性模型


api.py


import uvicorn as uvicorn
from fastapi import FastAPI
import joblib
from linear import LS
from os.path import dirname, join, realpath
app = FastAPI(title="Iris Prediction Model API",
              description="A simple API that use LogisticRegression model to predict the Iris species",
              version="0.1",)  # 必须实例化该类,启动的时候调用
# 请求根目录
@app.get('/')
def index():
    return {'message': 'iris线性模型!'}
def data_clean(str):
    arr = str.split(',')
    arr = list(map(float,arr))
    return arr
# get请求带参数数据
@app.get('/predict')
def predict(request):
  LS()
    print(dirname(realpath(__file__)))
    with open(join(dirname(realpath(__file__)),'irisclassifier.pkl'),"rb") as f:
        model = joblib.load(f)
    request = data_clean(request)
    prediction = model.predict([request])
    output = int(prediction[0])
    probas = model.predict_proba([request])
    output_probability = "{:.2f}".format(float(probas[:, output]))
    # output dictionary
    species = {0: "Setosa", 1: "Versicolour", 2: "Virginica"}
    # show results
    result = {"prediction": species[output], "Probability": output_probability}
    return result
if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)


linear.py


from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
import joblib
from sklearn import datasets
def LS():
    iris = datasets.load_iris()
    x = iris.data
    y = iris.target
    print('___')
    clf = LogisticRegression()
    p = Pipeline([('clf',clf)])
    print('training model...')
    p.fit(x,y)
    print('model trained')
    model_pkl = 'irisclassifier.pkl'
    print('Saving model in %s'%model_pkl)
    joblib.dump(p,model_pkl)
    print('model saved!')


uvicorn启动接口服务的方法:


uvicorn 像是一个流管理器,专门用来处理python线程的


python启动


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)


Uvicorn命令启动


uvicorn api:app --port 5000 --host 0.0.0.0
• 1


这里的api就是启动程序的代码py文件名


Gunicorn启动


Gunicorn 是成熟的,功能齐全的服务器,Uvicorn 内部包含有 Guicorn 的 workers 类,允许你运行 ASGI 应用程序,这些 workers 继承了所有 Uvicorn 高性能的特点,并且给你使用 Guicorn 来进行进程管理。


这样的话,你可能动态增加或减少进程数量,平滑地重启工作进程,或者升级服务器而无需停机。

在生产环境中,Guicorn 大概是最简单的方式来管理 Uvicorn 了,生产环境部署我们推荐使用 Guicorn 和 Uvicorn 的 worker 类:


gunicorn example:app -w 4 -k uvicorn.workers.UvicornWorker
• 1


具体fast 和uvicorn使用可以参考文档:


uvicorn:https://www.uvicorn.org/

fastapi:https://fastapi.tiangolo.com/zh/


fast_api实现Yolov5模型


要想使用GPU,那就只能用深度学习模型才能使用,这里用yolov5模型,使用预训练模型torch.load(),来做个实例

翻阅资料pytorch官网只有多GPU训练的部分,没有介绍有类似模型推理部署api,多GPU并行的

yolov5预训练模型,使用实例代码如下:


import torch
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# Images
imgs = ['https://ultralytics.com/images/zidane.jpg']  # batch of images
# Inference
results = model(imgs)
# Results
results.print()
results.save()  # or .show()
results.xyxy[0]  # img1 predictions (tensor)
results.pandas().xyxy[0]  # img1 predictions (pandas)
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

fast_api部署代码

yolov5_api.py


import torch
import uvicorn as uvicorn
from typing import Union
from fastapi import FastAPI
app =FastAPI(title="Yolov5 Model API",
             description="A simple API that use Yolov5 model to predict the image species",
             version="0.1")
def yolov5_model():
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='yolov5/yolov5s6.pt')
    model.conf = 0.6  # confidence threshold (0-1)
    model.iou = 0.2  # NMS IoU threshold (0-1)
    device_ids = [0,1,2,3]
    #Parallel
    model = torch.nn.DataParallel(model,device_ids=device_ids)
    model = model.cuda(device=device_ids[0])
    return model
# 请求根目录
@app.get('/')
def index():
    return {'message': 'yolov5 model!'}
# get请求带参数数据
@app.get('/items/{item_id}')
def predict(item_id:str,q:Union[str, None] = None):
    img = q
    print(img)
    # Inference
    model = yolov5_model()
    results = model(img, size=1920, augment=True)
    # Results
    results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
    results.show()
    print(results.xywhn)
    print(results.xyxy)
    print(results.pandas().xyxy[0].to_json(orient="records"))
    result = {"prediction": results.pandas().xyxy[0].to_json(orient="records")}
    return result
if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
2月前
|
机器学习/深度学习 测试技术 PyTorch
深度学习之测量GPU性能的方式
在深度学习中,测量GPU性能是一个多方面的任务,涉及运行时间、吞吐量、GPU利用率、内存使用情况、计算能力、端到端性能测试、显存带宽、框架自带性能工具和基准测试工具等多种方法。通过综合使用这些方法,可以全面评估和优化GPU的性能,提升深度学习任务的效率和效果。
230 2
|
3月前
|
机器学习/深度学习 并行计算 PyTorch
如何搭建深度学习的多 GPU 服务器
如何搭建深度学习的多 GPU 服务器
123 5
如何搭建深度学习的多 GPU 服务器
|
3月前
|
机器学习/深度学习 边缘计算 PyTorch
PyTorch 与边缘计算:将深度学习模型部署到嵌入式设备
【8月更文第29天】随着物联网技术的发展,越来越多的数据处理任务开始在边缘设备上执行,以减少网络延迟、降低带宽成本并提高隐私保护水平。PyTorch 是一个广泛使用的深度学习框架,它不仅支持高效的模型训练,还提供了多种工具帮助开发者将模型部署到边缘设备。本文将探讨如何将PyTorch模型高效地部署到嵌入式设备上,并通过一个具体的示例来展示整个流程。
523 1
|
3月前
|
机器学习/深度学习 人工智能 调度
显著提升深度学习 GPU 利用率,阿里云拿下国际网络顶会优胜奖!
显著提升深度学习 GPU 利用率,阿里云拿下国际网络顶会优胜奖!
261 7
|
3月前
|
持续交付 测试技术 jenkins
JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
62 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
什么是深度学习模型?如何部署它?
【8月更文挑战第23天】
147 0
|
3月前
|
机器学习/深度学习 存储 物联网
深度学习模型的优化与部署
【8月更文第18天】随着深度学习技术的发展,模型规模变得越来越大,这对计算资源的要求也越来越高。为了能够在资源有限的边缘设备(如智能手机、物联网设备)上运行复杂的深度学习模型,我们需要采用一系列优化方法来减少模型大小和计算复杂度。本文将介绍几种常用的模型优化技术,并讨论如何在边缘设备或云端服务器上部署这些优化后的模型。
131 0
|
4月前
|
人工智能 Serverless 异构计算
[AI Cog] 想要运营AI业务,但没有GPU?环境搞不定?使用Cog帮您轻松将业务部署上云
[AI Cog] 想要运营AI业务,但没有GPU?环境搞不定?使用Cog帮您轻松将业务部署上云
|
4月前
|
机器学习/深度学习 物联网 TensorFlow
使用Python实现深度学习模型:在嵌入式设备上的部署
【7月更文挑战第11天】 使用Python实现深度学习模型:在嵌入式设备上的部署
531 2
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能

热门文章

最新文章