From 5221f35dff0be8973e8e8feeda4da7836a785bd8 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 08:25:03 +0800 Subject: [PATCH 1/9] feat: add docker compose scripts --- docker-compose.yml | 21 ++++++ docker/compose-bootstrap.sh | 134 ++++++++++++++++++++++++++++++++++++ docker/compose-shell.sh | 1 + 3 files changed, 156 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker/compose-bootstrap.sh create mode 100644 docker/compose-shell.sh diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..60d9d3d21 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '2.3' +services: + jetson-inference: + network_mode: host + runtime: nvidia + environment: + - DISPLAY=${DISPLAY} + volumes: + - '/tmp/.X11-unix/:/tmp/.X11-unix' + - '/tmp/argus_socket:/tmp/argus_socket' + - '/etc/enctune.conf:/etc/enctune.conf' + - '${PWD}/data:/jetson-inference/data' + - '${PWD}/python/training/classification/data:/jetson-inference/python/training/classification/data' + - '${PWD}/python/training/classification/models:/jetson-inference/python/training/classification/models' + - '${PWD}/python/training/detection/ssd/data:/jetson-inference/python/training/detection/ssd/data' + - '${PWD}/python/training/detection/ssd/models:/jetson-inference/python/training/detection/ssd/models' + - '${PWD}/python/training/detection/ssd/code:/jetson-inference/python/training/detection/ssd/code' + devices: + - /dev/video0 + - /dev/ttyUSB0 + image: 'dustynv/jetson-inference:r32.6.1' \ No newline at end of file diff --git a/docker/compose-bootstrap.sh b/docker/compose-bootstrap.sh new file mode 100644 index 000000000..79b5a8b60 --- /dev/null +++ b/docker/compose-bootstrap.sh @@ -0,0 +1,134 @@ +#!/usr/bin/env bash +# +# Start an instance of the jetson-inference docker container. +# See below or run this script with -h or --help to see usage options. +# +# This script should be run from the root dir of the jetson-inference project: +# +# $ cd /path/to/your/jetson-inference +# $ docker/run.sh +# + +show_help() { + echo " " + echo "usage: Bootstrap the enironment required for running docker-compose" + echo " " + echo " ./docker/compose-bootstrap.sh" + echo " " + echo "After this, edit docker-compose.yml for correct parameters, and then run docker-compose up -d to launch container" + echo " " + echo "args:" + echo " " + echo " --help Show this help text and quit" + echo " " +} + +die() { + printf '%s\n' "$1" + show_help + exit 1 +} + +# find container tag from L4T version +source docker/tag.sh + +# paths to some project directories +NETWORKS_DIR="data/networks" +CLASSIFY_DIR="python/training/classification" +DETECTION_DIR="python/training/detection/ssd" + +DOCKER_ROOT="/jetson-inference" # where the project resides inside docker + +# check if we need to download models +SIZE_MODELS=$(du -sb $NETWORKS_DIR | cut -f 1) + +echo "size of $NETWORKS_DIR: $SIZE_MODELS bytes" + +if [[ $SIZE_MODELS -lt 204800 ]]; then # some text files come with the repo (~78KB), so check for a bit more than that + sudo apt-get update + sudo apt-get install dialog + echo "Models have not yet been downloaded, running model downloader tool now..." + cd tools + ./download-models.sh + cd ../ +fi + +# check for pytorch-ssd base model +SSD_BASE_MODEL="$DETECTION_DIR/models/mobilenet-v1-ssd-mp-0_675.pth" + +if [ ! -f "$SSD_BASE_MODEL" ]; then + echo "Downloading pytorch-ssd base model..." + wget --quiet --show-progress --progress=bar:force:noscroll --no-check-certificate https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O $SSD_BASE_MODEL +fi + +mkdir -p $PWD/$DETECTION_DIR/code + +# generate mount commands +DATA_VOLUME="\ +--volume $PWD/data:$DOCKER_ROOT/data \ +--volume $PWD/$CLASSIFY_DIR/data:$DOCKER_ROOT/$CLASSIFY_DIR/data \ +--volume $PWD/$CLASSIFY_DIR/models:$DOCKER_ROOT/$CLASSIFY_DIR/models \ +--volume $PWD/$DETECTION_DIR/data:$DOCKER_ROOT/$DETECTION_DIR/data \ +--volume $PWD/$DETECTION_DIR/models:$DOCKER_ROOT/$DETECTION_DIR/models \ +--volume $PWD/$DETECTION_DIR/code:$DOCKER_ROOT/$DETECTION_DIR/code" + +echo "DATA_VOLUME: $DATA_VOLUME" + +while :; do + case $1 in + -h|-\?|--help) + show_help # Display a usage synopsis. + exit + ;; + --) # End of all options. + shift + break + ;; + -?*) + printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2 + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + + shift +done + +echo "CONTAINER: $CONTAINER_IMAGE" + +# check for V4L2 devices +V4L2_DEVICES=" " + +for i in {0..9} +do + if [ -a "/dev/video$i" ]; then + V4L2_DEVICES="$V4L2_DEVICES --device /dev/video$i " + fi +done + +echo "V4L2_DEVICES: $V4L2_DEVICES" + +# check for TTY devices to provide Arduino passthrough support +TTY_DEVICES=" " + +for i in {0..9} +do + if [ -a "/dev/ttyUSB$i" ]; then + TTY_DEVICES="$TTY_DEVICES --device /dev/ttyUSB$i " + fi +done + +for i in {0..9} +do + if [ -a "/dev/ttyACM$i" ]; then + TTY_DEVICES="$TTY_DEVICES --device /dev/ttyACM$i " + fi +done + +echo "TTY_DEVICES: $TTY_DEVICES" + +# run the container +sudo xhost +si:localuser:root + +echo "Please make sure compose file is using $CONTAINER_IMAGE" + diff --git a/docker/compose-shell.sh b/docker/compose-shell.sh new file mode 100644 index 000000000..83bdd6356 --- /dev/null +++ b/docker/compose-shell.sh @@ -0,0 +1 @@ +docker-compose exec -e TERM=${TERM} jetson-inference /bin/bash \ No newline at end of file From 7911580482b6523ae709df7d0c24fada41fafa52 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 08:49:45 +0800 Subject: [PATCH 2/9] feat: add docker-compose installation --- docker/compose-bootstrap.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docker/compose-bootstrap.sh b/docker/compose-bootstrap.sh index 79b5a8b60..d50eb4578 100644 --- a/docker/compose-bootstrap.sh +++ b/docker/compose-bootstrap.sh @@ -15,7 +15,7 @@ show_help() { echo " " echo " ./docker/compose-bootstrap.sh" echo " " - echo "After this, edit docker-compose.yml for correct parameters, and then run docker-compose up -d to launch container" + echo "After this, edit docker-compose.yml for correct parameters, and then run ./docker/docker-compose up -d to launch container" echo " " echo "args:" echo " " @@ -29,6 +29,14 @@ die() { exit 1 } +if [[ -x "$PWD/docker/docker-compose" ]]; then + echo "Latest docker-compose configured already, skipping download." +else + echo "Installing latest docker-compose to ./docker/docker-compose. Assuming that curl is installed." + # Prevent conflict with local docker-compose installation by maintaing our own binary. It is simple since it is Go static-linked binary anyway. + curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o $PWD/docker/docker-compose + chmod +x $PWD/docker/docker-compose + # find container tag from L4T version source docker/tag.sh From ec2c2f6dae01d850af2e31d09dc4912708d4e676 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Wed, 10 Nov 2021 08:51:54 +0800 Subject: [PATCH 3/9] fix: make scripts executable --- docker/compose-bootstrap.sh | 0 docker/compose-shell.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docker/compose-bootstrap.sh mode change 100644 => 100755 docker/compose-shell.sh diff --git a/docker/compose-bootstrap.sh b/docker/compose-bootstrap.sh old mode 100644 new mode 100755 diff --git a/docker/compose-shell.sh b/docker/compose-shell.sh old mode 100644 new mode 100755 From 34f70b850aa98f7223475085627fd0ea1b111603 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 08:57:24 +0800 Subject: [PATCH 4/9] fix: typo --- docker/compose-bootstrap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/compose-bootstrap.sh b/docker/compose-bootstrap.sh index d50eb4578..75d008249 100755 --- a/docker/compose-bootstrap.sh +++ b/docker/compose-bootstrap.sh @@ -36,6 +36,7 @@ else # Prevent conflict with local docker-compose installation by maintaing our own binary. It is simple since it is Go static-linked binary anyway. curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o $PWD/docker/docker-compose chmod +x $PWD/docker/docker-compose +fi # find container tag from L4T version source docker/tag.sh From 415bc9389c27e7e84bf31d9cc7f52b4070b88358 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 09:00:52 +0800 Subject: [PATCH 5/9] fix: typo --- docker/compose-bootstrap.sh | 2 +- docker/compose-shell.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/compose-bootstrap.sh b/docker/compose-bootstrap.sh index 75d008249..e3827c7e0 100755 --- a/docker/compose-bootstrap.sh +++ b/docker/compose-bootstrap.sh @@ -34,7 +34,7 @@ if [[ -x "$PWD/docker/docker-compose" ]]; then else echo "Installing latest docker-compose to ./docker/docker-compose. Assuming that curl is installed." # Prevent conflict with local docker-compose installation by maintaing our own binary. It is simple since it is Go static-linked binary anyway. - curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o $PWD/docker/docker-compose + curl -L "https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o $PWD/docker/docker-compose chmod +x $PWD/docker/docker-compose fi diff --git a/docker/compose-shell.sh b/docker/compose-shell.sh index 83bdd6356..536c34c2f 100755 --- a/docker/compose-shell.sh +++ b/docker/compose-shell.sh @@ -1 +1 @@ -docker-compose exec -e TERM=${TERM} jetson-inference /bin/bash \ No newline at end of file +./docker/docker-compose exec -e TERM=${TERM} jetson-inference /bin/bash \ No newline at end of file From 33c2b217ac369c3df69798f3e34ff8cb91af06d8 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 09:05:31 +0800 Subject: [PATCH 6/9] fix: env var and sudo --- docker/compose-shell.sh | 2 +- docker/compose-up.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 docker/compose-up.sh diff --git a/docker/compose-shell.sh b/docker/compose-shell.sh index 536c34c2f..17f2d1af0 100755 --- a/docker/compose-shell.sh +++ b/docker/compose-shell.sh @@ -1 +1 @@ -./docker/docker-compose exec -e TERM=${TERM} jetson-inference /bin/bash \ No newline at end of file +sudo -E ./docker/docker-compose exec -e TERM=${TERM} jetson-inference /bin/bash \ No newline at end of file diff --git a/docker/compose-up.sh b/docker/compose-up.sh new file mode 100644 index 000000000..78f2154be --- /dev/null +++ b/docker/compose-up.sh @@ -0,0 +1 @@ +sudo -E ./docker/docker-compose up -d \ No newline at end of file From 718f69e01c802de9cd40bf9ae39b562681883726 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Wed, 10 Nov 2021 09:06:45 +0800 Subject: [PATCH 7/9] fix: exec --- docker/compose-up.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docker/compose-up.sh diff --git a/docker/compose-up.sh b/docker/compose-up.sh old mode 100644 new mode 100755 From 6a15ff912e886e639765a697cce98c54961eb2ee Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Wed, 10 Nov 2021 09:13:59 +0800 Subject: [PATCH 8/9] fix: add -it --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 60d9d3d21..d65e17a6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,8 @@ version: '2.3' services: jetson-inference: + stdin_open: true # docker run -i + tty: true # docker run -t network_mode: host runtime: nvidia environment: From a683cd5f289e79641cd1a54e3a771082ee518129 Mon Sep 17 00:00:00 2001 From: michaellee8 Date: Sun, 14 Nov 2021 16:54:08 +0800 Subject: [PATCH 9/9] Update docker-compose.yml --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d65e17a6e..8041f22f4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,4 +20,4 @@ services: devices: - /dev/video0 - /dev/ttyUSB0 - image: 'dustynv/jetson-inference:r32.6.1' \ No newline at end of file + image: 'dustynv/jetson-inference:r32.6.1'