使用 YARN 的分布式 xgboost 问题 运行
Problems running distributed xgboost with YARN
我发现有关 YARN 上的 xgboost 分布式模式的教程存在一些问题。
我按照他们的指示操作,但有些问题我无法解决。
我运行正在使用 Hadoop 2.6.0(似乎配置正确)连接 2 个 EC2 实例。
当我 运行 他们使用以下命令进行演示时:
cd xgboost/demo/distributed-training
# Use dmlc-submit to submit the job.
../../dmlc-core/tracker/dmlc-submit --cluster=yarn --num-workers=2 --worker-cores=2\
../../xgboost mushroom.aws.conf nthread=2\
data=s3://${BUCKET}/xgb-demo/train\
eval[test]=s3://${BUCKET}/xgb-demo/test\
model_dir=s3://${BUCKET}/xgb-demo/model
我从 Hadoop 容器中收到以下错误:
Traceback (most recent call last):
File "./launcher.py", line 82, in <module>
main()
File "./launcher.py", line 77, in main
ret = subprocess.call(args=sys.argv[1:], env=env)
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
显然 subprocess
函数似乎无法找到某些文件。所以我试着看看 python 试图调用什么。 subrpocess
的两个参数是:
['../../xgboost', './mushroom.aws.conf', 'nthread=1', 'data=s3://awstest.xgboost/xgb-demo/train', 'eval[test]=s3://awstest.xgboost/xgb-demo/test', 'model_dir=s3://awstest.xgboost/xgb-demo/model']
还有环境字典。环境字典调用 ${PYTHONPATH}
变量,但它似乎是空的,或者至少当我从终端回显它时它是空的。
你知道哪里出了问题吗?
谢谢。
我在您的代码中看到的主要问题是您使用的是相对路径。 dmlc-submit
命令不会在它将使用的每个节点中设置当前目录。
这导致 python 子进程告诉您它找不到 ../.../xgboost
二进制文件,因为路径不相同。
我使用绝对路径来解决这个问题。
题目中的问题是由xgboost构建失败引起的。
之后我开始出现以下错误
what(): [19:15:47] src/io/s3_filesys.cc:779: Check failed: curl_easy_perform(curl) == CURLE_OK Aborted (core dumped)
最后一个错误是因为 S3 存储桶没有有效的 SSL 证书,所以我修改了 s3_filesys.cc
源,将所有 https
替换为 http
我发现有关 YARN 上的 xgboost 分布式模式的教程存在一些问题。
我按照他们的指示操作,但有些问题我无法解决。
我运行正在使用 Hadoop 2.6.0(似乎配置正确)连接 2 个 EC2 实例。
当我 运行 他们使用以下命令进行演示时:
cd xgboost/demo/distributed-training
# Use dmlc-submit to submit the job.
../../dmlc-core/tracker/dmlc-submit --cluster=yarn --num-workers=2 --worker-cores=2\
../../xgboost mushroom.aws.conf nthread=2\
data=s3://${BUCKET}/xgb-demo/train\
eval[test]=s3://${BUCKET}/xgb-demo/test\
model_dir=s3://${BUCKET}/xgb-demo/model
我从 Hadoop 容器中收到以下错误:
Traceback (most recent call last):
File "./launcher.py", line 82, in <module>
main()
File "./launcher.py", line 77, in main
ret = subprocess.call(args=sys.argv[1:], env=env)
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
显然 subprocess
函数似乎无法找到某些文件。所以我试着看看 python 试图调用什么。 subrpocess
的两个参数是:
['../../xgboost', './mushroom.aws.conf', 'nthread=1', 'data=s3://awstest.xgboost/xgb-demo/train', 'eval[test]=s3://awstest.xgboost/xgb-demo/test', 'model_dir=s3://awstest.xgboost/xgb-demo/model']
还有环境字典。环境字典调用 ${PYTHONPATH}
变量,但它似乎是空的,或者至少当我从终端回显它时它是空的。
你知道哪里出了问题吗?
谢谢。
我在您的代码中看到的主要问题是您使用的是相对路径。 dmlc-submit
命令不会在它将使用的每个节点中设置当前目录。
这导致 python 子进程告诉您它找不到 ../.../xgboost
二进制文件,因为路径不相同。
我使用绝对路径来解决这个问题。
题目中的问题是由xgboost构建失败引起的。
之后我开始出现以下错误
what(): [19:15:47] src/io/s3_filesys.cc:779: Check failed: curl_easy_perform(curl) == CURLE_OK Aborted (core dumped)
最后一个错误是因为 S3 存储桶没有有效的 SSL 证书,所以我修改了 s3_filesys.cc
源,将所有 https
替换为 http