【Docker】【深度学习算法】在Docker中使用gunicorn启动多个并行算法服务,优化算法服务:从单进程到并行化

文章目录

      • 优化算法服务:从单进程到并行化
        • 单个服务架构
        • 多并行服务架构
        • Docker化并指定并行服务数量
  • 扩展知识

优化算法服务:从单进程到并行化

在实际应用中,单个算法服务的并发能力可能无法满足需求。为了提高性能和并发处理能力,我们可以使用Gunicorn和Docker来实现算法服务的并行化部署。

单个服务架构

首先,让我们来看看单个服务的架构:

from fastapi import FastAPIapp = FastAPI()alg_model = xxxx()  # Initialize your algorithm model@app.post("/alginfer")
def alginfer(xxxx):# Perform inference using alg_modelresult = alg_model.predict(xxxx)return result

在这个架构下,服务拓扑图如下:

单个服务拓扑图

多并行服务架构

为了提高服务并发能力,我们可以使用Gunicorn来启动多个并行的算法服务。以下是如何使用Gunicorn进行多并行服务的部署:

pip install gunicorn 
gunicorn -w 2 -b 0.0.0.0:7860 -k uvicorn.workers.UvicornWorker sdxl_app:app

在这个架构下,服务拓扑图变为:

多个并行服务拓扑图

Docker化并指定并行服务数量

通过Docker容器化算法服务,并通过环境变量来指定并行服务的数量,可以进一步简化部署和管理。以下是实现这一目标的步骤:

首先,创建一个gunicorn_config.py文件:

import osbind = '0.0.0.0:7860'  # Listen address and port
workers = int(os.environ.get('GUNICORN_WORKERS', '1'))  # Number of workers
worker_class = 'uvicorn.workers.UvicornWorker'  # Worker type

然后,编写Dockerfile:

FROM kevinchina/xxxx:xxxx
EXPOSE 7860
ENTRYPOINT gunicorn -c /workspace/gunicorn_config.py sdxl_app:app

最后,通过docker run命令启动容器,并指定环境变量来设置并行服务的数量:

docker run -e GUNICORN_WORKERS=2 -p 7860:7860 -d --gpus all kevinchina/xxxx:tttt

通过这些优化,我们可以轻松地实现算法服务的并行化部署,提高系统的性能和可伸缩性。

扩展知识

当你使用 Gunicorn 启动服务时,-k 参数用于指定使用的 worker 类型。不同的 worker 类型适用于不同的场景和需求。以下是一些常见的 worker 类型以及它们的用途:

  • sync:同步 worker,每个请求都会在一个独立的线程或进程中处理。适用于开发环境或者对并发要求不高的场景。
  • eventlet:基于事件驱动的并发库,可以实现高并发。适用于 I/O 密集型的应用程序。
  • gevent:基于 libev 的并发库,也是事件驱动的。与 eventlet 类似,适用于 I/O 密集型的应用程序。
  • uvicorn.workers.UvicornWorker:使用 Uvicorn worker,适用于 ASGI 应用程序。

你可以根据你的应用程序类型和需求选择合适的 worker 类型。例如,如果你的应用程序是基于 ASGI 的,你可以使用 Uvicorn worker。以下是一个使用 -k 参数指定 worker 类型的示例:

gunicorn -w 4 -b 0.0.0.0:7860 -k uvicorn.workers.UvicornWorker sdxl_app:app

在这个示例中:

  • -w 4 指定了 4 个 worker 进程。
  • -b 0.0.0.0:7860 指定了绑定的主机和端口。
  • -k uvicorn.workers.UvicornWorker 指定了使用 Uvicorn worker。

根据你的实际情况选择适合的 worker 类型,并根据需要调整其他参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249024.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.31学习总结

1.31 1.线段树 2.Bad Hair Day S(单调栈) 3.01迷宫(BFS连通块问题剪枝)(连通性问题的并查集解法) 4.健康的荷斯坦奶牛 Healthy Holsteins(DFS) 线段树与树状数组 线段树和树状数组的功能相似,但…

政安晨的机器学习笔记——跟着演练快速理解TensorFlow(适合新手入门)

准备工作 本笔记是假设您已经安装了Windows系统或Ubuntu系统的Anaconda(或 Miniconda)、Jupyter Notebook、TensorFLow,稍微了解Python语言,并可以进行一点点操作的基础上进行的。 如果您还不具备这个条件,去…

java 图书管理系统 spring boot项目

