Instalação e depuração da biblioteca de aprendizagem da biblioteca de gráficos dinâmicos do conhecimento DynGEM

fundo

Fui forçado a iniciar o tópico e queria estudar o conteúdo do gráfico de conhecimento dinâmico. Cheguei a tempo de ler um artigo dyngraph2vec: Capturando Dinâmica de Rede usando Aprendizado de Representação de Gráfico Dinâmico , que abriu a biblioteca DynGEM com base em meu próprio artigo . Em linha com o princípio do utilitarismo, iniciei o processo de explorá-lo na semana passada

De acordo com o README.md desta biblioteca, você deve primeiro instalar o DynTriad e seu ambiente dependente, e então instalar o próprio DynGEM e seu ambiente. Achei que a instalação da biblioteca não deveria ser difícil. Esperava que, porque muitas dependências exigem instalação de origem, e mesmo que a instalação seja concluída, ela pode ser importada, mas devido à versão da dependência, variáveis ​​de ambiente e o próprio código da biblioteca, algum código-fonte precisa ser modificado. Para funcionar sem problemas, foram necessários alguns contratempos e demorou 5 dias para terminar. Portanto, aqui está o registro do processo de instalação e depuração no CentOS7, espero que você evite desvios.

DynTriad

As seguintes etapas são recomendadas para serem realizadas em ordem

Boost.Python

Para baixar e instalar a versão 1.58 e a versão 1.73 , os comandos são os mesmos, basta alterar o 58 para o 73.

Tome 1.73 como exemplo, execute o comando para descompactar e interromper

[root@scentos DynamicGraph]# tar -xvzf boost_1_73_0.tar.gz
[root@scentos DynamicGraph]# cd boost_1_73_0/

Em seguida, execute o comando para compilar e instalar

[root@scentos boost_1_73_0]# ./bootstrap.sh
[root@scentos boost_1_73_0]# ./b2 install

Aguarde a conclusão. Após a conclusão, muitas bibliotecas serão geradas em / usr / local / lib

[root@scentos boost_1_73_0]# ll/usr/local/lib
total 42032
.....

Se você precisar compilar e instalar a versão python3, siga as etapas abaixo:

Primeiro modifique o arquivo bootstrap.sh e modifique o conteúdo em python.configured. Comente o original usando python: $ PYTHON_VERSION: "$ PYTHON_ROOT"; e escreva o conteúdo de Python3 de acordo com o cat. Usando python: 3.5: "/usr/local/bin/python3.5": / usr / local / include /python3.5m: / usr / local / lib;

import python ;
if ! [ python.configured ]
{
    # using python : $PYTHON_VERSION : "$PYTHON_ROOT" ;
    # using python : 3.6 : "/usr/bin/python3.6" : /usr/include/python3.6m : /usr/local/lib ;
    using python : 3.5 : "/usr/local/bin/python3.5" : /usr/local/include/python3.5m : /usr/local/lib ;
}
EOF
fi

Em seguida, chame o script de bootstrap e adicione parâmetros

[root@scentos boost_1_73_0]# ./bootstrap.sh --with-python=python3 --with-python-root=/usr/local/bin/python3.5 --with-python-version=3.5

O comando de instalação ainda é ./b2 install.

Após tentativa e erro, descobri que a versão 1.73 foi compilada com Python 3.6 e Python 2.7, e a versão 1.58 foi compilada com Python 3.5

CMake

Baixe o pacote https://cmake.org/download/ e execute o comando

[root@scentos DynamicGraph]# tar -zxvf cmake-3.18.2.tar.gz
[root@scentos DynamicGraph]# cd cmake-3.18.2/
[root@scentos cmake-3.18.2]# ./bootstrap
[root@scentos cmake-3.18.2]# make
[root@scentos cmake-3.18.2]# make install

ter

Baixe o pacote http://eigen.tuxfamily.org/index.php?title=Main_Page#Download , então descompacte

[root@scentos DynamicGraph]# tar -zxvf eigen-3.3.7.tar.gz

Não compile e instale no diretório eigen-3.3.7 descompactado, você deve criar um novo diretório (aqui denominado eigen3.3.7), vá para este diretório e compilar e instalar o eigen aqui

