Skip to content

Commit

Permalink
Decouple djl and serving in dockerfiles and gradle
Browse files Browse the repository at this point in the history
and add serving publish to repo
  • Loading branch information
brndysgit committed Oct 15, 2024
1 parent 94644d1 commit d87235b
Show file tree
Hide file tree
Showing 11 changed files with 173 additions and 49 deletions.
61 changes: 43 additions & 18 deletions .github/workflows/docker-nightly-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ jobs:
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
- name: Extract DJL and DJL Serving versions from TOML
id: get-versions
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
SERVING_VERSION=$(awk -F '=' '/serving / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
echo "DJL_VERSION=$DJL_VERSION" >> $GITHUB_ENV
echo "SERVING_VERSION=$SERVING_VERSION" >> $GITHUB_ENV
- name: Build serving package for nightly
if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
run: |
Expand All @@ -66,17 +73,21 @@ jobs:
if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export NIGHTLY="-nightly"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION}-SNAPSHOT ${{ matrix.arch }}
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
${{ matrix.arch }}
docker compose push ${{ matrix.arch }}
- name: Build and push temp image
if: ${{ inputs.mode == 'temp' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export NIGHTLY="-nightly"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION}-SNAPSHOT ${{ matrix.arch }}
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
${{ matrix.arch }}
repo="185921645874.dkr.ecr.us-east-1.amazonaws.com/djl-ci-temp"
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $repo
tempTag="$repo:${{ matrix.arch }}-${GITHUB_SHA}"
Expand All @@ -86,17 +97,18 @@ jobs:
if: ${{ inputs.mode == 'release' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export BASE_RELEASE_VERSION="${DJL_VERSION}"
export RELEASE_VERSION="${DJL_VERSION}-"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION} ${{ matrix.arch }}
export BASE_RELEASE_VERSION="${{ env.SERVING_VERSION }}"
export RELEASE_VERSION="${{ env.SERVING_VERSION }}-"
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
${{ matrix.arch }}
docker compose push ${{ matrix.arch }}
- name: Retag image for release
if: ${{ matrix.arch == 'cpu' && inputs.mode == 'release' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
docker tag deepjavalibrary/djl-serving:${DJL_VERSION} deepjavalibrary/djl-serving:latest
docker tag deepjavalibrary/djl-serving:${{ env.SERVING_VERSION }} deepjavalibrary/djl-serving:latest
docker push deepjavalibrary/djl-serving:latest
create-runner:
Expand Down Expand Up @@ -147,6 +159,13 @@ jobs:
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
- name: Extract DJL and DJL Serving versions from TOML
id: get-versions
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
SERVING_VERSION=$(awk -F '=' '/serving / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
echo "DJL_VERSION=$DJL_VERSION" >> $GITHUB_ENV
echo "SERVING_VERSION=$SERVING_VERSION" >> $GITHUB_ENV
- name: Build serving package for nightly
if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
run: |
Expand All @@ -155,17 +174,21 @@ jobs:
if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export NIGHTLY="-nightly"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION}-SNAPSHOT aarch64
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
aarch64
docker compose push aarch64
- name: Build and push temp image
if: ${{ inputs.mode == 'temp' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export NIGHTLY="-nightly"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION}-SNAPSHOT aarch64
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
aarch64
repo="185921645874.dkr.ecr.us-east-1.amazonaws.com/djl-ci-temp"
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $repo
tempTag="$repo:aarch64-${GITHUB_SHA}"
Expand All @@ -175,10 +198,12 @@ jobs:
if: ${{ inputs.mode == 'release' }}
working-directory: serving/docker
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ../../gradle/libs.versions.toml)
export BASE_RELEASE_VERSION="${DJL_VERSION}"
export RELEASE_VERSION="${DJL_VERSION}-"
docker compose build --no-cache --build-arg djl_version=${DJL_VERSION} aarch64
export BASE_RELEASE_VERSION="${{ env.SERVING_VERSION }}"
export RELEASE_VERSION="${{ env.SERVING_VERSION }}-"
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
aarch64
docker compose push aarch64
Expand Down
84 changes: 84 additions & 0 deletions .github/workflows/serving-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Serving publish
on:
schedule:
- cron: '0 12 * * *'
push:
branches:
- decouple-djl # Trigger on push events to the decouple-djl branch
workflow_dispatch:
inputs:
mode:
description: 'staging/snapshot, default is snapshot'
required: true
default: 'snapshot'
repo-id:
description: 'staging repository id for djl api packages'
required: false
default: ''
permissions:
id-token: write
contents: read
jobs:
publish:
if: github.repository == 'deepjavalibrary/djl-serving'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'corretto'
java-version: 17
# Enable gradle cache: https://github.com/actions/cache/blob/master/examples.md#java---gradle
- uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('*/build.gradle.kts', 'engines/**/build.gradle.kts', 'extensions/**/build.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::425969335547:role/djl-ci-publish-role
aws-region: us-east-2
- name: Copy serving snapshot artifacts to S3
if: ${{ github.event.inputs.mode == '' || github.event.inputs.mode == 'snapshot' }}
run: |
./gradlew :serving:createDeb -Psnapshot
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
aws s3 cp serving/build/distributions/*.deb s3://djl-ai/publish/djl-serving/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/djl-serving/djl-serving_${DJL_VERSION}*"
- name: Copy serving release artifacts to S3
if: ${{ github.event.inputs.mode == 'staging' }}
run: |
./gradlew :serving:dZ :serving:createDeb -Pstaging
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
aws s3 cp serving/build/distributions/*.deb s3://djl-ai/publish/djl-serving/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/djl-serving/djl-serving_${DJL_VERSION}*"
if [[ $(aws s3 ls s3://djl-ai/publish/djl-serving/serving-$DJL_VERSION.tar | wc -l) -eq 0 ]]; \
then aws s3 cp serving/build/distributions/*.tar s3://djl-ai/publish/djl-serving/; \
else echo serving tarball published already!; fi
aws s3 cp serving/build/distributions/*.zip s3://djl-ai/publish/djl-serving/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/djl-serving/serving-${DJL_VERSION}*"
- name: Copy benchmark release artifacts to S3
if: ${{ github.event.inputs.mode == 'staging' }}
run: |
./gradlew :benchmark:dZ :benchmark:createDeb -Pstaging
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
aws s3 cp benchmark/build/distributions/*.tar s3://djl-ai/publish/djl-bench/${DJL_VERSION}/
aws s3 cp benchmark/build/distributions/*.deb s3://djl-ai/publish/djl-bench/${DJL_VERSION}/
aws s3 cp benchmark/build/distributions/*.zip s3://djl-ai/publish/djl-bench/${DJL_VERSION}/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/djl-bench/${DJL_VERSION}/*"
- name: Copy awscurl snapshot artifacts to S3
if: ${{ github.event.inputs.mode == '' || github.event.inputs.mode == 'snapshot' }}
run: |
./gradlew :awscurl:jar
aws s3 cp awscurl/build/awscurl s3://djl-ai/publish/awscurl/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/awscurl/awscurl"
- name: Copy awscurl staging artifacts to S3
if: ${{ github.event.inputs.mode == 'staging' }}
run: |
./gradlew :awscurl:jar -Pstaging
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
aws s3 cp awscurl/build/awscurl s3://djl-ai/publish/awscurl/${DJL_VERSION}/
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/awscurl/${DJL_VERSION}/*"
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/ai/djl/javaBase.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ plugins {
val libs = the<LibrariesForLibs>()
var servingVersion: String? = System.getenv("DJL_VERSION")
val stagingRepo: String? = System.getenv("DJL_STAGING")
servingVersion = if (servingVersion == null) libs.versions.djl.get() else servingVersion
servingVersion = if (servingVersion == null) libs.versions.serving.get() else servingVersion
if (!project.hasProperty("staging")) {
servingVersion += "-SNAPSHOT"
}
Expand Down
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ format.version = "1.1"

[versions]
djl = "0.30.0"
serving = "0.30.0"
onnxruntime = "1.19.0"
commonsCli = "1.9.0"
commonsCodec = "1.17.1"
Expand Down
11 changes: 6 additions & 5 deletions serving/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
# BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for
# the specific language governing permissions and limitations under the License.
FROM ubuntu:22.04 AS base
ARG djl_version=0.30.0~SNAPSHOT
ARG djl_version
ARG djl_serving_version

COPY scripts scripts/
RUN mkdir -p /opt/djl/conf && \
Expand All @@ -20,10 +21,10 @@ COPY config.properties /opt/djl/conf/
COPY distribution[s]/ ./
RUN mv *.deb djl-serving_all.deb || true

RUN scripts/install_djl_serving.sh $djl_version && \
RUN scripts/install_djl_serving.sh $djl_version $djl_serving_version && \
scripts/install_s5cmd.sh x64 && \
mkdir -p /opt/djl/bin && cp scripts/telemetry.sh /opt/djl/bin && \
echo "${djl_version} cpu" > /opt/djl/bin/telemetry && \
echo "${djl_serving_version} cpu" > /opt/djl/bin/telemetry && \
scripts/security_patch.sh cpu && \
apt-get clean -y && rm -rf /var/lib/apt/lists/* && \
rm -rf scripts
Expand Down Expand Up @@ -55,7 +56,7 @@ LABEL dlc_major_version="1"
LABEL com.amazonaws.ml.engines.sagemaker.dlc.framework.djl.cpu="true"
LABEL com.amazonaws.sagemaker.capabilities.multi-models="true"
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port="true"
LABEL djl-version=$djl_version
LABEL djl-version=$djl_serving_version


FROM base AS cpu-full
Expand All @@ -64,7 +65,7 @@ ARG torch_version=2.4.0

COPY scripts scripts/
RUN scripts/install_python.sh && \
scripts/install_djl_serving.sh $djl_version $torch_version && \
scripts/install_djl_serving.sh $djl_version $djl_serving_version $torch_version && \
djl-serving -i ai.djl.pytorch:pytorch-native-cpu:$torch_version:linux-x86_64 && \
djl-serving -i ai.djl.onnxruntime:onnxruntime-engine:$djl_version && \
djl-serving -i com.microsoft.onnxruntime:onnxruntime:1.18.0 && \
Expand Down
12 changes: 7 additions & 5 deletions serving/docker/aarch64.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
# BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for
# the specific language governing permissions and limitations under the License.
FROM arm64v8/ubuntu:22.04
ARG djl_version=0.30.0~SNAPSHOT
ARG djl_version
ARG djl_serving_version
ARG torch_version=2.3.1

EXPOSE 8080
Expand Down Expand Up @@ -38,13 +39,13 @@ COPY config.properties /opt/djl/conf/
COPY distribution[s]/ ./
RUN mv *.deb djl-serving_all.deb || true

RUN scripts/install_djl_serving.sh $djl_version && \
scripts/install_djl_serving.sh $djl_version $torch_version && \
scripts/install_djl_serving.sh $djl_version $torch_version && \
RUN scripts/install_djl_serving.sh $djl_version $djl_serving_version && \
scripts/install_djl_serving.sh $djl_version $djl_serving_version $torch_version && \
scripts/install_djl_serving.sh $djl_version $djl_serving_version $torch_version && \
scripts/install_s5cmd.sh aarch64 && \
djl-serving -i ai.djl.pytorch:pytorch-native-cpu-precxx11:$torch_version:linux-aarch64 && \
mkdir -p /opt/djl/bin && cp scripts/telemetry.sh /opt/djl/bin && \
echo "${djl_version} aarch" > /opt/djl/bin/telemetry && \
echo "${djl_serving_version} aarch" > /opt/djl/bin/telemetry && \
rm -f /usr/local/djl-serving-*/lib/mxnet-* && \
rm -f /usr/local/djl-serving-*/lib/tensorflow-* && \
rm -f /usr/local/djl-serving-*/lib/tensorrt-* && \
Expand All @@ -61,4 +62,5 @@ LABEL com.amazonaws.ml.engines.sagemaker.dlc.framework.djl.v0-30-0.aarch64="true
LABEL com.amazonaws.sagemaker.capabilities.multi-models="true"
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port="true"
LABEL djl-version=$djl_version
LABEL djl-serving-version=$djl_serving_version
LABEL torch-version=$torch_version
10 changes: 6 additions & 4 deletions serving/docker/lmi.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
ARG version=12.4.1-devel-ubuntu22.04
FROM nvidia/cuda:$version
ARG cuda_version=cu124
ARG djl_version=0.30.0~SNAPSHOT
ARG djl_version
ARG djl_serving_version
# Base Deps
ARG python_version=3.10
ARG torch_version=2.4.0
Expand Down Expand Up @@ -88,14 +89,14 @@ RUN mv *.deb djl-serving_all.deb || true

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq libaio-dev libopenmpi-dev g++ \
&& scripts/install_openssh.sh \
&& scripts/install_djl_serving.sh $djl_version \
&& scripts/install_djl_serving.sh $djl_version ${torch_version} \
&& scripts/install_djl_serving.sh $djl_version $djl_serving_version \
&& scripts/install_djl_serving.sh $djl_version $djl_serving_version ${torch_version} \
&& djl-serving -i ai.djl.onnxruntime:onnxruntime-engine:$djl_version \
&& djl-serving -i com.microsoft.onnxruntime:onnxruntime_gpu:$onnx_version \
&& scripts/install_python.sh ${python_version} \
&& scripts/install_s5cmd.sh x64 \
&& mkdir -p /opt/djl/bin && cp scripts/telemetry.sh /opt/djl/bin \
&& echo "${djl_version} lmi" > /opt/djl/bin/telemetry \
&& echo "${djl_serving_version} lmi" > /opt/djl/bin/telemetry \
&& pip3 cache purge \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/*

Expand Down Expand Up @@ -132,6 +133,7 @@ LABEL com.amazonaws.ml.engines.sagemaker.dlc.framework.djl.v0-30-0.lmi="true"
LABEL com.amazonaws.sagemaker.capabilities.multi-models="true"
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port="true"
LABEL djl-version=$djl_version
LABEL djl-serving-version=$djl_serving_version
LABEL cuda-version=$cuda_version
# To use the 535 CUDA driver, CUDA 12.4 can work on this one too
LABEL com.amazonaws.sagemaker.inference.cuda.verified_versions=12.4
10 changes: 6 additions & 4 deletions serving/docker/pytorch-gpu.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ ARG version=12.4.1-devel-ubuntu22.04

FROM nvidia/cuda:$version as base

ARG djl_version=0.30.0~SNAPSHOT
ARG djl_version
ARG djl_serving_version
ARG cuda_version=cu124
ARG torch_version=2.4.0
ARG torch_vision_version=0.19.0
Expand Down Expand Up @@ -52,8 +53,8 @@ RUN mv *.deb djl-serving_all.deb || true
COPY scripts scripts/
SHELL ["/bin/bash", "-c"]
RUN chmod +x /usr/local/bin/dockerd-entrypoint.sh && \
scripts/install_djl_serving.sh $djl_version && \
scripts/install_djl_serving.sh $djl_version ${torch_version} && \
scripts/install_djl_serving.sh $djl_version $djl_serving_version && \
scripts/install_djl_serving.sh $djl_version $djl_serving_version ${torch_version} && \
djl-serving -i ai.djl.onnxruntime:onnxruntime-engine:$djl_version && \
djl-serving -i com.microsoft.onnxruntime:onnxruntime_gpu:$onnx_version && \
scripts/install_python.sh ${python_version} && \
Expand All @@ -62,7 +63,7 @@ RUN chmod +x /usr/local/bin/dockerd-entrypoint.sh && \
scripts/patch_oss_dlc.sh python && \
scripts/security_patch.sh pytorch-gpu && \
mkdir -p /opt/djl/bin && cp scripts/telemetry.sh /opt/djl/bin && \
echo "${djl_version} pytorchgpu" > /opt/djl/bin/telemetry && \
echo "${djl_serving_version} pytorchgpu" > /opt/djl/bin/telemetry && \
useradd -m -d /home/djl djl && \
chown -R djl:djl /opt/djl && \
rm -rf scripts && pip3 cache purge && \
Expand All @@ -81,6 +82,7 @@ LABEL com.amazonaws.ml.engines.sagemaker.dlc.framework.djl.v0-30-0.pytorch-cu124
LABEL com.amazonaws.sagemaker.capabilities.multi-models="true"
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port="true"
LABEL djl-version=$djl_version
LABEL djl-serving-version=$djl_serving_version
LABEL cuda-version=$cuda_version
LABEL torch-version=$torch_version
# To use the 535 CUDA driver
Expand Down
Loading

0 comments on commit d87235b

Please sign in to comment.