Локальный запуск фляги против ее запуска на AWS Elastic BeanStalk - какие-то проблемы с областью? - PullRequest
0 голосов
/ 13 мая 2019

Следующий код работает на моем локальном компьютере:

import tensorflow as tf
import tensorflow_hub as hub
import flask
from flask import request, jsonify

def get_embed_func():
    module_url = "https://tfhub.dev/google/universal-sentence-encoder/2"
    with tf.Graph().as_default():
        sentences = tf.placeholder(tf.string)
        embed = hub.Module(module_url)
        embeddings = embed(sentences)
        session = tf.train.MonitoredSession()
    return lambda x: session.run(embeddings, {sentences: x})


application = flask.Flask(__name__)

@application.route('/', methods=['GET'])
def home():
    return '''<h1>Some header</h1>
<p>A prototype API</p>'''


@application.route('/api/v1', methods=['GET'])
def encoding():
    return jsonify(str(embed_func(['Sample sentence'])[0][0]))


if __name__ == '__main__':
    embed_func = get_embed_func()  
    application.run()

Но в AWS Elastic BeanStalk выдает ошибку:

[Mon May 13 20:10:55.391791 2019] [:error] [pid 3387] WARNING: Logging before flag parsing goes to stderr.
[Mon May 13 20:10:55.391931 2019] [:error] [pid 3387] W0513 20:10:55.391691 140563746686720 __init__.py:56] Some hub symbols are not available because TensorFlow version is less than 1.14
[Mon May 13 20:11:41.111770 2019] [:error] [pid 3387] E0513 20:11:41.108649 140563780257536 app.py:1761] Exception on /api/v1 [GET]
[Mon May 13 20:11:41.111801 2019] [:error] [pid 3387] Traceback (most recent call last):
[Mon May 13 20:11:41.111804 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
[Mon May 13 20:11:41.111807 2019] [:error] [pid 3387]     response = self.full_dispatch_request()
[Mon May 13 20:11:41.111810 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
[Mon May 13 20:11:41.111836 2019] [:error] [pid 3387]     rv = self.handle_user_exception(e)
[Mon May 13 20:11:41.111839 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
[Mon May 13 20:11:41.111842 2019] [:error] [pid 3387]     reraise(exc_type, exc_value, tb)
[Mon May 13 20:11:41.111844 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/_compat.py", line 35, in reraise
[Mon May 13 20:11:41.111847 2019] [:error] [pid 3387]     raise value
[Mon May 13 20:11:41.111859 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
[Mon May 13 20:11:41.111862 2019] [:error] [pid 3387]     rv = self.dispatch_request()
[Mon May 13 20:11:41.111864 2019] [:error] [pid 3387]   File "/opt/python/run/venv/local/lib64/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
[Mon May 13 20:11:41.111866 2019] [:error] [pid 3387]     return self.view_functions[rule.endpoint](**req.view_args)
[Mon May 13 20:11:41.111869 2019] [:error] [pid 3387]   File "/opt/python/current/app/application.py", line 28, in endoding
[Mon May 13 20:11:41.111871 2019] [:error] [pid 3387]     return jsonify(str(embed_func(['Sample sentence'])[0][0]))
[Mon May 13 20:11:41.111875 2019] [:error] [pid 3387] NameError: name 'embed_func' is not defined
[Mon May 13 20:11:41.111883 2019] [:error] [pid 3387] 

В основном следующая строка либо не выполнена, либо не видна в области видимости колбы embed_func = get_embed_func(). Почему существует разница между локальным исполнением и AWS? Любые решения?

1 Ответ

1 голос
/ 14 мая 2019

Основной метод не вызывается, поэтому вы получаете эту ошибку.Есть ли причина, по которой def encoding() использует переменную embed_func вместо прямой ссылки на метод get_embed_func()?

Если вы измените его на следующее, вы можете обойти эту ошибку:

@application.route('/api/v1', methods=['GET'])
def encoding():
    return jsonify(str(get_embed_func(['Sample sentence'])[0][0]))
...