一天搞定两大技术点,成就满满。

一,dockerfile

  1. FROM harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter
  2.  
  3. LABEL "maintainer"="xxx4k"
  4. LABEL "version"="1.0"
  5.  
  6. #COPY numpy-1.17.4-cp36-none-linux_x86_64.whl /tmp/
  7. #COPY pyzmq-18.1.0-cp36-none-linux_x86_64.whl /tmp/
  8.  
  9. #RUN pip install /tmp/numpy-1.17.4-cp36-none-linux_x86_64.whl \
  10. # && pip install /tmp/pyzmq-18.1.0-cp36-none-linux_x86_64.whl \
  11. RUN pip install --no-cache-dir \
  12. -i http://xxx.com.cn/root/pypi/+simple/ \
  13. --trusted-host xxx.com.cn \
  14. tensorflow==1.14.0 bert-base==0.0.9 flask flask_compress flask_cors flask_json \
  15. && rm -rf /tmp/* \
  16. && rm -rf ~/.cache/pip \
  17. && 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()的模式,输出总会提示:

  1. * Serving Flask app "bert_base.server.http" (lazy loading)
  2. * Environment: production
  3. WARNING: This is a development server. Do not use it in a production deployment.
  4. Use a production WSGI server instead.
  5. * Debug mode: off
  6. I1113 :: _internal.py:] * Running on http://0.0.0.0:8091/ (Press CTRL+C to quit)

那如何改进呢?
可以选用nginx或是tornado。
如果是代码模式下,tornador是首选。

  1. from multiprocessing import Process
  2. from tornado.wsgi import WSGIContainer
  3. from tornado.httpserver import HTTPServer
  4. from tornado.ioloop import IOLoop
  5. import asyncio
  6. from termcolor import colored
  7.  
  8. from .helper import set_logger
  9.  
  10. class BertHTTPProxy(Process):
  11. def __init__(self, args):
  12. super().__init__()
  13. self.args = args
  14.  
  15. def create_flask_app(self):
  16. try:
  17. from flask import Flask, request
  18. from flask_compress import Compress
  19. from flask_cors import CORS
  20. from flask_json import FlaskJSON, as_json, JsonError
  21. from bert_base.client import ConcurrentBertClient
  22. except ImportError:
  23. raise ImportError('BertClient or Flask or its dependencies are not fully installed, '
  24. 'they are required for serving HTTP requests.'
  25. 'Please use "pip install -U bert-serving-server[http]" to install it.')
  26.  
  27. # support up to 10 concurrent HTTP requests
  28. bc = ConcurrentBertClient(max_concurrency=self.args.http_max_connect,
  29. port=self.args.port, port_out=self.args.port_out,
  30. output_fmt='list', mode=self.args.mode)
  31. app = Flask(__name__)
  32. logger = set_logger(colored('PROXY', 'red'))
  33.  
  34. @app.route('/status/server', methods=['GET'])
  35. @as_json
  36. def get_server_status():
  37. return bc.server_status
  38.  
  39. @app.route('/status/client', methods=['GET'])
  40. @as_json
  41. def get_client_status():
  42. return bc.status
  43.  
  44. @app.route('/encode', methods=['POST'])
  45. @as_json
  46. def encode_query():
  47. data = request.form if request.form else request.json
  48. try:
  49. logger.info('new request from %s' % request.remote_addr)
  50. print(data)
  51. return {'id': data['id'],
  52. 'result': bc.encode(data['texts'], is_tokenized=bool(
  53. data['is_tokenized']) if 'is_tokenized' in data else False)}
  54.  
  55. except Exception as e:
  56. logger.error('error when handling HTTP request', exc_info=True)
  57. raise JsonError(description=str(e), type=str(type(e).__name__))
  58.  
  59. CORS(app, origins=self.args.cors)
  60. FlaskJSON(app)
  61. Compress().init_app(app)
  62. return app
  63.  
  64. def run(self):
  65. app = self.create_flask_app()
  66. # app.run(port=self.args.http_port, threaded=True, host='0.0.0.0')
  67. # tornado 5 中引入asyncio.set_event_loop即可
  68. asyncio.set_event_loop(asyncio.new_event_loop())
  69. http_server = HTTPServer(WSGIContainer(app))
  70. http_server.listen(self.args.http_port)
  71. IOLoop.instance().start()

三,启动命令

  1. bert-base-serving-start -bert_model_dir -http_port -port -port_out

Bert镜像制作及flask生产环境模式启动的更多相关文章

  1. flask生产环境部署

    1.安装uwsgipip install uwsgi 2.创建ini配置文件vim uwsgi.ini内容如下:[uwsgi]# 配置启动的服务地址和iphttp=0.0.0.0:5001# 项目目录 ...

  2. Vue生产环境部署

    前面的话 开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱.生产时,这些警告语句却没有用,反而会增加载荷量.再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的.本文将详细介绍Vue ...

  3. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  4. 【openstack N版】——手把手教你制作生产环境镜像

    一.CentOS7镜像制作 1.1创建CentOS7虚拟机 1.1.1创建虚拟磁盘 #注:尽量将虚拟机创建在控制节点,以便于将镜像上传至glance [root@linux-node1 ~]# qem ...

  5. 2020最新nginx+gunicorn+supervisor部署基于flask开发的项目的生产环境的详细攻略

    本攻略基于ubuntu1804的版本,服务器用的华为云的服务器,python3(python2已经在2020彻底停止维护了,所以转到python3是必须的)欢迎加我的QQ6398903,或QQ群讨论相 ...

  6. 【原】Storm Local模式和生产环境中Topology运行配置

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  7. Centos6.3 下使用 Tomcat-6.0.43 非root用户 jsvc模式部署 生产环境 端口80 vsftp

    一.安装JDK环境 方法一. 官方下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260 ...

  8. 生产环境该如何选择lvs的工作模式,和哪一种算法

    lvs的工作模式有这几种: 1.RR : 轮叫算法,平均分配,你一个,我一个: 2.WRR :加权轮叫算法,谁的处理能力强,谁的权重就高: 3.LC :最少链接算法,谁的连接数最少,谁就处理更多的链接 ...

  9. 生产环境下Flask项目目录构建

    接触Flask已经有大半年了,本篇博客主要来探讨如何规范化生产环境下Flask的项目目录结构.虽然目录结构见仁见智,个人有个人的看法和习惯,但总的来说,经过很多人的实践和总结,还是有很多共同的意见和想 ...

随机推荐

  1. 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 ...

  2. java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5

    A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成 ...

  3. leaflet实现风场图(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  4. NuGet修改默认包保存的位置

    NuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages 修改方法: <?xml version="1.0" encodi ...

  5. 请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件

    出现问题原因: 编译socket.dll时,用到了openssl库. 使用libeay32.lib.ssleay32.lib生成socket.dll,就会报这样的错误 解决办法: 使用libeay32 ...

  6. cobbler无人值守

    一.背景介绍 ​ 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装, ...

  7. SERCOS总线程序相关

    SERCOS程序就是围绕主机发送MDT电报,伺服在下一个周期发送AT电报作为应答这个原则来实现的,这个过程是由控制字等控制实现的,读程序的时候如果忽略这点,可能在想程序从哪里读数据,在哪里写数据呢.. ...

  8. Linux系统学习 十、DHCP服务器—介绍和原理

    介绍: DHCP服务作用(动态主机配置协议) 为大量客户机自动分配地址.提供几种管理 减轻管理和维护成本.提高网络配置效率 可分配的地址信息主要包括: 网卡的IP地址.子网掩码 对应的网路地址.广播地 ...

  9. Java之线程安全

    什么是线程安全? 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 什么是线程安全问题? ...

  10. CountDownLatch原理分析

    CountDownLatch原理分析 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行.例如,应用程序的主线程希望在负责启动框架服务的线程已经启动 ...