GLM Das GPU -basierte Sprachmodell ist eine NGRAM -Sprachmodell -Implementierung, die eine ARPA -Datei als Eingabe aufnimmt, es binarisiert und in Stapel abfragt. Weitere Details zum Design und zur Implementierung finden Sie in diesem Papier, das bei ACL 2016 veröffentlicht wurde.
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 mit -O0 und -g Builds-DCOMPUTE_VER setzen die Rechenversion der Hardware. Standard ist 52. Es erzeugt keine korrekten Bewertungen, wenn es mit einer falschen Computerversion zusammengestellt wird !!! Überprüfen Sie hier die Rechenversion Ihrer GPU . Wenn make test keinen der GPU -Tests ausfällt, bedeutet dies, dass Ihre Rechenversion korrekt ist.-DBAD_HOST Dies sollte helfen, auf älteren Ubuntu -Systemen wie 12.04 und 14.04 aufzubauen. Verwenden Sie es nicht, es sei denn, Sie haben Probleme mit dem Aufbau.-DPYTHON_INCLUDE_DIR definiert den Pfad zur Python -Bibliothek wie /usr/include/python2.7/pyconfig.h oder /usr/include/python3.6m/pyconfig und ermöglicht das Erstellen der Python -Komponenten.-DPYTHON_VER ist auf Standard auf 2.7 gesetzt, wenn Sie die Python -Komponenten mit einer anderen Version erstellen möchten, und setzen Sie sie auf Ihre gewünschte Version ein. Es hätte keine Wirkung, es sei denn -DPYTHON_INCLUDE_DIR festgelegt.--DYAMLCPP_DIR sollte SE sein, wenn sich Ihr YAML-CPP an einem nicht Standardort befindet (Standard ist /usr/incude ). cd path_to_glm/release_build/bin
./binarize_v2 path_to_arpa_file output_path [btree_node_size]btree_node_size sollte eine ungerade Zahl sein. Persönlich fand ich, dass 31 am besten funktioniert, aber Sie sollten experimentieren. Die Zahl könnte mit ARPA -Dateien mit unterschiedlichen Größe und unterschiedlichen GPUs variieren
Um GLM in der Batch -Einstellung zu senken, tun Sie:
cd path_to_glm/release_build/bin
./batch_query_v2 path_to_binary_lm path_to_text_file [gpuDeviceID] [add_begin_end_markers] Dadurch wird die Verwirrung einer Textdatei berechnet. Wenn GPUDEVICID festgelegt ist, wird der GPU -Teil des Codes in einer bestimmten GPU angegeben. Sie können den verfügbaren GPUs auf einem System über den Befehl nvidia_smi überprüfen. 0 ist eine sichere Standardeinstellung, wenn Sie ihn festlegen möchten. Wenn add_begin_end_marker auf 0 gesetzt sind, wird der Satz und das Ende von Satztoken (<S> und </S>) jeden Satz nicht umgeben.
Also ... alles begann richtig zu laufen. A (vorläufiger) Benchmark gegen ein einzelner Gewinde -Probe Kenlm (Titan X gegen Core I7 4720HQ)
| Lm | Ngram -Abfragen pro Sekunde | Modellinfo |
|---|---|---|
| Kenlm | 10 274 237 | 3,3G, 88720517 Ngrams |
| GLM | 65 459 102 | 3,3G, 88720517 Ngrams |
Multithread-Benchmark, gleiche GPU gegen 2x Intel (R) Xeon (R) CPU E5-2680 0 @ 2,70GHz
| Lm | Ngram -Abfragen pro Sekunde | Modellinfo |
|---|---|---|
| Kenlm 1 Thread | 8 310 761 | 3,3G, 88720517 Ngrams |
| Kenlm 2 Thread | 15 823 376 | 3,3G, 88720517 Ngrams |
| Kenlm 4 Thread | 27 201 337 | 3,3G, 88720517 Ngrams |
| Kenlm 8 Thread | 43 336 444 | 3,3G, 88720517 Ngrams |
| Kenlm 16 Thread | 49 218 076 | 3,3G, 88720517 Ngrams |
| Kenlm 32 Thread | 119 539 677 | 3,3G, 88720517 Ngrams |
| GLM | 65 459 102 | 3,3G, 88720517 Ngrams |
Das Planenproblem verursacht wahrscheinlich die geringe Leistung in 16 Thread -Fall. GLM erzielt eine 2 -mal bessere Leistung im Vergleich zu den Kosten der Hardware. (1000 US -Dollar für die GPU gegenüber 3500 USD für den CPUs)