Skip to content

Commit 9214abb

Browse files
authored
[CI] use multiple cache from (#232)
Signed-off-by: Junpu Fan <junpu@amazon.com>
1 parent edd06a0 commit 9214abb

2 files changed

Lines changed: 30 additions & 38 deletions

File tree

buildkite/bootstrap.sh

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -73,56 +73,42 @@ resolve_ecr_cache_vars() {
7373
# - BUILDKITE_BRANCH
7474
# - BUILDKITE_PULL_REQUEST
7575
# - BUILDKITE_PULL_REQUEST_BASE_BRANCH
76+
# Export environment variables:
77+
# - CACHE_FROM: primary cache source
78+
# - CACHE_FROM_BASE_BRANCH: secondary cache source
79+
# - CACHE_FROM_MAIN: fallback cache source
80+
# - CACHE_TO: cache destination
81+
# Note: CACHE_FROM, CACHE_FROM_BASE_BRANCH, CACHE_FROM_MAIN could be the same.
82+
# This is intended behavior to allow BuildKit to merge all possible cache source
83+
# to maximize cache hit potential, see https://docs.docker.com/build/cache/backends/#multiple-caches
7684

7785
# Define ECR repository URLs for test and main cache
7886
local TEST_CACHE_ECR="936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-test-cache"
7987
local MAIN_CACHE_ECR="936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-postmerge-cache"
8088

81-
# login to ECR to check ceche availability
82-
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 936637512419.dkr.ecr.us-east-1.amazonaws.com
83-
8489
if [[ "$BUILDKITE_PULL_REQUEST" == "false" ]]; then
85-
# For non-PR builds
8690
if [[ "$BUILDKITE_BRANCH" == "main" ]]; then
87-
# For main branch: use main cache for both source and destination
88-
CACHE_TO="${MAIN_CACHE_ECR}:latest"
89-
CACHE_FROM="${MAIN_CACHE_ECR}:latest"
91+
local cache="${MAIN_CACHE_ECR}:latest"
9092
else
91-
# For other branches: use branch-specific cache if it exists
9293
local clean_branch=$(clean_docker_tag "$BUILDKITE_BRANCH")
93-
CACHE_TO="${TEST_CACHE_ECR}:${clean_branch}"
94-
if docker manifest inspect "${TEST_CACHE_ECR}:${clean_branch}" &>/dev/null; then
95-
# Use branch-specific cache if available
96-
CACHE_FROM="${TEST_CACHE_ECR}:${clean_branch}"
97-
else
98-
# Fallback to main cache if branch cache doesn't exist
99-
CACHE_FROM="${MAIN_CACHE_ECR}:latest"
100-
fi
94+
local cache="${TEST_CACHE_ECR}:${clean_branch}"
10195
fi
96+
CACHE_TO="$cache"
97+
CACHE_FROM="$cache"
98+
CACHE_FROM_BASE_BRANCH="$cache"
10299
else
103-
# For PR builds
104-
# Always set cache destination to PR-specific tag
105100
CACHE_TO="${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}"
106-
107-
if docker manifest inspect "${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}" &>/dev/null; then
108-
# Use PR-specific cache if it exists
109-
CACHE_FROM="${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}"
110-
elif [[ "$BUILDKITE_PULL_REQUEST_BASE_BRANCH" != "main" ]]; then
111-
# For PRs targeting non-main branches, try using base branch cache
112-
local clean_base=$(clean_docker_tag "$BUILDKITE_PULL_REQUEST_BASE_BRANCH")
113-
if docker manifest inspect "${TEST_CACHE_ECR}:${clean_base}" &>/dev/null; then
114-
CACHE_FROM="${TEST_CACHE_ECR}:${clean_base}"
115-
else
116-
# Fallback to main cache if base branch cache doesn't exist
117-
CACHE_FROM="${MAIN_CACHE_ECR}:latest"
118-
fi
101+
CACHE_FROM="${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}"
102+
if [[ "$BUILDKITE_PULL_REQUEST_BASE_BRANCH" == "main" ]]; then
103+
CACHE_FROM_BASE_BRANCH="${MAIN_CACHE_ECR}:latest"
119104
else
120-
# Fallback to main cache for PRs targeting main branch
121-
CACHE_FROM="${MAIN_CACHE_ECR}:latest"
105+
local clean_base=$(clean_docker_tag "$BUILDKITE_PULL_REQUEST_BASE_BRANCH")
106+
CACHE_FROM_BASE_BRANCH="${TEST_CACHE_ECR}:${clean_base}"
122107
fi
123108
fi
124-
# Export variables
125-
export CACHE_FROM CACHE_TO
109+
110+
CACHE_FROM_MAIN="${MAIN_CACHE_ECR}:latest"
111+
export CACHE_FROM CACHE_FROM_BASE_BRANCH CACHE_FROM_MAIN CACHE_TO
126112
}
127113

128114
upload_pipeline() {
@@ -157,11 +143,13 @@ upload_pipeline() {
157143

158144
# Resolve CACHE_FROM and CACHE_TO for ECR Registry Caching
159145
resolve_ecr_cache_vars
160-
if [[ -z "${CACHE_FROM:-}" ]] || [[ -z "${CACHE_TO:-}" ]]; then
161-
echo "Error: CACHE_FROM or CACHE_TO not set after resolve_ecr_cache_vars"
146+
if [[ -z "${CACHE_FROM:-}" ]] || [[ -z "${CACHE_FROM_BASE_BRANCH:-}" ]] || [[ -z "${CACHE_FROM_MAIN:-}" ]] || [[ -z "${CACHE_TO:-}" ]]; then
147+
echo "Error: CACHE_FROM, CACHE_FROM_BASE_BRANCH, CACHE_FROM_MAIN, or CACHE_TO not set after resolve_ecr_cache_vars"
162148
exit 1
163149
else
164150
echo "Resolved CACHE_FROM: ${CACHE_FROM}"
151+
echo "Resolved CACHE_FROM_BASE_BRANCH: ${CACHE_FROM_BASE_BRANCH}"
152+
echo "Resolved CACHE_FROM_MAIN: ${CACHE_FROM_MAIN}"
165153
echo "Resolved CACHE_TO: ${CACHE_TO}"
166154
fi
167155

@@ -181,6 +169,8 @@ upload_pipeline() {
181169
-D cov_enabled="$COV_ENABLED" \
182170
-D vllm_ci_branch="$VLLM_CI_BRANCH" \
183171
-D cache_from="$CACHE_FROM" \
172+
-D cache_from_base_branch="$CACHE_FROM_BASE_BRANCH" \
173+
-D cache_from_main="$CACHE_FROM_MAIN" \
184174
-D cache_to="$CACHE_TO" \
185175
| sed '/^[[:space:]]*$/d' \
186176
> pipeline.yaml

buildkite/test-template-ci.j2

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,10 @@ steps:
280280
{% if vllm_use_precompiled == "1" %}
281281
--build-arg VLLM_MERGE_BASE_COMMIT={{ vllm_merge_base_commit }}
282282
{% endif %}
283+
--cache-to type=registry,ref={{ cache_to }},mode=max,compression=zstd
283284
--cache-from type=registry,ref={{ cache_from }},mode=max
284-
--cache-to type=registry,ref={{ cache_to }},mode=max
285+
--cache-from type=registry,ref={{ cache_from_base_branch }},mode=max
286+
--cache-from type=registry,ref={{ cache_from_main }},mode=max
285287
--tag {{ docker_image }}
286288
{% if branch == "main" %}
287289
--tag {{ docker_image_latest }}

0 commit comments

Comments
 (0)