195 lines
6.3 KiB
Plaintext
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
|