【问题标题】:H2OAutoML throws libgomp exception in train stepH2OAutoML 在训练步骤中抛出 libgomp 异常
【发布时间】:2020-01-05 14:41:27
【问题描述】:

我使用 Python 3.6.3 和 H2O 3.26.0.3 在 docker 映像上运行 H2O。

import h2o
from h2o.automl import H2OAutoML
h2o.init()

这一步初始化成功,打印如下信息。

H2O cluster uptime: 01 secs
H2O cluster timezone:   Europe/Istanbul
H2O data parsing timezone:  UTC
H2O cluster version:    3.26.0.3
H2O cluster version age:    9 days
H2O cluster name:   H2O_from_python_96273_8m5wyj
H2O cluster total nodes:    1
H2O cluster free memory:    26.67 Gb
H2O cluster total cores:    72
H2O cluster allowed cores:  72
H2O cluster status: accepting new members, healthy
H2O connection url: http://127.0.0.1:54321
H2O connection proxy:   None
H2O internal security:  False
H2O API Extensions: Amazon S3, XGBoost, Algos, AutoML, Core V3, Core V4
Python version: 3.6.3 final

现在,我将运行 AutoML,但它有问题。

hf = h2o.H2OFrame(x_train)
aml = H2OAutoML(max_runtime_secs=600)
aml.train(x = list(df.columns[:-1]), y = df.columns[-1], training_frame = hf)

我有以下错误

ConnectionResetError Traceback(最近调用 最后)~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 urlopen(self, method, url, body, headers, retries, redirect, assert_same_host,超时,pool_timeout,release_conn,分块, body_pos, **response_kw) 第599章 --> 600 分块=分块) 601

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 383 # 否则它看起来像是编程错误的原因。 --> 384 6.raise_from(e, None) 385 除了 (SocketTimeout, BaseSSLError, SocketError) as e:

~/.local/lib/python3.6/site-packages/urllib3/packages/six.py raise_from(value, from_value)

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 379 尝试: --> 380 httplib_response = conn.getresponse() 381 例外为 e:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 getresponse(self) 1330 尝试: -> 1331 response.begin() 1332 除了ConnectionError:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 开始(自己) 296 而真: --> 297 版本、状态、原因 = self._read_status() 298如果状态!=继续:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 _read_status(自我) 第257章 --> 258 行 = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 第259章

/opt/rh/rh-python36/root/usr/lib64/python3.6/socket.py 读入(自我,b) 585尝试: --> 586 返回 self._sock.recv_into(b) 587 除了超时:

ConnectionResetError: [Errno 104] 对等方重置连接

在处理上述异常的过程中,又发生了一个异常:

ProtocolError Traceback(最近调用 最后)~/.local/lib/python3.6/site-packages/requests/adapters.py 在 发送(自我、请求、流、超时、验证、证书、代理) 448 次重试=self.max_retries, --> 449 超时=超时 450)

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 urlopen(self, method, url, body, headers, 重试, 重定向, assert_same_host,超时,pool_timeout,release_conn,分块, body_pos, **response_kw) 637重试=重试。增量(方法,url,错误=e,_pool=self, --> 638 _stacktrace=sys.exc_info()[2]) 第639章

~/.local/lib/python3.6/site-packages/urllib3/util/retry.py 在 增量(自我、方法、url、响应、错误、_pool、_stacktrace) 367 如果读取为 False 或不是 self._is_method_retryable(method): --> 368 raise 6.reraise(type(error), error, _stacktrace) 369 elif 读取不是无:

~/.local/lib/python3.6/site-packages/urllib3/packages/six.py 再加注(tp, value, tb) 684 如果 value.traceback 不是 tb: --> 685 提高价值。with_traceback(tb) 第686章 升值

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 urlopen(self, method, url, body, headers, 重试, 重定向, assert_same_host,超时,pool_timeout,release_conn,分块, body_pos, **response_kw) 第599章 --> 600 分块=分块) 601

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 383 # 否则它看起来像是编程错误的原因。 --> 384 6.raise_from(e, None) 385 除了 (SocketTimeout, BaseSSLError, SocketError) as e:

~/.local/lib/python3.6/site-packages/urllib3/packages/six.py raise_from(value, from_value)

~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py 在 _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 379 尝试: --> 380 httplib_response = conn.getresponse() 381 例外为 e:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 getresponse(self) 1330 尝试: -> 1331 response.begin() 1332 除了ConnectionError:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 开始(自己) 296 而真: --> 297 版本、状态、原因 = self._read_status() 298如果状态!=继续:

/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py 在 _read_status(自我) 第257章 --> 258 行 = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 第259章

/opt/rh/rh-python36/root/usr/lib64/python3.6/socket.py 读入(自我,b) 585尝试: --> 586 返回 self._sock.recv_into(b) 587 除了超时:

ProtocolError: ('Connection aborted.', ConnectionResetError(104, '由对等方重置连接'))

在处理上述异常的过程中,又发生了一个异常:

ConnectionError Traceback(最近调用 最后)~/.local/lib/python3.6/site-packages/h2o/backend/connection.py 在请求中(自我、端点、数据、json、文件名、save_to) 404 标头=标头,超时=self._timeout,流=流, --> 405 auth=self._auth, verify=self._verify_ssl_cert, proxies=self._proxies) 406 self._log_end_transaction(start_time, resp)

~/.local/lib/python3.6/site-packages/requests/api.py 在 请求(方法,网址,**kwargs) 59 与 session.Session() 作为会话: ---> 60 返回 session.request(method=method, url=url, **kwargs) 61

~/.local/lib/python3.6/site-packages/requests/sessions.py 在 request(self, method, url, params, data, headers, cookies, files, 身份验证、超时、allow_redirects、代理、挂钩、流、验证、证书、 json) 第532章 --> 533 resp = self.send(prep, **send_kwargs) 第534章

