Skip to content

Commit

Permalink
Update workflow for cuda11 and cuda12 builds
Browse files Browse the repository at this point in the history
  • Loading branch information
ioppermann committed Sep 26, 2024
1 parent 504fb48 commit 20d44d0
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 113 deletions.
33 changes: 14 additions & 19 deletions .github/workflows/build_base_ubuntu-cuda.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand All @@ -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"
Expand All @@ -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 }}
69 changes: 26 additions & 43 deletions Build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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
Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions Build.ubuntu.cuda.env → Build.ubuntu.cuda11.env
Original file line number Diff line number Diff line change
@@ -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 changes: 6 additions & 0 deletions Build.ubuntu.cuda12.env
Original file line number Diff line number Diff line change
@@ -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
16 changes: 0 additions & 16 deletions Build.ubuntu.env

This file was deleted.

60 changes: 27 additions & 33 deletions Dockerfile.ubuntu.cuda → Dockerfile.ubuntu.cuda11
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 && \
Expand Down Expand Up @@ -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 && \
Expand Down Expand Up @@ -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 \
Expand All @@ -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"]
Expand Down
Loading

0 comments on commit 20d44d0

Please sign in to comment.