Essas instruções assumem que você está construindo PoPart no Ubuntu 20.04. Essas instruções descrevem como instalar todas as dependências necessárias. Se você estiver começando a partir de uma instalação existente do Ubuntu 20.04, já poderá ter algumas dessas dependências instaladas. Nesse caso, verifique se as versões dessas dependências são compatíveis com essas instruções. Outros sistemas operacionais baseados em Linux também podem funcionar, mas nomes de pacotes e versões suportadas de pacotes podem variar.
Você precisará das seguintes ferramentas instaladas em seu sistema, se elas ainda não estiverem instaladas:
sudo apt-get install wget git -ysudo apt-get install python3-pip -y
ln -s /usr/bin/python3 /usr/bin/pythonNOTA : Se você tiver Python 2.x instalado no seu sistema, poderá ignorar o symlink.
sudo apt-get install ninja-build -ysudo apt-get install pkg-config -y Todas as dependências do Python necessárias para a criação e execução do Popart podem ser encontradas em requirements.txt . Instale -os correndo
python3 -m pip install -r requirements.txt Se você deseja contribuir para o PoPart, são necessárias dependências adicionais para o desenvolvimento. Estes são encontrados nos requirements/dev.txt e podem ser instalados em execução:
python3 -m pip install -r requirements/dev.txtO Popart compila contra várias bibliotecas que devem estar disponíveis em seu sistema:
A versão da biblioteca SPDLOG no Ubuntu 20.04 ( spdlog-dev ) não é compatível com o PoPart. Em vez disso, você precisa criar a versão 1.8.0 a partir da fonte. Para fazer isso, em um diretório de sua escolha, faça o download da fonte da página Spdlog Github e construa e instale da seguinte maneira:
export SPDLOG_INSTALL_DIR= $( pwd ) /spdlog-1.8.0/install_dir/
git clone --branch v1.8.0 https://github.com/gabime/spdlog.git
cd spdlog && mkdir build && cd build
cmake .. -GNinja -DCMAKE_INSTALL_PREFIX= $SPDLOG_INSTALL_DIR && cmake --build . --target install NOTA : Você precisará do valor de SPDLOG_INSTALL_DIR posteriormente.
A versão da biblioteca Pybind11 no Ubuntu 20.04 ( pybind11-dev ) é 2.4.3, que não é compatível com o Popart. Em vez disso, você precisa criar a versão 2.6.2 a partir da fonte. Para fazer isso, em um diretório de sua escolha, faça o download da fonte da página Pybind Github e construa e instale da seguinte maneira:
export PYBIND11_INSTALL_DIR= $( pwd ) /pybind11-2.6.2/install_dir/
wget https://github.com/pybind/pybind11/archive/v2.6.2.tar.gz
tar xvfz v2.6.2.tar.gz
rm v2.6.2.tar.gz
pushd pybind11-2.6.2
mkdir build
mkdir install_dir
cd build
cmake ..
-DCMAKE_INSTALL_PREFIX= $PYBIND11_INSTALL_DIR
-GNinja
ninja
ninja install
popd NOTA : Se você preferir construir com make em vez de ninja , remova o interruptor -DCMAKE_GENERATOR="Ninja" .
Nota : Você precisará do valor de PYBIND11_INSTALL_DIR mais tarde.
Para mais informações, consulte: https://github.com/pybind/pybind11/blob/master/docs/compiling.rst.
A biblioteca Boost no Ubuntu 20.04 ( libboost-dev ) é 1,71.1, que não é compatível com o Popart. Em vez disso, você deve criar a versão 1.80.0 da fonte. Para fazer isso, em um diretório de sua escolha, faça o download da fonte da página de download do Boost e construa e instale da seguinte maneira:
export BOOST_INSTALL_DIR= $( pwd ) /boost_1_80_0/install_dir/
wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_80_0.tar.gz
tar xvfz boost_1_80_0.tar.gz
rm boost_1_80_0.tar.gz
pushd boost_1_80_0
mkdir install_dir
./bootstrap.sh --prefix= $BOOST_INSTALL_DIR
./b2 -j8 link=static runtime-link=static --abbreviate-paths variant=release toolset=gcc " cxxflags= -fno-semantic-interposition -fPIC " cxxstd=14 --with-test --with-system --with-filesystem --with-program_options --with-graph --with-random install
popd Nota : O interruptor -j8 é usado para reduzir os tempos de construção, construindo com até 8 threads.
NOTA : Você precisará do valor de BOOST_INSTALL_DIR posteriormente.
Para mais informações, consulte: https://www.boost.org/doc/libs/1_80_0/more/getting_started/unix-variants.html.
A biblioteca ONNX também precisa ser compilada da fonte. Para fazer isso, em um diretório de sua escolha, faça o download da fonte da página Onnx Github e construa e instale da seguinte maneira:
export ONNX_INSTALL_DIR= $( pwd ) /onnx-1.6.0/install_dir/
wget https://github.com/onnx/onnx/archive/v1.6.0.tar.gz
tar xvfz v1.6.0.tar.gz
rm v1.6.0.tar.gz
pushd onnx-1.6.0
mkdir install_dir
cmake ..
-DONNX_ML=0
-DProtobuf_PROTOC_EXECUTABLE= $PROTOBUF_INSTALL_DIR /bin/protoc
-DCMAKE_INSTALL_PREFIX= $ONNX_INSTALL_DIR
make -j8
make install
popd Nota : O interruptor -j8 é usado para reduzir os tempos de construção, construindo com até 8 threads.
NOTA : Você precisará do valor de ONNX_INSTALL_DIR mais tarde.
Para mais informações, consulte: https://github.com/onnx/onnx.
Os lançamentos do CapNProto podem ser baixados na página de download do Capnproto. Em um diretório de sua escolha, faça o download e instale da seguinte maneira:
export CAPNPROTO_INSTALL_DIR= $( pwd ) /capnproto-0.7.0/install_dir/
wget https://capnproto.org/capnproto-c++-0.7.0.tar.gz
tar xvfz capnproto-c++-0.7.0.tar.gz
rm capnproto-c++-0.7.0.tar.gz
pushd capnproto-c++-0.7.0
./configure --prefix= $CAPNPROTO_INSTALL_DIR
make -j8 check
make install
popd Nota : O comutador -j8 é usado para reduzir os tempos de teste, testando com até 8 threads.
Nota : Você precisará do valor de CAPNPROTO_INSTALL_DIR mais tarde
Para mais informações, consulte: https://capnproto.org/install.html
Trompeloeil pode ser baixado na página do Github Trompeloeil. Em um diretório de sua escolha, faça o download e instale da seguinte maneira:
export TROMPELOEIL_INSTALL_DIR= $( pwd ) /trompeloeil-35/install_dir/
wget https://github.com/rollbear/trompeloeil/archive/refs/tags/v35.tar.gz
tar xvfz v35.tar.gz
rm v35.tar.gz
pushd trompeloeil-35
mkdir build ; cd build
cmake .. -DCMAKE_INSTALL_PREFIX= $TROMPELOEIL_INSTALL_DIR
cmake --build . --target install
popd Você pode conferir a biblioteca Poprithms da GraphCore em um diretório adequado do repositório público do GitHub e instalá -lo da seguinte forma:
export POPRITHMS_INSTALL_DIR= $( pwd ) /poprithms/install_dir/
git clone https://github.com/graphcore/poprithms.git
pushd poprithms
mkdir build ; cd build ;
cmake ..
-DBOOST_ROOT= $BOOST_INSTALL_DIR
-DCMAKE_INSTALL_PREFIX= $POPRITHMS_INSTALL_DIR
-DCMAKE_GENERATOR= " Ninja "
ninja
ninja install
popd NOTA : Se você preferir construir com make em vez de ninja , remova o interruptor -DCMAKE_GENERATOR="Ninja" .
NOTA : As compilações podem ser mais aceleradas usando o ccache.
Nota : Você precisará do valor de POPRITHMS_INSTALL_DIR mais tarde.
Para mais informações, consulte: https://github.com/graphcore/poprithms.
Para obter o Poplar SDK, você precisa se registrar no acesso ao portal de suporte da GraphCore. Depois de ter acesso, você pode fazer o download do Ubuntu 18.04 mais recente no portal de suporte, descompacte -o em um diretório adequado. Para o restante deste documento, as instruções assumem que você definiu uma variável de ambiente POPLAR_INSTALL_DIR para apontar para o diretório em que o Poplar está descompactado. Observe que o Poplar SDK contém mais do que apenas o álamo e você terá que apontar a variável especificamente para um subdiretório chamado algo como poplar-ubuntu_18_04-xxxxx .
Para mais informações, consulte: https://www.graphcore.ai/developer.
Observe que apenas o Ubuntu 20.04 é suportado para a construção de Popart externamente.
Para construir o Popart, execute os seguintes comandos no diretório em que você verificou o repositório:
export POPART_INSTALL_DIR= $( pwd ) /popart/install_dir/
export PKG_CONFIG_PATH= " $CAPNPROTO_INSTALL_DIR /lib/pkgconfig: $PKG_CONFIG_PATH "
git clone https://github.com/graphcore/popart.git
push popart
mkdir build ; cd build ;
cmake ..
-DBOOST_ROOT= $BOOST_INSTALL_DIR
-DCapnProto_ROOT= $CAPNPROTO_INSTALL_DIR
-DONNX_ROOT= $ONNX_INSTALL_DIR
-DPOPLAR_INSTALL_DIR= $POPLAR_INSTALL_DIR
-Dpoprithms_ROOT= $POPRITHMS_INSTALL_DIR
-DProtobuf_ROOT= $PROTOBUF_INSTALL_DIR
-Dpybind11_ROOT= $PYBIND11_INSTALL_DIR
-Dspdlog_ROOT= $SPDLOG_INSTALL_DIR
-Dtrompeloeil_ROOT= $TROMPELOEIL_INSTALL_DIR
-DCMAKE_INSTALL_PREFIX= $POPART_INSTALL_DIR
-GNinja
ninja
ninja install
popd Você pode usar qualquer método suportado pela CMake para apontá -lo em dependências. Consulte a documentação find_package na documentação do CMake. Optamos para usar <verbatim pkg name>_ROOT variáveis que apontam para o diretório de instalação do pacote.
Deprecação : <uppercase pkg name>_INSTALL_DIR Variáveis, exceto POPLAR_INSTALL_DIR , foram depreciadas e serão removidas em uma versão futura.
Nota : outros interruptores CMake estão disponíveis:
-DPOPART_BUILD_TESTING=0 - comutador que pode ser usado para evitar a compilação do teste Popart.-DPOPART_STRICT_COMPARATOR_CHECKS=1 - verifique se há indálvulas nullptr e inválidos ao comparar recipientes de ponteiros. NOTA : Se você preferir construir com make em vez de ninja , remova o interruptor -GNinja .
NOTA : As compilações podem ser mais aceleradas usando o ccache.
Nota : a exportação do CMAKE da Capnproto simplesmente envolve o PKG-Config. PKG_CONFIG_PATH está definido para informar a PKG-Config onde encontrar Capnproto.
Existem vários aplicativos avançados do PoPart disponíveis no repositório de exemplo do GraphCore no GitHub. Veja o ReadMe para obter uma lista completa de exemplos implementados usando Popart e Popxl
O código é fornecido sob a licença do MIT, consulte o arquivo License.txt.
O projeto inclui trabalhos derivados do seguinte: Tensorflow, https://github.com/tensorflow/tensorflow/
Copyright 2017 Os autores do Tensorflow. Todos os direitos reservados.
Licenciado sob a licença Apache, versão 2.0 (a "licença"); Você não pode usar esse arquivo, exceto em conformidade com a licença. Você pode obter uma cópia da licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordada por escrito, o software distribuído pela licença é distribuído "como está", sem garantias ou condições de qualquer tipo, expressa ou implícita. Consulte a licença para o idioma específico que rege as permissões e limitações sob a licença.
Arquivos relevantes:
tests/integration/optimizer_tests/rmsprop_update_numpy.pyO projeto inclui trabalho derivado do seguinte: LLVM Project, http://llvm.org/doxygen/machineoutliner_8cpp_source.html
Licenciado sob a licença Apache, versão 2.0 (a "licença"); Você não pode usar esse arquivo, exceto em conformidade com a licença. Você pode obter uma cópia da licença em
http://www.apache.org/license/license-2.0
A menos que exigido pela lei aplicável ou acordada por escrito, o software distribuído pela licença é distribuído "como está", sem garantias ou condições de qualquer tipo, expressa ou implícita. Consulte a licença para o idioma específico que rege as permissões e limitações sob a licença.
Arquivos relevantes:
willow/src/subgraph/suffixtree.cppO projeto inclui trabalhos derivativos do seguinte: pybind11_mkdoc, https://github.com/pybind/pybind11_mkdoc
pybind11_mkdoc está licenciado sob a seguinte licença do MIT:
A licença do MIT (MIT)
Copyright (C) 2020 Wenzel Jakob
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.
Arquivos relevantes:
scripts/pybind11_mkdoc/O projeto inclui trabalhos derivativos do seguinte: Onnx, https://github.com/onnx/onnx
Onnx está licenciado sob a seguinte licença do MIT:
MIT Licença
Copyright (C) Contribuintes do projeto ONNX Todos os direitos reservados.
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.
Arquivos relevantes:
tests/integration/operators_test/rnn_helper.pytests/integration/operators_test/gru_test.pytests/integration/operators_test/lstm_test.pyO projeto inclui trabalhos derivativos do seguinte: opcional lite, https://github.com/martinmoene/optional-lite
Copyright (c) 2014-2018 Martin Moene
Boost Software License - Versão 1.0 - 17 de agosto de 2003
Distribuído sob a licença de software Boost, versão 1.0.
A permissão é concedida, gratuita, a qualquer pessoa ou organização que obtenha uma cópia do software e a documentação que o acompanha coberto por esta licença (o "software") para usar, reproduzir, exibir, distribuir, executar e transmitir o software e Para preparar obras derivadas do software e permitir terceiros a quem o software é fornecido para fazê-lo, tudo sujeito ao seguinte:
Os avisos de direitos autorais no software e toda essa afirmação, incluindo a concessão de licença acima, essa restrição e o seguinte aviso, devem ser incluídos em todas as cópias do software, no todo ou em parte, e todas as obras derivadas do software, a menos que tais tais Cópias ou obras derivadas estão exclusivamente na forma de código de objeto executável por máquina gerado por um processador de linguagem de origem.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade, título e não violação específicos. Em nenhum caso os detentores de direitos autorais ou qualquer pessoa que distribua o software seja responsável por quaisquer danos ou outro passivo, seja em contrato, delito ou de outra forma, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.
Arquivos relevantes:
willow/include/popart/vendored/optional.hppO projeto inclui trabalho derivado do seguinte: qualquer lite, https://github.com/martinmoene/any-lite
Copyright (c) 2016-2018 Martin Moene
Boost Software License - Versão 1.0 - 17 de agosto de 2003
Distribuído sob a licença de software Boost, versão 1.0.
A permissão é concedida, gratuita, a qualquer pessoa ou organização que obtenha uma cópia do software e a documentação que o acompanha coberto por esta licença (o "software") para usar, reproduzir, exibir, distribuir, executar e transmitir o software e Para preparar obras derivadas do software e permitir terceiros a quem o software é fornecido para fazê-lo, tudo sujeito ao seguinte:
Os avisos de direitos autorais no software e toda essa afirmação, incluindo a concessão de licença acima, essa restrição e o seguinte aviso, devem ser incluídos em todas as cópias do software, no todo ou em parte, e todas as obras derivadas do software, a menos que tais tais Cópias ou obras derivadas estão exclusivamente na forma de código de objeto executável por máquina gerado por um processador de linguagem de origem.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade, título e não violação específicos. Em nenhum caso os detentores de direitos autorais ou qualquer pessoa que distribua o software seja responsável por quaisquer danos ou outro passivo, seja em contrato, delito ou de outra forma, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.
Arquivos relevantes:
willow/include/popart/vendored/anylite.hpp