OpenLLM is a free, open source machine learning infrastructure project written in Python and released under Apache-2.0. It has 12,535 GitHub stars, 841 forks and 20 open issues, and was last pushed 3 days ago. On this registry it ranks #16 of 57 tracked projects in Machine Learning Infrastructure, with 5 head-to-head comparisons available. It gained 3 stars over the last 3 tracked days.

What is OpenLLM?

OpenLLM is an Apache-2.0 Python project from BentoML that runs open-source or custom large language models as OpenAI-compatible API endpoints on self-hosted infrastructure, and it is aimed at developers and platform teams who want to serve Llama, Qwen, Mistral, DeepSeek and similar models in the cloud without rewriting their client code.

What it is

OpenLLM lets developers run any open-source LLM — Llama 3.3, Qwen2.5, Phi3, DeepSeek R1 and others — or a custom model as an OpenAI-compatible API with a single command. It ships a built-in chat UI, inference backends, and a simplified workflow for enterprise-grade cloud deployment with Docker, Kubernetes and BentoCloud. It lives in the Python packaging ecosystem on PyPI as openllm, sits inside the BentoML project family, and is licensed under Apache-2.0.

The concrete problem it solves is the endpoint. An application written against the OpenAI API needs a compatible server at a new base URL when it moves onto self-hosted models, and OpenLLM supplies one — by default on port 3000 with /v1 paths — so existing OpenAI clients keep working after a base URL change, with the API key optional. Its stated positioning is the cloud-deployment step beyond Ollama-style local runners, which is the framing of BentoML's write-up titled "From Ollama to OpenLLM: Running LLMs in the Cloud" linked from the README.

Key capabilities

  • Starts a model server with one command using model:version specs such as openllm serve llama3.3:70b, openllm serve deepseek:r1-671b and openllm serve qwen2.5-coder:3b.
  • Serves OpenAI-compatible APIs, so the OpenAI Python client can point at base_url='http://localhost:3000/v1' and run streaming chat completions with no client changes.
  • Provides a built-in chat UI alongside the HTTP API.
  • Covers a wide catalogue including deepseek r1-671b, gemma2, gemma3, jamba1.5, llama3.1, llama3.2, llama3.3, llama4, mistral, mistral-large, phi4, pixtral, qwen2.5, qwen2.5-coder and qwq, with the full list in the OpenLLM models repository.
  • Supports custom models through a model repository, so private checkpoints are served the same way as public ones.
  • Documents required GPU memory per model, from 12G for gemma3:3b up to 80Gx16 for deepseek r1-671b.
  • Targets Docker, Kubernetes and BentoCloud for deployment, with an openllm hello command for first-run exploration.

Who uses it and how

  • Platform teams planning capacity for large models, where per-model GPU requirements such as 80Gx2 for llama3.3:70b and 80Gx8 for llama4:17b16e drive node selection.
  • Application developers replacing third-party API calls by repointing an OpenAI-compatible client at a self-hosted base URL, with client authentication optional.
  • Teams running compact models on single GPUs, for example llama3.2:1b at 24G or gemma2:2b at 12G.
  • Multimodal workloads, indicated by the llama3-2-vision topic and the pixtral 12b-2409 entry in the model table.
  • Operations groups deploying through Kubernetes or BentoCloud rather than hand-managed servers.

Getting started

Install with pip install openllm (or pip3 install openllm), run openllm hello for an interactive tour, and start a server with openllm serve llama3.2:1b. For gated models, set export HF_TOKEN= with a Hugging Face token, because OpenLLM does not store model weights.

How it compares

The README frames OpenLLM as the cloud-oriented step beyond Ollama, through BentoML's write-up titled "From Ollama to OpenLLM: Running LLMs in the Cloud", where the emphasis is OpenAI-compatible serving plus Docker, Kubernetes and BentoCloud deployment rather than desktop convenience. The facts provided name no paid product that OpenLLM is stated to replace and no other comparable tool, so on this registry it stands largely alone.

When to use it — and when not to

Self-hosting means operating the GPU capacity the model table demands, managing a Hugging Face token for gated weights, and running the container or Kubernetes stack, since OpenLLM stores no weights and pulls them from Hugging Face on first run. The catalogue skews large, with several entries needing multiple 80G-class GPUs, so teams without that hardware or cluster access should look elsewhere. Licence and packaging are clear (Apache-2.0 on PyPI) and the repository shows recent activity, but the README excerpt is chiefly usage documentation, so adopters should check the repository itself for release cadence and support expectations.

project readme (upstream, from github) — read inline

🦾 OpenLLM: Self-Hosting LLMs Made Easy

License: Apache-2.0 Releases CI X Community

OpenLLM allows developers to run any open-source LLMs (Llama 3.3, Qwen2.5, Phi3 and more) or custom models as OpenAI-compatible APIs with a single command. It features a built-in chat UI, state-of-the-art inference backends, and a simplified workflow for creating enterprise-grade cloud deployment with Docker, Kubernetes, and BentoCloud.

Understand the design philosophy of OpenLLM.

Get Started

Run the following commands to install OpenLLM and explore it interactively.

pip install openllm  # or pip3 install openllm
openllm hello

hello

Supported models

OpenLLM supports a wide range of state-of-the-art open-source LLMs. You can also add a model repository to run custom models with OpenLLM.