[root@scentos DynamicGraph]# mkdir eigen3.3.7
[root@scentos DynamicGraph]# cd eigen3.3.7
[root@scentos eigen3.3.7]# cmake ../eigen-3.3.7
[root@scentos eigen3.3.7]# make install

mpfr e expat

O caminho de download é https://www.mpfr.org/mpfr-current/#download e https://sourceforge.net/projects/expat/ , após fazer o download, descompacte, insira os dois diretórios e execute-os respectivamente

./configure
make && make install

cgal

Baixe o caminho https://github.com/CGAL/cgal/tree/releases/CGAL-4.7 , baixe e descompacte, entre no diretório e execute o comando

[root@scentos cgal-releases-CGAL-4.7]# cmake .
[root@scentos cgal-releases-CGAL-4.7]# make && make install

GraphTool

Baixe o pacote compactado do projeto https://git.skewed.de/count0/graph-tool/-/tree/master , primeiro certifique-se de que sua versão gcc> = 9.1.0

[root@scentos DynamicGraph]# gcc --version
gcc (GCC) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Se a versão for relativamente baixa ou não houver gcc, você pode consultar meu artigo sobre como atualizar o gcc para 9.3.0 no CentOS7 para atualizar ou instalar

Em seguida, instale o pip de python2, baixe o caminho https://pypi.org/project/pip/#files , insira o diretório correspondente após a descompressão e execute o comando

[root@scentos pip-20.2.3]# python setup.py install
[root@scentos pip-20.2.3]# pip install pycairo scipy

Use o yum para instalar algumas dependências

yum -y install numpy.x86_64 scipy.x86_64

Por fim, execute o comando para compilar e instalar a ferramenta de gráfico. Vai demorar muito aqui. Demorou mais de duas horas para minha máquina virtual ter uma memória quad-core 8G.

[root@scentos DynamicGraph]# tar -zxvf graph-tool-master.tar.gz
[root@scentos DynamicGraph]# cd graph-tool-master/
[root@scentos graph-tool-master]# ./autogen.sh
[root@scentos graph-tool-master]# ./configure --disable-sparsehash
[root@scentos graph-tool-master]# make && make install

DynamicTriad

Depois de instalar a biblioteca acima, você pode compilar e instalar DynamicTriad, o endereço do projeto é https://github.com/luckiezhou/DynamicTriad

Primeiro instale endro com pip

[root@scentos DynamicTriad-master]# pip install dill

Em seguida, execute a instalação, o seguinte caminho e outras variáveis ​​devem ser alteradas para o seu próprio

[root@scentos DynamicTriad-master]# ./build.sh
entering /home/szc/DynamicGraph/DynamicTriad-master
You may need to specify some environments before building
PYTHON_LIBRARY? (default: /usr/lib64/libpython2.7.so.1.0, use a space ' ' to leave it empty) 
PYTHON_INCLUDE_DIR? (default: /usr/include/python2.7, use a space ' ' to leave it empty) 
EIGEN3_INCLUDE_DIR? (default: /usr/include, use a space ' ' to leave it empty) /home/szc/DynamicGraph/eigen-3.3.7
BOOST_ROOT? (default: , use a space ' ' to leave it empty) /usr/local/lib
name for boost_python library? (useful when boost_python cannot be detected by cmake) (default: boost_python, use a space ' ' to leave it empty) 

Alguns caminhos variáveis ​​dentro de (/home/szc/DynamicGraph/eigen-3.3.7, / usr / local / lib) mudam de acordo com sua própria situação

Os resultados são os seguintes

Em seguida, execute test.py para ver se a compilação está completa

Neste ponto, DynTriad e suas dependências são instaladas e interrompidas

DynGEM

Além de DynTriad, esta biblioteca também tem que instalar MATLAB e LaTex

MATLAB

Baixe o endereço https://www.mathworks.com/products/compiler/matlab-runtime.html , selecione o download de 2019 (9.6). Após fazer o download e descompactar, execute ./install e, em seguida, padronize totalmente. Modifique o arquivo / etc / profile após a conclusão e adicione uma linha no final

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v96/runtime/glnxa64:/usr/local/MATLAB/MATLAV_Runtime/v96/sys/os/glnxa64

Depois de salvar e sair, crie-o para torná-lo efetivo

Látex

O endereço de download é https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/ e selecione textlive.iso dentro. Após o download, coloque-o na máquina virtual, limpe o original, monte o novo e instale-o

