GLM O modelo de linguagem baseado em GPU é uma implementação do modelo de idioma Ngram que recebe um arquivo ARPA como uma entrada, binariza -o e consulta -o em lote. Mais detalhes sobre o design e a implementação podem ser encontrados neste artigo, publicado na 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 Builds com -o0 e -g-DCOMPUTE_VER Defina a versão de computação do hardware. O padrão é 52. Não produzirá pontuações corretas se for compilado com uma versão de computação errada !!! Verifique a versão de computação da sua GPU aqui . Se make test não falhar nenhum dos testes da GPU, significa que sua versão de computação está correta.-DBAD_HOST Isso deve ajudar a desenvolver sistemas mais antigos do Ubuntu, como 12.04 e 14.04. Não use, a menos que você tenha problemas para construir.-DPYTHON_INCLUDE_DIR define o caminho para a biblioteca Python, como /usr/include/python2.7/pyconfig.h ou /usr/include/python3.6m/pyconfig e habilita a construção dos componentes do python.-DPYTHON_VER está definido como padrão para 2.7 Se você deseja criar os componentes do Python com uma versão diferente, defina -o na versão desejada. Não teria efeito a menos que -DPYTHON_INCLUDE_DIR esteja definido.--DYAMLCPP_DIR deve ser SE se o seu YAML-CPP estiver em um local não padrão (Standard Is /usr/incude ). cd path_to_glm/release_build/bin
./binarize_v2 path_to_arpa_file output_path [btree_node_size]btree_node_size deve ser um número ímpar. Pessoalmente, descobri que 31 funcionam melhor, mas você deve experimentar. O número pode variar com diferentes arquivos ARPA de tamanho e GPUs diferentes
Para comparar o GLM na configuração do lote:
cd path_to_glm/release_build/bin
./batch_query_v2 path_to_binary_lm path_to_text_file [gpuDeviceID] [add_begin_end_markers] Isso calculará a perplexidade de um arquivo de texto. Se o gpudeviceId estiver definido, ele informará a parte da GPU do código a ser executada em uma GPU específica. Você pode verificar as GPUs disponíveis em um sistema usando o comando nvidia_smi . 0 é um padrão seguro para ter se você deseja defini -lo. Se add_begin_end_markers estiver definido como 0, o início da frase e os tokens de final da frase (<s> e </s>) não cercarão todas as frases.
Então ... tudo começou a correr corretamente. Uma referência (preliminar) contra Kenlm de sondagem de rosca única (Titan X vs Core i7 4720HQ)
| LM | consultas de ngram por segundo | Informações do modelo |
|---|---|---|
| Kenlm | 10 274 237 | 3.3G, 88720517 NGRAMS |
| Glm | 65 459 102 | 3.3G, 88720517 NGRAMS |
Benchmark multithread, a mesma GPU contra 2x Intel (R) Xeon (R) CPU E5-2680 0 @ 2.70GHz
| LM | consultas de ngram por segundo | Informações do modelo |
|---|---|---|
| Kenlm 1 thread | 8 310 761 | 3.3G, 88720517 NGRAMS |
| Thread Kenlm 2 | 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 |
O problema de agendamento provavelmente causa o baixo desempenho em 16 estojos. O GLM alcança 2 vezes melhor desempenho em relação ao custo do hardware. (US $ 1000 para a GPU vs $ 3500 para as CPUs)