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的项目目录结构.虽然目录结构见仁见智,个人有个人的看法和习惯,但总的来说,经过很多人的实践和总结,还是有很多共同的意见和想 ...
随机推荐
- redis系列之------链表
前言 链表提供了高效的节点重排能力, 以及顺序性的节点访问方式, 并且可以通过增删节点来灵活地调整链表的长度. 作为一种常用数据结构, 链表内置在很多高级的编程语言里面, 因为 Redis 使用的 C ...
- C#调试程序——断点+几种观察数据的方法
目录 C#调试程序--断点+观察数据的方法 1.写本文的背景 2.调试与测试 3.断点调试 3.1 F10 3.2 F11 3.3 SHIFT+F11 4.监视 4.1 按照1方法打断点,单步调试. ...
- GitLab-使用SSH的方式拉取和推送项目
场景 Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- C# 程序一个cmd命令窗口执行多条dos命令
1,前几天的项目要用到程序执行dos命令去编译已生成的ice文件,后来去百度了好多都是只能执行一条命令 或者是分别执行几条命令,而我要的是一条dos命令在另一台命令的基础上执行.而不是分别执行. 后来 ...
- SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符? 如下检验批号 890000045939, 结果录入界面,第二个特性里,取样数量是50个.实际上,该检验批对应的检验计划里, 采样过程L- ...
- Where is the kernel documentation?; Ubuntu 上如何安装 linux 内核文档;fedora 上如何安装linux内核文档?
有时候,linux内核文档对我们很重要,我们可以在linux系统中安装,并及时查看: 参考链接:https://askubuntu.com/questions/841043/where-is-the- ...
- centos和Ubuntu系统最小化安装基础命令
CentOS系统常用的基础软件如下 yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre \ pcre-devel openssl o ...
- 小程序--log居中 失焦获取表单中的值
value="{{username}}" 绑定值 值在js文件的data中 pa==>Vant-Weap中表单中的值,不是双向绑定的. 你获取值后, 值并没有在对用的data ...
- TopCoder12808 「SRM594Medium」FoxAndGo3 二分图最大独立集
问题描述 一个 \(N \times N\) 围棋棋盘,任意两个白子不相邻,你要加入若干个黑子并提出白子,最大化空格数目. submit 题解 显然最终棋盘的局面不能够一个白子和它周围的空格都是空的, ...
- Navicat Premium连接mongodb基本使用和介绍
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具, 它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL,mongodb ...