[root@scentos szc]# locate texlive | xargs rm -rf
[root@scentos szc]# mount  -o loop texlive.iso /mnt/
[root@scentos szc]# cd /mnt/
[root@scentos mnt]# ./install-tl

Escolha o método de instalação e escolha i diretamente. Após a instalação, adicione algumas linhas de variáveis ​​de ambiente ao final do arquivo / etc / profile

export PATH=/usr/local/texlive/2020/bin/x86_64-linux:$PATH

export MANPATH=/usr/local/texlive/2020/texmf-dist/doc/man
export INFOPATH=/usr/local/texlive/2020/texmf-dist/doc/info

Em seguida, habilite a fonte, verifique a versão látex

[root@scentos mnt]# source /etc/profile
[root@scentos mnt]# tex --version
TeX 3.14159265 (TeX Live 2020)
kpathsea version 6.3.2
Copyright 2020 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the TeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
[root@scentos mnt]#

DynGEM

O endereço do projeto é https://github.com/palash1992/DynamicGEM , após baixar e descompactar no diretório, execute diretamente

python setup.py install

Sim, se um erro for relatado

Traceback (most recent call last):
  File "./setup.py", line 185, in <module>
    setup_package()
  File "./setup.py", line 138, in setup_package
    write_version_py()
  File "./setup.py", line 119, in write_version_py
    version = imp.load_source('DynamicGEM.version', 'dynamicgem/version.py')
  File "/usr/lib64/python3.6/imp.py", line 172, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 684, in _load
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 674, in exec_module
  File "<frozen importlib._bootstrap_external>", line 781, in get_code
  File "<frozen importlib._bootstrap_external>", line 741, in source_to_code
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "dynamicgem/version.py", line 3
    short_version = '1.0.0'

Em seguida, modifique o arquivo dynamicgem / version.py, limpe o conteúdo original e copie o conteúdo a seguir (na verdade, isso é causado pelo recuo de cada linha de código no version.py gerado pelo código).

short_version = '1.0.0'
version = '1.0.0'
full_version = '1.0.0'
git_revision = 'Unknown'
release = True
if not release:
    version = full_version
    short_version += ".dev"

Depurar DynGEM

Usando o pycharm, cole o código de teste no README.md do site oficial DynGEM com python3.6 e execute-o, encontrando os seguintes problemas:

1). Como o mygraph no DynamicTraid pré-compilado é o pacote so, o método de importá-lo no DynamicGEM está errado e precisa ser alterado para o método de importação de ctype:

# /usr/local/lib/python3.6/site-packages/dynamicgem/dynamictriad/core/gconv.py

import ctypes
import os
# mygraph=ctypes.cdll.LoadLibrary(os.path.realpath('')+'/dynamicgem/dynamictriad/core/mygraph.so')
dll_path_ = "/home/szc/DynamicGraph/DynamicGEM-master/dynamicgem/dynamictriad/core/mygraph-build/mygraph.so"
mygraph = ctypes.cdll.LoadLibrary(dll_path_)

# import dynamicgem.dynamictriad.core.mygraph as mygraph

assim como

# /usr/local/lib/python3.6/site-packages/dynamicgem/dynamictriad/core/mygraph_utils.py

import os
import ctypes
# mygraph=ctypes.cdll.LoadLibrary(os.path.realpath('')+'/dynamicgem/dynamictriad/core/mygraph.so')
dll_path_ = "/home/szc/DynamicGraph/DynamicGEM-master/dynamicgem/dynamictriad/core/mygraph-build/mygraph.so"
mygraph = ctypes.cdll.LoadLibrary(dll_path_)
# import dynamicgem.dynamictriad.core.mygraph as mygraph

2) Substitua o arquivo libstdc ++ do MATLAB. Isso ocorre porque não há GLIBCXX_3.4.26 na versão 6.0.22 do arquivo libstdc ++. So do MATLAB9.6, mas existe na versão 6.0.28, então você precisa substituí-la pela última, caso contrário, espere por um erro.

[root@scentos boost_1_73_0]# mv /usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64/libstdc++.so.6.0.22 /usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64/libstdc++.so.6.0.22_old
[root@scentos boost_1_73_0]# cp /usr/lib64/libstdc++.so.6.0.28 /usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64/
[root@scentos boost_1_73_0]# rm -f /usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64/libstdc++.so.6
[root@scentos boost_1_73_0]# ln -s libstdc++.so.6.0.28 /usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64/libstdc++.so.6

