- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试部署我的 keras 模型。它在端口 5000
上与 flask 一起工作正常,当我尝试通过此命令 uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app 测试通过 Uwsgi 提供服务时
,它给了我想要的结果。当我尝试配置一个单独的 Uwsgi fie 然后一个 Nginx 配置以使部署运行更长时间以便它可以通过 nginx 通过多个端口提供服务时,问题就出现了。当我运行这个 url 时,它给了我一个 504 超时错误
http://35.230.90.108/predict/ethnicity?auth_token=WyIxYSDFg467YT.A3MmJlODcyODkzOGQzZjk4YzUiXQ.B5e5SgsDcaMgiRqx21Ydf8M&url=https://thumb7.shutterstock.com/display_pic_with_logo/768073/110309945/stock-photo-portrait-of- smiling-young-black-man-in-the-interior-of-coffee-shop-110309945.jpg
。
我正在使用本教程进行部署:
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04
这里是部署文件、nginx配置和Uwsgi配置的代码。
部署文件
import dlib
import requests
import numpy as np
from skimage import io
from skimage.transform import resize
from keras import backend as K
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from flask import Flask, jsonify, request, abort, make_response
app = Flask(__name__)
auth_token = 'WyIxYSDFg467YT.A3MmJlODcyODkzOGQzZjk4YzUiXQ.B5e5SgsDcaMgiRqx21Ydf8M'
top_model_weights_ethnicity = 'ethnicity.071217.23-0.28.hdf5'
img_width, img_height = 139, 139
confidence_ethnicity = '0.59'
detector = dlib.get_frontal_face_detector()
graph = K.get_session().graph
class_to_label_ethnicity = {"0": "arabs", "1": "asia", "2": "black", "3": "hispanics-latinos",
"4": "southasia", "5": "white"}
def get_face(path):
with graph.as_default():
img = io.imread(path)
dets = detector(img, 1)
output = None
for i, d in enumerate(dets):
img = img[d.top():d.bottom(), d.left():d.right()]
img = resize(img, (img_width, img_height))
output = np.expand_dims(img, axis=0)
break
return output
def get_pretrained_model():
with graph.as_default():
pretrained_model = applications.InceptionResNetV2(include_top=False, weights='imagenet',
input_shape=(img_width, img_height, 3))
return pretrained_model
def get_features(image, pretrained_model):
with graph.as_default():
features = pretrained_model.predict(image)
return features
with graph.as_default():
pretrained_model = get_pretrained_model()
model_ethnicity = Sequential()
model_ethnicity.add(Flatten(input_shape=(3, 3, 1536)))
model_ethnicity.add(Dense(256, activation='relu'))
model_ethnicity.add(Dropout(0.5))
model_ethnicity.add(Dense(6, activation='softmax'))
model_ethnicity.load_weights(top_model_weights_ethnicity)
@app.route("/predict/ethnicity", methods=['GET', 'POST'])
def predict_ethnicity():
with graph.as_default():
if request.args.get('auth_token') != auth_token:
abort(make_response(jsonify(message="No valid access token. Write an email to research@influencerdb.com "
"to become authenticated."), 403))
confidence = request.args.get('confidence', confidence_ethnicity)
if request.method == 'POST':
if 'file' not in request.files:
abort(make_response(jsonify(message="No image found. Use 'file' as a key to upload an image."), 404))
else:
file = request.files['file']
path_to_img = "uploaded/%s" % file.filename
file.save(path_to_img)
else:
path_to_img = request.args.get('url')
if get_face(path_to_img) is None:
abort(make_response(jsonify(message="No face found."), 454))
else:
features = get_features(get_face(path_to_img), pretrained_model)
prediction = model_ethnicity.predict_proba(features)
ethnicity = {class_to_label_ethnicity[str(y)]: str(value) for (x, y), value in np.ndenumerate(prediction)}
suggestion = class_to_label_ethnicity[str(np.argmax(prediction[0]))] \
if np.max(prediction[0]) > float(confidence) else ""
return jsonify({'probabilities': ethnicity, 'suggestion': suggestion}), 200
if __name__ == "__main__":
app.run(host='0.0.0.0')
myproject.ini(wsgi配置)
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true
系统单元文件
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=rehan_aziz
Group=www-data
WorkingDirectory=/home/rehan_aziz/myproject
Environment="PATH=/home/rehan_aziz/anaconda3/envs/myproject/bin"
ExecStart=/home/rehan_aziz/anaconda3/envs/myproject/bin/uwsgi --ini myproject.ini
[Install]
WantedBy=multi-user.target
nginx 配置文件
server {
listen 80;
server_name 35.230.90.108;
location / {
include uwsgi_params;
uwsgi_pass unix:///home/rehan_aziz/myproject/myproject.sock;
}
}
wsgi 应用服务文件
from myproject import app
if __name__ == "__main__":
app.run()
最佳答案
看来这是Keras和uwsgi中threading的问题
所以将 master 设置为 false 并将 processes 更改为 1 为我解决了这个问题,但这仍然是一个问题,因为它无法扩展。但它适用于实验
所以在 myproject.ini
中更改此设置
[uwsgi]
module = wsgi:app
master = false <-- this
processes = 1 <-- and this
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true
关于python - flask 应用程序通过 Uwsgi 和 Nginx 给出 504 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255545/
我有一个无所事事的盒子,已经运行了一段时间,今天,由于某种原因,当我尝试重新启动nginx时,得到了以下提示。 nginx: [emerg] host not found in upstream "w
我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 并执行 systemctl status nginx 时。它表明 systemctl 已禁用。此外,如果我首先使用命令 syste
我的 nginx 配置如下: proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $re
周围有两个配置文件,/etc/nginx/conf.d/default.conf和 /etc/nginx/nginx.conf,但是启用了哪一个呢?我运行的是 CentOS6.4 和 nginx/1.
我的 Nginx 配置仅适用于根位置,所有其他位置都返回“Cannot GET {location}”,其中位置是域后地址的其余部分。 这是我的/etc/nginx/sites-enabled/def
我在 nginx 中为 node.js 服务器设置了反向代理。 server { listen 80; server_name sub.domain.tld; location
我的应用程序将在两个位置提供静态文件,一个是/my/path/project/static,另一个是/my/path/project/jsutils/static。 我很难让网络服务器在两个目录中查找
我的域名注册商的 DNS 访问我的服务器并获取 nginx 默认页面,因此配置正确 我复制了一个当前正在工作的 nginx 虚拟主机,更改了 server_name和 conf 文件的名称,仅此而已。
这个问题在这里已经有了答案: Can't login in to phpPgAdmin (2 个回答) 3年前关闭。 我在centos中遇到了phpPgAdmin登录的奇怪问题,我做了所有需要的事情
我要为PoC进行的操作是向来自动态后端服务器的网页添加href。使用“ subs_filter”可以很容易地添加href,但是我需要使用响应中嵌入的信息来构造href。 是否可以使用LUA处理来自pr
我有网站服务器,它有两个代理(鱿鱼,CF),它们使用不同的 header 来获取真实的 ip。 我猜 nginx 命令 set_real_ip_from ;real_ip_header X-Forwa
在控制台显示如下: Job for nginx.service failed because the control process exited witherror code. See "syste
我有一个问题,我怀疑是 NGINX 问题。基本上,当我尝试登录到我创建的网站时,出现以下错误…… 您要查找的页面暂时不可用。请稍后再试。 有没有人以前遇到过这个? 最佳答案 如果 NGINX 虚拟主机
这是我的 nginx 配置文件: server { listen 80; server_name localhost; location / {
在我的/etc/nginx/nginx.conf 文件中,我有配置。作为:- user nginx; worker_processes 1; error_log /var/log/nginx/e
有谁知道nginx支持软退出吗?这意味着它会一直运行直到所有连接都消失或超时(超过特定时间间隔)并且在此期间也不允许新连接吗? 例如: nginx stop nginx running (2 conn
有没有办法将 Nginx 配置为类似这样的直接服务器返回 (DSR) 负载平衡器: http://blog.haproxy.com/2011/07/29/layer-4-load-balancing-
我通过 apt-get 安装了 Nginx不久前在 Debian 上,我有几个网站在上面。现在我需要安装一些额外的模块,因为我不想搞砸任何事情,所以我想在执行之前仔细检查我的过程。希望这也能帮助其他不
我知道 Apache 的 pagespeed 模块可以使页面访问更快,所以,我想知道 Nginx 是否有等效的模块? 提前致谢! 最佳答案 https://github.com/pagespeed/n
如何将worker_rlimit_nofile设置为一个更大的数字,它可以是或建议最大为多少? 我正在尝试遵循以下建议: 大多数人遇到的第二个最大限制是 与您的操作系统有关。打开一个shell,su给
我是一名优秀的程序员,十分优秀!