Linux系统上 编译安装百度开源AnyQ(非docker环境)

博客和知乎上面这两个帖子提供了部分思路,但是我仍然编译失败,参考解决方案,最终编译成功,做个记录,留给有用的人,代码片段转载自各个博客,并保留原链接地址
https://zhuanlan.zhihu.com/p/73590442 提供错误解决方案
https://blog.csdn.net/qq_28385535/article/details/83213822 提供安装思路

服务器环境 阿里云轻量应用服务器,1核1G 40G硬盘(没钱买高配)
系统环境 Aliyun Linux 2.19.03
首先, 编译的时候需要内存比较多,因为没钱,所以。用的虚拟内存。。如果你的内存空间大于8GB,你可以尝试直接进行编译

虚拟内存设置步骤如下(内存足够请无视)
我的虚拟内存配置15G

查看内存:free -m , -m是显示单位为MB,-g单位GB
创建一个文件:touch /root/swapfile

使用dd命令,来创建大小为2G的文件swapfile:
dd if=/dev/zero of=/root/swapfile bs=64M count=240   //命令执行完需要等待一段时间
if表示input_file输入文件
of表示output_file输出文件
bs表示block_size块大小
count表示计数。
这里,我采用了数据块大小为64M,数据块数目为240,这样分配的空间就是15G大小。
格式化交换文件:mkswap /root/swapfile

启用交换文件:swapon /root/swapfile

开机自动加载虚拟内存,在/etc/fstab文件中加入如下命令:
/root/swapfile swap swap defaults 0 0

重启后生效reboot


如果要删除交换分区和交换文件,逆着上面的顺序操作:

先删除/etc/fstab文件中添加的交换文件行
停用交换文件swapoff /root/swapfile

删除交换文件rm -fr /root/swapfile

作者:Jarhf
链接:https://www.jianshu.com/p/fae46241ba0c
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

linux 编译需要将GLIBC弄成2.23版本,如果你是这个版本请无视,版本更高,我也不清楚能否可行
步骤如下(先开两个终端窗口)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20989105/article/details/90712139
注意:Centos 为了稳定使用的glibc版本通常比较低。而安装有些程序需要依赖新版本。升级glibc需要慎重,因很多人升级失败后导致系统不能用了。

本人亲测,升级了多台机器,全部升级成功。

glibc简介
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。

查看系统glibc库版本可使用如下命令:

$ strings /lib64/libc.so.6 |grep GLIBC_

大家在遇到glibc库问题时候,可以先考虑下为什么要升级GLIBC库,能够通过其他影响性相对小的方式:

在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性
用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内
利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。
确认无法解决,再考虑升级GLIBC库,我升级该库是由于在tensorflow1.13.1版本运行报错:

