H2OAutoML在训练步骤中引发libgomp异常

时间:2019-09-02 14:51:18

标签: python h2o

我使用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配置造成的。

1 个答案:

答案 0 :(得分:1)

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

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

限制内存和线程数可以解决此问题。

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