AnyQ 環(huán)境配置(mac環(huán)境或者win環(huán)境)
安裝 Docker
Docker image 獲取
docker pull docker.paddlepaddlehub.com/paddle:latest-dev
Docker 容器
docker run -it -p 22:22 -p 8999:8999 --name AnyQ (imageid)
clone AnyQ
git clone https://github.com/baidu/AnyQ.git
make
cd AnyQ
mkdir build && cd build && cmake .. & make
其中cmake .. && make 的過程是一個艱難的過程,但凡出現網絡卡住的時候,可以ctrl+c中止,然后通過重新執(zhí)行cmake .. && make繼續(xù)執(zhí)行,直到完全成功
cd build
cmake .. && make
運行 Demo
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh
因為下一步需要jdk加持,官方的docker鏡像里面沒有jdk所以這一步官方作者給的解決方案如下:
wget http://anyq.bj.bcebos.com/jdk-8u171-linux-x64.tar.gz
tar xzvf jdk-8u171-linux-x64.tar.gz
添加環(huán)境變量
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH
安裝好jdk后執(zhí)行:
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs
至此,所有的步驟完成,可以運行demo
./run_server
容器內使用curl調用服務
curl "127.0.0.1:8999/anyq?question=需要使用什么賬號登錄"
可以得到結果
I0415 07:02:55.794643 2268 utils.cpp:590] RAW: in json_to_analysis_item, query:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 utils.cpp:594] RAW: in json_to_analysis_item, type:(null)
I0415 07:02:55.794643 2268 analysis_strategy.cpp:115] RAW: analysis_analysis size: 1
I0415 07:02:55.794643 2268 analysis_strategy.cpp:130] RAW: before use analysis strategy's analysis_result
I0415 07:02:55.794643 2268 utils.cpp:609] RAW: query:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 utils.cpp:611] RAW: tokens_basic size is 0
I0415 07:02:55.794643 2268 analysis_strategy.cpp:148] RAW: method_process method_wordseg start
I0415 07:02:55.794643 2268 analysis_strategy.cpp:154] RAW: method_process method_wordseg sucess
I0415 07:02:55.794643 2268 analysis_strategy.cpp:163] RAW: after use analysis strategy's analysis_result
I0415 07:02:55.794643 2268 utils.cpp:609] RAW: query:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 utils.cpp:611] RAW: tokens_basic size is 5
I0415 07:02:55.794643 2268 utils.cpp:614] RAW: tokens_basic buffer:需要 length:6 offset:0 analysis_term_weight:0.200000
I0415 07:02:55.794643 2268 utils.cpp:614] RAW: tokens_basic buffer:使用 length:6 offset:6 analysis_term_weight:0.200000
I0415 07:02:55.794643 2268 utils.cpp:614] RAW: tokens_basic buffer:什么 length:6 offset:12 analysis_term_weight:0.200000
I0415 07:02:55.794643 2268 utils.cpp:614] RAW: tokens_basic buffer:賬號 length:6 offset:18 analysis_term_weight:0.200000
I0415 07:02:55.794643 2268 utils.cpp:614] RAW: tokens_basic buffer:登錄 length:6 offset:24 analysis_term_weight:0.200000
I0415 07:02:55.794643 2268 equal_solr_q_builder.cpp:48] RAW: equal solr_fetch_q=question:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 term_retrieval.cpp:109] RAW: solr_fetch_q=question:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 term_retrieval.cpp:119] RAW: url = http://127.0.0.1:8900/solr/collection1/select
I0415 07:02:55.794643 2268 http_client.cpp:84] RAW: para_url: fl=id,question,answer&q=question%3A%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8%E4%BB%80%E4%B9%88%E8%B4%A6%E5%8F%B7%E7%99%BB%E5%BD%95&rows=15&wt=json
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=1, query=需要使用什么賬號登錄?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=3, query=AI服務支持推廣賬號使用么?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=4, query=為什么登錄到百度云還要填寫手機號、郵箱等信息?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=5, query=我以前是百度開發(fā)者中心用戶,還需要進行開發(fā)者認證么?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=11, query=我是百度云的老用戶,可以使用百度云的AK/SK么?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:185] RAW: Term retrieval item id=14, query=如果我正在做一個比較大型的落地項目,需要更多配額如何接洽?;
I0415 07:02:55.794643 2268 term_retrieval.cpp:187] RAW: keyword retrieval result len=6
I0415 07:02:55.794643 2268 retrieval_strategy.cpp:129] RAW: before rm_dup, retrieval result len=6;
I0415 07:02:55.794643 2268 retrieval_strategy.cpp:132] RAW: after rm_dup retrieval result len=6;
I0415 07:02:55.794643 2268 rank_strategy.cpp:460] RAW: after rough rank, remain 6 cands
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:91] RAW: source query:需要使用什么賬號登錄
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:需要使用什么賬號登錄?, socre:0.993676
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:AI服務支持推廣賬號使用么?, socre:0.712404
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:為什么登錄到百度云還要填寫手機號、郵箱等信息?, socre:0.442901
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:我以前是百度開發(fā)者中心用戶,還需要進行開發(fā)者認證么?, socre:0.288477
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:我是百度云的老用戶,可以使用百度云的AK/SK么?, socre:0.251138
I0415 07:02:55.794643 2268 simnet_paddle_sim.cpp:126] RAW: candidate query:如果我正在做一個比較大型的落地項目,需要更多配額如何接洽?, socre:0.178194
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.909091
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.277778
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.222222
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.125000
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.107143
I0415 07:02:55.794643 2268 jaccard_sim.cpp:48] RAW: jaccard = 0.054054
I0415 07:02:55.794643 2268 rank_strategy.cpp:474] RAW: after rank, remain 2 cands
I0415 07:02:55.794643 2268 rank_strategy.cpp:255] RAW: anyq query: 需要使用什么賬號登錄
I0415 07:02:55.794643 2268 rank_strategy.cpp:256] RAW: output
I0415 07:02:55.794643 2268 rank_strategy.cpp:258] RAW: query:需要使用什么賬號登錄?
I0415 07:02:55.794643 2268 rank_strategy.cpp:259] RAW: confidence:0.976759
I0415 07:02:55.794643 2268 anyq_strategy.cpp:77] RAW: input_query=需要使用什么賬號登錄;analysis_time=3.00ms;retrieval_num=6;retrieval_time=14.00ms;anyq_answer=您需要擁有一個百度賬號,用來登錄百度云,可以點擊此處注冊百度賬戶。如您以前擁有百度推廣賬戶,同樣可以登錄百度云。;rank_item_num=2;rank_time=61.00ms;
遇到的問題
- 端口映射一定要正確,否則會導致git失敗
- git失敗,報錯信息
RPC failed; curl 18 transfer closed with outstanding read data remaining
可以嘗試添加配置
git config --global http.sslVerify false
git config --global http.postbuffer 524288000
在docker中添加無效的話那么在本地也要添加,我是這樣解決的
- 下載git庫經常失敗的話可以考慮從已經安裝好的人那里拷貝AnyQ/build/third_party/目錄下的所有依賴拷貝到對應的目錄下
docker cp /${addr}/AnyQ/build/third_party ${container_id}:/${workspace}/AnyQ/build/
或者根據AnyQ/cmake/external/
編譯前記得刪除所有的CMakeCache.txt,否則可能報錯
cd AnyQ/build/
find ./ -name 'CMakeCache.txt' | xargs rm -rf
- 假如編譯過程中遇到如下報錯
c++: internal compiler error: Killed (program cc1plus)
則是內存不夠導致,可以增加docker的內存大小或者增加swap大小
- 遇到xgboost編譯報錯
1、
make[2]: *** [CMakeFiles/anyq.dir/src/rank/rank_strategy.cpp.o] Error 1
make[1]: *** [CMakeFiles/anyq.dir/all] Error 2
make: *** [all] Error 2
2、
/root/projects/AI/AnyQ/build/third_party/include/dmlc/./logging.h:323:31: error: ‘DMLC_LOG_STACK_TRACE_SIZE’ was not declared in this scope
由于xgboost中做了新的修改,cmake中的cp導致正確的rabit被覆蓋掉了,因此應修改xgboost.cmake文件
COMMAND cp -r ${XGBOOST_INSTALL_DIR}/dmlc-core/include/* ${XGBOOST_INSTALL_DIR}/rabit/include/rabit third_party/include/
關于 docker 的一些操作
- 進入container
docker exec -it AnyQ /bin/bash
- 啟動container
docker start ${container_id}
其他
- docker app要使用用戶名密碼登錄,且與docker hub的登錄用戶名一致
- linux下安裝docker--centos
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
yum localinstall docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm