本文档旨在帮助读者快速了解Savior,并且跑通demo。
-
操作系统:Ubuntu 16、18、20 均可(不支持Windows,WSL)
其他Debian系的操作系统也可以,但是操作会跟ubuntu有所差异,请自行调整。
CentOS也是一样的道理,需要根据系统实际情况进行配置。
-
Nvidia驱动:455及以上
-
Docker:19.03及以上
为了保证拉取一些镜像的时候的速度,可以使用阿里云的docker加速:阿里云docker镜像加速器配置
安装Nvidia Docker之前事先需要确认当前主机的驱动是否正常。打开控制台输入nvidia-smi
。如果能看到
证明当前设备的的显卡驱动已经正确。
根据nvidia-docker toolkit安装nvidia-docker并根据教程调出容器内的nvidia-smi
的界面。
如果有可用rabbitmq,获得用户名和密码。
如果本地环境没有rabbitmq,可以使用docker快速搭建一个自有的rabbitmq服务:
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
这里启动的简易的rabbitmq的实例,其中用户名为guest,密码为guest。
如果启动成功可以通过访问页面:http://localhost:15672看到如下界面:
进入rabbitmq的登录页面输入用户名和密码,点击登录,看到如下类似界面:
说明rabbitmq已经成功启动并且账号密码无误。
-
创建文件夹TritonModelRepo
-
前往百度云(密码:sg11),进入
部署框架/triton
目录下,下载DB_res18,CRNN_res34,TextOrientationClassification三个文件夹到TritonModelRepo中。 -
通过Docker启动Triton:
docker run --gpus=all --rm -p8000:8000 -p8001:8001 -v/TritonModelRepo的全路径:/models --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tritonserver:21.03-py3 tritonserver --model-repository=/models
可以前往Triton Relase下载最新的source包,然后通过
build.py
构建自己的Triton Server,并配置对应的模型的文件夹地址。
为了验证Triton已经部署成功,可以直接通过运行算子检验目前配置好的Triton是否正确加载模型。
-
git clone https://github.com/novioleo/Savior.git
-
进入到Savior文件夹中,使用conda创建环境
conda create -n SaviorEnv python=3.8
(不推荐使用virtualenv),激活环境source activate SaviorEnv
-
安装tritonclient依赖
python -m pip install tritonclient==2.8.0 -i https://pypi.ngc.nvidia.com --trusted-host pypi.ngc.nvidia.com
,安装剩余依赖python -m pip install --progress-bar on -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
。 -
测试文本检测模型
python ./Operators/ExampleTextDetectOperator/TextDetectOperator.py -i ./TestImages/TextDetectImage.png -u triton的地址 -p triton的端口
如果一切正常则会得到文本的检测结果。
-
测试文本识别模型
python ./Operators/ExampleTextRecognizeOperator/TextRecognizeOperator.py -i ./TestImages/ExtractedTextImage.png -u triton的地址 -p triton的端口
如果一切正常则会得到文本识别的结果
{"probability": [0.9982603, 0.9938134, 0.99923086, 0.999629, 0.9930923, 0.99371284, 0.95337, 0.9981487, 0.9937138], "text": "口田日MWOIUn"}
-
测试文本方向识别模型
python ./Operators/ExampleTextOrientationClassificationOperator/TextOrientationClassificationOperator.py -i ./TestImages/ExtractedFlippedTextImage.png -u triton的地址 -p triton的端口
如果一切正常则会得到文本方向识别结果
{"orientation": <TextImageOrientation.ORIENTATION_180: 2>}
为了运行一个满足本地各种组件的一个服务,需要进行相关配置。
-
进入Savior的development文件夹
-
复制文件server_config.py.template到server_config.py
-
进入server_config.py中,找到
AVAILABLE_INTERFACES
变量和AVAILABLE_SERVICES
,改为:AVAILABLE_INTERFACES = [ #('Deployment.DispatchInterfaces.DummyInterface', '/dummy_interface'), ('Deployment.DispatchInterfaces.OCRRelatedInterface', '/ocr_interface'), ] AVAILABLE_SERVICES = [ 'Deployment.ConsumerServices.GeneralService', 'Deployment.ConsumerServices.OCRService', # 'Deployment.ConsumerServices.DummyService', ]
找到rabbitmq配置相关,根据上面配置的rabbitmq进行对应的配置:
if IS_TEST: WORKER_RABBITMQ_USERNAME = 'guest' WORKER_RABBITMQ_PASSWORD = 'guest' WORKER_RABBITMQ_HOST = 'localhost' WORKER_RABBITMQ_PORT = '5672' WORKER_RABBITMQ_VHOST = '/' else: WORKER_RABBITMQ_USERNAME = 'guest' WORKER_RABBITMQ_PASSWORD = 'guest' WORKER_RABBITMQ_HOST = 'localhost' WORKER_RABBITMQ_PORT = '5672' WORKER_RABBITMQ_VHOST = '/'
找到triton配置相关,根据上面配置的triton进行对应的配置:
OCR_TRITON_URL = 'localhost' OCR_TRITON_PORT = 8001
-
启动Celery worker,启动控制台并进入Savior文件夹,执行
celery -A Deployment.ConsumerWorker worker --loglevel=INFO
启动成功会得到以下页面:
-
启动web服务器,启动控制台并进行Savior文件夹,执行
python Deployment/DispatchServer.py
启动成功会得到以下页面:
为了更加方便进行后续测试,推荐使用apifox进行api测试。
创建一个接口地址为/ocr_interface/general_ocr
,请求类型为POST
,请求Body类型为application/x-www-form-urlencoded
,Body中含有一个必填字段的image_url
。
创建成功后如下图所示:
点击运行进行接口测试(需要自行配置环境),并将image_url
填为:http://www.chaoda.com/upload/201907/1563411797188792.jpg ,运行接口(如果前几次需要多等待下,triton需要预热,后面就正常速度),得到如下json:
{
"bucket_name": "result",
"path": "20210413/355bf5c6265a495aa441e17da22869c5.webp",
"url": "/tmp/DummyOSS-temp-directory/result/20210413/355bf5c6265a495aa441e17da22869c5.webp",
"dag": {
... 暂时不用管的一堆东西...
}
}
其中url为生成图像的路径。如下:
至此,恭喜将demo顺利打通。可以自行测试当前接口,也可以参考其他文档,进行更丰富的测试。