gLM
1.0.0
GLM基於GPU的語言模型是NGRAM語言模型實現,該模型實現將ARPA文件作為輸入,對其進行二進制並批次查詢。有關設計和實施的更多詳細信息,請參見本文,該論文在ACL 2016上發布。
git clone https://github.com/XapaJIaMnu/gLM.git
cd gLM
mkdir release_build
cd release_build
cmake ..
make -j4
make test # Requires CUDA for GPU testing-DBUILDTYPE=debug用-o0和-g構建-DCOMPUTE_VER設置硬件的計算版本。默認值為52。如果編譯錯誤的計算版本,它將不會產生正確的分數! ! !在此處查看GPU的計算版本。如果make test不會失敗任何GPU測試,則意味著您的計算版本是正確的。-DBAD_HOST這應該有助於建立在舊的Ubuntu系統(例如12.04和14.04)上。除非構建困難,否則不要使用它。-DPYTHON_INCLUDE_DIR定義了python庫的路徑,例如/usr/include/python2.7/pyconfig.h or /usr/include/python3.6m/pyconfig include/python3.6m/pyconfig,並啟用構建Python組件。-DPYTHON_VER設置為默認為2.7,如果要構建具有不同版本的Python組件,請將其設置為所需的版本。除非設置-DPYTHON_INCLUDE_DIR ,否則它將沒有效果。/usr/incude ),則應為--DYAMLCPP_DIR 。 cd path_to_glm/release_build/bin
./binarize_v2 path_to_arpa_file output_path [btree_node_size]btree_node_size應該是一個奇數。我個人發現31條效果最好,但是您應該進行實驗。該數字可能會隨不同大小的ARPA文件和不同的GPU而變化
在批處理設置中基準GLM進行:
cd path_to_glm/release_build/bin
./batch_query_v2 path_to_binary_lm path_to_text_file [gpuDeviceID] [add_begin_end_markers]這將計算文本文件的困惑。如果設置了GPudeViceID ,它將告訴代碼的GPU部分將在特定的GPU上執行。您可以使用nvidia_smi命令檢查系統上的可用GPU。如果要設置0是安全默認值。如果add_begin_end_markers設置為0,則句子的開始和句子的結尾(<s>和</s>)不會包圍每個句子。
所以...一切都開始正確運行。 A(初步)基準對單線探測Kenlm(Titan X vs Core i7 4720HQ)
| LM | ngram查詢每秒 | 型號信息 |
|---|---|---|
| 肯爾姆 | 10 274 237 | 3.3G,88720517 ngrams |
| Glm | 65 459 102 | 3.3G,88720517 ngrams |
多線程基準,相同的GPU與2x Intel(R)Xeon(R)CPU E5-2680 0 @ 2.70GHz
| LM | ngram查詢每秒 | 型號信息 |
|---|---|---|
| Kenlm 1線程 | 8 310 761 | 3.3G,88720517 ngrams |
| Kenlm 2線程 | 15 823 376 | 3.3G,88720517 ngrams |
| Kenlm 4線程 | 27 201 337 | 3.3G,88720517 ngrams |
| Kenlm 8線程 | 43 336 444 | 3.3G,88720517 ngrams |
| Kenlm 16線程 | 49 218 076 | 3.3G,88720517 ngrams |
| Kenlm 32線 | 119 539 677 | 3.3G,88720517 ngrams |
| Glm | 65 459 102 | 3.3G,88720517 ngrams |
調度問題可能會導致16個線程案例的性能較低。 GLM相對於硬件的成本,其性能提高了2倍。 (GPU $ 1000,CPU $ 3500)