AnyQ 在Linux(centos 7 )上的編譯
肖軼超-河北科技大學畢業
歡迎大家評論指導,然後我修改文檔
一.系統下載及環境安裝
(1)源碼下載到對應的位置
git clone https://github.com/baidu/AnyQ.git
(2)cmake3安裝
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
gmake
gmake install
(3)bison 3.0安裝
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
二.系統編譯
系統及環境下載安裝完以後,進入安裝包目錄,開始進行編譯
cd ./AnyQ
mkdir build && cd build
cmake .. && make
注意事項:在編譯過程中,會遇到多次git clone下載停止的情況,此時只需Ctrl+C暫停程序執行,重新執行cmake .. && make即可。這個過程需要反覆進行,直到成功爲止。
如果報錯
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)
- 如果是paddle編譯時有問題,可以嘗試把文件cmake/external/paddle.cmake中的如下代碼片斷中:
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"
因爲paddle倉庫的tag裏面,反正我是沒有找到"release/0.14.0"
- 如果是xgboost安裝失敗,則可以嘗試把文件cmake/external/xgboost.cmake中的如下片斷中:
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
如果多次編譯開始報錯:/data/xiaoyichao/projects/AnyQ/build/third_party/xgboost 的文件夾不爲空這樣的信息,則需要手動刪除一下這個文件下的內容。
嘗試(2)
/data/xiaoyichao/projects/AnyQ/cmake/external路徑下
然後修改如下兩個文件,使之以單線程編譯即可
將make -j 後邊不等於的變爲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.
解決方法是修改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文件下已存在且不爲空的是時候,根據給出的路徑手動刪一下。
三、構建索引、配置及Web服務的安裝
系統編譯成功以後,在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訪問系統運行界面
五、啓動HTTP-Server
在build路徑下
./run_server
# 請求示例:
http:${host}:${port}/anyq?question=XXX
例如
solr頁面舉例:
http://172.16.10.10:8900/solr/#/collection1/query
參考文獻:
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