64位centos 6.7+gcc 4.4.7下配置lightLDA

因为需要用到LDA在一些大型预料上做一些实验和业务,根据一些资料显示lightLDA是目前来看性能最好的开源工具,于是我就尝试在公司服务器上安装配置lightLDA,过程没有想象中那么容易,在这里把过程记录下来,希望后来人尽量少踩些坑。

Why lightLDA

LDA工具评测:
http://www.flickering.cn/uncategorized/2016/05/peacock%E9%87%87%E6%A0%B7%E7%AE%97%E6%B3%95%E6%80%A7%E8%83%BD%E6%AF%94%E8%BE%83/

大致看了一下sparkLDA和JGibbsLDA,前者不支持Gibbs采样,还是用的EM和差分推理。后者是一个需要用命令行运行的工程,应该可以整合到spark,但是基于对lightLDA高性能口碑的好奇和兴趣,以及假如要使用lda模型,大型语料上的运行性能还是很重要的,所以还是选择配置一个lightLDA试试

gcc升级到4.8.5

lightLDA需要gcc版本在4.8.5,否则会报std-c++ 11等错误,所以在安装之前先对gcc进行升级。
安装过程主要参考了下面的文档,下载包和安装过程敲命令的时候注意下版本号就行了。

http://blog.techbeta.me/2015/10/linux-centos6-5-upgrade-gcc/
https://itbilu.com/linux/management/V1vdnt9ll.html
http://blog.csdn.net/zcc_0015/article/details/51506947

安装gcc/c++编译器以及内核文件
yum -y install gcc gcc-c++ kernel-devel
安装C和C++的静态库
yum install -y glibc-static libstdc++-static
安装旧版本的gcc、c++编译器
yum install gcc gcc-c++
下载安装文件
wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
解压安装文件
tar zxf gcc-4.8.5.tar.gz
转到源程序根目录
cd gcc-4.8.5
下载一些必备的依赖程序(自动完成)
./contrib/download_prerequisites
建立一个输出目录,编译时所有生成的中间文件都放到该目录下
mkdir build
cd build
执行configure配置安装文件
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
编译
make
安装
make install

完成后会在/usr/local/bin/中有unknown xxx gcc-xxx的包(下面用新gcc指代),需要改变系统默认的gcc,可以第三个参考资料中创建软链接或者第二个参考资料里的方式,注意备份
which gcc 如果显示的是/usr/bin/gcc,也有可能是usr/local/gcc,看你是不是管理员用户了,下面先进行备份,再建立软链接
mv /usr/bin/gcc /usr/bin/gcc4.4.7
ln -s /usr/local/bin/gcc(新gcc) /usr/bin/gcc
另外,g++, cc, c++这几个命令也要改
mv /usr/bin/g++ /usr/bin/g++4.4.7
ln -s /usr/local/bin/g++(新) /usr/bin/g++
mv /usr/bin/cc /usr/bin/cc4.4.7
ln -s /usr/local/bin/cc(新) /usr/bin/cc
mv /usr/bin/c++ /usr/bin/c++4.4.7
ln -s /usr/local/bin/c++(新) /usr/bin/c++

全部完成重新登入就会看到改变
gcc --version
g++ --version
都会显示4.8.5

因为我在第一次安装失败的时候找错误做实验把管理员的gcc版本也改了,后面安装成功不知道有没有这个操作的影响,下次安装的时候再测试做更新,不放心的可以把管理员的gcc版本也升级了,操作和上面的一样,把/usr/bin中的gcc和g++备份后做新的软链接。

lightLDA安装

我按照官方给出的安装教程会失败,后面检查发现是因为无法正常下载一个依赖包,也许只是我网络的原因。下面进入正题。

官方安装文档https://www.dmtk.io/lightlda.html#p2

  1. 下载代码到本地
    $ git clone https://github.com/Microsoft/lightlda
    cd lightlda
  2. 运行官方给出的build.sh
    sh ./build.sh

如果没有报错,那么恭喜,一次成功了,可以跳过安装这一节了。如果报错了可能就是下面要说的错误。

  1. 我碰到的问题和解决方法

cannot find -lmultiverso

仔细查看了下运行时的提示信息,发现有一个依赖包下载失败,然后继续执行后面的命令了。

错误提示

于是看一下build.sh的代码

git clone -b multiverso-initial git@github.com:Microsoft/multiverso.git   #下载DMTK到multiverso文件夹下
cd multiverso      
cd third_party
sh install.sh   #先安装DMTK的第三方包
cd ..   
make -j4 all   #编译安装DMTK
cd ..
make -j4       #编译安装LightLDA

