Framework
facebookresearch/mmf avatar
facebookresearch/mmf

MMF: FAIR's Modular Stack for Vision-and-Language Experiments

A modular framework for vision & language multimodal research from Facebook AI Research (FAIR)

5,632 stars939 forksPythonNOASSERTION

At a glance

What is it?
MMF is a PyTorch framework that packages datasets, model components and training loops for multimodal tasks such as VQA and captioning. It is best suited to researchers who want a known starting point for a challenge baseline, not to teams shipping a vision-language feature into production.
Who is it for?
Adopt MMF if you are a researcher who needs a working baseline for a vision-and-language benchmark and can afford to read the source when the docs run out. Do not adopt it as the foundation of a production service: the release history, the NOASSERTION licence metadata and the research-oriented abstractions all point the other way.
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 70 days ago.
What is it written in?
Mainly Python, 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 gap MMF was built to fill

Vision-and-language research has a reproducibility problem that is not really about the models. A paper on visual question answering describes an architecture, a training schedule and an evaluation protocol, but the code that produced the numbers is usually a one-off repository tuned to one dataset. Anyone who wants to compare against it has to rebuild the data pipeline, the batching logic and the metric computation before writing a single line of new model code. MMF's stated purpose is to remove that repeated work: the README describes it as a modular framework that "contains reference implementations of state-of-the-art vision and language models" and that can be used to "bootstrap" a new project. The intended user is a researcher or graduate student who needs a baseline on a benchmark such as VQA, TextVQA, TextCaps or The Hateful Memes, and who would rather extend an existing pipeline than assemble one. It is not aimed at an application engineer who wants to call a multimodal API.

How datasets, models and training are wired together

The README points to a video overview of "how datasets and models work inside MMF", which tells you the abstraction boundary the authors care about. The repository is organised around registries: datasets, model components and training configuration are registered under names and then composed from a config file rather than from Python imports scattered through a training script. That is the mechanism behind the word modular. Swapping a text encoder or an image backbone should be a config change, not a rewrite of the training loop. The same structure is what lets one codebase host implementations for several different task families, since a task is essentially a dataset plus a model plus a loss, assembled at runtime. The README also states that MMF is "powered by PyTorch" and supports distributed training, so the execution layer is standard PyTorch with a distributed launcher on top. MMF was formerly known as Pythia, which matters if you are searching for older issues or forks under the previous name.

Installing MMF and running a first experiment

The README does not inline the install commands. It directs readers to the documentation at mmf.sh/docs for installation instructions, and the homepage is the canonical entry point for setup, feature lists and the project list. That is a deliberate choice and it has a practical consequence: this article cannot give you a verified pip line, because none appears in the supplied material. What can be confirmed is that the framework is Python, that it depends on PyTorch, and that the documentation is where the supported install path lives. Treat the docs as the source of truth for the exact command and for the Python and CUDA versions it expects. If you are evaluating MMF before installing, the more useful first step is to read the features page linked from the README and the list of projects built on MMF, because those tell you which model and dataset combinations are actually maintained rather than merely mentioned.

The release cadence is the first thing to check

The most recent tagged release in the supplied metadata is v0.3.1 from August 2019, with v0.3 two months earlier. The repository itself is not archived and shows activity well beyond that date, so the tags and the code have diverged for years. For a research codebase this is common and not automatically disqualifying, but it changes how you should consume it. There is no versioned artefact you can pin that reflects current behaviour, so the practical unit of adoption is a commit hash on main, and any upgrade means diffing against a moving branch. If your institution or lab requires a released version for reproducibility, that requirement is hard to satisfy here. If you are comfortable tracking main and recording the commit you trained on, the absence of tags is mostly an inconvenience rather than a blocker.

Where MMF is the wrong tool

The framework assumes you are training or fine-tuning a model. If your goal is inference on a handful of images per second with a latency budget, the config-driven assembly and the dataset abstractions add layers you will spend time removing. The same applies if your task does not resemble the benchmarks MMF targets: the value comes from the reference implementations and the shared data pipeline, and neither helps if you are building something outside captioning, VQA, dialog or the meme and text-image classification tasks named in the repository topics. There is also a maintenance question. Research frameworks are optimised for the experiments their authors are running, so a component you depend on may be refactored or dropped when the underlying paper stops being relevant. Before building on a specific model in MMF, confirm it is still exercised by the current code rather than left behind from an earlier release.

MMF against plain PyTorch and PyTorch Lightning

The honest alternative for most teams is not another multimodal framework but no framework at all. Plain PyTorch gives you a training loop you fully control and a dependency surface you can audit, at the cost of writing the data loading, checkpointing and distributed logic yourself. PyTorch Lightning sits in between: it standardises the training loop and the distributed launch but says nothing about multimodal datasets or model composition, so you still supply the vision-and-language specifics. MMF's difference is that it ships those specifics as reusable pieces, including reference implementations for named benchmarks. The trade is breadth for control. If your architecture is close to something MMF already implements, the framework saves real time. If it is not, you inherit the config system and the registry indirection without getting the reference implementation that justified them, and plain PyTorch becomes the shorter path.

Licensing and what the metadata does not say

The README states that MMF is licensed under the BSD license and points to the LICENSE file, while the repository metadata reports the licence as NOASSERTION. Those two signals disagree, and the disagreement is worth resolving before you depend on the code. NOASSERTION typically means an automated detector could not match the file to a known licence template, which can happen with a modified or composite text. This is not legal advice and the only reliable step is to read the LICENSE file and, if the terms matter to your organisation, have counsel review it. The practical point is narrower: do not assume the BSD label in the README settles the question, and do not assume the metadata is wrong either. Open the file.

What to verify before you commit

Start with the documentation site, since the README delegates installation, features and the project list to it. Check that the model you care about appears in the current code and not only in an older release note. Confirm the PyTorch and CUDA versions the install instructions assume against your own environment, because a mismatch there will cost more time than any architectural decision. Record the commit hash you train on, given that the newest tag is years behind the branch. Then decide on the basis of your own constraint: a lab that needs a benchmark baseline and can read source has a reasonable case for MMF, while a team that needs a stable, versioned dependency for a product does not. The framework is a starting point by design, and treating it as anything more permanent than that is where projects get into trouble.

Editorial conclusion

Adopt MMF if you are a researcher who needs a working baseline for a vision-and-language benchmark and can afford to read the source when the docs run out. Do not adopt it as the foundation of a production service: the release history, the NOASSERTION licence metadata and the research-oriented abstractions all point the other way. Before committing, verify three things: the exact licence text in the LICENSE file, which model and dataset combinations are actually implemented in the current main branch, and whether the pinned PyTorch and CUDA versions in the install instructions match your hardware.

Official sources

  1. facebookresearch/mmf on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Community notes

Community notes