git clone https://github.com/baidu/AnyQ.git
1)安装gcc/g++的软件依赖
yum install -y gcc gcc-c++ make automake
2)下载cmake源代码包(推荐3.3.2),
可以去官网查看最新版的下载地址:https://cmake.org/download/
wget https://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
解压cmake源码包
tar -zxvf cmake-3.3.2.tar.gz
进入目录,设置,编译,链接
cd cmake-3.3.2/
./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make
make install
cmake --version 检查cmake版本
方式1(yum,推荐此方法):
yum install bison
bison -V
返回结果
bison (GNU Bison) 3.0.4
方式2(源码安装,不推荐):
cd /usr/local/src
wget http://ftp.gnu.org/gnu/bison/bison-3.5.tar.gz
tar -zxvf bison-3.5.tar.gz
cd bison-3.5
./configure
make
make install
检查
bison -V
可能会出现command not found的报错。所以不推荐。这是因为环境路径没添加上导致的。
yum install automake
yum install java-1.8.0-openjdk-devel
java -version 检测是否安装成功
系统及环境下载安装完以后,进入安装包目录,开始进行编译
cd /data/xiaoyichao/projects/AnyQ
mkdir build && cd build
cmake ..
下边写的那些报错全会出,都直接修改就可以了。别浪费时间了。如果你想节省时间,可以使用我修改好的cmake配置文件,直接这个/data/project/AnyQ/cmake/路径下的external整个替换掉就可以了。我把所有修改好的cmake配置文件都放在external里了。相信我的配置,有时候git 的网速超慢,也不要杀掉编译程序,等就行了。你要是觉得慢可以尝试把git搞得快一点,但是配置文件没有问题的,我多次复现,而且这些源没有需要翻墙的。国内的网就可以全部下载,慢是因为git 下载资源慢。
我修改好的external文件链接:https://pan.baidu.com/s/1lDLKwZcvtzgG9jXbFw3h4Q 密码:e0se
然后:
git config http.postBuffer 64288000
这是为了防治长时间下载,git默认给的buffer不足,导致不能下载成功。
接下来:
make
(mac ) CXX=g++-9 make
如果这些修改都做完了,如果还是报错(例如资源下载失败或是其他像是cmake导致的报错而不是我们的cmake配置文件不对导致的报错),就make -i进行编译,如果这样的方式没有生成run_server文件,再使用make编译一下。
如果需要放在后台进行,参考如下的指令,但是一般不需要使用这个方式,跳板机的设计是30分钟无响应自动断开与服务器的连接,正常的情况下,编译的过程会一直print日志到终端,所以不会断开与服务器的连接而导致编译失败。但是网速不好的时候就会断开连接,所以可以用下边的这句话。
nohup cmake .. && make > /data/xiaoyichao/projects/AnyQ/build/logs.log 2>&1 &
查看nohup的进程
jobs -l
注意事项:在编译过程中,会遇到多次git clone下载慢的情况,此时只需等待即可。啥也不用做,除非报错,你才需要重新make,网上说慢就杀掉程序,这是解决不了问题的,你重新来,还是慢!所以正确的方案是wait,just wait!
cmake
如果报错
make[3]: *** [all] 错误 2
make[2]: *** [third_party/paddle/src/extern_paddle-stamp/extern_paddle-build] 错误 2
make[1]: *** [CMakeFiles/extern_paddle.dir/all] 错误 2
make: *** [all] 错误 2
尝试(1)
ExternalProject_Add(
extern_paddle
${EXTERNAL_PROJECT_LOG_ARGS}
GIT_REPOSITORY "https://github.com/PaddlePaddle/Paddle.git"
GIT_TAG "release/0.14.0" #这里,这里
PREFIX ${PADDLE_SOURCES_DIR}
CONFIGURE_COMMAND mkdir -p ${PADDLE_INSTALL_DIR} && cd ${PADDLE_INSTALL_DIR} && ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${PADDLE_INSTALL_DIR}
-DCMAKE_BUILD_TYPE=Release -DWITH_PYTHON=OFF -DWITH_MKL=ON -DWITH_MKLDNN=OFF -DWITH_GPU=OFF -DWITH_FLUID_ONLY=ON <SOURCE_DIR>
BUILD_COMMAND cd ${PADDLE_INSTALL_DIR} && make -j16
INSTALL_COMMAND cd ${PADDLE_INSTALL_DIR} && make inference_lib_dist
UPDATE_COMMAND ""
)
GIT_TAG的值改为"v0.14.0"
GIT_TAG "v0.14.0"
因为paddle仓库的tag里面,反正我是没有找到"release/0.14.0"。但是这样下载也可以成功,有人曾经成功了。因为在那个项目的分支里有release/0.14.0
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 #这里需要指定版本
DOWNLOAD_NO_PROGRESS 1
PREFIX ${XGBOOST_SOURCES_DIR}
BUILD_COMMAND ""
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
INSTALL_COMMAND cd ${XGBOOST_INSTALL_DIR} && make -j4
BUILD_IN_SOURCE 1
)
把DOWNLOAD_COMMAND 值改为git clone -b v0.90 --recursive https://github.com/dmlc/xgboost.git && cd xgboost && git checkout v0.90
修改后:
DOWNLOAD_COMMAND git clone -b v0.90 --recursive https://github.com/dmlc/xgboost.git && cd xgboost && git checkout v0.90
如果多次编译开始报错:/data/xiaoyichao/projects/AnyQ/build/third_party/xgboost 的文件夹不为空这样的信息,则需要手动删除一下这个文件下的内容。
尝试(2)
/data/xiaoyichao/projects/AnyQ/cmake/external路径下
然后修改如下两个文件(paddle.cmake, xgboost.cmake),使之以单线程编译即可
将make -j 后边不等于的变为1
如果想要配置多线程,这两项不要修改为1。
xgboost.cmake:
INSTALL_COMMAND cd ${XGBOOST_INSTALL_DIR} && make -j1
paddle.cmake
BUILD_COMMAND cd ${PADDLE_INSTALL_DIR} && make -j1
如果报错
make[2]: *** No rule to make target 'libanyq.a', needed by 'run_server'. Stop.
[100%] Built target run_server
我这里定位到问题是
编译错误
${XGBOOST_INSTALL_DIR}/dmlc-core/include/* ${XGBOOST_INSTALL_DIR}/rabit/include/*
Header files of dmlc in rabit should not be copy to the target directory, which will overwrite the right one.
解决方法是修改/data/xiaoyichao/projects/AnyQ/cmake/external/xgboost.cmake文件
##原始内容
COMMAND cp -r ${XGBOOST_INSTALL_DIR}/dmlc-core/include/* ${XGBOOST_INSTALL_DIR}/rabit/include/* third_party/include/
##修改为
COMMAND cp -r ${XGBOOST_INSTALL_DIR}/dmlc-core/include/* ${XGBOOST_INSTALL_DIR}/rabit/include/rabit third_party/include/
多次编译,如果提示xgboost文件下已存在且不为空的是时候,根据给出的路径手动删一下。
如果报错
error: RPC failed; result=18, HTTP code = 200MiB | 16.00 KiB/s
这是因为git 的缓存设置的太小。
使用如下指令,再make
git config http.postBuffer 64288000
如果还出现了其他cmake导致的报错,请使用 make -i来替换make指令,不一定要让make -i这个指令跑完就行,跑一段时间可以杀掉,然后继续使用make指令,因为make -i编译出来的文件会缺少run_server文件,所以最后一次编译成功一定要使用make才可以。
最后显示如下,即为编译成功.正确生成了run_server文件。
[100%] Linking CXX executable run_server
[100%] Built target run_server
系统编译成功以后,在AnyQ/build目录下,执行下面的命令
获取AnyQ定制solr、AnyQ示例配置
cp ../tools/anyq_deps.sh .
需要切换到python2 的环境中,因为这个项目的python代码是基于py2写的
conda activate xiaoenv2
sh anyq_deps.sh
启动solr, 依赖python-json, jdk>=1.8(JDK的安装请参考:https://www.linuxidc.com/Linux/2016-09/134941.htm)
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs
上面步骤执行成功以后,即可在build目录下运行系统,代码如下:
./run_server
系统运行成功后,即可通过http://IP:8999访问系统运行界面
在build路径下
./run_server
# 请求示例:
http:${host}:${port}/anyq?question=XXX
例如
solr页面举例:
http://172.16.10.10:8900/solr/#/collection1/query
cd /data/xiaoyichao/projects/AnyQ/build/
cp -pf solr_script/sample_docs ../tools/solr/
输入
y
cp -rp ../tools/solr ./solr_script
mkdir -p faq
python solr_script/make_json.py solr_script/sample_docs faq/schema_format faq/faq_json
awk -F "\t" '{print ++ind"\t"$0}' faq/faq_json > faq/faq_json.index
dict_config{
name: "fluid_simnet"
type: "PaddleSimAdapter"
path: "./simnet"
}
analysis_method {
name: "method_simnet_emb"
type: "AnalysisSimNetEmb"
using_dict_name: "fluid_simnet"
dim: 128
query_feed_name: "left"
cand_feed_name: "right"
embedding_fetch_name: "tanh.tmp"
}
./annoy_index_build_tool example/conf/ example/conf/analysis.conf faq/faq_json.index 128 10 semantic.annoy 1>std 2>err
cp faq/faq_json.index semantic.annoy example/conf
dict_config {
name: "annoy_knowledge_dict"
type: "String2RetrievalItemAdapter"
path: "./faq_json.index"
}
retrieval_plugin {
name : "semantic_recall"
type : "SemanticRetrievalPlugin"
vector_size : 128
search_k : 10000
index_path : "./example/conf/semantic.annoy"
using_dict_name: "annoy_knowledge_dict"
num_result : 10
}
https://github.com/baidu/AnyQ/issues/192
https://blog.stormbirds.cn/articles/2019/04/09/1554797567784.html
https://rqsir.github.io/2019/04/10/%E7%99%BE%E5%BA%A6anyQ-%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF/
http://www.hongxuejing.com/linux/linux_bison-23.html