From 0a1a5b177a008bccce984e30ffd468ecbb7d788e Mon Sep 17 00:00:00 2001 From: Aleksandr Laptev Date: Thu, 11 Jan 2024 00:15:52 +0700 Subject: [PATCH] Graphviz fix (#7843) * graphviz reinstallation added Signed-off-by: Aleksandr Laptev * fix comments Signed-off-by: Aleksandr Laptev * remove redundant installations Signed-off-by: Aleksandr Laptev * remove rebase glitch Signed-off-by: Aleksandr Laptev * remove rebase glitch Signed-off-by: Aleksandr Laptev * additional dependencies are put into a separate RUN Signed-off-by: Aleksandr Laptev --------- Signed-off-by: Aleksandr Laptev Co-authored-by: Vladimir Bataev --- Dockerfile | 32 +++++++++++++++- scripts/installers/install_graphviz.sh | 51 ++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100755 scripts/installers/install_graphviz.sh diff --git a/Dockerfile b/Dockerfile index 83246e8516fa..8b2b2a3e6233 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ ARG REQUIRE_AIS_CLI=false # Ensure apt-get won't prompt for selecting options ENV DEBIAN_FRONTEND=noninteractive -# libavdevice-dev rerquired for latest torchaudio +# libavdevice-dev required for latest torchaudio RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y \ @@ -42,6 +42,25 @@ RUN apt-get update && \ libavdevice-dev && \ rm -rf /var/lib/apt/lists/* +# libtool, ... , libgts-dev are required for graphviz +# graphviz is required for k2 and pynini visualization +RUN apt-get update && \ + apt-get install -y \ + libtool \ + libltdl-dev \ + automake \ + autoconf \ + bison \ + flex \ + tcl \ + ghostscript \ + libgd-dev \ + fontconfig \ + libcairo2-dev \ + libpango1.0-dev \ + libgts-dev && \ + rm -rf /var/lib/apt/lists/* + WORKDIR /workspace/ # Install megatron core, this can be removed once 0.3 pip package is released # We leave it here in case we need to work off of a specific commit in main @@ -90,6 +109,17 @@ RUN pip install flash-attn # install numba for latest containers RUN pip install numba>=0.57.1 +COPY scripts /tmp/nemo/scripts/ +# install correct graphviz version (k2 and pynini visualization tool), skip if installation fails +RUN INSTALL_MSG=$(/bin/bash /tmp/nemo/scripts/installers/install_graphviz.sh --docker); INSTALL_CODE=$?; \ + echo ${INSTALL_MSG}; \ + if [ ${INSTALL_CODE} -ne 0 ]; then \ + echo "graphviz installation failed"; \ + if [ "${REQUIRE_K2}" = true ]; then \ + exit ${INSTALL_CODE}; \ + else echo "Skipping failed graphviz installation"; fi \ + else echo "graphviz installed successfully"; fi + # install k2, skip if installation fails COPY scripts /tmp/nemo/scripts/ RUN INSTALL_MSG=$(/bin/bash /tmp/nemo/scripts/installers/install_k2.sh); INSTALL_CODE=$?; \ diff --git a/scripts/installers/install_graphviz.sh b/scripts/installers/install_graphviz.sh new file mode 100755 index 000000000000..3a7d5c2a3d53 --- /dev/null +++ b/scripts/installers/install_graphviz.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +DOCKER=false +MAYBE_SUDO="" + +GRAPHVIZ_REPO=https://gitlab.com/graphviz/graphviz.git +GRAPHVIZ_LATEST_RELEASE=9.0.0 +GRAPHVIZ_PY_REPO=https://github.com/xflr6/graphviz +GRAPHVIZ_PY_LATEST_RELEASE=448d1a0 # Temporary fix until 0.20.2 + +if [[ $* == *--docker* ]]; then + echo "Docker installation" + DOCKER=true +else + echo "Local installation" + if [[ $(sudo -n -v 2) ]]; then + MAYBE_SUDO="sudo" + else + echo "No sudo detected" + fi +fi + +{ + $MAYBE_SUDO apt-get update + $MAYBE_SUDO apt-get remove -y graphviz + pip uninstall -y graphviz + if [[ $DOCKER == false ]]; then + $MAYBE_SUDO apt-get install -y libtool libltdl-dev automake autoconf bison flex tcl \ + ghostscript libgd-dev fontconfig libcairo2-dev libpango1.0-dev libgts-dev + fi + git clone ${GRAPHVIZ_REPO} -b ${GRAPHVIZ_LATEST_RELEASE} && cd graphviz + ./autogen.sh && ./configure --disable-python --disable-perl + $MAYBE_SUDO make -j && $MAYBE_SUDO make install + cd .. && $MAYBE_SUDO rm -rf graphviz + pip install -v "git+${GRAPHVIZ_PY_REPO}@${GRAPHVIZ_PY_LATEST_RELEASE}#egg=graphviz" +} || { echo "graphviz installed with errors! Please check installation manually."; exit 1; } +echo "graphviz (re-) installed successfully!"