Savior
save your time.
只在Ubuntu18.04下完成全部测试,其他平台暂时未测试。
目前项目还处于早期开发阶段,如有任何问题,欢迎添加微信nsnovio,备注部署,进群交流。
背景
savior
是一个能够进行快速集成算法模块并支持高性能部署的轻量开发框架。能够帮助将团队进行快速想法验证(PoC),避免重复的去github上找模型然后复现模型;能够帮助团队将功能进行流程拆解,很方便的提高分布式执行效率;能够有效减少代码冗余,减少不必要负担。
workflow的已经做好的轮子很多,例如perfect、 polyaxon、 dagster等。 之所以开发一个新的,主要原因是那些框架都太heavy了,对于大部分用户来说没法直接白嫖。
这个项目的核心目的就是能够减少大家的重复性开发,能够把绝大部分能够直接白嫖的东西放在框架里面,然后大家专注于自己的业务属性上,提升大家的工作效率。
特性
- 弹性伸缩:用户可以根据目前的请求量,自定义配置机器数。方便项目上量,并且保证服务器资源吃满(支持K8S)。
- 流程DAG:用户通过自定义自己的流程,框架支持DAG,保证流程的最高的并行度。
- 容灾能力强:集群中所有节点都是相同作用,不会因为部分节点挂掉而服务崩溃。
- 可扩展性强:框架主要是实现了一种设计模式,开发者只需要按照当前设计模式,扩展性无上限。
- 部署便捷:部署到上线不会超过5分钟(不考虑网速)。
依赖的第三方组件
-
rabbitmq:用于celery进行分布式的任务分发
-
triton:用于gpu端的模型服务的集中部署
-
milvus:用于特征向量搜索,存储【推荐有搜索需求的用户自行配置】
如果觉得milvus太大,用户可以根据自己的自身情况直接使用faiss或者nmslib。并且自己实现对应helper。
框架中已集成的算法
更多开源模型欢迎在issue中补充,也十分欢迎您的PR。
人脸相关
- UltraFaceDetect 人脸检测
- RetinaFaceDetect 人脸检测
- FaceParsing 人脸语义分区
- Landmark2D 人脸landmark检测
- FaceEmbedding 人脸特征向量提取
- SilentFaceAntiSpoofing 静默人脸活体检测
OCR相关
图像搜索
通用
- NRIQA
官方已适配模型下载地址(不定时更新):
- 百度网盘 密码: sg11
根据自己的需要下载模型,不用全部下载。
简单使用教程
- 克隆项目
git clone https://github.com/novioleo/Savior.git
到本地。或者下载release下面的source包。 - 启动rabbitmq,推荐使用docker启动:
docker run --restart=always -d --hostname celery-broker --name celery-broker -p5672:5672 -p15672:15672 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:3-management
- 启动triton,推荐使用docker(需要安装nvidia-docker)启动:
docker run --gpus=all --name=triton-server -p8000:8000 -p8001:8001 -v/path/to/your/model/repo/path:/models nvcr.io/nvidia/tritonserver:20.12-py3 tritonserver --model-repository=/models
,其中/path/to/your/model/repo/path
是网盘中triton文件夹下载的所在文件夹。 - 修改项目配置,进入Savior文件夹中,进入Deployment包中,复制
server_config.py.template
并重命名为server_config.py
,修改里面triton、rabbitmq的配置。 - 配置python与安装依赖,通过控制台进入Savior文件夹中,创建环境:
conda create -n SaviorEnv python=3.8
,激活环境source activate SaviorEnv
,安装依赖:python -m pip install nvidia-pyindex==1.0.6 && python -m pip install -r requirements.txt
- 启动ConsumerWorker,通过控制台进入Savior文件夹中,启动worker:
celery -A Deployment.ConsumerWorker worker --loglevel=INFO
,如果一切配置正确会显示已经成功加载Task。 - 启动DispatchServer,通过控制台进入Savior文件夹中,启动server:
python Deployment/DispathServer.py
,启动成功会看到端口信息等。 - 测试接口服务,推荐使用apifox进行接口调用测试,可以通过post请求测试
ocr_interface/general_ocr
接口,传入参数image_url
,发送请求(第一次运行需要等待,模型需要预热,五次之后基本上时间会稳定),会得到一个OSS的路径,如果OSS使用的是Dummy(默认),则找到/tmp/DummyOSS-temp-directory/{bucket_name}/{path}
对应的文件。
接口结果预览
OCR相关
如何在自有项目下开发?
移步至:DevelopTutorial
感谢
感谢各位开源项目大佬的无私奉献。