dynamo/Earthfile

195 lines
6.3 KiB
Plaintext

# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#######################################################################
# 🚨 DEPRECATION NOTICE 🚨
#
# This Earthfile is being replaced by docker
# This file is kept temporarily for backward compatibility but will
# be removed in a future release. Please migrate to the new system.
#######################################################################
VERSION 0.8
############### ARTIFACTS TARGETS ##############################
# These targets are invoked in child Earthfiles to pass top-level files that are out of their build context
# https://docs.earthly.dev/earthly-0.6/best-practices#copying-files-from-outside-the-build-context
############### SHARED LIBRARY TARGETS ##############################
golang-base:
FROM golang:1.24
RUN apt-get update && apt-get install -y git && apt-get clean && rm -rf /var/lib/apt/lists/* && go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.8
operator-src:
FROM +golang-base
COPY ./deploy/cloud/operator /artifacts/operator
SAVE ARTIFACT /artifacts/operator
# artifact-base:
# FROM python:3.12-slim-bookworm
# WORKDIR /artifacts
# dynamo-source-artifacts:
# FROM +artifact-base
# COPY . /artifacts
# SAVE ARTIFACT /artifacts
uv-source:
FROM ghcr.io/astral-sh/uv:latest
SAVE ARTIFACT /uv
dynamo-base:
FROM ubuntu:24.04
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -yq python3-dev python3-pip python3-venv libucx0 curl
COPY +uv-source/uv /bin/uv
ENV CARGO_BUILD_JOBS=16
RUN mkdir /opt/dynamo && \
uv venv /opt/dynamo/venv --python 3.12 && \
. /opt/dynamo/venv/bin/activate && \
uv pip install pip
ENV VIRTUAL_ENV=/opt/dynamo/venv
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
rust-base:
FROM +dynamo-base
# Rust build/dev dependencies
RUN apt update -y && \
apt install --no-install-recommends -y \
wget \
build-essential \
protobuf-compiler \
cmake \
libssl-dev \
pkg-config \
libclang-dev \
git
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb && \
apt install -y ./cuda-keyring_1.1-1_all.deb && \
apt update && \
apt install -y cuda-toolkit-12-8 nvidia-utils-535 nvidia-driver-535 && \
rm cuda-keyring_1.1-1_all.deb
# Set CUDA compute capability explicitly
ENV CUDA_COMPUTE_CAP=80
ENV CUDA_HOME=/usr/local/cuda-12.8
ENV CUDA_ROOT=/usr/local/cuda-12.8
ENV CUDA_PATH=/usr/local/cuda-12.8
ENV CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.8
ENV PATH=/usr/local/cuda-12.8/bin:$PATH
ENV LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
ENV RUSTUP_HOME=/usr/local/rustup
ENV CARGO_HOME=/usr/local/cargo
ENV PATH=/usr/local/cargo/bin:$PATH
ENV RUST_VERSION=1.90.0
ENV RUSTARCH=x86_64-unknown-linux-gnu
RUN wget --tries=3 --waitretry=5 "https://static.rust-lang.org/rustup/archive/1.28.1/x86_64-unknown-linux-gnu/rustup-init" && \
echo "a3339fb004c3d0bb9862ba0bce001861fe5cbde9c10d16591eb3f39ee6cd3e7f *rustup-init" | sha256sum -c - && \
chmod +x rustup-init && \
./rustup-init -y --no-modify-path --profile minimal --default-toolchain 1.90.0 --default-host x86_64-unknown-linux-gnu && \
rm rustup-init && \
chmod -R a+w $RUSTUP_HOME $CARGO_HOME
dynamo-build:
FROM +rust-base
WORKDIR /workspace
COPY Cargo.toml Cargo.lock ./
COPY pyproject.toml README.md ./
COPY components/ components/
COPY lib/ lib/
COPY launch/ launch/
COPY deploy/ deploy/
ENV CARGO_TARGET_DIR=/workspace/target
RUN cargo build --release --locked --features cuda && \
cargo doc --no-deps
RUN cd /workspace/lib/bindings/python && \
uv build --wheel --out-dir /workspace/dist --python 3.12
RUN cd /workspace && \
uv build --wheel --out-dir /workspace/dist
# Save wheels
SAVE ARTIFACT /workspace/dist/ai_dynamo_runtime*.whl
SAVE ARTIFACT /workspace/dist/ai_dynamo*.whl
dynamo-base-docker:
ARG IMAGE=dynamo-base-docker
ARG DOCKER_SERVER=my-registry
ARG IMAGE_TAG=latest
FROM ubuntu:24.04
WORKDIR /workspace
COPY container/deps/requirements.txt /tmp/requirements.txt
# Install Python and other dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
python3.12 \
curl && \
rm -rf /var/lib/apt/lists/*
COPY +uv-source/uv /bin/uv
# Create and activate virtual environment
RUN mkdir -p /opt/dynamo && \
uv venv /opt/dynamo/venv --python 3.12 && \
. /opt/dynamo/venv/bin/activate && \
uv pip install pip
ENV VIRTUAL_ENV=/opt/dynamo/venv
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
RUN UV_GIT_LFS=1 uv pip install -r /tmp/requirements.txt
# Copy and install wheels -- ai-dynamo-runtime first, then ai-dynamo
COPY +dynamo-build/ai_dynamo_runtime*.whl /tmp/wheels/
COPY +dynamo-build/ai_dynamo*.whl /tmp/wheels/
RUN . /opt/dynamo/venv/bin/activate && \
uv pip install /tmp/wheels/*.whl && \
rm -rf /tmp/wheels
SAVE IMAGE --push $DOCKER_SERVER/$IMAGE:$IMAGE_TAG
############### ALL TARGETS ##############################
all-test:
BUILD ./deploy/cloud/operator+test
all-docker:
ARG DOCKER_SERVER=my-registry
ARG IMAGE_TAG=latest
BUILD ./deploy/cloud/operator+docker --DOCKER_SERVER=$DOCKER_SERVER --IMAGE_TAG=$IMAGE_TAG
all-lint:
BUILD ./deploy/cloud/operator+lint
all:
BUILD +all-test
BUILD +all-docker
BUILD +all-lint
# For testing
custom:
ARG DOCKER_SERVER=my-registry
ARG IMAGE_TAG=latest
BUILD +all-test