GLM Le modèle de langue basé sur GPU est une implémentation du modèle de langue NGRAM qui prend un fichier ARPA en tant qu'entrée, le binare et le demande en lot. Plus de détails sur la conception et la mise en œuvre peuvent être trouvés dans cet article, publié sur 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 se construit avec -o0 et -g-DCOMPUTE_VER Définissez la version de calcul du matériel. La valeur par défaut est 52. Il ne produira pas de scores corrects s'il est compilé avec une mauvaise version de calcul !!! Vérifiez ici la version de calcul de votre GPU . Si make test ne manque à aucun des tests GPU, cela signifie que votre version de calcul est correcte.-DBAD_HOST Cela devrait aider à construire sur des systèmes Ubuntu plus anciens tels que 12.04 et 14.04. Ne l'utilisez pas à moins d'avoir du mal à construire.-DPYTHON_INCLUDE_DIR définit le chemin d'accès à la bibliothèque Python tel que /usr/include/python2.7/pyconfig.h ou /usr/include/python3.6m/pyconfig et permet de construire les composants Python.-DPYTHON_VER est défini sur défaut sur 2.7 Si vous souhaitez créer les composants Python avec une version différente, définissez-le sur la version souhaitée. Il n'aurait aucun effet à moins que -DPYTHON_INCLUDE_DIR soit défini.--DYAMLCPP_DIR doit être SE si votre YAML-CPP est dans un emplacement non standard (standard est /usr/incude ). cd path_to_glm/release_build/bin
./binarize_v2 path_to_arpa_file output_path [btree_node_size]btree_node_size devrait être un nombre impair. Personnellement, j'ai trouvé que 31 fonctionnait le mieux, mais vous devriez expérimenter. Le nombre pourrait varier avec des fichiers ARPA de taille différente et différents GPU
Pour bencher GLM en paramètre par lots, faites:
cd path_to_glm/release_build/bin
./batch_query_v2 path_to_binary_lm path_to_text_file [gpuDeviceID] [add_begin_end_markers] Cela calculera la perplexité d'un fichier texte. Si gpudeviceid est défini, il indiquera la partie GPU du code à exécuter sur un GPU particulier. Vous pouvez vérifier les GPU disponibles sur un système à l'aide de la commande nvidia_smi . 0 est un défaut sûr à avoir si vous souhaitez le définir. Si add_begin_end_markers est défini sur 0, le début des jetons de phrase et de fin de phrase (<s> et </s>) n'entourera pas chaque phrase.
Donc ... tout a commencé à fonctionner correctement. Une référence (préliminaire) contre un sondage unique en file
| LM | Requêtes Ngram par seconde | Informations sur le modèle |
|---|---|---|
| Kenlm | 10 274 237 | 3,3 g, 88720517 ngrams |
| glm | 65 459 102 | 3,3 g, 88720517 ngrams |
Benchmark multithread, même GPU contre 2x Intel (R) Xeon (R) CPU E5-2680 0 @ 2,70 GHz
| LM | Requêtes Ngram par seconde | Informations sur le modèle |
|---|---|---|
| Kenlm 1 fil | 8 310 761 | 3,3 g, 88720517 ngrams |
| Kenlm 2 Fil | 15 823 376 | 3,3 g, 88720517 ngrams |
| Kenlm 4 Fil | 27 201 337 | 3,3 g, 88720517 ngrams |
| Kenlm 8 Fil | 43 336 444 | 3,3 g, 88720517 ngrams |
| Kenlm 16 Fil | 49 218 076 | 3,3 g, 88720517 ngrams |
| Kenlm 32 Fil | 119 539 677 | 3,3 g, 88720517 ngrams |
| glm | 65 459 102 | 3,3 g, 88720517 ngrams |
Le problème de planification provoque probablement les faibles performances dans 16 cas de thread. GLM atteint 2 fois de meilleures performances par rapport au coût du matériel. (1000 $ pour le GPU vs 3500 $ pour les CPU)