我使用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跟踪(最近的调用) 最后)〜/ .local / lib / python3.6 / site-packages / urllib3 / connectionpool.py 在urlopen(self,method,url,body,标头,重试,重定向, 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(自我,conn,方法,URL,超时,分块,** httplib_request_kw) 383#否则,似乎是编程错误引起的。 -> 384 six.raise_from(e,None) 385除了(SocketTimeout,BaseSSLError,SocketError)为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(自我,conn,方法,URL,超时,分块,** 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而True: -> 297版本,状态,原因= self._read_status() 298如果状态!=继续:
/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py在 _read_status(个体) 257 def _read_status(self): -> 258行= str(self.fp.readline(_MAXLINE + 1),“ iso-8859-1”) 259 if len(line)> _MAXLINE:
/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(自我,方法,URL,正文,标头,重试,重定向, assert_same_host,超时,pool_timeout,release_conn,分块, body_pos,** response_kw) 637次重试= retries.increment(方法,url,错误= e,_pool =自我, -> 638 _stacktrace = sys.exc_info()[2]) 639重试.sleep()
〜/ .local / lib / python3.6 / site-packages / urllib3 / util / retry.py在 增量(自身,方法,URL,响应,错误,_pool,_stacktrace) 第367章 -> 368加六.reraise(type(error),error,_stacktrace) 369 elif read不是None:
〜/ .local / lib / python3.6 / site-packages / urllib3 / packages / six.py在 加价(tp,值,tb) 684如果值。回溯不是tb: -> 685提高值.with_traceback(tb) 686增值
〜/ .local / lib / python3.6 / site-packages / urllib3 / connectionpool.py在 urlopen(自我,方法,URL,正文,标头,重试,重定向, 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(自我,conn,方法,URL,超时,分块,** httplib_request_kw) 383#否则,似乎是编程错误引起的。 -> 384 six.raise_from(e,None) 385除了(SocketTimeout,BaseSSLError,SocketError)为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(自我,conn,方法,URL,超时,分块,** 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而True: -> 297版本,状态,原因= self._read_status() 298如果状态!=继续:
/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py在 _read_status(个体) 257 def _read_status(self): -> 258行= str(self.fp.readline(_MAXLINE + 1),“ iso-8859-1”) 259 if len(line)> _MAXLINE:
/opt/rh/rh-python36/root/usr/lib64/python3.6/socket.py在 读入(自己,b) 585尝试: -> 586返回self._sock.recv_into(b) 587,除了超时:
ProtocolError :(“连接已中止。”,ConnectionResetError(104, “由对等方重置连接”))
在处理上述异常期间,发生了另一个异常:
ConnectionError跟踪(最近的呼叫 最后)〜/ .local / lib / python3.6 / site-packages / h2o / backend / connection.py 在请求中(自身,端点,数据,json,文件名,save_to) 404标头=标头,超时=自我。_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在 请求(方法,URL,** kwargs) 59个带有session.Session()作为会话的会话: ---> 60 return session.request(method = method,url = url,** kwargs) 61
〜/ .local / lib / python3.6 / site-packages / requests / sessions.py在 请求(自身,方法,URL,参数,数据,标头,Cookie,文件, 身份验证,超时,allow_redirects,代理,挂钩,流,验证,证书, json) 532 send_kwargs.update(设置) -> 533 resp = self.send(prep,** send_kwargs) 534
〜/ .local / lib / python3.6 / site-packages / requests / sessions.py在 发送(自己,请求,**假) 645#发送请求 -> 646 r = adapter.send(request,** kwargs) 647
〜/ .local / lib / python3.6 / site-packages / requests / adapters.py在 发送(自身,请求,流,超时,验证,证书,代理) 497除了(ProtocolError,socket.error)作为err: -> 498引发ConnectionError(err,request = request) 499
ConnectionError :(“连接已中止。”,ConnectionResetError(104, “由对等方重置连接”))
在处理上述异常期间,发生了另一个异常:
H2OConnectionError追溯(最近的呼叫 最后) ----> 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在 火车(自我,x,y,training_frame,fold_column,weights_column, 验证帧,页首横幅帧,混合帧) 443 poll_updates = ft.partial(self._poll_training_updates,verbosity = self._verbosity,state = {}) 444尝试: -> 445个self._job.poll(poll_updates = poll_updates) 446终于: 447 poll_updates(self._job,1)
〜/ .local / lib / python3.6 / site-packages / h2o / job.py in poll(self, poll_updates) 55 pb = ProgressBar(标题= self._job_type +“进度”,隐藏=隐藏) 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(个体) 92 def _refresh_job_status(自己): 93,如果self._poll_count <= 0:提高StopIteration(“”) ---> 94个作业= h2o.api(“ GET / 3 / Jobs /%s”%self.job_key) 95 self.job =工作[“工作”] [0]如果工作中的“工作”则其他工作[“工作”] [0] 96 self.status = self.job [“ status”]
api中的〜/ .local / lib / python3.6 / site-packages / h2o / h2o.py(端点,数据, json,文件名,save_to) 102#类型检查在H2OConnection类中执行 103_check_connection() -> 104 return h2oconn.request(端点,数据=数据,json = json,文件名=文件名,save_to =保存_to) 105 106
〜/ .local / lib / python3.6 / site-packages / h2o / backend / connection.py在 请求(自身,端点,数据,json,文件名,save_to) 413其他: 414 self._log_end_exception(e) -> 415引发H2OConnectionError(“意外的HTTP错误:%s”%e) 416除了request.exceptions.Timeout为e: 417 self._log_end_exception(e)
H2OConnectionError:意外的HTTP错误:(“连接已中止。”, ConnectionResetError(104,'对等连接重置'))
我怀疑代理可能是此异常的原因。当我将代理信息添加到路径时,异常消息将为“ HTTP 500 INKApi错误”
import os
os.environ['http_proxy']= ...
os.environ['https_proxy']= ...
JVM stdout日志文件转储以下异常。
[线程140335217821440也有错误] [线程140335320467200也 有错误] [线程140335207294720也有错误]
[线程140335316256512也有错误]#Java运行时环境检测到致命错误:
[线程140335202031360也出现错误] SIGSEGV(0xb)at pc = 0x00007fa3276cdb8d,pid = 51986,tid = 0x00007fa2575f5700
JRE版本:OpenJDK运行时环境(8.0_212-b04)(内部版本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配置造成的。
答案 0 :(得分:1)
我花了几个小时解决这个问题,但是发布此问题后我可以立即解决。这将是典型的橡皮鸭编程。
似乎引擎消耗了服务器的所有资源,并超出了其限制。这是“线程创建失败:资源暂时不可用”消息的原因。
限制内存和线程数可以解决此问题。
h2o.init(ip="127.0.0.1",max_mem_size_GB = 40, nthreads = 2)