ImportError:  /lib64/libm.so.6: version `GLIBC_2.23' not found

升级步骤
1、 首先下载对应版本的安装包
# wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

2、解压、新建编译目录目录
# tar xf glibc-2.23.tar.gz
# cd glibc-2.23/
# mkdir glibc-build
# cd glibc-build (一定要在新建的目录中操作)

3、安装
# ../configure --prefix=/usr
# make
# make install

在make install 时可能会跳出错误(类似的应该是因为软链接的版本不对造成的)

gawk '/\.gnu\.glibc-stub\./ { \
          sub(/\.gnu\.glibc-stub\./, "", $2); \
          stubs[$2] = 1; } \
        END { for (s in stubs) print "#define __stub_" s }' > /root/glibc-2.23/glibc-build/math/stubsT
gawk: error while loading shared libraries: /lib64/libm.so.6: invalid ELF header
make[2]: *** [/root/glibc-2.23/glibc-build/math/stubs] Error 127
make[2]: Leaving directory `/root/glibc-2.23/math'
make[1]: *** [math/subdir_install] Error 2
make[1]: Leaving directory `/root/glibc-2.23'
make: *** [install] Error 2

解决办法(在另外的窗口执行):

# cd /lib64
# unlink libm.so.6
# ln -s libm-2.23.so libm.so.6

然后再次执行make install
看到如下信息就是安装成功了

LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/glibc-build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'


4、验证
# ldd --version
ldd (GNU libc) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.


升级成功!
 ———————————————— 
版权声明:本文为CSDN博主「Little Programmer」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20989105/article/details/90712139

检测你的CXXABI版本(具体需要的版本号记不清楚了,应该是1.3.8)

1,通过下面的命令查看/usr/lib64/下的动态库版本
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
1.1  通过下面的命令查看gcc最新态库版
   find / -name "libstdc++.so.*"

2,  从网上下载所需要的libstdc++.so.6.0.22版本。
3, libstdc++.so.6.0.22拷贝到/usr/lib64目录下。
  cp libstdc++.so.6.0.22 /usr/lib64/

4,  删除原来的libstdc++.so.6符号连接。
  rm -rf libstdc++.so.6

5,  新建新符号连接。
  ln -s libstdc++.so.6.0.22 libstdc++.so.6

作为好人,当然要提供libstdc++.so.6.0.22下载连接:
https://pan.baidu.com/s/1H2vv_XGQq1MkW-nUsp62nQ

作者:yemazhuxing
来源:CSDN
原文:https://blog.csdn.net/yemazhuxing/article/details/80399595
版权声明:本文为博主原创文章,转载请附上博文链接!

作者:萤火虫de梦
链接:https://www.jianshu.com/p/df8e82ade760
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

一、安装编译依赖环境
我的gcc 版本4.8.5
bison 版本 3.0.4
cmake 版本3.7.2
python 版本 3.7
jdk 版本1.8

yum install -y gcc-c++
yum install -y automake
yum install -y bison
yum install -y cmake
yum install -y git
yum install -y java-1.8.0-openjdk

安装python 3.7
yum install libffi-devel
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
tar -xzvf Python-3.7.1.tgz 
cd Python-3.7.1
yum install gcc* glien* -y 
./configure --prefix=/usr/local/python3.7
make
make install

二、下载AnyQ到服务器

git clone https://github.com/baidu/AnyQ.git

三、修改配置

修改AnyQ/cmake/external下的xgboost.cmake文件,可以直接复制粘贴,
注意:
	 INSTALL_COMMAND  cd ${XGBOOST_INSTALL_DIR} && make -j1 这里的-j1是因为我的服务器只有一个cpu核心,源文件是-j4

以下是文件内容

INCLUDE(ExternalProject)

SET(XGBOOST_SOURCES_DIR ${THIRD_PARTY_PATH}/xgboost)
SET(XGBOOST_INSTALL_DIR ${XGBOOST_SOURCES_DIR}/src/xgboost)

ExternalProject_Add(

extern_xgboost

${EXTERNAL_PROJECT_LOG_ARGS}

DOWNLOAD_DIR ${XGBOOST_SOURCES_DIR}/src/

DOWNLOAD_COMMAND git clone --recursive https://github.com/dmlc/xgboost.git && cd xgboost && git checkout v0.81
    DOWNLOAD_NO_PROGRESS  1
    PREFIX          ${XGBOOST_SOURCES_DIR}
    BUILD_COMMAND         ""
    UPDATE_COMMAND ""
    CONFIGURE_COMMAND ""
    INSTALL_COMMAND  cd ${XGBOOST_INSTALL_DIR} && make -j1
    BUILD_IN_SOURCE 1
)

add_custom_command(TARGET extern_xgboost POST_BUILD
    COMMAND mkdir -p third_party/lib/
    COMMAND mkdir -p third_party/include/
    COMMAND cp -r ${XGBOOST_INSTALL_DIR}/include/* third_party/include/
    COMMAND cp -r ${XGBOOST_INSTALL_DIR}/lib/* third_party/lib
    COMMAND cp ${XGBOOST_INSTALL_DIR}/rabit/lib/librabit.a ${XGBOOST_INSTALL_DIR}/dmlc-core/libdmlc.a third_party/lib/
    COMMAND cp -r ${XGBOOST_INSTALL_DIR}/src third_party/
    COMMAND cp -r ${XGBOOST_INSTALL_DIR}/dmlc-core/include/* ${XGBOOST_INSTALL_DIR}/rabit/include/* third_party/include/
)

四、配置github加速(可选操作)
我用的是更改hosts文件方法,如果你有更好的请告诉我,谢谢

vi  /etc/hosts
把下面的东西粘进去

# GitHub
151.101.44.249 github.global.ssl.fastly.net 
192.30.253.113 github.com 
103.245.222.133 assets-cdn.github.com 
23.235.47.133 assets-cdn.github.com 
203.208.39.104 assets-cdn.github.com 
204.232.175.78 documentcloud.github.com 
204.232.175.94 gist.github.com 
107.21.116.220 help.github.com 
207.97.227.252 nodeload.github.com 
199.27.76.130 raw.github.com 
107.22.3.110 status.github.com 
204.232.175.78 training.github.com 
207.97.227.243 www.github.com 
185.31.16.184 github.global.ssl.fastly.net 
185.31.18.133 avatars0.githubusercontent.com 
185.31.19.133 avatars1.githubusercontent.com

wq保存文件
重启网络服务 service network restart
下载速度从15K提升到了50K ,感觉快了不少。。。

五、进行编译

在AnyQ目录中执行
mkdir build && cd build && cmake .. && make
漫长的等待。。。。。
注意事项:
在编译过程中,会遇到多次git clone下载停止的情况,此时只需Ctrl+C暂停程序执行,
重新执行cmake .. && make即可。这个过程需要反复进行,直到成功为止。
一旦git clone失败 可以在 AnyQ/build目录下执行 cmake .. && make

我的服务器比较渣,编译时间很久。用了将近30多个小时。。。。

编译过程中会有许多的警告,请无视他。。。。。
如果编译顺利完成,在最后你应该能看到如下图片

在这里插入图片描述

此时AnyQ已经顺利编译成功,build 目录下面应该有run_server文件存在
注:此时没有example文件存在,所以./run_server会执行失败
解决方法:
需要获取百度给我们提供的example

# 获取anyq定制solr,anyq示例配置
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh

# 启动solr, 依赖python-json, jdk>=1.8
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs

耐心等待他完成,example获取完成之后,可以正常启动服务了
./run_server

结束
如果对你有用,请点个赞吧

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
要实现提取问题中的参数并调用API,你需要进行以下步骤: 1. 对问题进行自然语言处理。你可以使用Python中的自然语言处理库,例如NLTK、spaCy、Stanford NLP等,来对问题进行分析和解析。 2. 从问题中提取参数。一旦你对问题进行了解析,就可以使用词性标注和命名实体识别等技术来提取参数。例如,如果问题是“北京天气怎么样?”,你可以使用命名实体识别来找到“北京”这个地点的参数。 3. 调用API。一旦你提取出了参数,就可以使用它们来调用相应的API。例如,如果你想要查询北京的天气,你可以使用天气API,并将“北京”作为参数传递给该API。 下面是一个简单的Python代码示例,演示如何从问题中提取参数并调用API: ```python import requests import json import nltk # 问题 question = "北京天气怎么样?" # 分词和词性标注 tokens = nltk.word_tokenize(question) tags = nltk.pos_tag(tokens) # 命名实体识别 ne_chunked = nltk.ne_chunk(tags) entities = [] for chunk in ne_chunked: if hasattr(chunk, 'label') and chunk.label() == 'GPE': entities.append(' '.join(c[0] for c in chunk)) # 调用API if len(entities) > 0: url = "http://api.openweathermap.org/data/2.5/weather?q={}&appid=your_app_id".format(entities[0]) response = requests.get(url) data = json.loads(response.text) print("天气:{}".format(data['weather'][0]['description'])) else: print("无法识别问题中的地点参数") ``` 在这个示例中,我们使用NLTK库对问题进行了分词和词性标注,然后使用命名实体识别找到了问题中的地点参数。接着,我们使用天气API来查询该地点的天气,并将查询结果输出到控制台中。 希望这个示例可以帮助你实现提取问题中的参数并调用API的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂的菜小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值