Skip to content

Commit 6300e50

Browse files
committed
Install python3-dev and pkg-config
Extract template wrapper from kv-cache-manager Signed-off-by: Pierangelo Di Pilato <[email protected]>
1 parent 97e7e80 commit 6300e50

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed

.github/workflows/ci-pr-checks.yaml

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,51 @@ jobs:
2121
go-version-file: ./go.mod
2222
cache-dependency-path: ./go.sum
2323

24-
- name: Install libzmq dependencies (kvcache/kvevents)
24+
- name: Install libzmq and Python dependencies (kvcache/kvevents)
2525
run: |
2626
sudo apt-get update
27+
sudo apt-get install -y pkg-config python3-dev python3-pip
2728
make download-zmq
29+
pip3 install transformers --break-system-packages
2830
29-
- name: Set PKG_CONFIG_PATH
30-
run: echo "PKG_CONFIG_PATH=/usr/lib/pkgconfig" >> $GITHUB_ENV
31+
- name: Configure CGO for Python
32+
run: |
33+
PYTHON_INCLUDE=$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))")
34+
echo "CPATH=${PYTHON_INCLUDE}:${CPATH}" >> $GITHUB_ENV
35+
echo "CGO_ENABLED=1" >> $GITHUB_ENV
36+
echo "CGO_CFLAGS=$(python3-config --cflags --embed)" >> $GITHUB_ENV
37+
echo "CGO_LDFLAGS=$(python3-config --ldflags --embed)" >> $GITHUB_ENV
38+
39+
- name: Set PKG_CONFIG_PATH and PYTHONPATH
40+
run: |
41+
echo "PKG_CONFIG_PATH=/usr/lib/pkgconfig" >> $GITHUB_ENV
42+
GOMODCACHE=$(go env GOMODCACHE)
43+
# Extract kv-cache-manager version from go.mod
44+
KV_CACHE_MGR_VERSION=$(go list -m -f '{{.Version}}' github.com/llm-d/llm-d-kv-cache-manager)
45+
KV_CACHE_MGR_PATH="${GOMODCACHE}/github.com/llm-d/llm-d-kv-cache-manager@${KV_CACHE_MGR_VERSION}/pkg/preprocessing/chat_completions"
46+
echo "PYTHONPATH=${KV_CACHE_MGR_PATH}:${PYTHONPATH}" >> $GITHUB_ENV
3147
3248
- name: Run lint checks
3349
uses: golangci/golangci-lint-action@v8
3450
with:
3551
version: 'v2.4.0'
3652
args: "--config=./.golangci.yml"
53+
env:
54+
CGO_ENABLED: ${{ env.CGO_ENABLED }}
55+
CGO_CFLAGS: ${{ env.CGO_CFLAGS }}
56+
CGO_LDFLAGS: ${{ env.CGO_LDFLAGS }}
57+
CPATH: ${{ env.CPATH }}
58+
PKG_CONFIG_PATH: ${{ env.PKG_CONFIG_PATH }}
3759

3860
- name: Run go test
39-
shell: bash
61+
shell: bash
4062
run: |
4163
echo "Running tests with Ginkgo..."
4264
make test
65+
env:
66+
CGO_ENABLED: ${{ env.CGO_ENABLED }}
67+
CGO_CFLAGS: ${{ env.CGO_CFLAGS }}
68+
CGO_LDFLAGS: ${{ env.CGO_LDFLAGS }}
69+
CPATH: ${{ env.CPATH }}
70+
PKG_CONFIG_PATH: ${{ env.PKG_CONFIG_PATH }}
71+
PYTHONPATH: ${{ env.PYTHONPATH }}

Dockerfile

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ARG TARGETARCH
66
# Install build tools
77
# The builder is based on UBI8, so we need epel-release-8.
88
RUN dnf install -y 'https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm' && \
9-
dnf install -y gcc-c++ libstdc++ libstdc++-devel clang zeromq-devel pkgconfig && \
9+
dnf install -y gcc-c++ libstdc++ libstdc++-devel clang zeromq-devel pkgconfig python3-devel && \
1010
dnf clean all
1111

