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"]