Angel (Angel-ML/angel): A Parameter Server for High-Dimensional Models on YARN
A Flexible and Powerful Parameter Server for large-scale machine learning
At a glance
- What is it?
- Angel is a Java and Scala parameter server platform from Tencent and Peking University, aimed at models whose parameter count outgrows a single machine. It is a heavy, YARN-bound system whose value depends on whether your model is genuinely parameter-heavy.
- Who is it for?
- Adopt Angel if you run on YARN, your models are parameter-heavy (FM, FTRL, LDA, GBDT, or graph workloads), and you can absorb the operational cost of a parameter server cluster. Do not adopt it for small models that fit in memory on one machine, or if your infrastructure is Kubernetes-native rather than YARN-based; the README only documents YARN and local deployment modes.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 5 days ago.
- What is it written in?
- Mainly Java, 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 parameter-count problem Angel was built for
The README frames the target explicitly: Angel is tuned for big data from Tencent and demonstrates, in the project's own wording, an increasing advantage in handling higher dimension models. That is the problem statement. When a model has hundreds of millions or billions of parameters (factorization machines over sparse user-item features, FTRL models, topic models), the parameter vector no longer fits comfortably in the memory of one worker, and shipping gradients over a network for every update becomes the bottleneck rather than the computation. Angel's answer is to partition parameters across multiple parameter-server nodes and let workers update only the slices they touch. If your model fits in memory on a single machine, none of this machinery pays for itself. The intended audience is engineers running recommendation, advertising, or graph workloads on a Hadoop-style cluster, not someone training a small scikit-learn model.
Model partitioning, SyncController, and the psFunc interface
The architecture is documented under docs/overview/architecture_en.md and docs/design/, and the pieces named there are concrete. A Model Partitioner splits the parameter space across parameter servers. A SyncController governs the consistency model, which the README describes as flexible, meaning you choose how strictly workers and servers agree on parameter state rather than accepting one fixed synchronization policy. The psFunc interface is the extension point: algorithms implement parameter update functions that the servers execute against the partitioned model, so gradient application happens where the parameters live instead of at the worker. On top of the core, a PS Service abstraction lets Spark drivers and executors talk to Angel servers, which is what Spark on Angel means in practice. The README also states that graph computing and deep learning framework support is under development, so the graph algorithms listed in the docs should be treated as the current surface, not a complete graph platform.
Spark on Angel versus Angel: two deployment shapes
The repository documents both a standalone Angel mode and Spark on Angel, and it ships a document titled Angel or Spark On Angel? specifically to help you choose. The distinction matters because it changes what you operate. In Spark on Angel, Spark handles data loading and the driver-side training loop while Angel servers hold the model, so you keep your existing Spark jobs and add a parameter service alongside them. In plain Angel, the whole job runs as an Angel application. The algorithm list reflects this split: Logistic Regression, SVM, FM, KMeans, GBDT and LDA appear under Angel, while FTRL, FTRLFM, LR and GBDT appear under Spark on Angel, alongside graph algorithms such as PageRank, Louvain, LINE and Word2Vec. Some algorithms exist in both columns, which means the choice is about your existing pipeline more than about feature coverage.
Building and running it: the documented path
The deployment docs are the source of truth here: docs/deploy/source_compile_en.md for compilation, docs/deploy/local_run_en.md for a local run, docs/deploy/run_on_yarn_en.md for cluster deployment, and docs/deploy/config_details_en.md plus docs/deploy/resource_config_guide_en.md for configuration. The README does not inline the build commands, so treat those files as required reading rather than optional. Two constraints are visible from the repository itself. First, the primary language is Java with Scala, so the build expects a JVM toolchain and the usual Java build tooling. Second, the README states Angel supports running on YARN, and the badge block points at branch-3.2.0 while the release list shows Release-3.3.0 as the most recent tag. That mismatch is worth resolving before you start: check which branch the compile guide describes and pin your checkout to the matching tag, because the README's own links still reference branch-3.2.0.
Where Angel is the wrong tool
Three limitations are visible from the material. The deployment story is YARN-centric: the README names YARN as the supported cluster mode, and there is no mention of Kubernetes or another scheduler in the documentation index. If your organization has standardized on containers and a non-YARN scheduler, adopting Angel means running a second, separate cluster stack. Second, the deep learning and graph framework support is described in the README as under development and to be released in the future, so the PyTorch-On-Angel links for DeepFM, GCN, GraphSage and similar models point at a different repository with its own branch, not at code in this repository. Third, the release cadence is uneven: Release-3.2.0 landed in August 2021 and Release-3.3.0 in September 2025, a gap of roughly four years. A long gap between releases is not proof of abandonment, and the repository is not archived, but it does mean you should check whether the specific algorithm you need has been touched since the version you plan to run.
How Angel differs from Spark MLlib
The honest comparison is with Spark MLlib, because Spark on Angel runs inside Spark and the two can sit in the same job. MLlib's design keeps the model on the driver or broadcasts it to executors, which works while the model is small enough to move. Angel inverts that: parameters live on dedicated server nodes and stay there, and workers push updates to them. For a logistic regression on a modest feature set, MLlib is simpler and you already have the cluster. For a factorization machine over a sparse feature space with billions of parameters, the broadcast approach stops being viable and the server-side partitioning is the point. The difference is not accuracy, it is where the model lives and how much of it moves across the network per iteration. Angel also brings its own algorithm set (WarpLDA, GBDT, FTRLFM) that MLlib does not cover, which is often the real reason teams look at it.
Maintenance cost and the licence question
Angel is not a library you add to a build file and forget. It is a distributed service with parameter servers, a synchronization policy to configure, and resource settings documented separately in the resource configuration guide. Upgrades mean moving a cluster, not bumping a version string, and the four-year gap between Release-3.2.0 and Release-3.3.0 means you should read the release notes for both before jumping. On licensing: the README displays an Apache 2.0 badge and links to LICENSE.TXT on branch-3.2.0, but the repository metadata reports the licence as NOASSERTION, meaning the automated classifier could not confirm a standard identifier. Those two signals disagree. Read the actual LICENSE.TXT file on the branch you intend to build and, if the terms matter to your legal team, have them review it. This is a factual observation about the repository, not legal advice.
Editorial conclusion
Adopt Angel if you run on YARN, your models are parameter-heavy (FM, FTRL, LDA, GBDT, or graph workloads), and you can absorb the operational cost of a parameter server cluster. Do not adopt it for small models that fit in memory on one machine, or if your infrastructure is Kubernetes-native rather than YARN-based; the README only documents YARN and local deployment modes. Before committing, verify the actual licence text in LICENSE.TXT on the branch you intend to build, since the repository metadata reports NOASSERTION rather than a recognized SPDX identifier, and confirm that the release tag you pick matches the branch the build documentation describes.
Community notes