Skip to content
Snippets Groups Projects
Commit d454e212 authored by Tobi-Alonso's avatar Tobi-Alonso
Browse files

[Docker] Use Xilinx/dev Docker config so XRT deps are autom. installed

parent 4a803718
No related branches found
No related tags found
No related merge requests found
......@@ -28,14 +28,11 @@
FROM pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel
MAINTAINER Yaman Umuroglu <yamanu@xilinx.com>
ARG PYTHON_VERSION=3.6
ARG GID
ARG GNAME
ARG UNAME
ARG UID
ARG PASSWD
ARG JUPYTER_PORT
ARG NETRON_PORT
WORKDIR /workspace
......@@ -86,8 +83,6 @@ RUN git clone https://bitbucket.org/maltanar/oh-my-xilinx.git /workspace/oh-my-x
# for this developer-oriented Docker container we assume the FINN repo is cloned and mounted from the host
# at /workspace/finn -- see run-docker.sh for an example of how to do this.
ENV PYTHONPATH "${PYTHONPATH}:/workspace/finn/src"
ENV PYTHONPATH "${PYTHONPATH}:/workspace/pyverilator"
ENV PATH "${PATH}:/workspace/oh-my-xilinx:/home/$UNAME/.local/bin"
ENV OHMYXILINX "/workspace/oh-my-xilinx"
......@@ -101,10 +96,19 @@ COPY docker/finn_entrypoint.sh /usr/local/bin/
COPY docker/quicktest.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/finn_entrypoint.sh
RUN chmod 755 /usr/local/bin/quicktest.sh
USER $UNAME
# install vitis deps if required
ARG INSTALL_XRT_DEPS
RUN if [ "$INSTALL_XRT_DEPS" = "1" ] ; then \
echo "Installing XRT dependencies"; \
wget https://raw.githubusercontent.com/Xilinx/XRT/master/src/runtime_src/tools/scripts/xrtdeps.sh; \
apt-get update; \
bash xrtdeps.sh -docker; \
rm xrtdeps.sh; \
else \
echo "Skipping installation of XRT dependencies"; \
fi
EXPOSE $JUPYTER_PORT
EXPOSE $NETRON_PORT
USER $UNAME
ENTRYPOINT ["finn_entrypoint.sh"]
CMD ["bash"]
CMD ["bash"]
\ No newline at end of file
......@@ -42,21 +42,28 @@ recho () {
}
if [ -z "$VIVADO_PATH" ];then
recho "Please set the VIVADO_PATH that contains the path to your Vivado installation directory."
recho "FINN functionality depending on Vivado or Vivado HLS will not be available."
recho "Please set the VIVADO_PATH that contains the path to your Vivado installation directory."
recho "FINN functionality depending on Vivado or Vivado HLS will not be available."
fi
if [ -z "$PYNQ_IP" ];then
recho "Please set the PYNQ_IP env.var. to enable PYNQ deployment tests."
recho "Please set the PYNQ_IP env.var. to enable PYNQ deployment tests."
fi
if [ -z "$VITIS_PATH" ];then
recho "Please set the VITIS_PATH that contains the path to your Vitis installation directory."
recho "FINN functionality depending on Vitis will not be available."
recho "Please set the VITIS_PATH that contains the path to your Vitis installation directory."
recho "FINN functionality depending on Vitis will not be available."
else
if [ -z "$PLATFORM_REPO_PATHS" ];then
recho "Please set PLATFORM_REPO_PATHS pointing to Vitis platform files (DSAs)."
fi
if [ -z "$PLATFORM_REPO_PATHS" ];then
recho "Please set PLATFORM_REPO_PATHS pointing to Vitis platform files (DSAs)."
recho "This is required to be able to use Vitis."
exit -1
fi
if [ -z "$XILINX_XRT" ];then
recho "Please set XILINX_XRT pointing to your XRT installation."
recho "This is required to be able to use Vitis."
exit -1
fi
fi
DOCKER_GID=$(id -g)
......@@ -97,60 +104,85 @@ SCRIPTPATH=$(dirname "$SCRIPT")
: ${PLATFORM_REPO_PATHS="/opt/xilinx/platforms"}
: ${FINN_HOST_BUILD_DIR="/tmp/$DOCKER_INST_NAME"}
FINN_CONTAINER_BUILD_DIR=/tmp/$DOCKER_INST_NAME
DOCKER_INTERACTIVE=""
DOCKER_EXTRA=""
if [ "$1" = "test" ]; then
gecho "Running test suite (all tests)"
DOCKER_CMD="python setup.py test"
elif [ "$1" = "quicktest" ]; then
gecho "Running test suite (non-Vivado, non-slow tests)"
DOCKER_CMD="quicktest.sh"
elif [ "$1" = "notebook" ]; then
gecho "Running Jupyter notebook server"
DOCKER_CMD="jupyter notebook --ip=0.0.0.0 --port $JUPYTER_PORT notebooks"
DOCKER_EXTRA+="-e JUPYTER_PORT=$JUPYTER_PORT "
DOCKER_EXTRA+="-e NETRON_PORT=$NETRON_PORT "
DOCKER_EXTRA+="-p $JUPYTER_PORT:$JUPYTER_PORT "
DOCKER_EXTRA+="-p $NETRON_PORT:$NETRON_PORT "
elif [ "$1" = "build_dataflow" ]; then
BUILD_DATAFLOW_DIR=$(readlink -f "$2")
DOCKER_EXTRA="-v $BUILD_DATAFLOW_DIR:$BUILD_DATAFLOW_DIR"
DOCKER_INTERACTIVE="-it"
#FINN_HOST_BUILD_DIR=$BUILD_DATAFLOW_DIR/build
gecho "Running build_dataflow for folder $BUILD_DATAFLOW_DIR"
DOCKER_CMD="build_dataflow $BUILD_DATAFLOW_DIR"
elif [ "$1" = "build_custom" ]; then
BUILD_CUSTOM_DIR=$(readlink -f "$2")
DOCKER_EXTRA="-v $BUILD_CUSTOM_DIR:$BUILD_CUSTOM_DIR -w $BUILD_CUSTOM_DIR"
DOCKER_INTERACTIVE="-it"
#FINN_HOST_BUILD_DIR=$BUILD_DATAFLOW_DIR/build
gecho "Running build_custom: $BUILD_CUSTOM_DIR/build.py"
DOCKER_CMD="python -mpdb -cc -cq build.py"
else
gecho "Running container only"
DOCKER_CMD="bash"
DOCKER_INTERACTIVE="-it"
fi
VIVADO_HLS_LOCAL=$VIVADO_PATH
VIVADO_IP_CACHE=$FINN_CONTAINER_BUILD_DIR/vivado_ip_cache
VIVADO_IP_CACHE=$FINN_HOST_BUILD_DIR/vivado_ip_cache
INSTALL_XRT_DEPS=0
# ensure build dir exists locally
mkdir -p $FINN_HOST_BUILD_DIR
mkdir -p $FINN_SSH_KEY_DIR
gecho "Instance is named as $DOCKER_INST_NAME"
gecho "Mounting $FINN_HOST_BUILD_DIR into $FINN_CONTAINER_BUILD_DIR"
gecho "Docker container is named $DOCKER_INST_NAME"
gecho "Mounting $FINN_HOST_BUILD_DIR into $FINN_HOST_BUILD_DIR"
gecho "Mounting $VIVADO_PATH into $VIVADO_PATH"
gecho "Mounting $VITIS_PATH into $VITIS_PATH"
if [ ! -z "$VITIS_PATH" ];then
gecho "Mounting $VITIS_PATH into $VITIS_PATH"
INSTALL_XRT_DEPS=1
fi
gecho "Port-forwarding for Jupyter $JUPYTER_PORT:$JUPYTER_PORT"
gecho "Port-forwarding for Netron $NETRON_PORT:$NETRON_PORT"
gecho "Vivado IP cache dir is at $VIVADO_IP_CACHE"
gecho "Using default PYNQ board $PYNQ_BOARD"
DOCKER_INTERACTIVE=""
if [ "$1" = "test" ]; then
gecho "Running test suite (all tests)"
DOCKER_CMD="python setup.py test"
elif [ "$1" = "quicktest" ]; then
gecho "Running test suite (non-Vivado, non-slow tests)"
DOCKER_CMD="quicktest.sh"
elif [ "$1" = "notebook" ]; then
gecho "Running Jupyter notebook server"
DOCKER_CMD="jupyter notebook --ip=0.0.0.0 --port $JUPYTER_PORT notebooks"
else
gecho "Running container only"
DOCKER_CMD="bash"
DOCKER_INTERACTIVE="-it"
fi
# Build the FINN Docker image
# Need to ensure this is done within the finn/ root folder:
OLD_PWD=$(pwd)
cd $SCRIPTPATH
docker build -f docker/Dockerfile.finn_dev --tag=$DOCKER_TAG \
--build-arg GID=$DOCKER_GID \
--build-arg GNAME=$DOCKER_GNAME \
--build-arg UNAME=$DOCKER_UNAME \
--build-arg UID=$DOCKER_UID \
--build-arg PASSWD=$DOCKER_PASSWD \
--build-arg JUPYTER_PORT=$JUPYTER_PORT \
--build-arg NETRON_PORT=$NETRON_PORT \
--build-arg INSTALL_XRT_DEPS=$INSTALL_XRT_DEPS \
.
cd $OLD_PWD
# Launch container with current directory mounted
# important to pass the --init flag here for correct Vivado operation, see:
# https://stackoverflow.com/questions/55733058/vivado-synthesis-hangs-in-docker-container-spawned-by-jenkins
DOCKER_EXEC="docker run -t --rm --name $DOCKER_INST_NAME $DOCKER_INTERACTIVE --init "
DOCKER_EXEC="docker run -t --rm $DOCKER_INTERACTIVE --init "
DOCKER_EXEC+="--hostname $DOCKER_INST_NAME "
DOCKER_EXEC+="-e SHELL=/bin/bash "
DOCKER_EXEC+="-v $SCRIPTPATH:/workspace/finn "
DOCKER_EXEC+="-v $FINN_HOST_BUILD_DIR:$FINN_CONTAINER_BUILD_DIR "
DOCKER_EXEC+="-v $FINN_HOST_BUILD_DIR:$FINN_HOST_BUILD_DIR "
DOCKER_EXEC+="-v $FINN_SSH_KEY_DIR:/home/$DOCKER_UNAME/.ssh "
DOCKER_EXEC+="-e FINN_INST_NAME=$DOCKER_INST_NAME "
DOCKER_EXEC+="-e FINN_BUILD_DIR=$FINN_HOST_BUILD_DIR "
DOCKER_EXEC+="-e FINN_ROOT="/workspace/finn" "
DOCKER_EXEC+="-e VIVADO_IP_CACHE=$VIVADO_IP_CACHE "
DOCKER_EXEC+="-e PYNQ_BOARD=$PYNQ_BOARD "
......@@ -159,8 +191,10 @@ DOCKER_EXEC+="-e PYNQ_USERNAME=$PYNQ_USERNAME "
DOCKER_EXEC+="-e PYNQ_PASSWORD=$PYNQ_PASSWORD "
DOCKER_EXEC+="-e PYNQ_TARGET_DIR=$PYNQ_TARGET_DIR "
DOCKER_EXEC+="-e NUM_DEFAULT_WORKERS=$NUM_DEFAULT_WORKERS "
DOCKER_EXEC+="-p $JUPYTER_PORT:$JUPYTER_PORT "
DOCKER_EXEC+="-p $NETRON_PORT:$NETRON_PORT "
if [ ! -z "$IMAGENET_VAL_PATH" ];then
DOCKER_EXEC+="-v $IMAGENET_VAL_PATH:$IMAGENET_VAL_PATH "
DOCKER_EXEC+="-e IMAGENET_VAL_PATH=$IMAGENET_VAL_PATH "
fi
if [ ! -z "$VIVADO_PATH" ];then
DOCKER_EXEC+="-e "XILINX_VIVADO=$VIVADO_PATH" "
DOCKER_EXEC+="-v $VIVADO_PATH:$VIVADO_PATH "
......@@ -168,12 +202,12 @@ if [ ! -z "$VIVADO_PATH" ];then
fi
if [ ! -z "$VITIS_PATH" ];then
if [ -z "$PLATFORM_REPO_PATHS" ];then
recho "PLATFORM_REPO_PATHS must be set for Vitis/Alveo flows"
exit -1
recho "PLATFORM_REPO_PATHS must be set for Vitis/Alveo flows"
exit -1
fi
if [ -z "$XILINX_XRT" ];then
recho "XILINX_XRT must be set for Vitis/Alveo flows"
exit -1
recho "XILINX_XRT must be set for Vitis/Alveo flows"
exit -1
fi
DOCKER_EXEC+="-v $VITIS_PATH:$VITIS_PATH "
DOCKER_EXEC+="-v $PLATFORM_REPO_PATHS:$PLATFORM_REPO_PATHS "
......@@ -187,6 +221,7 @@ if [ ! -z "$VITIS_PATH" ];then
DOCKER_EXEC+="-e ALVEO_BOARD=$ALVEO_BOARD "
DOCKER_EXEC+="-e ALVEO_TARGET_DIR=$ALVEO_TARGET_DIR "
fi
DOCKER_EXEC+="$DOCKER_EXTRA "
DOCKER_EXEC+="$DOCKER_TAG $DOCKER_CMD"
$DOCKER_EXEC
$DOCKER_EXEC
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment