Skip to content

Commit d63983d

Browse files
feat: add experimental python 3.14t feature server
1 parent 7c04026 commit d63983d

19 files changed

Lines changed: 847 additions & 550 deletions

.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ env
66
offline_build/
77
!offline_build/arrow
88
!offline_build/ibis
9+
ui/node_modules
10+
sdk/python/feast/ui/node_modules

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,15 @@ build-feature-server-docker: ## Build Feature Server Docker image
683683
-f sdk/python/feast/infra/feature_servers/multicloud/Dockerfile \
684684
$(if $(filter true,$(DOCKER_PUSH)),--push,--load) sdk/python/feast/infra/feature_servers/multicloud
685685

686+
push-feature-server-experimental-docker: ## Push experimental Python 3.14 free-threaded Feature Server Docker image
687+
docker push $(REGISTRY)/feature-server:$(VERSION)-python314t-experimental
688+
689+
build-feature-server-experimental-docker: ## Build experimental Python 3.14 free-threaded Feature Server Docker image
690+
docker buildx build $(if $(DOCKER_PLATFORMS),--platform $(DOCKER_PLATFORMS),) \
691+
-t $(REGISTRY)/feature-server:$(VERSION)-python314t-experimental \
692+
-f sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.experimental \
693+
$(if $(filter true,$(DOCKER_PUSH)),--push,--load) .
694+
686695
push-feature-transformation-server-docker: ## Push Feature Transformation Server Docker image
687696
docker push $(REGISTRY)/feature-transformation-server:$(VERSION)
688697

@@ -733,6 +742,11 @@ build-feature-server-dev: ## Build Feature Server Dev Docker image
733742
-t feastdev/feature-server:dev \
734743
-f sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev --load .
735744

745+
benchmark-feature-server-experimental: ## Benchmark stable vs experimental feature server containers
746+
uv run python infra/scripts/benchmark_feature_server_experimental.py \
747+
--baseline-image $(REGISTRY)/feature-server:$(VERSION) \
748+
--experimental-image $(REGISTRY)/feature-server:$(VERSION)-python314t-experimental
749+
736750
build-feature-server-dev-docker: ## Build Feature Server Dev Docker image
737751
docker buildx build $(if $(DOCKER_PLATFORMS),--platform $(DOCKER_PLATFORMS),) \
738752
-t $(REGISTRY)/feature-server:$(VERSION) \

docs/project/development-guide.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,16 @@ make compile-protos-python
166166
docker build -t docker-whale -f ./sdk/python/feast/infra/feature_servers/multicloud/Dockerfile .
167167
```
168168

169+
### Building the experimental Python 3.14 free-threaded feature server image
170+
```sh
171+
make build-feature-server-experimental-docker
172+
173+
# Optional: compare it to the stable image with the sample local repo
174+
make benchmark-feature-server-experimental
175+
```
176+
177+
This experimental image is currently aimed at early compatibility and performance testing for the Python feature server. The benchmark target compares the stable and experimental containers against the sample local repo and is currently most representative for SQLite-backed serving experiments.
178+
169179
### Code Style and Linting
170180
Feast Python SDK and CLI codebase:
171181
- Conforms to [Black code style](https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html)

docs/reference/feature-servers/python-feature-server.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,25 @@ Key performance options:
5353
- Use HTTP health checks instead of TCP for better application-level monitoring
5454
- Consider horizontal pod autoscaling based on request latency metrics
5555

56+
### Experimental Python 3.14 Free-Threaded Container
57+
58+
Feast also ships an experimental feature-server container build for Python 3.14 free-threaded (`3.14t`) runtimes. This image is intended for benchmarking and early compatibility validation, not as the default production image.
59+
60+
Today, the experimental image is best treated as a SQLite-oriented serving experiment. The online-serving startup path has been trimmed to avoid eagerly importing `pandas`, which makes it a better fit for free-threaded serving benchmarks, but the broader Feast runtime and some offline-oriented paths still rely on dependencies that are not fully optimized for no-GIL execution yet.
61+
62+
```bash
63+
# Build the stable image
64+
make build-feature-server-docker
65+
66+
# Build the experimental no-GIL image
67+
make build-feature-server-experimental-docker
68+
69+
# Compare the two images against the same sample feature repo
70+
make benchmark-feature-server-experimental
71+
```
72+
73+
The benchmark target writes a JSON report to `feature-server-experimental-benchmark.json` with throughput and latency comparisons for the stable and experimental containers. The current harness uses the sample local feature repo and is most useful for side-by-side SQLite serving comparisons. Because the free-threaded Python ecosystem is still evolving, treat the result as a workload-specific experiment and validate dependency compatibility before promoting it further.
74+
5675
## Deploying as a service
5776

5877
See [this](../../how-to-guides/running-feast-in-production.md#id-4.2.-deploy-feast-feature-servers-on-kubernetes) for an example on how to run Feast on Kubernetes using the Operator.
@@ -536,4 +555,4 @@ The [PyTorch NLP template](https://github.com/feast-dev/feast/tree/main/sdk/pyth
536555

537556
## How to configure Authentication and Authorization ?
538557

539-
Please refer the [page](./../../../docs/getting-started/concepts/permission.md) for more details on how to configure authentication and authorization.
558+
Please refer the [page](./../../../docs/getting-started/concepts/permission.md) for more details on how to configure authentication and authorization.

0 commit comments

Comments
 (0)