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