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
|
# Kalign Benchmark Container
#
# Includes kalign, Clustal Omega, MAFFT, and MUSCLE v5 for comparative
# benchmarking on BAliBASE, BRAliBASE, and BaliFam100 datasets.
#
# Build:
# podman build -t kalign-benchmark .
#
# Run the interactive dashboard:
# podman run -it -p 8050:8050 \
# -v ./benchmarks/data:/kalign/benchmarks/data \
# kalign-benchmark
#
# Run a CLI benchmark:
# podman run -it \
# -v ./benchmarks/data:/kalign/benchmarks/data \
# kalign-benchmark \
# python -m benchmarks \
# --dataset balibase --method python_api clustalo mafft muscle -v
#
# View results in the dashboard after a CLI run:
# podman run -it -p 8050:8050 \
# -v ./benchmarks/data:/kalign/benchmarks/data \
# -v ./benchmarks/results:/kalign/benchmarks/results \
# kalign-benchmark
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
# System dependencies + alignment tools (clustalo, mafft from apt)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake g++ git curl \
python3 python3-pip python3-venv python3-dev \
clustalo mafft \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
# ---------- Build MUSCLE v5 from source ----------
# myutils.h checks __arm64__ (macOS) but not __aarch64__ (Linux); add it
RUN cd /tmp && \
git clone --depth 1 https://github.com/rcedgar/muscle.git && \
cd muscle/src && \
sed -i 's/defined(__arm64__)/defined(__arm64__) || defined(__aarch64__)/' myutils.h && \
bash build_linux.bash && \
cp ../bin/muscle /usr/local/bin/ && \
rm -rf /tmp/muscle
# ---------- Copy kalign source and build ----------
COPY . /kalign
WORKDIR /kalign
RUN mkdir -p build && cd build && \
cmake -DCMAKE_BUILD_TYPE=Release .. && \
make -j"$(nproc)"
# ---------- Python environment ----------
RUN python3 -m venv /venv
ENV PATH="/venv/bin:/kalign/build/src:$PATH"
RUN pip install --no-cache-dir uv && \
uv pip install --no-cache -e ".[benchmark]"
# ---------- Verify tools ----------
RUN which kalign && which clustalo && which mafft && which muscle
# ---------- Data & results directories ----------
RUN mkdir -p /kalign/benchmarks/data/downloads /kalign/benchmarks/results
# ---------- Hot-swap: cross-compiled kalign binary (last for fast rebuilds) ----------
COPY zig-out/kalign-linux-aarch64 /usr/local/bin/kalign
RUN chmod +x /usr/local/bin/kalign
# Rebuild Python module with latest source (uses cached venv layer)
RUN uv pip install --no-cache -e ".[benchmark]"
EXPOSE 8050
CMD ["python", "-m", "benchmarks.app", "--host", "0.0.0.0", "--port", "8050"]
|