Organize podman/ directory into logical subdirectories: New structure: - docs/ - ML_TOOLS_GUIDE.md, jupyter_workflow.md - configs/ - environment*.yml, security_policy.json - containers/ - *.dockerfile, *.podfile - scripts/ - *.sh, *.py (secure_runner, cli_integration, etc.) - jupyter/ - jupyter_cookie_secret (flattened from jupyter_runtime/runtime/) - workspace/ - Example projects (cleaned of temp files) Cleaned workspace: - Removed .DS_Store, mlflow.db, cache/ - Removed duplicate cli_integration.py Removed unnecessary nesting: - Flattened jupyter_runtime/runtime/ to just jupyter/ Improves maintainability by grouping files by purpose and eliminating root directory clutter.
81 lines
2.3 KiB
Text
81 lines
2.3 KiB
Text
# Ultra-Optimized ML Runner - Minimal Size & Maximum Speed
|
|
# Uses distroless approach with multi-stage optimization
|
|
|
|
# Stage 1: Build environment with package installation
|
|
FROM continuumio/miniconda3:latest AS builder
|
|
|
|
# Install mamba for lightning-fast package resolution
|
|
RUN conda install -n base -c conda-forge mamba -y && \
|
|
conda clean -afy
|
|
|
|
# Create optimized conda environment
|
|
RUN mamba create -n ml_env python=3.10 -y && \
|
|
mamba install -n ml_env \
|
|
pytorch>=1.9.0 \
|
|
torchvision>=0.10.0 \
|
|
numpy>=1.21.0 \
|
|
pandas>=1.3.0 \
|
|
scikit-learn>=1.0.0 \
|
|
xgboost>=1.5.0 \
|
|
matplotlib>=3.5.0 \
|
|
seaborn>=0.11.0 \
|
|
jupyter>=1.0.0 \
|
|
-c pytorch -c conda-forge -y && \
|
|
conda clean -afy && \
|
|
mamba clean -afy
|
|
|
|
# Stage 2: Minimal runtime image
|
|
FROM python:3.10-slim-bullseye AS runtime
|
|
|
|
# Install only essential runtime dependencies
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
libgomp1 \
|
|
libgl1-mesa-glx \
|
|
libglib2.0-0 \
|
|
libsm6 \
|
|
libxext6 \
|
|
libxrender-dev \
|
|
libgthread-2.0-0 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create non-root user
|
|
RUN groupadd -r mlrunner && useradd -r -g mlrunner mlrunner
|
|
|
|
# Copy conda environment from builder
|
|
COPY --from=builder /opt/conda/envs/ml_env /opt/conda/envs/ml_env
|
|
COPY --from=builder /opt/conda/lib /opt/conda/lib
|
|
COPY --from=builder /opt/conda/bin /opt/conda/bin
|
|
|
|
# Create workspace
|
|
WORKDIR /workspace
|
|
RUN chown mlrunner:mlrunner /workspace
|
|
|
|
# Copy security components
|
|
COPY secure_runner.py /usr/local/bin/secure_runner.py
|
|
COPY security_policy.json /etc/ml_runner/security_policy.json
|
|
|
|
# Set permissions
|
|
RUN chmod +x /usr/local/bin/secure_runner.py && \
|
|
chown mlrunner:mlrunner /usr/local/bin/secure_runner.py && \
|
|
chown -R mlrunner:mlrunner /opt/conda
|
|
|
|
# Switch to non-root user
|
|
USER mlrunner
|
|
|
|
# Set environment
|
|
ENV PATH="/opt/conda/envs/ml_env/bin:/opt/conda/bin:$PATH"
|
|
ENV PYTHONPATH="/opt/conda/envs/ml_env/lib/python3.10/site-packages"
|
|
ENV CONDA_DEFAULT_ENV=ml_env
|
|
|
|
# Optimized entrypoint
|
|
ENTRYPOINT ["python", "/usr/local/bin/secure_runner.py"]
|
|
|
|
# Labels for optimization tracking
|
|
LABEL size="optimized" \
|
|
speed="maximum" \
|
|
base="python-slim" \
|
|
package_manager="mamba" \
|
|
ml_frameworks="pytorch,sklearn,xgboost" \
|
|
security="enabled"
|