~/.local/lib/python3.6/site-packages/requests/sessions.py 在 发送(自我,请求,**kwargs) 645 # 发送请求 --> 646 r = adapter.send(request, **kwargs) 第647章

~/.local/lib/python3.6/site-packages/requests/adapters.py 在 发送(自我、请求、流、超时、验证、证书、代理) 497 除了 (ProtocolError, socket.error) 作为错误: --> 498 引发连接错误(错误,请求=请求) 第499章

ConnectionError: ('Connection aborted.', ConnectionResetError(104, '由对等方重置连接'))

在处理上述异常的过程中,又发生了一个异常:

H2OConnectionError Traceback(最近调用 最后)在 ----> 1 aml.train(x = list(df.columns[:-1]), y = df.columns[-1], training_frame = hf)

~/.local/lib/python3.6/site-packages/h2o/automl/autoh2o.py 在 train(self, x, y, training_frame, fold_column, weights_column, 验证帧,排行榜帧,混合帧) 第443章 444 尝试: --> 445 self._job.poll(poll_updates=poll_updates) 最后446: 第447章

~/.local/lib/python3.6/site-packages/h2o/job.py in poll(self, 轮询更新) 55 pb = ProgressBar(title=self._job_type + "progress", hidden=hidden) 56 如果 poll_updates: ---> 57 pb.execute(self._refresh_job_status, print_verbose_info=ft.partial(poll_updates, self)) 其他 58 条: 59 pb.execute(self._refresh_job_status)

~/.local/lib/python3.6/site-packages/h2o/utils/progressbar.py 在 执行(自我,progress_fn,print_verbose_info) 169 # 查询进度级别,但前提是已经到了时间 170 如果 self._next_poll_time 171 res = progress_fn() # 可能会引发 StopIteration 172 assert_is_type(res,(数字,数字),数字) 173 if not isinstance(res, tuple):

~/.local/lib/python3.6/site-packages/h2o/job.py 在 _refresh_job_status(self) 92 def_refresh_job_status(自我): 93 如果 self._poll_count 94 个工作 = h2o.api("GET /3/Jobs/%s" % self.job_key) 95 self.job = jobs["jobs"][0] if "jobs" in jobs else jobs["job"][0] 96 self.status = self.job[“状态”]

~/.local/lib/python3.6/site-packages/h2o/h2o.py in api(endpoint, data, json、文件名、save_to) 102 # 在 H2OConnection 类中进行类型检查 第103章 --> 104 返回 h2oconn.request(endpoint, data=data, json=json, filename=filename, save_to=save_to) 105 106

~/.local/lib/python3.6/site-packages/h2o/backend/connection.py 在 请求(自我、端点、数据、json、文件名、save_to) 413 其他: 第414章 --> 415 raise H2OConnectionError("Unexpected HTTP error: %s" % e) 416 除了 requests.exceptions.Timeout 为 e: 417 self._log_end_exception(e)

H2OConnectionError: 意外的 HTTP 错误: ('Connection aborted.', ConnectionResetError(104, '连接被对端重置'))

我怀疑代理可能是此异常的原因。当我将代理信息添加到路径时,异常消息将是“HTTP 500 INKApi Error”

import os
os.environ['http_proxy']= ...
os.environ['https_proxy']= ...

JVM 标准输出日志文件转储以下异常。

[线程 140335217821440 也有错误][线程 140335320467200 也有 有错误] [线程 140335207294720 也有错误]

[线程 140335316256512 也有错误]# Java 运行时环境检测到致命错误:

[线程140335202031360也有错误] SIGSEGV (0xb) 在 pc=0x00007fa3276cdb8d, pid=51986, tid=0x00007fa2575f5700

JRE 版本:OpenJDK 运行时环境 (8.0_212-b04) (build 1.8.0_212-b04) Java VM:OpenJDK 64 位服务器 VM(25.212-b04 混合模式 linux-amd64 压缩 oops) 有问题的框架: [线程140335231506176也有错误]C [libc.so.6+0x39b8d][线程140335341520640也有错误]

JVM stderr 日志文件包含有趣的日志

libgomp:线程创建失败:资源暂时不可用 * `/usr/bin/java' 中的错误:free():损坏的未排序块:0x00007efe342f0240 *

libgomp:线程创建失败:资源暂时不可用

很有趣,但是当我在本地机器上运行相同的代码时它运行成功。我怀疑这可能是因为 docker 配置。

【问题讨论】:

  • Docker 容器的默认内存非常小,因此我们经常看到由此引起的问题。确保为 Docker 容器提供相当数量的内存,然后为 H2O 集群提供比这更少的内存。

标签: python h2o


【解决方案1】:

我在这个问题上花了几个小时,但是当我发布这个问题时,我可以立即解决它。这将是一个典型的橡皮鸭编程

引擎似乎消耗了服务器的所有资源并超出了它的限制。这就是“线程创建失败:资源暂时不可用”消息的原因。

限制内存和线程数解决了这个问题。

h2o.init(ip="127.0.0.1",max_mem_size_GB = 40, nthreads = 2)

【讨论】:

  • 在您的原始帖子中,您有 26.67GB 的内存分配给 H2O 集群,而这里您实际上使用的内存比以前 (40GB) 多 更多。您确定需要将线程数限制为 2 个吗?如果您有 72 个可用,那么不使用它们将是一种耻辱。我会先逐步降低以查看问题所在,而不是尝试 2。
  • 当我将最大内存限制为 200 GB 而没有 nthreads 时,异常是相同的。当线程参数数量有限时,我会解决它。这里,2个线程只是一个试验。当 nthreads 大于 36(我的总核心数的一半)时,它会返回异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多