java 图书管理系统ssm框架 spring boot项目 功能有管理员模块:图书管理,读者管理,借阅管理,登录,修改密码 读者端:可查看图书信息,借阅记录,登录,修改密码 技术&#…

基于OpenCV的高压电力检测项目案例

一、项目背景与目标 随着高压电力设施的日益增多,传统的巡检方式已无法满足现代电力系统的需求。为此,我们决定利用计算机视觉技术,特别是OpenCV库,开发一个高压电力检测系统。目标是实现自动化、高精度的电力设备检测&#xff0c…

C#常见内存泄漏

背景 在开发中由于对语言特性不了解或经验不足或疏忽,往往会造成一些低级bug。而内存泄漏就是最常见的一个,这个问题在测试过程中,因为操作频次低,而不能完全被暴露出来;而在正式使用时,由于使用次数增加&…

AI学习(4): PyTorch实战-手写数字识别

1.介绍 在之前的文章中介绍了PyTorch的环境安装,和张量(tensor)的基本使用,为防止陷入枯燥的理论学习中,在这篇文章,我们将进行项目实战学习,项目主要内容: 基于MNIST数据集,实现一个手写数字识别的神经网…

jdk17新特性—— 密封类(Sealed Classes)

目录 一、密封类(Sealed Classes)的概述1.1、概述1.2、特性1.3、注意事项 二、密封类(Sealed Classes)代码示例2.1、密封类(Sealed Classes)代码结构示例2.2、密封类(Sealed Classes)代码示例 三、密封类(Sealed Classes)接口代码示例3.1、密封类(Sealed Classes)接口代码结构示…

浙大团队撰写75页科学语言大模型综述,全面梳理Sci-LLMs最新研究进展

大型语言模型(LLMs)已成为推动自然语言理解能力变革的关键力量,标志着人工智能通用性方面的重大突破。LLMs 的应用已超越传统自然语言的范畴,覆盖了各类科学学科中开发的专用科学语言系统,从而推动了科学语言大模型&am…

嵌入式学习第十四天

1.结构体(2): (1)结构体类型定义 (2)结构体变量的定义 (3)结构体元素的访问 (4)结构体的存储: 内存对齐: char 按照1字节对齐 …

Coppeliasim倒立摆demo

首先需要将使用Python远程控制的文件导入到文件夹,核心是深蓝色的三个文件。 本版本为4.70,其文件所在位置如下图所示,需要注意的是,目前不支持Ubuntu22的远程api: 双击Sphere这一行的灰色文件,可以看到远程…

【Redis】理论基础 - 概览

文章目录 1. 定义2. 主要特性1)内存存储2)数据结构多样性3)持久化4)主从复制5)事务支持 3. 使用场景1)缓存2)消息队列3)实时统计与计数4)分布式锁 总结 Redis&#xff08…

探索设计模式的魅力:精准解读桥接模式-用桥接模式构建可扩展的软件系统

设计模式专栏:http://t.csdnimg.cn/nolNS 目录 一、了解桥接模式:探索抽象和实现的分离 1.1 开-闭原则 1.2 组合/聚合复用原则 1.3 定义 1.4 用意 1.5 基本思想 1.6 组成部分 1.7 桥梁模式的示意性系统的结构图 二、桥接模式的优势&#xff1a…

android远程投屏应用

客户端app地址:https://gitee.com/youzilzk/blue1.git 服务端地址:https://gitee.com/youzilzk/blue-server1.git 一。服务端部署 1.安装postgres 2.导入项目下blue.sql文件 3.修改配置application.properties和config.properties,其中applic…

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…

Mac删除自带的ABC输入法,简单快捷

一、下载PlistEdit Pro软件 二、终端执行 sudo open ~/Library/Preferences/com.apple.HIToolbox.plist 三、其中有一个数字下面的KeyboardLayout Name的value为“ABC”,这就是ABC输入法,点击上面的Delete按钮,删除整项ABC内容&#xff0c…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

01、全文检索 ------ 反向索引库 与 Lucene 的介绍

目录 全文检索 ------ 反向索引库 与 LuceneSQL模糊查询的问题反向索引库反向索引库的查询 Lucene(全文检索技术)Lucene能做什么Lucene存在的问题Solr 和 Elasticsearch 与 Lucene 的关系 全文检索 ------ 反向索引库 与 Lucene MySQL一些索引词汇解释 …

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷9

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

【算法】Partitioning the Array(数论)

题目 Allen has an array a1,a2,…,an. For every positive integer k that is a divisor of n, Allen does the following: He partitions the array into n/k disjoint subarrays of length k. In other words, he partitions the array into the following subarrays: [a1,…