Bert镜像制作及flask生产环境模式启动
一天搞定两大技术点,成就满满。
一,dockerfile
- FROM harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter
- LABEL "maintainer"="xxx4k"
- LABEL "version"="1.0"
- #COPY numpy-1.17.4-cp36-none-linux_x86_64.whl /tmp/
- #COPY pyzmq-18.1.0-cp36-none-linux_x86_64.whl /tmp/
- #RUN pip install /tmp/numpy-1.17.4-cp36-none-linux_x86_64.whl \
- # && pip install /tmp/pyzmq-18.1.0-cp36-none-linux_x86_64.whl \
- RUN pip install --no-cache-dir \
- -i http://xxx.com.cn/root/pypi/+simple/ \
- --trusted-host xxx.com.cn \
- tensorflow==1.14.0 bert-base==0.0.9 flask flask_compress flask_cors flask_json \
- && rm -rf /tmp/* \
- && rm -rf ~/.cache/pip \
- && echo "finished"
二,修改Http.py
参考URL:
https://www.jianshu.com/p/beab4df088df
https://blog.csdn.net/jusang486/article/details/82382358
https://blog.csdn.net/AbeBetter/article/details/77652457
https://blog.csdn.net/anh3000/article/details/83047027
如果在flask里,使用app.run()的模式,输出总会提示:
- * Serving Flask app "bert_base.server.http" (lazy loading)
- * Environment: production
- WARNING: This is a development server. Do not use it in a production deployment.
- Use a production WSGI server instead.
- * Debug mode: off
- I1113 :: _internal.py:] * Running on http://0.0.0.0:8091/ (Press CTRL+C to quit)
那如何改进呢?
可以选用nginx或是tornado。
如果是代码模式下,tornador是首选。
- from multiprocessing import Process
- from tornado.wsgi import WSGIContainer
- from tornado.httpserver import HTTPServer
- from tornado.ioloop import IOLoop
- import asyncio
- from termcolor import colored
- from .helper import set_logger
- class BertHTTPProxy(Process):
- def __init__(self, args):
- super().__init__()
- self.args = args
- def create_flask_app(self):
- try:
- from flask import Flask, request
- from flask_compress import Compress
- from flask_cors import CORS
- from flask_json import FlaskJSON, as_json, JsonError
- from bert_base.client import ConcurrentBertClient
- except ImportError:
- raise ImportError('BertClient or Flask or its dependencies are not fully installed, '
- 'they are required for serving HTTP requests.'
- 'Please use "pip install -U bert-serving-server[http]" to install it.')
- # support up to 10 concurrent HTTP requests
- bc = ConcurrentBertClient(max_concurrency=self.args.http_max_connect,
- port=self.args.port, port_out=self.args.port_out,
- output_fmt='list', mode=self.args.mode)
- app = Flask(__name__)
- logger = set_logger(colored('PROXY', 'red'))
- @app.route('/status/server', methods=['GET'])
- @as_json
- def get_server_status():
- return bc.server_status
- @app.route('/status/client', methods=['GET'])
- @as_json
- def get_client_status():
- return bc.status
- @app.route('/encode', methods=['POST'])
- @as_json
- def encode_query():
- data = request.form if request.form else request.json
- try:
- logger.info('new request from %s' % request.remote_addr)
- print(data)
- return {'id': data['id'],
- 'result': bc.encode(data['texts'], is_tokenized=bool(
- data['is_tokenized']) if 'is_tokenized' in data else False)}
- except Exception as e:
- logger.error('error when handling HTTP request', exc_info=True)
- raise JsonError(description=str(e), type=str(type(e).__name__))
- CORS(app, origins=self.args.cors)
- FlaskJSON(app)
- Compress().init_app(app)
- return app
- def run(self):
- app = self.create_flask_app()
- # app.run(port=self.args.http_port, threaded=True, host='0.0.0.0')
- # tornado 5 中引入asyncio.set_event_loop即可
- asyncio.set_event_loop(asyncio.new_event_loop())
- http_server = HTTPServer(WSGIContainer(app))
- http_server.listen(self.args.http_port)
- IOLoop.instance().start()
三,启动命令
- bert-base-serving-start -bert_model_dir -http_port -port -port_out
Bert镜像制作及flask生产环境模式启动的更多相关文章
- flask生产环境部署
1.安装uwsgipip install uwsgi 2.创建ini配置文件vim uwsgi.ini内容如下:[uwsgi]# 配置启动的服务地址和iphttp=0.0.0.0:5001# 项目目录 ...
- Vue生产环境部署
前面的话 开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱.生产时,这些警告语句却没有用,反而会增加载荷量.再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的.本文将详细介绍Vue ...
- 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作
本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...
- 【openstack N版】——手把手教你制作生产环境镜像
一.CentOS7镜像制作 1.1创建CentOS7虚拟机 1.1.1创建虚拟磁盘 #注:尽量将虚拟机创建在控制节点,以便于将镜像上传至glance [root@linux-node1 ~]# qem ...
- 2020最新nginx+gunicorn+supervisor部署基于flask开发的项目的生产环境的详细攻略
本攻略基于ubuntu1804的版本,服务器用的华为云的服务器,python3(python2已经在2020彻底停止维护了,所以转到python3是必须的)欢迎加我的QQ6398903,或QQ群讨论相 ...
- 【原】Storm Local模式和生产环境中Topology运行配置
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...
- Centos6.3 下使用 Tomcat-6.0.43 非root用户 jsvc模式部署 生产环境 端口80 vsftp
一.安装JDK环境 方法一. 官方下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260 ...
- 生产环境该如何选择lvs的工作模式,和哪一种算法
lvs的工作模式有这几种: 1.RR : 轮叫算法,平均分配,你一个,我一个: 2.WRR :加权轮叫算法,谁的处理能力强,谁的权重就高: 3.LC :最少链接算法,谁的连接数最少,谁就处理更多的链接 ...
- 生产环境下Flask项目目录构建
接触Flask已经有大半年了,本篇博客主要来探讨如何规范化生产环境下Flask的项目目录结构.虽然目录结构见仁见智,个人有个人的看法和习惯,但总的来说,经过很多人的实践和总结,还是有很多共同的意见和想 ...
随机推荐
- How to: Use XPO Upcasting in XAF 如何:在 XAF 中使用 XPO 强制转换
In this topic, you will learn how to use the Upcasting feature of XPO in XAF. It is useful when you ...
- java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5
A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成 ...
- leaflet实现风场图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- NuGet修改默认包保存的位置
NuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages 修改方法: <?xml version="1.0" encodi ...
- 请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件
出现问题原因: 编译socket.dll时,用到了openssl库. 使用libeay32.lib.ssleay32.lib生成socket.dll,就会报这样的错误 解决办法: 使用libeay32 ...
- cobbler无人值守
一.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装, ...
- SERCOS总线程序相关
SERCOS程序就是围绕主机发送MDT电报,伺服在下一个周期发送AT电报作为应答这个原则来实现的,这个过程是由控制字等控制实现的,读程序的时候如果忽略这点,可能在想程序从哪里读数据,在哪里写数据呢.. ...
- Linux系统学习 十、DHCP服务器—介绍和原理
介绍: DHCP服务作用(动态主机配置协议) 为大量客户机自动分配地址.提供几种管理 减轻管理和维护成本.提高网络配置效率 可分配的地址信息主要包括: 网卡的IP地址.子网掩码 对应的网路地址.广播地 ...
- Java之线程安全
什么是线程安全? 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 什么是线程安全问题? ...
- CountDownLatch原理分析
CountDownLatch原理分析 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行.例如,应用程序的主线程希望在负责启动框架服务的线程已经启动 ...