在集群上部署xgboost踩过的坑

一定要在linux下工作,以下很多问题都是因为我用的mac。


第一阶段:编译xgboost的c++库,官网教程

使用git下载xgboost时候,必须使用-rescursive,因为里面依赖了其他开源项目,比如rabit。如果弄错了,编译的时候可能会报错缺乏-opf**

在mac下默认是clang编译器,总出错非常坑爹(可能我不会用),用G++比较好。

另外注意,官网上有两种mac的编译方案,第一种编译出来的东西默认不支持多线程,所以在mac下打包还得需要安装第二种方案。一定要仔细看官方教程啊!我之前就是用第一种方案编译的,也没有看说明。

另外,编译要求GCC4.6以上版本,不符合会出错


第二阶段:打包java库

编译成功后,把根目录lib里面的两个.a 和.so文件复制到jvm-package的lib里,之前干的这一步是错误的。这里的包是程序自己编译的,不用手动,不过要gcc4.6以上。接下来在里面使用maven编译。

这里的问题总是在编译spark包的时候,测试出错,经常卡在一个阶段不动,无奈只好使用官网给的跳过测试命令来打包。


第三阶段:与自己写的代码一起打包上传集群运行

报错,import argparser 没有这个包。因为这个包是python2.7的,而集群是python2.6。只好想办法改写源码到2.6。还好2.6有类似的包optparser。改掉tracker.py这个文件。注意这个文件有多份,源头在dcml文件夹里。改好了再次打包,打包后最好再看看里面的文件对不对,tracker.py是否是已经改好的。

又出现另一个问题,unsatisfiedlinkerror,这是因为xgboost打包时我用得mac,所以打包进去了一个dylib文件,在集群上不支持这种文件,重新打包把.a或者.so文件打包进来。这是linux支持的。


其他的一些问题等过两天一起总结,给自己留个印象,下次遇到好解决。

总的来说,各种问题都是因为我是新手,对各个平台系统不太熟悉。实际工作中,涉及很多运维的事情,这个时候就看经验了。作为即将毕业的人,我感觉自己应该好好看看linux系统的东西。

你可能感兴趣的:(XGBoost)