Skip to content

Commit 463d0cc

Browse files
committed
attempting to fix model caching
1 parent e7e7c19 commit 463d0cc

5 files changed

Lines changed: 182 additions & 81 deletions

File tree

.env

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ BENCHMARK_DURATION=60
5050
# More workers = more I/O pressure on FlashArray
5151
BENCHMARK_WORKERS=8
5252

53+
# Number of model copies to create (defeats Linux page cache)
54+
# Higher = more unique files = less cache hits = true storage I/O
55+
# Each copy is ~2MB, so 100 copies = ~200MB working set
56+
BENCHMARK_COPIES=100
57+
5358
# Run inference after each model load (simulates real usage)
54-
BENCHMARK_INFERENCE=true
59+
# Set to false for pure I/O stress test
60+
BENCHMARK_INFERENCE=false
5561

5662
# Batch size for inference (if enabled)
5763
BENCHMARK_BATCH_SIZE=1000

Makefile

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ help:
5353
@echo "Benchmark options (FlashArray stress test):"
5454
@echo " BENCHMARK_DURATION=$(BENCHMARK_DURATION)s"
5555
@echo " BENCHMARK_WORKERS=$(BENCHMARK_WORKERS) (concurrent model loaders)"
56+
@echo " BENCHMARK_COPIES=$(BENCHMARK_COPIES) (defeats page cache)"
5657
@echo " BENCHMARK_INFERENCE=$(BENCHMARK_INFERENCE)"
57-
@echo " Example: make benchmark BENCHMARK_DURATION=120 BENCHMARK_WORKERS=32"
58+
@echo " Example: make benchmark BENCHMARK_DURATION=120 BENCHMARK_WORKERS=32 BENCHMARK_COPIES=200"
5859

5960
# Verify environment and paths
6061
env-check:
@@ -152,7 +153,8 @@ inference:
152153
# Benchmark settings
153154
BENCHMARK_DURATION ?= 60
154155
BENCHMARK_WORKERS ?= 8
155-
BENCHMARK_INFERENCE ?= true
156+
BENCHMARK_COPIES ?= 100
157+
BENCHMARK_INFERENCE ?= false
156158
BENCHMARK_BATCH_SIZE ?= 1000
157159

158160
# Run FlashArray model reload stress test
@@ -163,6 +165,7 @@ benchmark:
163165
@echo "=========================================="
164166
@echo "Duration: $(BENCHMARK_DURATION)s per test"
165167
@echo "Workers: $(BENCHMARK_WORKERS) concurrent"
168+
@echo "Model copies: $(BENCHMARK_COPIES) (defeats page cache)"
166169
@echo "Run inference: $(BENCHMARK_INFERENCE)"
167170
@echo ""
168171
@if [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost" ] && [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost_gpu" ] && [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost_cpu" ]; then \
@@ -173,26 +176,26 @@ benchmark:
173176
fi
174177
@ls -d $(FA_MODEL_REPO)/fraud_xgboost* 2>/dev/null | head -1 | xargs -I{} echo " Found model: {}"
175178
@echo ""
176-
BENCHMARK_DURATION=$(BENCHMARK_DURATION) BENCHMARK_WORKERS=$(BENCHMARK_WORKERS) BENCHMARK_INFERENCE=$(BENCHMARK_INFERENCE) BENCHMARK_BATCH_SIZE=$(BENCHMARK_BATCH_SIZE) docker compose run --rm benchmark
179+
BENCHMARK_DURATION=$(BENCHMARK_DURATION) BENCHMARK_WORKERS=$(BENCHMARK_WORKERS) BENCHMARK_COPIES=$(BENCHMARK_COPIES) BENCHMARK_INFERENCE=$(BENCHMARK_INFERENCE) BENCHMARK_BATCH_SIZE=$(BENCHMARK_BATCH_SIZE) docker compose run --rm benchmark
177180
@echo ""
178181
@echo "Stress test complete!"
179182
@echo "Check Grafana for FlashArray I/O metrics"
180183

181-
# Run FlashArray stress test without inference (pure I/O)
184+
# Run FlashArray stress test with more copies (aggressive cache defeat)
182185
benchmark-io:
183186
@echo ""
184187
@echo "=========================================="
185-
@echo "FlashArray Pure I/O Stress Test"
188+
@echo "FlashArray Aggressive I/O Stress Test"
186189
@echo "=========================================="
187190
@echo "Duration: $(BENCHMARK_DURATION)s per test"
188191
@echo "Workers: $(BENCHMARK_WORKERS) concurrent"
189-
@echo "Run inference: false (pure model load I/O)"
192+
@echo "Model copies: 200 (aggressive cache defeat)"
190193
@echo ""
191194
@if [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost" ] && [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost_gpu" ] && [ ! -d "$(FA_MODEL_REPO)/fraud_xgboost_cpu" ]; then \
192195
echo "ERROR: Model not found at $(FA_MODEL_REPO)/"; \
193196
exit 1; \
194197
fi
195-
BENCHMARK_DURATION=$(BENCHMARK_DURATION) BENCHMARK_WORKERS=$(BENCHMARK_WORKERS) BENCHMARK_INFERENCE=false docker compose run --rm benchmark
198+
BENCHMARK_DURATION=$(BENCHMARK_DURATION) BENCHMARK_WORKERS=$(BENCHMARK_WORKERS) BENCHMARK_COPIES=200 BENCHMARK_INFERENCE=false docker compose run --rm benchmark
196199

197200
# Test inference
198201
test:

docker-compose.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,17 @@ services:
166166
container_name: fraud-benchmark
167167
volumes:
168168
# Model repository on FlashArray (stress test target)
169-
- ${FA_MODEL_REPO}:/data/models:ro
169+
# NOTE: Must be read-write for creating model copies
170+
- ${FA_MODEL_REPO}:/data/models
170171
# Data from FlashBlade (for test inference)
171172
- ${FB_DATA}:/data/input:ro
172173
environment:
173174
- MODEL_DIR=/data/models
174175
- DATA_DIR=/data/input
175176
- DURATION_SECONDS=${BENCHMARK_DURATION:-60}
176177
- NUM_WORKERS=${BENCHMARK_WORKERS:-8}
177-
- RUN_INFERENCE=${BENCHMARK_INFERENCE:-true}
178+
- NUM_MODEL_COPIES=${BENCHMARK_COPIES:-100}
179+
- RUN_INFERENCE=${BENCHMARK_INFERENCE:-false}
178180
- INFERENCE_BATCH_SIZE=${BENCHMARK_BATCH_SIZE:-1000}
179181
networks:
180182
- fraud-net

pods/benchmark/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ ENV MODEL_DIR=/data/models
1919
ENV DATA_DIR=/data/input
2020
ENV DURATION_SECONDS=60
2121
ENV NUM_WORKERS=8
22-
ENV RUN_INFERENCE=true
22+
ENV NUM_MODEL_COPIES=100
23+
ENV RUN_INFERENCE=false
2324
ENV INFERENCE_BATCH_SIZE=1000
2425
ENV PYTHONUNBUFFERED=1
2526

0 commit comments

Comments
 (0)