从代码里可以看到安装lightLDA之前就把依赖的DMTK平台安装了,如果这一步有问题,比如

Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
Permission denied (publickey).

可以换一个下载源,语句换为:
git clone -b multiverso-initial https://github.com/Microsoft/multiverso.git

multverso/third_party下的install.sh代码

# /bin/bash
# install third party library: 1. ZeroMQ, 2. MPICH2

THIRD_PARTY_DIR=$PWD
echo $TARGET_DIR

ZMQ_DIR=zeromq-4.1.3
MPI_DIR=mpich-3.0.4
# 1. Get ZeroMQ
wget http://download.zeromq.org/zeromq-4.1.3.tar.gz
tar -zxf zeromq-4.1.3.tar.gz

# Build ZeroMQ
# Make sure that libtool, pkg-config, build-essential, autoconf and automake
# are installed.
cd $ZMQ_DIR
./configure --prefix=$THIRD_PARTY_DIR --without-libsodium
make -j4
make install -j4
cd ..
rm -rf $ZMQ_DIR

# Get the C++ Wrapper zmq.hpp
wget https://raw.githubusercontent.com/zeromq/cppzmq/master/zmq.hpp
mv zmq.hpp $THIRD_PARTY_DIR/include

# Get MPICH2
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
tar -zxf mpich-3.0.4.tar.gz

# Build MPICH2
cd $MPI_DIR
./configure --prefix=$THIRD_PARTY_DIR --disable-fc --disable-f77
make -j4
make install -j4
cd ..
rm -rf $MPI_DIR

rm *.tar.gz*

一条一条执行,发现是在下载zeromq时失败了,在网上找了另外一个下载源
https://github.com/zeromq/zeromq4-1/releases/download/v4.1.3/zeromq-4.1.3.tar.gz
可以用这个地址替换掉代码中的地址,或者本地下载完之后上传到/multiverso/third_party下然后删掉(注释掉)代码中的下载语句。

再执行还会报bin/lightlda: error while loading shared libraries: libzmq.so.5: cannot open shared object file: No such file or directory的错误
需要在/etc下的ld.so.conf里添加libzmq.so.5的位置
查找文件位置
sudo find / libzmq.so.5
输出在lightlda/multiverso/third_party/lib目录下
把这个目录加入到/etc/ld.so.conf文件中后执行sudo ldconfig命令即可

再执行应该就没有问题了。

测试

代码中给了一个测试方法,但是不能直接使用,依然观察一下代码

#!/bin/bash

root=`pwd`
echo $root
bin=$root/../bin
dir=$root/data/nytimes

mkdir -p $dir
cd $dir

# 1. Download the data
wget https://archive.ics.uci.edu/ml/machine-learning-databases/bag-of-words/docword.nytimes.txt.gz
gunzip $dir/docword.nytimes.txt.gz
wget https://archive.ics.uci.edu/ml/machine-learning-databases/bag-of-words/vocab.nytimes.txt

# 2. UCI format to libsvm format
python $root/text2libsvm.py $dir/docword.nytimes.txt $dir/vocab.nytimes.txt $dir/nytimes.libsvm $dir/nytimes.word_id.dict

# 3. libsvm format to binary format
$bin/dump_binary $dir/nytimes.libsvm $dir/nytimes.word_id.dict $dir 0

# 4. Run LightLDA
$bin/lightlda -num_vocabs 111400 -num_topics 1000 -num_iterations 100 -alpha 0.1 -beta 0.01 -mh_steps 2 -num_local_workers 1 -num_blocks 1 -max_num_document 300000 -input_dir $dir -data_capacity 800

是想先下载一个数据集,然后进行格式转换,然后设定一些参数运行lightlda。
这里可能会碰到几个问题:

  1. 数据集下载太慢,换数据源,https://bigartm.readthedocs.io/en/v0.8.2/download.html网站上有相同的数据,同样可以替换代码中的链接或

第一个链接https://s3-eu-west-1.amazonaws.com/artm/docword.nytimes.txt.gz
第二个链接https://s3-eu-west-1.amazonaws.com/artm/vocab.nytimes.txt

  1. 第二步的text2libsvm.py并不在该目录下,而是在其下的example目录下。可能还有其他的路径问题,自己设置路径,然后手动一步一步的执行。

  2. 第三步dump_binary会报错,后面应该还会用到这个命令,修复可以参考http://blog.csdn.net/officercat/article/details/39519265

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found 
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found

至此就可以进行测试了,测试可以发现,随着迭代次数增加,每轮迭代需要的时间是越来越少的

第1轮.png
第42轮.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容