Self-hosted service
polyaxon/polyaxon avatar
polyaxon/polyaxon

Polyaxon: A Kubernetes Control Plane for Experiment Tracking and Hyperparameter Search

AI Infra / AI Orchestration / AI Control Plane

3,730 stars331 forksMDXApache-2.0

At a glance

What is it?
Polyaxon packages experiment tracking, hyperparameter search, DAG pipelines and GPU sharing into a single Kubernetes-deployed platform. The CLI and polyaxonfile format are the real interface; the operational cost is a cluster you now have to run.
Who is it for?
Adopt Polyaxon if you already run Kubernetes and want experiment tracking, hyperparameter search and DAG pipelines under one control plane with a CLI-first workflow. Do not adopt it if you have no cluster to deploy into, or if you only need a local tracking library.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly MDX, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem Polyaxon targets: reproducibility and GPU sharing inside Kubernetes

The README states the goal directly: a system to solve reproducibility, automation, and scalability for machine learning applications. Those three words map to three concrete pains. Reproducibility means a run is described by a file rather than by a shell history. Automation means sweeps and pipelines are declared, not scripted by hand. Scalability means GPU servers become, in the README's phrasing, shared, self-service resources for your team or organization. The intended user is a platform or ML engineer who already has Kubernetes and needs to put a control plane on top of it, not an individual data scientist working on a laptop. Polyaxon deploys into any data center or cloud provider, and the README also notes it can be hosted and managed by Polyaxon, which tells you the project expects a real cluster as the substrate.

The polyaxonfile is the unit of work, and the CLI is the interface

Everything in the quick start routes through a YAML file passed to the CLI. You create a project with polyaxon project create --name=quick-start, then submit work with polyaxon run -f experiment.yaml -u -l, where the flags upload code and follow logs. The same run command reaches the component hub: polyaxon run --hub notebook starts a Jupyter notebook for the project, and polyaxon run --hub tensorboard -P uuid=UUID starts TensorBoard against a specific run's output. That -P flag is the parameter-passing mechanism into a hub component. The README describes the platform as supporting Tensorflow, MXNet, Caffe, Torch and similar frameworks, and the topics list adds PyTorch, Keras and reinforcement learning. The important structural point is that the polyaxonfile, not the Python code, carries the environment, the resources and the framework wiring. That is what makes runs comparable later, and it is also the main thing you have to learn.

Hyperparameter search via experiment groups

Polyaxon models tuning the way Google Vizier does, according to the README, through a construct called an experiment group. An experiment group bundles three things: a search algorithm, a search space, and the model to train. The documentation lists grid search, random search, Hyperband, Bayesian optimization, Hyperopt, and a custom iterative optimization mode. The interesting entry is the last one, because it implies you can plug in your own suggestion logic rather than being limited to the built-in algorithms. For parallel execution outside of tuning, the README points to a mapping abstraction for managing concurrent jobs. This is a design where the orchestration layer owns the sweep, so the search state lives in Polyaxon rather than in a driver script you maintain. The cost of that choice is that the search space has to be expressed in Polyaxon's format, and any tuning logic you already have in Python has to be adapted or moved into the iterative mode.

DAGs, distributed jobs, and what has to be installed per framework

Polyaxon DAGs are described as a container-native engine for running machine learning pipelines. A DAG manages multiple operations with dependencies, and each operation is defined by a component runtime, which the README says can be a job, a service, or a distributed job. That last category is where the operational weight sits. The README is explicit that distributed training requires three steps: deploy the corresponding operator, adapt your code to enable distributed training, and update your polyaxonfile. The listed integrations are distributed TensorFlow, distributed PyTorch, distributed MPI, Horovod, Spark and Dask. So Polyaxon does not make distributed training free. It standardizes the submission path and the tracking around it, while the framework-specific operator and the code changes remain your responsibility. Anyone expecting a single flag to turn a single-process script into a multi-node job will be disappointed by that section.

Installation path and the config file it depends on

The install sequence is short but assumes a working cluster. You install the client with pip install -U polyaxon, create a namespace with kubectl create namespace polyaxon, add the chart repository with helm repo add polyaxon https://charts.polyaxon.com, then deploy with polyaxon admin deploy -f config.yaml. The config.yaml is where deployment settings live, and the README does not inline its contents, so it is the first thing you have to read in the setup guide rather than in the repository front page. Access to the API afterwards is through polyaxon port-forward, and the dashboard is started with polyaxon dashboard, which prompts before opening a browser. Note the division of labour here: the CLI is a Python package, but the deployment is a Helm chart and the runtime is Kubernetes. Upgrading the platform is therefore a chart operation, not a pip upgrade, and the two versions have to stay in step.

Where Polyaxon is the wrong tool

The clearest failure mode is the absence of a cluster. Every documented path runs through kubectl, Helm and a namespace, so a team without Kubernetes gets no value from the install steps at all. A second boundary is scope: if you only want to log metrics and compare runs from a local script, the platform's deployment surface is far larger than the problem. A third is the polyaxonfile itself. Because the run definition lives in YAML, every experiment has to be translated into that format, and the README's own distributed section shows that translation is not purely mechanical when a framework operator is involved. There is also a versioning risk visible in the badges: the README advertises release v2.16.1 while the repository metadata returned no releases, so the release history has to be checked at the documentation site rather than inferred from the repository. Finally, the primary language listed for the repository is MDX, which reflects that a large part of this project is documentation content. The code is spread across several components, with separate CI workflows for the CLI, Haupt, Hypertune and Traceml, so reading the source means knowing which component owns the behaviour you are debugging.

How it compares to Kubeflow Pipelines and to tracking-only tools

Kubeflow Pipelines also runs ML workflows on Kubernetes and also expresses pipelines as a DAG, but its pipeline definition is built around a compiled pipeline artifact produced from a Python DSL. Polyaxon's equivalent is the polyaxonfile plus the DAG abstraction, and the README's framing of operations as jobs, services or distributed jobs is the distinction that matters: services are first-class, so a long-running notebook or TensorBoard is the same kind of object as a training job. On the other end of the spectrum, tracking-only libraries such as MLflow log runs from ordinary Python and need no cluster. Polyaxon instead makes the cluster the runtime and the scheduler the source of truth. That buys you GPU sharing and self-service resource allocation, which a local tracking library cannot provide. It costs you the deployment, the chart upgrades and the per-framework operators. The choice is really about whether the cluster already exists and whether sharing it is a requirement.

Licence and maintenance cost

Polyaxon is Apache-2.0, which permits commercial use and modification, and the README carries the corresponding badge. That is a permissive licence, but it is not legal advice and the terms of any managed offering from the project should be read separately. On maintenance, the material supports a few concrete statements. The platform is not archived and the last push is dated 2026-09-09, so the repository is active. Upgrades run through the Helm chart and the CLI together, which means a version skew between the client and the deployed chart is a real operational concern rather than a theoretical one. Each distributed framework you enable adds an operator to the cluster, and each operator is another component to keep current. The documentation is the primary artifact here, and the repository's MDX-heavy composition means the docs move with the code. Budget for a person who owns the cluster, the chart and the operators, not just someone who writes experiment.yaml.

Editorial conclusion

Adopt Polyaxon if you already run Kubernetes and want experiment tracking, hyperparameter search and DAG pipelines under one control plane with a CLI-first workflow. Do not adopt it if you have no cluster to deploy into, or if you only need a local tracking library. Before committing, verify the chart version and the polyaxon admin deploy path against your Kubernetes and Helm versions, and confirm which operators your distributed framework needs.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. polyaxon/polyaxon on GitHub
  4. Project website
  5. README
Community notes

Community notes