【发布时间】: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 集群提供比这更少的内存。