build: 修改docker 构建流程

This commit is contained in:
ViperEkura 2026-04-10 11:25:00 +08:00
parent 296db909aa
commit cb0e7f2a80
3 changed files with 45 additions and 24 deletions

View File

@ -3,6 +3,7 @@
# Allow necessary files # Allow necessary files
!astrai/ !astrai/
!scripts/tools/ !scripts/
!assets/
!pyproject.toml !pyproject.toml
!README.md !README.md

View File

@ -1,49 +1,41 @@
# AstrAI Dockerfile # AstrAI Dockerfile - Minimal
# Multi-stage build for optimized image size
# Build stage # Build stage
FROM python:3.12-slim AS builder FROM python:3.12-slim AS builder
WORKDIR /app WORKDIR /app
# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \ build-essential \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Copy project files first for version extraction
COPY astrai/ ./astrai/ COPY astrai/ ./astrai/
COPY pyproject.toml . COPY pyproject.toml .
# Install dependencies
RUN pip install --no-cache-dir --upgrade pip \ RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir .[dev] && pip install --no-cache-dir .
# Production stage # Production stage
FROM python:3.12-slim AS production FROM nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS production
WORKDIR /app WORKDIR /app
# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
libpython3.12 \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Copy installed packages from builder
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin COPY --from=builder /usr/local/bin /usr/local/bin
# Copy application code
COPY astrai/ ./astrai/ COPY astrai/ ./astrai/
COPY scripts/tools/ ./scripts/tools/ COPY scripts/ ./scripts/
COPY assets/ ./assets/
COPY pyproject.toml . COPY pyproject.toml .
COPY README.md .
# Create non-root user
RUN useradd -m -u 1000 astrai && chown -R astrai:astrai /app RUN useradd -m -u 1000 astrai && chown -R astrai:astrai /app
USER astrai USER astrai
# Set environment variables ENV PYTHONUNBUFFERED=1 \
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1
ENV PYTHONDONTWRITEBYTECODE=1
# Default command
CMD ["python", "-m", "astrai.inference.server"]

View File

@ -1,13 +1,41 @@
import argparse
from pathlib import Path from pathlib import Path
from huggingface_hub import snapshot_download from huggingface_hub import snapshot_download
PROJECT_ROOT = Path(__file__).resolve().parents[2] PROJECT_ROOT = Path(__file__).resolve().parents[2]
PARAMETER_ROOT = Path(PROJECT_ROOT, "params") DEFAULT_LOCAL_DIR = Path(PROJECT_ROOT, "params")
DEFAULT_REPO_ID = "ViperEk/KHAOSZ"
if __name__ == "__main__": if __name__ == "__main__":
snapshot_download( parser = argparse.ArgumentParser(
repo_id="ViperEk/KHAOSZ", description="Download model parameters from HuggingFace"
local_dir=PARAMETER_ROOT,
force_download=True,
) )
parser.add_argument(
"--repo-id",
type=str,
default=DEFAULT_REPO_ID,
help=f"HuggingFace repo ID (default: {DEFAULT_REPO_ID})",
)
parser.add_argument(
"--local-dir",
type=Path,
default=DEFAULT_LOCAL_DIR,
help=f"Local directory to save model (default: {DEFAULT_LOCAL_DIR})",
)
parser.add_argument(
"--force",
action="store_true",
help="Force download even if files exist",
)
args = parser.parse_args()
print(f"Downloading model from {args.repo_id} to {args.local_dir}")
snapshot_download(
repo_id=args.repo_id,
local_dir=args.local_dir,
force_download=args.force,
)
print("Download complete!")