From 50b6b925a434083bec4f1fc503ef966784439df4 Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Mon, 17 Jul 2023 14:03:41 -0600 Subject: [PATCH] Setup to use docker bake --- Makefile | 10 +++++----- docker/main/Dockerfile | 32 ++++++++++++++++++++++++++++++++ docker/rpi/Dockerfile | 3 +-- docker/rpi/bake.hcl | 18 ++++++++++++++++++ docker/rpi/install_deps.sh | 13 +++++++++++++ docker/rpi/rpi.mk | 8 ++++---- docker/tensorrt/Dockerfile | 3 +-- docker/tensorrt/bake.hcl | 18 ++++++++++++++++++ docker/tensorrt/trt.mk | 6 +++--- 9 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 docker/rpi/bake.hcl create mode 100644 docker/tensorrt/bake.hcl diff --git a/Makefile b/Makefile index 85d4bb961..2cd831670 100644 --- a/Makefile +++ b/Makefile @@ -18,19 +18,19 @@ version: echo 'VERSION = "$(VERSION)-$(COMMIT_HASH)"' > frigate/version.py local: version - docker buildx build --target=frigate --tag frigate:latest --load --file docker/build/main/Dockerfile . + docker buildx build --target=frigate --tag frigate:latest --load --file docker/main/Dockerfile . amd64: - docker buildx build --platform linux/amd64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/build/main/Dockerfile . + docker buildx build --platform linux/amd64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/main/Dockerfile . arm64: - docker buildx build --platform linux/arm64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/build/main/Dockerfile . + docker buildx build --platform linux/arm64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/main/Dockerfile . build: version amd64 arm64 - docker buildx build --platform linux/arm64/v8,linux/amd64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/build/main/Dockerfile . + docker buildx build --platform linux/arm64/v8,linux/amd64 --target=frigate --tag $(IMAGE_REPO):$(VERSION)-$(COMMIT_HASH) --file docker/main/Dockerfile . push: push-boards - docker buildx build --push --platform linux/arm64/v8,linux/amd64 --target=frigate --tag $(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH) --file docker/build/main/Dockerfile . + docker buildx build --push --platform linux/arm64/v8,linux/amd64 --target=frigate --tag $(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH) --file docker/main/Dockerfile . run: local docker run --rm --publish=5000:5000 --volume=${PWD}/config:/config frigate:latest diff --git a/docker/main/Dockerfile b/docker/main/Dockerfile index 07278cd1f..06c54f680 100644 --- a/docker/main/Dockerfile +++ b/docker/main/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1.4 + # https://askubuntu.com/questions/972516/debian-frontend-environment-variable ARG DEBIAN_FRONTEND=noninteractive @@ -32,6 +34,32 @@ RUN wget -qO go2rtc "https://github.com/AlexxIT/go2rtc/releases/download/v1.6.0/ && chmod +x go2rtc +#### +# +# OpenVino Support +# +# 1. Download and convert a model from Intel's Public Open Model Zoo +# 2. Build libUSB without udev to handle NCS2 enumeration +# +#### +# Download and Convert OpenVino model +FROM base_amd64 AS ov-converter +ARG DEBIAN_FRONTEND + +# Install OpenVino Runtime and Dev library +COPY requirements-ov.txt /requirements-ov.txt +RUN apt-get -qq update \ + && apt-get -qq install -y wget python3 python3-distutils \ + && wget -q https://bootstrap.pypa.io/get-pip.py -O get-pip.py \ + && python3 get-pip.py "pip" \ + && pip install -r /requirements-ov.txt + +# Get OpenVino Model +RUN mkdir /models \ + && cd /models && omz_downloader --name ssdlite_mobilenet_v2 \ + && cd /models && omz_converter --name ssdlite_mobilenet_v2 --precision FP16 + + # libUSB - No Udev FROM wget as libusb-build ARG TARGETARCH @@ -66,6 +94,10 @@ FROM wget AS models RUN wget -qO edgetpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite RUN wget -qO cpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite COPY labelmap.txt . +# Copy OpenVino model +COPY --from=ov-converter /models/public/ssdlite_mobilenet_v2/FP16 openvino-model +RUN wget -q https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt -O openvino-model/coco_91cl_bkgr.txt && \ + sed -i 's/truck/car/g' openvino-model/coco_91cl_bkgr.txt # Get Audio Model and labels RUN wget -qO cpu_audio_model.tflite https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite COPY audio-labelmap.txt . diff --git a/docker/rpi/Dockerfile b/docker/rpi/Dockerfile index df8e29b8c..581ca7ff8 100644 --- a/docker/rpi/Dockerfile +++ b/docker/rpi/Dockerfile @@ -1,5 +1,4 @@ -# syntax = edrevo/dockerfile-plus -INCLUDE+ docker/main/Dockerfile +# syntax=docker/dockerfile:1.4 # https://askubuntu.com/questions/972516/debian-frontend-environment-variable ARG DEBIAN_FRONTEND=noninteractive diff --git a/docker/rpi/bake.hcl b/docker/rpi/bake.hcl new file mode 100644 index 000000000..ad673ce52 --- /dev/null +++ b/docker/rpi/bake.hcl @@ -0,0 +1,18 @@ +target "deps" { + dockerfile = "docker/main/Dockerfile" + platforms = ["linux/arm64"] +} + +target rootfs { + dockerfile = "docker/main/Dockerfile" + platforms = ["linux/arm64"] +} + +target "rpi" { + dockerfile = "docker/rpi/Dockerfile" + contexts = { + deps = "target:deps", + rootfs = "target:rootfs" + } + platforms = ["linux/arm64"] +} \ No newline at end of file diff --git a/docker/rpi/install_deps.sh b/docker/rpi/install_deps.sh index e04864e82..9716623ca 100755 --- a/docker/rpi/install_deps.sh +++ b/docker/rpi/install_deps.sh @@ -2,6 +2,19 @@ set -euxo pipefail +apt-get -qq update + +apt-get -qq install --no-install-recommends -y \ + apt-transport-https \ + gnupg \ + wget \ + procps vainfo \ + unzip locales tzdata libxml2 xz-utils \ + python3-pip \ + curl \ + jq \ + nethogs + mkdir -p -m 600 /root/.gnupg # enable non-free repo diff --git a/docker/rpi/rpi.mk b/docker/rpi/rpi.mk index c137411d3..243963fdb 100644 --- a/docker/rpi/rpi.mk +++ b/docker/rpi/rpi.mk @@ -1,10 +1,10 @@ BOARDS += rpi local-rpi: version - docker buildx build --tag frigate:latest-rpi --load --file docker/build/rpi/Dockerfile . + docker buildx bake --file=docker/rpi/bake.hcl --set rpi.tagsfrigate:latest-rpi rpi -build-rpi: - docker buildx build --platform linux/arm64 --tag $(IMAGE_REPO):${VERSION}-$(COMMIT_HASH)-rpi --file docker/build/rpi/Dockerfile . +build-rpi: version + docker buildx bake --file=docker/rpi/bake.hcl --set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rpi rpi push-rpi: build-rpi - docker buildx build --push --platform linux/arm64 --tag $(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rpi --file docker/build/rpi/Dockerfile . \ No newline at end of file + docker buildx bake --push --file=docker/rpi/bake.hcl --set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rpi rpi \ No newline at end of file diff --git a/docker/tensorrt/Dockerfile b/docker/tensorrt/Dockerfile index 2f35977e1..7941347e2 100644 --- a/docker/tensorrt/Dockerfile +++ b/docker/tensorrt/Dockerfile @@ -1,5 +1,4 @@ -# syntax = edrevo/dockerfile-plus -INCLUDE+ docker/main/Dockerfile +# syntax=docker/dockerfile:1.2 # https://askubuntu.com/questions/972516/debian-frontend-environment-variable ARG DEBIAN_FRONTEND=noninteractive diff --git a/docker/tensorrt/bake.hcl b/docker/tensorrt/bake.hcl new file mode 100644 index 000000000..db15ba971 --- /dev/null +++ b/docker/tensorrt/bake.hcl @@ -0,0 +1,18 @@ +target "deps" { + dockerfile = "docker/main/Dockerfile" + platforms = ["linux/amd64"] +} + +target rootfs { + dockerfile = "docker/main/Dockerfile" + platforms = ["linux/amd64"] +} + +target "tensorrt" { + dockerfile = "docker/tensorrt/Dockerfile" + contexts = { + deps = "target:deps", + rootfs = "target:rootfs" + } + platforms = ["linux/amd64"] +} \ No newline at end of file diff --git a/docker/tensorrt/trt.mk b/docker/tensorrt/trt.mk index b57df8095..caf300511 100644 --- a/docker/tensorrt/trt.mk +++ b/docker/tensorrt/trt.mk @@ -1,10 +1,10 @@ BOARDS += trt local-trt: version - docker buildx build --tag frigate:latest-tensorrt --load --file docker/build/tensorrt/Dockerfile . + docker buildx bake --file=docker/rpi/bake.hcl --set rpi.tagsfrigate:latest-tensorrt tensorrt build-trt: - docker buildx build --platform linux/amd64 --tag $(IMAGE_REPO):${VERSION}-$(COMMIT_HASH)-tensorrt --file docker/build/trt/Dockerfile . + docker buildx bake --file=docker/rpi/bake.hcl --set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-tensorrt tensorrt push-trt: build-trt - docker buildx build --push --platform linux/arm64 --tag $(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-tensorrt --file docker/build/rpi/Dockerfile . \ No newline at end of file + docker buildx bake --push --file=docker/rpi/bake.hcl --set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-tensorrt tensorrt \ No newline at end of file