GLM El modelo de lenguaje basado en GPU es una implementación del modelo de lenguaje NGRAM que toma un archivo ARPA como entrada, lo binariza y lo consulta en lotes. Se pueden encontrar más detalles sobre el diseño y la implementación en este documento, publicados en 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 construye con -o0 y -g-DCOMPUTE_VER Establecer la versión de cómputo del hardware. El valor predeterminado es 52. ¡No producirá puntajes correctos si se compila con una versión de cómputo incorrecta! Consulte la versión de cómputo de su GPU aquí . Si make test no falla ninguna de las pruebas de GPU, significa que su versión de cómputo es correcta.-DBAD_HOST Esto debería ayudar a construir en sistemas Ubuntu más antiguos como 12.04 y 14.04. No lo use a menos que tenga problemas para construir.-DPYTHON_INCLUDE_DIR Define la ruta a la biblioteca de Python como /usr/include/python2.7/pyconfig.h o /usr/include/python3.6m/pyconfig y habilita la construcción de los componentes de Python.-DPYTHON_VER está configurado predeterminado en 2.7 Si desea construir los componentes de Python con una versión diferente, configúrelo en su versión deseada. No tendría efecto a menos que se establezca -DPYTHON_INCLUDE_DIR .--DYAMLCPP_DIR debe ser SE si su YAML-CPP está en una ubicación no estándar (estándar IS /usr/incude ). cd path_to_glm/release_build/bin
./binarize_v2 path_to_arpa_file output_path [btree_node_size]btree_node_size debería ser un número impar. Personalmente, descubrí que 31 funciona mejor, pero debes experimentar. El número podría variar con archivos ARPA de diferentes tamaños y diferentes GPU
Para comparar GLM en la configuración por lotes, hacer:
cd path_to_glm/release_build/bin
./batch_query_v2 path_to_binary_lm path_to_text_file [gpuDeviceID] [add_begin_end_markers] Esto calculará la perplejidad de un archivo de texto. Si se establece GPudeviceID , le dirá a la parte de la GPU del código que se ejecuta en una GPU en particular. Puede verificar las GPU disponibles en un sistema utilizando el comando nvidia_smi . 0 es un valor predeterminado seguro si desea configurarlo. Si add_begin_end_markers se establece en 0, el comienzo de la oración y el final de los tokens de oración (<s> y </s>) no rodearán cada oración.
Entonces ... todo comenzó a funcionar correctamente. Un punto de referencia (preliminar) contra Kenlm de sondeo de un solo rosca (Titan X vs Core i7 4720HQ)
| Lm | consultas ngram por segundo | Información del modelo |
|---|---|---|
| Kenlm | 10 274 237 | 3.3g, 88720517 ngrams |
| GLM | 65 459 102 | 3.3g, 88720517 ngrams |
Benchmar de referencia multiproceso, misma GPU contra 2x Intel (R) Xeon (R) CPU E5-2680 0 @ 2.70GHz
| Lm | consultas ngram por segundo | Información del modelo |
|---|---|---|
| Kenlm 1 hilo | 8 310 761 | 3.3g, 88720517 ngrams |
| Kenlm 2 hilo | 15 823 376 | 3.3g, 88720517 ngrams |
| Kenlm 4 hilo | 27 201 337 | 3.3g, 88720517 ngrams |
| Hilo de Kenlm 8 | 43 336 444 | 3.3g, 88720517 ngrams |
| Kenlm 16 hilo | 49 218 076 | 3.3g, 88720517 ngrams |
| Kenlm 32 hilo | 119 539 677 | 3.3g, 88720517 ngrams |
| GLM | 65 459 102 | 3.3g, 88720517 ngrams |
El problema de programación probablemente causa el bajo rendimiento en el caso de 16 hilos. GLM logra 2 veces mejor rendimiento en relación con el costo del hardware. ($ 1000 para la GPU frente a $ 3500 para las CPU)