Spaces:
Sleeping
Sleeping
File size: 2,189 Bytes
0fea377 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
ARG ELIXIR_VERSION=1.14.2
ARG OTP_VERSION=25.3
ARG CUDA_VERSION=11.8.0
ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-ubuntu-jammy-20230126"
ARG RUNNER_IMAGE="nvidia/cuda:${CUDA_VERSION}-cudnn8-devel-ubuntu22.04"
# Stage 1: build
FROM ${BUILDER_IMAGE} as builder
# Install build dependencies
RUN apt-get update -y && apt-get install -y build-essential git curl \
&& apt-get clean && rm -f /var/lib/apt/lists/*_*
WORKDIR /app
# Install hex and rebar
RUN mix local.hex --force && \
mix local.rebar --force
# Set build ENV
ENV MIX_ENV=prod
ENV XLA_TARGET=cuda118
ENV BUMBLEBEE_CACHE_DIR=/app/.bumblebee
# Install mix dependencies
COPY mix.exs mix.lock ./
RUN mix deps.get --only $MIX_ENV
RUN mkdir config
# Copy compile-time config files before we compile dependencies to
# ensure any relevant config change will trigger the dependencies to
# be re-compiled
COPY config/config.exs config/${MIX_ENV}.exs config/
RUN mix deps.compile
COPY priv priv
COPY lib lib
COPY assets assets
# Compile assets
RUN mix assets.deploy
# Compile the release
RUN mix compile
# Changes to config/runtime.exs don't require recompiling the code
COPY config/runtime.exs config/
# Start the app to download models into the cache
RUN SECRET_KEY_BASE="$(mix phx.gen.secret)" mix app.start
COPY rel rel
RUN mix release
# Stage 2: release image
FROM ${RUNNER_IMAGE}
# Install runtime dependencies
RUN apt-get update -y && apt-get install -y libstdc++6 openssl libncurses5 locales \
&& apt-get clean && rm -f /var/lib/apt/lists/*_*
# Set the locale
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
WORKDIR /app
# See https://huggingface.co./docs/hub/spaces-sdks-docker#permissions
RUN useradd -m -u 1000 user
RUN chown user /app
# Set runner ENV
ENV MIX_ENV=prod
ENV XLA_TARGET=cuda118
ENV BUMBLEBEE_CACHE_DIR=/app/.bumblebee
ENV BUMBLEBEE_OFFLINE=true
# Only copy the final release from the build stage
COPY --from=builder --chown=user:root /app/.bumblebee/ ./.bumblebee
COPY --from=builder --chown=user:root /app/_build/${MIX_ENV}/rel/chai ./
USER user
CMD ["/app/bin/server"]
|