1212
WORKDIR /workspace
@@ -28,6 +28,13 @@ ARG TOKENIZER_VERSION=v1.22.1
2828
RUN curl -L https://github.com/daulet/tokenizers/releases/download/${TOKENIZER_VERSION}/libtokenizers.${TARGETOS}-${TARGETARCH}.tar.gz | tar -xz -C lib
2929
RUN ranlib lib/*.a
3030

31+
# Copy Python wrapper from kv-cache-manager dependency
32+
# Extract version dynamically and copy to a known location
33+
RUN KV_CACHE_MGR_VERSION=$(go list -m -f '{{.Version}}' github.com/llm-d/llm-d-kv-cache-manager) && \
34+
mkdir -p /workspace/kv-cache-manager-wrapper && \
35+
cp /go/pkg/mod/github.com/llm-d/llm-d-kv-cache-manager@${KV_CACHE_MGR_VERSION}/pkg/preprocessing/chat_completions/render_jinja_template_wrapper.py \
36+
/workspace/kv-cache-manager-wrapper/
37+
3138
# Build
3239
# the GOARCH has not a default value to allow the binary be built according to the host where the command
3340
# was called. For example, if we call make image-build in a local env which has the Apple Silicon M1 SO
@@ -38,20 +45,38 @@ ENV GOOS=${TARGETOS:-linux}
3845
ENV GOARCH=${TARGETARCH}
3946
RUN go build -a -o bin/llm-d-inference-sim -ldflags="-extldflags '-L$(pwd)/lib'" cmd/cmd.go
4047

48+
# Runtime stage
4149
# Use ubi9 as a minimal base image to package the manager binary
4250
# Refer to https://catalog.redhat.com/software/containers/ubi9/ubi-minimal/615bd9b4075b022acc111bf5 for more details
4351
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
4452

4553
WORKDIR /
4654

47-
# Install zeromq runtime library needed by the manager.
55+
# Install zeromq runtime library and Python runtime needed by the manager.
4856
# The final image is UBI9, so we need epel-release-9.
57+
# Using microdnf for minimal image size
4958
USER root
50-
RUN microdnf install -y dnf && \
51-
dnf install -y 'https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm' && \
52-
dnf install -y zeromq && \
53-
dnf clean all && \
54-
rm -rf /var/cache/dnf /var/lib/dnf
59+
RUN curl -L -o /tmp/epel-release.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
60+
rpm -i /tmp/epel-release.rpm && \
61+
rm /tmp/epel-release.rpm && \
62+
microdnf install -y --setopt=install_weak_deps=0 zeromq python3 python3-libs python3-pip && \
63+
microdnf clean all && \
64+
rm -rf /var/cache/yum /var/lib/yum
65+
66+
# Install wrapper as a module in site-packages
67+
# Extract the kv-cache-manager version dynamically from go.mod in the builder stage
68+
RUN mkdir -p /usr/local/lib/python3.9/site-packages/
69+
COPY --from=builder /workspace/kv-cache-manager-wrapper/render_jinja_template_wrapper.py /usr/local/lib/python3.9/site-packages/
70+
71+
# Python deps (no cache, single target) – install transformers
72+
ENV PIP_NO_CACHE_DIR=1 PIP_DISABLE_PIP_VERSION_CHECK=1
73+
RUN python3 -m pip install --no-cache-dir --upgrade pip setuptools wheel && \
74+
python3 -m pip install --no-cache-dir --target /usr/local/lib/python3.9/site-packages transformers && \
75+
rm -rf /root/.cache/pip
76+
77+
# Python env
78+
ENV PYTHONPATH="/usr/local/lib/python3.9/site-packages:/usr/lib/python3.9/site-packages"
79+
ENV PYTHON=python3
5580

5681
COPY --from=builder /workspace/bin/llm-d-inference-sim /app/llm-d-inference-sim
5782

pkg/llm-d-inference-sim/simulator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ func (s *VllmSimulator) initializeSim(ctx context.Context) error {
347347

348348
s.tokenizer, err = tokenization.NewCachedHFTokenizer(tokenizationConfig.HFTokenizerConfig)
349349
if err != nil {
350-
return fmt.Errorf("failed to create tokenizer: %w", err)
350+
return fmt.Errorf("failed to create hf tokenizer: %w", err)
351351
}
352352

353353
if s.config.EnableKVCache {

0 commit comments

Comments
 (0)