Model Parameters Required GPU Start a Server
deepseek r1-671b 80Gx16 openllm serve deepseek:r1-671b
gemma2 2b 12G openllm serve gemma2:2b
gemma3 3b 12G openllm serve gemma3:3b
jamba1.5 mini-ff0a 80Gx2 openllm serve jamba1.5:mini-ff0a
llama3.1 8b 24G openllm serve llama3.1:8b
llama3.2 1b 24G openllm serve llama3.2:1b
llama3.3 70b 80Gx2 openllm serve llama3.3:70b
llama4 17b16e 80Gx8 openllm serve llama4:17b16e
mistral 8b-2410 24G openllm serve mistral:8b-2410
mistral-large 123b-2407 80Gx4 openllm serve mistral-large:123b-2407
phi4 14b 80G openllm serve phi4:14b
pixtral 12b-2409 80G openllm serve pixtral:12b-2409
qwen2.5 7b 24G openllm serve qwen2.5:7b
qwen2.5-coder 3b 24G openllm serve qwen2.5-coder:3b
qwq 32b 80G openllm serve qwq:32b

For the full model list, see the OpenLLM models repository.

Start an LLM server

To start an LLM server locally, use the openllm serve command and specify the model version.

[!NOTE] OpenLLM does not store model weights. A Hugging Face token (HF_TOKEN) is required for gated models.

  1. Create your Hugging Face token here.
  2. Request access to the gated model, such as meta-llama/Llama-3.2-1B-Instruct.
  3. Set your token as an environment variable by running:
    export HF_TOKEN=
    
openllm serve llama3.2:1b

The server will be accessible at http://localhost:3000, providing OpenAI-compatible APIs for interaction. You can call the endpoints with different frameworks and tools that support OpenAI-compatible APIs. Typically, you may need to specify the following:

  • The API host address: By default, the LLM is hosted at http://localhost:3000.
  • The model name: The name can be different depending on the tool you use.
  • The API key: The API key used for client authentication. This is optional.

Here are some examples:

OpenAI Python client
from openai import OpenAI

client = OpenAI(base_url='http://localhost:3000/v1', api_key='na')

# Use the following func to get the available models
# model_list = client.models.list()
# print(model_list)

chat_completion = client.chat.completions.create(
    model="meta-llama/Llama-3.2-1B-Instruct",
    messages=[
        {
            "role": "user",
            "content": "Explain superconductors like I'm five years old"
        }
    ],
    stream=True,
)
for chunk in chat_completion:
    print(chunk.choices[0].delta.content or "", end="")
LlamaIndex
from llama_index.llms.openai import OpenAI

llm = OpenAI(api_bese="http://localhost:3000/v1", model="meta-llama/Llama-3.2-1B-Instruct", api_key="dummy")
...

Chat UI

OpenLLM provides a chat UI at the /chat endpoint for the launched LLM server at http://localhost:3000/chat.

openllm_ui

Chat with a model in the CLI

To start a chat conversation in the CLI, use the openllm run command and specify the model version.

openllm run llama3:8b

Model repository

A model repository in OpenLLM represents a catalog of available LLMs that you can run. OpenLLM provides a default model repository that includes the latest open-source LLMs like Llama 3, Mistral, and Qwen2, hosted at this GitHub repository. To see all available models from the default and any added repository, use:

openllm model list

To ensure your local list of models is synchronized with the latest updates from all connected repositories, run:

openllm repo update

To review a model’s information, run:

openllm model get llama3.2:1b

Add a model to the default model repository

You can contribute to the default model repository by adding new models that others can use. This involves creating and submitting a Bento of the LLM. For more information, check out this example pull request.

Set up a custom repository

You can add your own repository to OpenLLM with custom models. To do so, follow the format in the default OpenLLM model repository with a bentos directory to store custom LLMs. You need to build your Bentos with BentoML and submit them to your model repository.

First, prepare your custom models in a bentos directory following the guidelines provided by BentoML to build Bentos. Check out the default model repository for an example and read the Developer Guide for details.

Then, register your custom model repository with OpenLLM:

openllm repo add <repo-name> <repo-url>

Note: Currently, OpenLLM only supports adding public repositories.

Deploy to BentoCloud

OpenLLM supports LLM cloud deployment via BentoML, the unified model serving framework, and BentoCloud, an AI inference platform for enterprise AI teams. BentoCloud provides fully-managed infrastructure optimized for LLM inference with autoscaling, model orchestration, observability, and many more, allowing you to run any AI model in the cloud.

Sign up for BentoCloud for free and log in. Then, run openllm deploy to deploy a model to BentoCloud:

openllm deploy llama3.2:1b --env HF_TOKEN

[!NOTE] If you are deploying a gated model, make sure to set HF_TOKEN in enviroment variables.

Once the deployment is complete, you can run model inf

readme truncated — read the full docs on github

Frequently asked questions

Is OpenLLM free to use?

OpenLLM is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does OpenLLM do?

Run any open-source LLMs, such as DeepSeek and Llama, as OpenAI compatible API endpoint in the cloud.

What is OpenLLM written in?

OpenLLM is primarily written in Python. Its source is publicly available at https://github.com/bentoml/OpenLLM, and it has 12,535 GitHub stars.