Update workflow for cuda11 and cuda12 builds

This commit is contained in:
Ingo Oppermann
2024-09-26 11:03:55 +02:00
parent 504fb480da
commit 20d44d02f6
7 changed files with 200 additions and 113 deletions

View File

@@ -9,6 +9,13 @@ on:
jobs:
docker:
runs-on: [self-hosted]
strategy:
matrix:
include:
- cuda: 11
platforms: linux/amd64
- cuda: 12
platforms: linux/amd64
steps:
- name: Get current date
run: |
@@ -23,7 +30,7 @@ jobs:
- uses: cardinalby/export-env-action@v2
with:
envFile: "Build.ubuntu.env|Build.ubuntu.cuda.env"
envFile: "Build.ubuntu.cuda${{ matrix.cuda }}.env"
export: "true"
expandWithJobEnv: "true"
expand: "true"
@@ -49,28 +56,16 @@ jobs:
with:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile.ubuntu.cuda
file: ./Dockerfile.ubuntu.cuda${{ matrix.cuda }}
build-args: |
BUILD_IMAGE=nvidia/cuda:${{ env.CUDA_VERSION }}-devel-${{ env.OS_NAME }}${{ env.OS_VERSION }}
BUILD_IMAGE=nvidia/cuda:${{ env.CUDA_VERSION }}-devel-ubuntu${{ env.OS_VERSION }}
DEPLOY_IMAGE=nvidia/cuda:${{ env.CUDA_VERSION }}-runtime-ubuntu${{ env.OS_VERSION }}
BUILD_DATE=${{ env.CURRENT_DATE }}
BUILD_COMMIT=${{ env.CURRENT_COMMIT }}
DEPLOY_IMAGE=nvidia/cuda:${{ env.CUDA_VERSION }}-runtime-${{ env.OS_NAME }}${{ env.OS_VERSION }}
FFNVCODEC_VERSION=${{ env.FFNVCODEC_VERSION }}
FREETYPE_VERSION=${{ env.FREETYPE_VERSION }}
XML2_VERSION=${{ env.XML2_VERSION }}
SRT_VERSION=${{ env.SRT_VERSION }}
X264_VERSION=${{ env.X264_VERSION }}
X265_VERSION=${{ env.X265_VERSION }}
VPX_VERSION=${{ env.VPX_VERSION }}
LAME_VERSION=${{ env.LAME_VERSION }}
OPUS_VERSION=${{ env.OPUS_VERSION }}
OGG_VERSION=${{ env.OGG_VERSION }}
VORBIS_VERSION=${{ env.VORBIS_VERSION }}
DAV1D_VERSION=${{ env.DAV1D_VERSION }}
RAV1E_VERSION=${{ env.RAV1E_VERSION }}
FFMPEG_VERSION=${{ env.FFMPEG_VERSION }}
platforms: linux/amd64
platforms: ${{ matrix.platforms }}
push: true
tags: |
datarhei/base:${{ env.OS_NAME }}-ffmpeg-cuda-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}-${{env.CUDA_VERSION}}
datarhei/base:ffmpeg${{ env.FFMPEG_VERSION }}-cuda-${{ env.OS_NAME }}${{ env.OS_VERSION }}-cuda${{env.CUDA_VERSION}}
datarhei/base:ubuntu-ffmpeg-cuda-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}-${{ env.CUDA_VERSION }}
datarhei/base:ffmpeg${{ env.FFMPEG_VERSION }}-cuda-ubuntu${{ env.OS_VERSION }}-cuda${{ env.CUDA_VERSION }}

View File

