patch-container.sh 1.6 KB
Newer Older
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
#!/usr/bin/env bash
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
set -euo pipefail

if [[ $# -ne 1 ]]; then
    echo "Usage: $0 <docker-image>"
    echo "  Patches modeling_deepseekv3.py with KimiK25ForConditionalGeneration class."
    echo "  Outputs: <docker-image>-patched"
    exit 1
fi

SRC_IMAGE="$1"
DST_IMAGE="${SRC_IMAGE}-patched"
TARGET_FILE="/opt/dynamo/venv/lib/python3.12/site-packages/tensorrt_llm/_torch/models/modeling_deepseekv3.py"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PATCH_FILE="${SCRIPT_DIR}/kimi.patch"

if [[ ! -f "$PATCH_FILE" ]]; then
    echo "ERROR: Patch file not found: $PATCH_FILE"
    exit 1
fi

TMPDIR="$(mktemp -d)"
trap 'rm -rf "$TMPDIR"' EXIT

cp "$PATCH_FILE" "$TMPDIR/kimi.patch"

cat > "$TMPDIR/Dockerfile" <<'DOCKERFILE'
ARG BASE_IMAGE
FROM ${BASE_IMAGE}

ARG TARGET_FILE

USER root

COPY kimi.patch /opt/kimi.patch

RUN if grep -q 'KimiK25ForConditionalGeneration' "${TARGET_FILE}"; then \
        echo "Patch already applied, skipping."; \
    else \
        if ! head -50 "${TARGET_FILE}" | grep -q '^import copy'; then \
            sed -i '1s/^/import copy\n/' "${TARGET_FILE}"; \
        fi && \
        echo "" >> "${TARGET_FILE}" && \
        cat /opt/kimi.patch >> "${TARGET_FILE}"; \
    fi && \
    rm -f /opt/kimi.patch

USER 1000
DOCKERFILE

echo "Building patched image: ${DST_IMAGE}"
docker build \
    --build-arg BASE_IMAGE="$SRC_IMAGE" \
    --build-arg TARGET_FILE="$TARGET_FILE" \
    -t "$DST_IMAGE" \
    "$TMPDIR"

echo "Done. Patched image: ${DST_IMAGE}"