a81dc690e5
- Install build tools (build-essential, cmake, ninja-build) in Dockerfile - Compile torch-scatter, torch-sparse, torch-cluster, torch-spline-conv from source since ROCm 5.6 lacks prebuilt wheels - Add Docker Compose usage instructions to README with build, run, and service management commands
116 lines
4.5 KiB
Docker
116 lines
4.5 KiB
Docker
# =============================================================================
|
|
# StockGNN R9700 — ROCm Ubuntu Docker Image
|
|
# =============================================================================
|
|
# Base image: Ubuntu 22.04 with ROCm 5.6 pre-installed
|
|
# Provides AMD GPU support for PyTorch/ PyG on Radeon R9700 AI Pro
|
|
# =============================================================================
|
|
|
|
FROM rocm/dev-ubuntu-22.04:5.6
|
|
|
|
LABEL maintainer="StockGNN Team"
|
|
LABEL description="AMD-optimized GNN trading system (ROCm 5.6 / Ubuntu 22.04)"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# System dependencies
|
|
# ---------------------------------------------------------------------------
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
python3.10 \
|
|
python3.10-dev \
|
|
python3-pip \
|
|
git \
|
|
wget \
|
|
curl \
|
|
ca-certificates \
|
|
libglib2.0-0 \
|
|
libsm6 \
|
|
libxext6 \
|
|
libxrender-dev \
|
|
libgomp1 \
|
|
libnuma1 \
|
|
# build tools required for compiling PyG extensions from source
|
|
build-essential \
|
|
cmake \
|
|
ninja-build \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Make python3.10 the default python3
|
|
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 \
|
|
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
|
|
|
|
# Upgrade pip
|
|
RUN python -m pip install --no-cache-dir --upgrade pip setuptools wheel
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Install PyTorch with ROCm 5.6 support (separate from other deps)
|
|
# ---------------------------------------------------------------------------
|
|
RUN pip install --no-cache-dir \
|
|
torch==2.1.0+rocm5.6 \
|
|
torchvision==0.16.0+rocm5.6 \
|
|
torchaudio==2.1.0+rocm5.6 \
|
|
--index-url https://download.pytorch.org/whl/rocm5.6
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Install PyTorch Geometric and extensions
|
|
# ---------------------------------------------------------------------------
|
|
# ROCm 5.6 does not ship prebuilt PyG extension wheels, so we compile them
|
|
# from source. torch-geometric itself is pure-Python and installs from PyPI.
|
|
# The extensions (scatter, sparse, cluster, spline-conv) are built with
|
|
# torch.utils.cpp_extension which automatically picks up the ROCm toolchain
|
|
# shipped in the base image.
|
|
# ---------------------------------------------------------------------------
|
|
ENV ROCM_HOME=/opt/rocm
|
|
ENV HIP_HOME=/opt/rocm
|
|
|
|
RUN pip install --no-cache-dir torch-geometric==2.4.0
|
|
|
|
RUN pip install --no-cache-dir \
|
|
torch-scatter==2.1.2 \
|
|
torch-sparse==0.6.18 \
|
|
torch-cluster==1.6.2 \
|
|
torch-spline-conv==1.2.2
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Install remaining Python dependencies from PyPI
|
|
# ---------------------------------------------------------------------------
|
|
COPY requirements.txt /tmp/requirements.txt
|
|
|
|
# Strip out the torch / pyg lines and ROCm-specific index directives so we
|
|
# install the rest of the packages from standard PyPI.
|
|
RUN grep -vE '^(torch|torchvision|torchaudio|torch-geometric|torch-scatter|torch-sparse|torch-cluster|torch-spline-conv|rocblas|hipblaslt|miopen-hip|rccl|--index-url|--find-links)' /tmp/requirements.txt \
|
|
> /tmp/requirements-clean.txt || true
|
|
|
|
RUN pip install --no-cache-dir -r /tmp/requirements-clean.txt
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# ROCm runtime tuning for AMD Radeon R9700 AI Pro (gfx1030 / gfx1100)
|
|
# ---------------------------------------------------------------------------
|
|
ENV HSA_OVERRIDE_GFX_VERSION=10.3.0
|
|
ENV PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
|
|
ENV ROCM_PATH=/opt/rocm
|
|
ENV PATH="${ROCM_PATH}/bin:${PATH}"
|
|
ENV LD_LIBRARY_PATH="${ROCM_PATH}/lib:${LD_LIBRARY_PATH}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Application setup
|
|
# ---------------------------------------------------------------------------
|
|
WORKDIR /app
|
|
|
|
# Create directories that the app expects
|
|
RUN mkdir -p /app/data/raw /app/data/processed /app/data/external /app/models /app/logs
|
|
|
|
# Copy source code
|
|
COPY . /app/
|
|
|
|
# Ensure Python can find local src/ modules
|
|
ENV PYTHONPATH="/app:${PYTHONPATH}"
|
|
|
|
# Create non-root user for runtime security
|
|
RUN groupadd -r trader && useradd -r -g trader -d /app trader \
|
|
&& chown -R trader:trader /app
|
|
|
|
USER trader
|
|
|
|
# Default command (can be overridden per-service in docker-compose.yml)
|
|
CMD ["python", "-m", "uvicorn", "src.web.app:app", "--host", "0.0.0.0", "--port", "8000"]
|