@@ -39,44 +39,38 @@ function build_default() {
function build_rpi() {
source_env ./Build.alpine.env
source_env ./Build.alpine.rpi.env
# "--load" does not support multiple platforms
# use "--push" to publish
# --platform linux/arm64,linux/arm/v7
docker buildx build \
--load \
docker build \
--progress=plain \
--build-arg BUILD_IMAGE=$OS_NAME:$OS_VERSION \
--build-arg FFMPEG_VERSION=$FFMPEG_VERSION \
--platform linux/arm64 \
-f Dockerfile.alpine.rpi \
-t datarhei/base:ffmpeg${FFMPEG_VERSION}-rpi-${OS_NAME}${OS_VERSION} .
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-rpi-${OS_NAME}${OS_VERSION} datarhei/base:$OS_NAME-ffmpeg-rpi-$OS_VERSION-$FFMPEG_VERSION
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-rpi-${OS_NAME}${OS_VERSION} datarhei/base:$OS_NAME-ffmpeg-rpi-latest
}
function build_cuda() {
source_env ./Build.ubuntu.env
source_env ./Build.ubuntu.cuda.env
docker buildx build \
--load \
--build-arg BUILD_IMAGE=nvidia/cuda:$CUDA_VERSION-devel-$OS_NAME$OS_VERSION \
--build-arg DEPLOY_IMAGE=nvidia/cuda:$CUDA_VERSION-runtime-$OS_NAME$OS_VERSION \
function build_cuda11() {
source_env ./Build.ubuntu.cuda11.env
docker build \
--progress=plain \
--build-arg BUILD_IMAGE=nvidia/cuda:$CUDA_VERSION-devel-ubuntu$OS_VERSION \
--build-arg DEPLOY_IMAGE=nvidia/cuda:$CUDA_VERSION-runtime-ubuntu$OS_VERSION \
--build-arg FFNVCODEC_VERSION=$FFNVCODEC_VERSION \
--build-arg FREETYPE_VERSION=$FREETYPE_VERSION \
--build-arg XML2_VERSION=$XML2_VERSION \
--build-arg SRT_VERSION=$SRT_VERSION \
--build-arg X264_VERSION=$X264_VERSION \
--build-arg X265_VERSION=$X265_VERSION \
--build-arg VPX_VERSION=$VPX_VERSION \
--build-arg LAME_VERSION=$LAME_VERSION \
--build-arg OPUS_VERSION=$OPUS_VERSION \
--build-arg VORBIS_VERSION=$VORBIS_VERSION \
--build-arg FFMPEG_VERSION=$FFMPEG_VERSION \
--platform linux/amd64 \
-f Dockerfile.ubuntu.cuda \
-t datarhei/base:ffmpeg${FFMPEG_VERSION}-cuda-${OS_NAME}${OS_VERSION}-cuda${CUDA_VERSION} .
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-cuda-${OS_NAME}${OS_VERSION}-cuda${CUDA_VERSION} datarhei/base:$OS_NAME-ffmpeg-cuda-$OS_VERSION-$FFMPEG_VERSION-$CUDA_VERSION
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-cuda-${OS_NAME}${OS_VERSION}-cuda${CUDA_VERSION} datarhei/base:$OS_NAME-ffmpeg-cuda-latest
-f Dockerfile.ubuntu.cuda11 \
-t datarhei/base:ffmpeg${FFMPEG_VERSION}-cuda-ubuntu$OS_VERSION-cuda${CUDA_VERSION} .
}
function build_cuda12() {
source_env ./Build.ubuntu.cuda12.env
docker build \
--progress=plain \
--build-arg BUILD_IMAGE=nvidia/cuda:$CUDA_VERSION-devel-ubuntu$OS_VERSION \
--build-arg DEPLOY_IMAGE=nvidia/cuda:$CUDA_VERSION-runtime-ubuntu$OS_VERSION \
--build-arg FFNVCODEC_VERSION=$FFNVCODEC_VERSION \
--build-arg FFMPEG_VERSION=$FFMPEG_VERSION \
-f Dockerfile.ubuntu.cuda12 \
-t datarhei/base:ffmpeg${FFMPEG_VERSION}-cuda-ubuntu$OS_VERSION-cuda${CUDA_VERSION} .
}
function build_vaapi() {
@@ -87,28 +81,15 @@ function build_vaapi() {
--progress=plain \
--build-arg BUILD_IMAGE=$OS_NAME:$OS_VERSION \
--build-arg DEPLOY_IMAGE=$OS_NAME:$OS_VERSION \
--build-arg FREETYPE_VERSION=$FREETYPE_VERSION \
--build-arg XML2_VERSION=$XML2_VERSION \
--build-arg SRT_VERSION=$SRT_VERSION \
--build-arg X264_VERSION=$X264_VERSION \
--build-arg X265_VERSION=$X265_VERSION \
--build-arg VPX_VERSION=$VPX_VERSION \
--build-arg LAME_VERSION=$LAME_VERSION \
--build-arg OPUS_VERSION=$OPUS_VERSION \
--build-arg VORBIS_VERSION=$VORBIS_VERSION \
--build-arg DAV1D_VERSION=$DAV1D_VERSION \
--build-arg RAV1E_VERSION=$RAV1E_VERSION \
--build-arg FFMPEG_VERSION=$FFMPEG_VERSION \
--platform linux/amd64 \
-f Dockerfile.ubuntu.vaapi \
-t datarhei/base:ffmpeg${FFMPEG_VERSION}-vaapi-${OS_NAME}${OS_VERSION} .
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-vaapi-${OS_NAME}${OS_VERSION} datarhei/base:$OS_NAME-ffmpeg-vaapi-$OS_VERSION-$FFMPEG_VERSION
docker tag datarhei/base:ffmpeg${FFMPEG_VERSION}-vaapi-${OS_NAME}${OS_VERSION} datarhei/base:$OS_NAME-ffmpeg-vaapi-latest
}
main() {
if [[ $# == 0 ]]; then
echo "Options available: default, default_native, rpi, cuda, vaapi"
echo "Options available: default, default_native, rpi, cuda11, cuda12, vaapi"
exit 0
else
if [[ $1 == "default" ]]; then
@@ -117,8 +98,10 @@ main() {
build_default_native
elif [[ $1 == "rpi" ]]; then
build_rpi
elif [[ $1 == "cuda" ]]; then
build_cuda
elif [[ $1 == "cuda11" ]]; then
build_cuda11
elif [[ $1 == "cuda12" ]]; then
build_cuda12
elif [[ $1 == "vaapi" ]]; then
build_vaapi
fi

View File

@@ -1,5 +1,6 @@
# FFMPEG CUDA PACKAGES
OS_NAME=ubuntu
OS_VERSION=22.04
XML2_VERSION=2.9.14
CUDA_VERSION=11.7.1
CUDA_VERSION=11.8.0
FFNVCODEC_VERSION=11.1.5.3
FFMPEG_VERSION=7.0.2

6
Build.ubuntu.cuda12.env Normal file
View File

@@ -0,0 +1,6 @@
# FFMPEG CUDA PACKAGES
OS_NAME=ubuntu
OS_VERSION=24.04
CUDA_VERSION=12.6.1
FFNVCODEC_VERSION=12.1.14.0
FFMPEG_VERSION=7.0.2

View File

@@ -1,16 +0,0 @@
# FFMPEG BASE PACKAGES
OS_NAME=ubuntu
OS_VERSION=22.04
FREETYPE_VERSION=2.13.2
XML2_VERSION=2.12.6
SRT_VERSION=1.5.3
X264_VERSION=stable
X265_VERSION=3.5
VPX_VERSION=1.14.0
LAME_VERSION=3.100
OPUS_VERSION=1.4
OGG_VERSION=1.3.5
VORBIS_VERSION=1.3.7
DAV1D_VERSION=1.4.1
RAV1E_VERSION=0.7.1
FFMPEG_VERSION=7.0.2

View File

@@ -1,26 +1,23 @@
ARG BUILD_IMAGE=nvidia/cuda:11.4.2-devel-ubuntu20.04
ARG DEPLOY_IMAGE=nvidia/cuda:11.4.2-runtime-ubuntu20.04
ARG BUILD_IMAGE=nvidia/cuda:11.8.0-devel-ubuntu22.04
ARG DEPLOY_IMAGE=nvidia/cuda:11.8.0-runtime-ubuntu22.04
FROM $BUILD_IMAGE AS builder
ARG FFNVCODEC_VERSION=11.1.5.3
ARG BUILD_DATE=1970-01-01T00:00:00Z
ARG BUILD_COMMIT=unknown
ARG FFMPEG_VERSION=none
ARG FFNVCODEC_VERSION=11.1.5.1
ARG FREETYPE_VERSION=2.10.4
ARG FREETYPE_VERSION=2.13.2
ARG XML2_VERSION=2.9.14
ARG SRT_VERSION=1.4.2
ARG SRT_VERSION=1.5.3
ARG X264_VERSION=stable
ARG X265_VERSION=3.4
ARG VPX_VERSION=1.11.0
ARG LAME_VERSION=3.100
ARG OPUS_VERSION=1.3.1
ARG VPX_VERSION=1.14.0
ARG OPUS_VERSION=1.4
ARG OGG_VERSION=1.3.5
ARG VORBIS_VERSION=1.3.7
ARG RAV1E_VERSION=0.7.1
ARG DAV1D_VERSION=1.4.1
ARG FFMPEG_VERSION=4.4.2
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
ENV SRC=/usr/local
@@ -40,20 +37,24 @@ RUN apt-get update -y && \
libtool \
autoconf \
libx265-dev \
libmp3lame-dev \
libfdk-aac-dev \
libv4l-dev \
libasound2-dev \
rust-all \
meson \
zlib1g-dev
# install rust
RUN curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y
# install librav1e
RUN mkdir -p /dist && cd /dist && \
curl -OLk https://github.com/xiph/rav1e/archive/refs/tags/v${RAV1E_VERSION}.tar.gz && \
tar xfvz v${RAV1E_VERSION}.tar.gz && \
rm v${RAV1E_VERSION}.tar.gz && \
cd rav1e-${RAV1E_VERSION} && \
cargo install cargo-c && \
cargo cinstall --release
/root/.cargo/bin/cargo install cargo-c && \
/root/.cargo/bin/cargo cinstall --release
# install libxml2
RUN mkdir -p /dist && cd /dist && \
@@ -125,20 +126,6 @@ RUN mkdir -p /dist && cd /dist && \
make -j$(nproc) && \
make install
# install libmp3lame
RUN mkdir -p /dist && cd /dist && \
curl -OLk https://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz && \
tar -xvz -f lame-${LAME_VERSION}.tar.gz && \
rm lame-${LAME_VERSION}.tar.gz && \
cd lame-${LAME_VERSION} && \
./configure \
--prefix="${SRC}" \
--bindir="${SRC}/bin" \
--disable-static \
--enable-nasm && \
make -j$(nproc) && \
make install
# install vpx
RUN mkdir -p /dist && cd /dist && \
curl -OLk https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz && \
@@ -224,6 +211,7 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
--enable-libx265 \
--enable-libvpx \
--enable-libmp3lame \
--enable-libfdk-aac \
--enable-libopus \
--enable-libvorbis \
--enable-libdav1d \
@@ -236,24 +224,30 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
make install && \
hash -r
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/ffmpeg.conf && \
ldconfig && \
mkdir -p /ffmpeglibs && \
ldd /usr/local/bin/ffmpeg | grep -o -E -e ' (/usr/local/lib|/lib/[a-z0-9_]+-linux-gnu)/[^ ]*' | xargs -I % cp -v % /ffmpeglibs
FROM $DEPLOY_IMAGE
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
COPY --from=builder /usr/local/lib /usr/local/lib
COPY --from=builder /ffmpeglibs /ffmpeglibs
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/ffmpeg.conf && \
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "/ffmpeglibs" > /etc/ld.so.conf.d/ffmpeg.conf && \
ldconfig && \
apt-get update && \
apt-get install -y \
v4l-utils \
fbset \
x265 \
zlib1g \
libasound2-dev && \
ffmpeg -buildconf
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,video,utility
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
WORKDIR /tmp
ENTRYPOINT ["/usr/local/bin/ffmpeg"]

124
Dockerfile.ubuntu.cuda12 Normal file
View File

@@ -0,0 +1,124 @@
ARG BUILD_IMAGE=nvidia/cuda:12.6.1-devel-ubuntu24.04
ARG DEPLOY_IMAGE=nvidia/cuda:12.6.1-runtime-ubuntu24.04
FROM $BUILD_IMAGE AS builder
ARG FFNVCODEC_VERSION=12.2.72.0
ARG BUILD_DATE=1970-01-01T00:00:00Z
ARG BUILD_COMMIT=unknown
ARG FFMPEG_VERSION=none
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
ENV SRC=/usr/local
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && \
apt-get install -y \
pkg-config \
curl \
libcurl4-openssl-dev \
git \
nasm \
openssl \
libssl-dev \
cmake \
yasm \
build-essential \
libtool \
autoconf \
libv4l-dev \
libasound2-dev \
libx264-dev \
libx265-dev \
librav1e-dev \
libaom-dev \
libdav1d-dev \
libvpx-dev \
libmp3lame-dev \
libopus-dev \
libvorbis-dev \
libogg-dev \
libfreetype-dev \
libsrt-openssl-dev \
libxml2-dev \
libfdk-aac-dev \
libharfbuzz-dev \
libxml2-dev \
zlib1g-dev
# install and patch ffmpeg
RUN mkdir -p /dist && cd /dist && \
curl -OLk http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
curl -OLk https://github.com/FFmpeg/nv-codec-headers/releases/download/n${FFNVCODEC_VERSION}/nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
tar -xvz -f ffmpeg-${FFMPEG_VERSION}.tar.gz && \
tar -xvz -f nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
rm ffmpeg-${FFMPEG_VERSION}.tar.gz nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
cd nv-codec-headers-${FFNVCODEC_VERSION} && \
make install
COPY ./contrib /contrib
RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
patch -p1 < /contrib/ffmpeg-hls.patch && \
./configure \
--extra-version="datarhei-${BUILD_COMMIT}-${BUILD_DATE}" \
--extra-libs="-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lc -ldl -lcurl" \
--prefix="${SRC}" \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--enable-nonfree \
--enable-gpl \
--enable-version3 \
--enable-postproc \
--enable-static \
--enable-openssl \
--enable-libxml2 \
--enable-cuda \
--enable-cuvid \
--enable-nvenc \
--enable-libnpp \
--enable-libv4l2 \
--enable-libfreetype \
--enable-alsa \
--enable-libsrt \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libmp3lame \
--enable-libfdk-aac \
--enable-libopus \
--enable-libvorbis \
--enable-libdav1d \
--enable-librav1e \
--enable-libaom \
--disable-ffplay \
--disable-ffprobe \
--disable-debug \
--disable-doc && \
make -j$(nproc) && \
make install && \
hash -r
RUN mkdir -p /ffmpeglibs && \
ldd /usr/local/bin/ffmpeg | grep -o -e '/lib/[a-z0-9_]*-linux-gnu/[^ ]*' | xargs -I % cp -v % /ffmpeglibs
FROM $DEPLOY_IMAGE
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
COPY --from=builder /ffmpeglibs /ffmpeglibs
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "/ffmpeglibs" > /etc/ld.so.conf.d/ffmpeg.conf && \
ldconfig && \
apt-get update && \
apt-get install -y ca-certificates openssl tzdata v4l-utils fbset libasound2-dev && \
ffmpeg -buildconf
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
WORKDIR /tmp
ENTRYPOINT ["/usr/local/bin/ffmpeg"]
CMD ["-version"]