3). Certifique-se de que as versões de keras e tensorflow correspondam, onde tensorflow deve ser a versão 1.11, e modifique a versão keras de acordo com https://docs.floydhub.com/guides/environments/

[root@scentos Textset]#  /usr/local/bin/pip3.6 install tensorflow==1.11 
[root@scentos Textset]#  /usr/local/bin/pip3.6 install keras==2.2.4

Em seguida, atualize o numpy, modifique a versão h5py

[root@scentos Textset]#  /usr/local/bin/pip3.6 install -U numpy
[root@scentos Textset]#  /usr/local/bin/pip3.6 install h5py==2.8.0

4) .Se você ainda encontrar o problema de não equivalência de superparâmetros durante a operação, você deve pular para a parte do código correspondente para modificá-lo.

Por exemplo, estou correndo para o endereço de MATLAB na variável de ambiente, então modifiquei a parte correspondente (se não os.environ) no arquivo correspondente (/usr/local/lib/python3.6/site-packages/TIMERS_ALL /__init__.py) [self.path_var] .__ contém __ ("MATLAB") parte):

    def get_paths_from_os(self):
        ....

        path_elements = []
        if self.path_var in os.environ:
            if not os.environ[self.path_var].__contains__("MATLAB"):
                os.environ[self.path_var] = os.environ[self.path_var] + os.pathsep\
                                            + "/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64:" \
                                              "/usr/local/MATLAB/MATLAB_Runtime/v96/runtime/glnxa64:" \
                                              "/usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64"
            path_elements = os.environ[self.path_var].split(os.pathsep)
        if not path_elements:
            .....

Também pode ser especificado em Editar Configuração-> Ambiente Vairables

5). Indo aqui, de fato, a maior parte do código DynGEM pode ser executado, mas DynTriad ainda tem problemas

  ....
  File "/usr/local/lib/python3.6/site-packages/dynamicgem/dynamictriad/core/mygraph_utils.py", line 90, in load_adjlist
    g = mygraph.Graph(node_type, weight_type)
  File "/usr/lib64/python3.6/ctypes/__init__.py", line 356, in __getattr__
    func = self.__getitem__(name)
  File "/usr/lib64/python3.6/ctypes/__init__.py", line 361, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /...../DynamicGEM-master/dynamicgem/dynamictriad/core/mygraph-build/mygraph.so: undefined symbol: Graph

O código correspondente é

# dynamicgem\dynamictriad\core\mygraph_utils.py

def load_adjlist(fn, node_type='string', weight_type='float'):
    """
    loads only undirected graph, if multiple instances of the same edge is detected,
    their weights are summed up
    :param fn:
    :param node_type:
    :param weight_type:
    :return:
    """
    py_node_type = type2python(node_type)
    py_weight_type = type2python(weight_type)

    edgeset = set()  # check if the graph is undirected
    g = mygraph.Graph(node_type, weight_type)
    for line in open(fn, 'r'):
        fields = line.split()

De acordo com a mensagem de erro, o erro é que não há nenhum atributo ou classe Graph em mygraph.so, e eu mudei o caminho do pacote so de DynGEM para DynTriad para compilá-lo. Ainda há esse problema, mas o dyngem em pacotes de sites Não há realmente nenhum arquivo mygraph.py no diretório / dyntraid / core, então isso deve ser um problema com o próprio código DynGEM. Já levantei um problema para o autor, mas não recebi uma resposta ainda.

resultado da operação

Tomando o modelo de assinatura AERNN no artigo como exemplo, o teste é executado DynGEM, e a execução termina após mais de 40 minutos. A captura de tela é a seguinte:

Conclusão

Neste ponto, mesmo se o DynGEM estiver instalado e puder ser executado normalmente (exceto para a parte de teste do DynTriad), podemos entender e explorar isso por meio da depuração do ponto de interrupção.

Por fim, anexe todos os links aos discos de rede para fazer o download:

Link: https://pan.baidu.com/s/1TaDTq555xIF6o_xWGlHq1Q 
Código de extração: kkwf

Acho que você gosta

Origin blog.csdn.net/qq_37475168/article/details/108614253
Recomendado
Clasificación