- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 TensorFlow 创建了一个统计估算器。我遵循了 sklearn 的估算器,所以我有一个打包所有内容的类包括导入 Tensorflow 和启动 TF session (如果我在类外导入 TF,则根本没有并行工作)。
我需要在随机数据上多次运行该估计器以查看经验分布,因此我使用 joblib 并行化创建数据的代码、创建估计器对象并对数据运行估计。我在一个有 64 个内核(和大量内存)的 Linux 服务器上工作,我在那里运行了比这大得多的工作,也使用了 joblib。但是,当我尝试运行基于 TF 的代码时,我只能运行 8 个进程。如果我尝试使用 9,那么 top
中只会显示 8 个,当这 8 个完成时,joblib 不再发送另一个 8 并且根本不返回,或者它返回以下错误消息
"BrokenProcessPool: A process in the executor was terminated abruptly while the future was running or pending."
如果我将进程限制为 8 个,那么一切正常。我尝试将 joblib 的后端更改为 dask.parallel 并且我有相同的行为。我从后端获得了更多信息,不断有消息说
"distributed.nanny - WARNING - Worker process 7602 was killed by unknown signal"
我希望能够运行超过 8 个进程。 问题是:这是硬限制还是我可以通过一些 TF 参数更改它?我能以任何方式解决这个问题吗?我认为这个限制与 Tensorflow 相关,因为一旦 8 个进程正在运行(并且它们需要几个小时)我就无法在该机器上从 Tensorflow 运行任何其他东西。
感谢您的帮助!
以下代码重现了错误:
from sklearn.base import TransformerMixin
import numpy as np
from joblib import Parallel, delayed
class MyEstimator(TransformerMixin):
def __init__(self):
import tensorflow as tf
self._tf = tf
self._graph = tf.Graph()
with self._graph.as_default():
self.session = self._tf.Session()
A0 = np.eye(10, 2)
self.a_var = a_var = tf.Variable(A0, name='a_var', dtype=tf.float64)
self._x = x = tf.placeholder(dtype=tf.float64)
self._y = y= tf.placeholder(dtype=tf.float64)
w = tf.tensordot(a_var, x, axes=0)
self.f = tf.reduce_mean((y-w)**2)
def fit(self, x, y):
#self.session.run(
# self._tf.global_variables_initializer())
self._f = self.session.run(self.f, feed_dict={self._x:x, self._y: y, self.a_var:np.eye(10, 2)})
return self
def run_estimator():
my_est = MyEstimator()
x = np.random.normal(0,1,10)
y = np.random.normal(0,1,10)
my_est.fit(x,y)
Parallel(n_jobs=16)(delayed(run_estimator)() for _ in range(16))
我正在使用 Linux、Python 3.6.3、TensorFlow 1.7.0、joblib 0.12。
最佳答案
几个月后,我找到了 TensorFlow 服务器的解决方案,https://www.tensorflow.org/deploy/distributed
from sklearn.base import TransformerMixin
import numpy as np
from joblib import Parallel, delayed
class MyEstimator(TransformerMixin):
def __init__(self, target):
import tensorflow as tf
self._tf = tf
self._graph = tf.Graph()
with self._graph.as_default():
config = self._tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1,
device_count={"CPU":4},
use_per_session_threads=True)
config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1
pool = config.session_inter_op_thread_pool.add()
pool.num_threads = 1
self.session = self._tf.Session(target)
A0 = np.eye(10, 2)
self.a_var = a_var = tf.Variable(A0, name='a_var', dtype=tf.float64)
self._x = x = tf.placeholder(dtype=tf.float64)
self._y = y= tf.placeholder(dtype=tf.float64)
w = tf.tensordot(a_var, x, axes=0)
self.f = tf.reduce_mean((y-w)**2)
def fit(self, x, y):
#self.session.run(
# self._tf.global_variables_initializer())
self._f = self.session.run(self.f, feed_dict={self._x:x, self._y: y, self.a_var:np.eye(10, 2)})
return self
def run_estimator(target):
my_est = MyEstimator(target)
x = np.random.normal(0,1,10)
y = np.random.normal(0,1,10)
my_est.fit(x,y)
return 1
import tensorflow as tf
server = tf.train.Server.create_local_server()
Parallel(n_jobs=16)(delayed(run_estimator)(server.target) for _ in range(16))
关于python - tensorflow + 作业库 : limited to 8 processes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343207/
好吧,我对我的页面发生的事情有点困惑。我在底部有页码, table 上摆满了 23 种不同的元素。 每个页面应一次显示 5 个项目。我显示的页面发送了一个带有 pagenumber = 不管怎样的 g
几周前我开始学习 Ada。我知道 limited 在某些情况下声明了一个有限类型,不允许复制对象 来自 Ada Reference Manual 2012 7.5 1/2 A limited type
我想按 DESC 选择日期并限制为最后 3 个,然后我需要基本上翻转最后 3 个结果,以便它们按 ASC 排序 任何帮助将不胜感激,我正在使用 postgresql 最佳答案 SELECT * FRO
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
我正在尝试访问按“日期”键排序的表中恒定数量的最新文档。请注意,不幸的是,日期是被实现的(不是由我......),使得该值设置为字符串,例如“2014-01-14”,或者有时“2014-01-14 2
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我必须对我的数据应用分页。我通过复杂的连接查询获取数据,没有任何子查询,只有简单的连接。 假设这个查询[这是一个非常简单的查询,我有一个比这个复杂的查询] SELECT states.state
我经常制作条形图,并将条形图的值额外包含为注释 (geom_text)。通常,我更喜欢这些值右对齐(与将标签放在条形顶部相反)。在绘制多面条形图时,我将这些值放在每个组中的最大值(我之前计算过)加上我
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
我正在使用 PostgreSQL 9.3。这应该在具有 100,000 多行的任何表上重现。 EXPLAIN ANALYZE 显示使用 LIMIT 2 扫描了更多行,但我不明白为什么。 限制 1: E
我正在尝试找出是否可以在 PHP 中全局设置和取消设置 MySQL 结果的默认限制。 一些可能看起来像的伪代码: $pdo->prepare('SELECT * FROM example'); $pd
我有下面的代码片段表 在这里我必须对投票前 3 个值求和。 假设 product_id 3030 vote 列的总和为 8.1 和 3671 总和 是 5.2 在这里,我必须获得前 3 个 produ
我正在使用全文搜索来提取行。 我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行兰德 (RAND)。 因此,对于任何特定的搜索词
帮助创建搜索条件 SELECT * FROM mlt_adr_city WHERE name LIKE "Text%" AND region_id = 59 AND id <> 0 IF (name
MySQL 查询示例: SELECT message_id, message_text FROM messages LIMIT 0 , 30 我得到的这个提示是错误的: HIN
我注意到如果我将查询限制为 1 个而不是 5 个,速度会急剧下降。 SELECT he. * FROM homematic_events he WHERE he.homematic_devices_i
我需要从我的表中获取最后一个 ID,以便我可以在另一个函数中使用它我在我的存储库中创建了这个函数,但我没有工作,它显示了一个错误: [Syntax Error] line 0, col 60: Err
我是一名优秀的程序员,十分优秀!