- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作、训练并保存了一个简单的 tf.keras 模型。然后,我通过 Flask、redis 和 rq 设置了一个基于任务的基本 API。
它的工作原理基本上是这样的:
在 docker 之外,这工作得很好。
我正在使用 docker-compose 来启动 redis 服务器、工作服务和 Flask api。
flask 和辅助服务(评估模型)是从 Dockerfile 构建的,从 FROM tensorflow/tensorflow:1.15.0rc2-gpu-py3-jupyter
或 FROM debian 开始:buster-slim
。
虽然在任何一种情况下都没有检测到 GPU,但问题源于加载的模型不想在 CPU 上运行(它确实在 docker 之外工作)。这很有趣,因为任务的一部分调用了多个 tensorflow 操作(例如将输入转换为与 tf.data 一起使用)。如果我仅注释掉模型的评估,但允许其他 tf 函数运行,则一切都会按预期进行。
当我通过 docker-compose 启动时,我看到的一些日志是:
worker | 2019-10-20 12:58:48.602164: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA
worker | 2019-10-20 12:58:48.633121: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2400000000 Hz
worker | 2019-10-20 12:58:48.636200: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x3a82e10 executing computations on platform Host. Devices:
worker | 2019-10-20 12:58:48.636236: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): <undefined>, <undefined>
当任务是队列worker
日志时:
worker | 2019-10-20 12:59:47.726320: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1412] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.
看看其他SO问题,我知道如果我有GPU,我可以静音这个警告(即使使用tensorflow/tensorflow:1.15.0rc2-gpu-py3-jupyter
,docker似乎也没有找到)。
我尝试添加指定的环境变量,例如
os.environ['TF_XLA_FLAGS'] = '--tf_xla_cpu_global_jit'
但随后它提示 ALA 等。
有趣的是,如果在任务框架之外调用(例如在 Flask views.py
文件中 print
结果),docker 几乎会立即记录结果。
更新:实际上比这更奇怪。
考虑:
# views.py
# ...
print('toggle')
print('about to call')
results = evaluate_model(dummy_input) # model.predict(...)
print('called')
print(results)
当我调用docker-compose up
时我明白了
[flask] toggle
[flask] about to call
[flask] called
然后,如果我注释掉 print('toggle')
我明白了
[flask] toggle #<--- should not see this, it is commented out
[flask] about to call
[flask] called
[flask] [[...], [...], ..., [...]] #<--- matrix
如果我取消注释 print('toggle')
我明白了
[flask] about to call # toggle should be printed but it isnt.
[flask] called
[flask] [[...], [...], ..., [...]] #<--- matrix
就好像正在运行的进程丢失了,过一会儿又找到了?请注意,这不会影响 api 的其他端点,即当加载 Flask 时,它不会卡住等待模型返回。
可以找到 docker 设置的 MWE here (不包括TF,只是flask、redis、rq和前端如何连接)
有什么想法吗?
MWE设置。
如果您克隆此存储库并运行
docker-compose -f docker-compose.ai.development.yml build
docker-compose -f docker-compose.ai.development.yml up
可以看到超简单的notebook生成一个玩具 tf.keras 模型(直接来自 TF 文档)。
在笔记本中保存并加载此模型,以确保问题不是模型的导出/导入。
docker-compose -f docker-compose.web.development.yml build
docker-compose -f docker-compose.web.development.yml up
启动前端(nuxt + ngx)和后端(flask + rq + redis)。
令人感兴趣的是文件/backend/app/api/utils.py
,它的任务非常简单:
import tensorflow as tf, numpy as np, os
model_file = os.path.join('/app/models/', 'model.h5')
model = tf.keras.models.load_model(model_file)
def predict_model():
dummy_input = np.zeros((28, 28)).reshape((-1, 28, 28))
predicted = model.predict(dummy_input) # line 2 of predict_model function
predicted = None
return {
'results': predicted
}
前往 localhost:9061/model-task
提交任务 (predict_model
)。注释掉第二行效果很好,将其保留在队列中会启动任务并且永远不会完成。
最佳答案
如果我正确理解问题,则可能是多线程问题。尝试在 ini 文件中设置 threads = 1
,如果您愿意,您可以始终通过增加进程
数量来进行扩展,但不能增加线程
数量。
关于python - tensorflow 1.14+ : dockerized task based flask api doesn't run and or stalls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58473432/
我正在测试新的 zgc包含在 java 中的垃圾收集器11 因为它 promise 非常低的延迟。我们的应用程序是一个实时服务,每秒创建和销毁许多对象,它使用 akka 在多线程环境中完成。 . 启用
自从我升级到新的 MBP 后,我在 R 中收到以下警告。当我启动应用程序并以奇怪的间隔重新出现时,会出现警告。 2016-12-06 15:05:02.067 R[87426:4480089] IMK
假设我有一个具有定义的宽度和高度的视口(viewport)。我克隆了右侧 View 之外的一个元素,然后随机将其飞过视口(viewport) y位置代码如下: ... .css({
当我运行 heroku pg:psql 我得到 --> Connecting to postgresql-cylindrical-38664 并停滞不前。一切看起来都很好,只是卡住了,什么也没做。 最
我正在 Google Chrome 上使用 HTML5 视频标签编写视频播放器:我需要显示一些视频 (1),然后将它们从 DOM 文档中删除以显示其他视频,稍后再次创建一些指向相同视频标签的视频标签文
我在 FastCGI 模式下运行带有 HHVM 3.5.0 的 NGINX 1.2.1。 正如标题所说,在我执行以下操作后,Chrome 会“暂停”请求很长时间: 打开我的网站(只需大约 1.5 秒)
我正在与Tokio一起运行一款铁锈应用程序。在上一个版本中,我有一个错误,一些请求导致我的代码进入无限循环。。发生的情况是,当进入循环的任务陷入停滞时,所有其他任务继续正常工作并处理请求,直到停止任务
我开始注意到发送到我们的应用程序服务器的 post 请求在浏览器端停滞了大约 7 秒,没有明显的原因。 环境: Angular 1.4 Play Framework Chrome 64。* 服务器发送
在我的智能电视应用程序中,我通过跨域请求使用 SoundCloud API - $.getJSON() 等 该应用程序还在 100% HTML5 模式(无 Flash)上使用 SoundManager
我在 chrome 中有以下网络登录: 里面有一件事我不明白:实心灰条和透明灰条有什么区别。 最佳答案 Google 在 Evaluating network performance 中对这些字段进行
我正在开发一个 Java 应用程序,它应该向我们的远程计算机发送一个特定文件。我正在使用 Jsch 库,并遵循网站 @ ( http://www.jcraft.com/jsch/examples/Sc
我正在尝试编写一个使用 [SoundManager 2][1] api 的 javascript 应用程序并旨在运行所有桌面和移动浏览器。在 iPad 平台上,Soundmanager 使用 HTML
我正在使用 Spring Boot 创建一个 Spring Integration 原型(prototype)。 我有一个“集线器”,它接受控制台输入并将其发送到单独的套接字/tcp 应用程序。 tc
在尝试发送 mp3 数据时,我们遇到了一个非常烦人的错误。我们有以下设置。 网络摄像头生成 aac -> ffmpeg 转换为 adts -> 发送到 nodejs 服务器 -> 服务器上的 ffmp
我的 Emacs(Windows 10 64 位下的 GNU Emacs 25.1.1 (x86_64-w64-mingw32))变得非常缓慢和不稳定,尤其是在 Org 模式下,例如可能会暂停 2 秒
我对此非常陌生,所以如果我问的是一个愚蠢的问题,我提前道歉。此外,如果可能的话,最可取的是一个非常简单的答案。 使用 mac osx 10.8.4,安装了 PostgreSQL 9.2.4 和带有自制
我正在尝试解决 Google CodeJam 2017 "Bathroom Stalls" problem C - 链接中提供了解决方案,下面我的 C# 代码在 small1 和 2 集上运行良好。大
运行 perf stat ls 显示: Performance counter stats for 'ls': 1.388670 task-clock
我制作、训练并保存了一个简单的 tf.keras 模型。然后,我通过 Flask、redis 和 rq 设置了一个基于任务的基本 API。 它的工作原理基本上是这样的: 使用输入调用 api 任务(使
我试图了解如何衡量性能并决定编写非常简单的程序: section .text global _start _start: mov rax, 60 syscall 然后我用 pe
我是一名优秀的程序员,十分优秀!