How to run CAMEL-AI agents with a self-hosted model on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install CAMEL the way the official README prints, serve a model on that machine, and point ChatAgent at ModelPlatformType.VLLM or ModelPlatformType.OLLAMA the way the model examples print. Copy assistant_response.msg.content before you destroy the instance, because destroying the instance deletes its disk.

An agent can rent the GPU and run this library on it. The agent pages are GPU compute for AI agents and the agent integration guide. Those pages are how an agent discovers a GPU and runs work on it. This page is the CAMEL install. A Python agent library whose CodeAgent can take TransformersModel or an OpenAI-compatible server is How to run smolagents with a self-hosted model on a cloud GPU. A crew whose LLM class takes base_url for Ollama or an OpenAI-compatible server is How to run CrewAI with a self-hosted model on a cloud GPU. A graph runtime whose overview example does not name a model is How to run LangGraph agents with a self-hosted model on a cloud GPU. An AgentChat library whose Ollama example sets model to llama3.2 is How to run AutoGen agents with a self-hosted model on a cloud GPU. A typed agent whose vLLM example sets base_url to http://localhost:8000/v1 is How to run Pydantic AI agents with a self-hosted model on a cloud GPU. A framework whose README sets Ollama and HuggingFaceEmbedding is How to build LlamaIndex agents with a self-hosted model on a cloud GPU. A browser agent whose models page sets base_url to http://localhost:11434/v1 is How to run browser-use with a self-hosted model on a cloud GPU. A pipeline whose OllamaChatGenerator sets url to http://localhost:11434 is How to run Haystack agents with a self-hosted model on a cloud GPU. A program whose language-models page sets dspy.LM to ollama_chat/llama3.2:1b is How to run DSPy with a self-hosted model on a cloud GPU. An agent whose Ollama example sets id to llama3.1:8b is How to run Agno agents with a self-hosted model on a cloud GPU. A stateful CLI whose connect help sets --base-url to http://localhost:8000/v1 for openai-compatible is How to run Letta agents with a self-hosted model on a cloud GPU. A TypeScript agent whose local-models section sets url on the model object is How to run Mastra agents with a self-hosted model on a cloud GPU. A general vLLM install is How to serve an OpenAI-compatible API with vLLM on a cloud GPU. A general SGLang install is How to run SGLang on a cloud GPU. Ollama’s install and port 11434 are How to run Ollama on a cloud GPU. An embedding server is How to serve embeddings and rerankers with Text Embeddings Inference on a cloud GPU. CloudGPU’s hosted gateway is a different base URL: How do I use an OpenAI-compatible API for open models?. How published weight sizes are read: How much VRAM do I need to run an LLM?. The tunnel is How to use SSH port forwarding on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. If the process raises no kernel image on an RTX 5090: How to fix CUDA no kernel image on an RTX 5090. A Docker Compose app whose self-host page opens http://localhost/install is How to run Dify with a self-hosted model on a cloud GPU. A canvas whose ChatOllama page names a base URL is How to run Flowise with a self-hosted model on a cloud GPU. A flow editor whose Ollama component defaults the base URL to http://127.0.0.1:11434 is How to run Langflow with a self-hosted model on a cloud GPU.

The LICENSE file begins with “Apache License Version 2.0, January 2004”, its appendix copyright line is “Copyright 2023 @ CAMEL-AI.org”, and the GitHub license field on 2026-11-14 was Apache-2.0.

The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked. The README quickstart names a closed-model id. This page does not copy that id. The vLLM example’s model id is not copied. This page substitutes unsloth/Llama-3.1-8B-Instruct. The upstream example does not print that id. The installation page extras list names other providers. This page does not list those names.

What the docs print about memory

The README, the installation page, the vLLM example, the Ollama example, and the OpenAI-compatible example print no GPU GB figure. token_limit=4096 in those examples is not vram_gb. The vLLM class docstring default of 180 seconds is the API-call timeout (MODEL_TIMEOUT), not a startup time, and not vram_gb. This page substitutes unsloth/Llama-3.1-8B-Instruct. The upstream example does not print that id. That card README does not print an inference GPU GB figure. Its model-information table prints context length 128k on the Llama 3.1 8B row. This page does not treat 128k as vram_gb. Its Hardware section prints a training-hardware line. This page does not copy that line and does not treat it as inference vram_gb. On 2026-11-14 the model API listed safetensors.parameters.BF16 8030261248 and usedStorage 16077766296. This page does not treat those numbers, or 8B in the id, as vram_gb. How much VRAM do I need to run an LLM? states about 2 bytes per parameter at FP16. This page does not turn that sentence into a catalog row and does not mark a catalog row as enough.

GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-14T08:11:19.550Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-14T08:11:20.588Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. Every catalog row has min_gpu_count 1. Which listing you can start is on Deploy.

The catalog template list had no CAMEL template. It did have Ollama templates (jupyterlab-ollama, ollama-qwen3, ollama). Those templates are a different install. This page does not treat them as CAMEL.

Catalog name vram_gb
RTX 2080 8
RTX 3080 10
RTX 2080 Ti 11
RTX 3080 Ti 12
V100 16G 16
A30 24
RTX 3090 24
RTX 4090 24
RTX 4090D 24
RTX 4080 SUPER 32G 32
RTX 5090 32
RTX 5090D 32
V100 32G 32
A100 40G 40
A800 40G 40
A40 48
RTX 4090 48G 48
RTX 4090D 48G 48
RTX A6000 48
NVIDIA RTX PRO 5000 72G 72
RTX PRO 5000 72G 72
A100 80G 80
A800 80G 80
H800 80
RTX 6000D 83
H20 96G 96
RTX PRO 6000 96G 96
RTX PRO 6000 Max-Q 96
H20-3e 141G 141

Install

The README quick start and the installation page both print:

pip install camel-ai

The installation page also prints pip install 'camel-ai[all]' and says to check with pip show camel-ai. Its Python note says Python >=3.10 and <=3.14. pyproject.toml says requires-python = ">=3.10,<3.15" and license = "Apache-2.0". Those Python bounds are not the same string. This page does not decide which versions a resolver accepts.

pyproject.toml on main sets version = "0.2.91a7". Main is commit 0366b64bf3609c76f50e396715aab73ba58a930c, committed 2026-11-09T10:25:05Z. Tag v0.2.91a7 is commit e74ee50679de3f7a67e6626d20bf29edb27fd771, committed 2026-09-03T05:27:14Z. Those are not the same commit. The README, pyproject.toml, LICENSE, the installation page, and the three model examples below are the same blob on both. PyPI camel-ai info.version on 2026-11-14 was 0.2.90, requires_python <3.15,>=3.10, info.license empty, uploaded 2026-03-22T08:37:02.259084Z. Tag v0.2.90 points at commit deb286f36702ab15a2cb890c6e223a79e4ce4284, tagger date 2026-03-22T08:35:56Z, and that tag pyproject.toml sets version = "0.2.90". pip install camel-ai without a pre-release flag resolves to 0.2.90, not 0.2.91a7. PyPI also has 0.2.91a7, uploaded 2026-09-03T05:28:31.749568Z. This page did not install either release.

ChatAgent

The README quickstart builds a ChatAgent with a platform enum and a closed-model id. This page does not copy that constructor. The vLLM example is a ChatAgent. The model id in examples/models/vllm_model_example.py is not copied. The block below keeps the rest of that example and substitutes unsloth/Llama-3.1-8B-Instruct. The upstream example does not print that id.

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType

# Substituted on this page. The upstream example does not print this id.
vllm_model = ModelFactory.create(
    model_platform=ModelPlatformType.VLLM,
    model_type="unsloth/Llama-3.1-8B-Instruct",
    model_config_dict={"temperature": 0.0},
)

assistant_sys_msg = "You are a helpful assistant."

agent = ChatAgent(assistant_sys_msg, model=vllm_model, token_limit=4096)

user_msg = "Say hi to CAMEL AI"

assistant_response = agent.step(user_msg)
print(assistant_response.msg.content)

The comment under that example says the server started on http://localhost:8000/v1 for that model. The sample reply in the comment names the model vendor. This page does not copy that sentence. This page did not run agent.step.

vLLM, Ollama, and an OpenAI-compatible server

camel/models/vllm_model.py on main, which matches tag v0.2.91a7, says if url is not provided then http://localhost:8000/v1 will be used. The constructor sets self._url from url or VLLM_BASE_URL. If that is still empty it calls _start_server, which runs this argument list and then sets the URL:

["vllm", "server", "--port", "8000"]
self._url = "http://localhost:8000/v1"

That argument list is not the same string as vllm serve on How to serve an OpenAI-compatible API with vLLM on a cloud GPU. The list does not include a model id. The vLLM example does not pass url. This page did not run the subprocess. The file blob at tag v0.2.90 is not the same blob. The docstring URL, VLLM_BASE_URL, and that argument list are on the 0.2.90 copy as well. This page did not diff the rest of the file. The constructor passes api_key="Not_Used". The docstring says a missing token counter falls back to a closed-model id. This page does not copy that id.

The block below is added on this page so the server model is the substituted id. It uses port 8000, which is the port in that list. It does not pass --served-model-name. The vLLM page on this site says that without that flag the name is the model argument. model_type above is that same id. It does not pass --max-model-len. The card prints context length 128k on the 8B row. This page does not treat 128k as vram_gb. The vLLM page says to lower --max-model-len if the KV cache does not fit. This page does not pick a value. This page did not run the command.

# Added on this page. _start_server does not pass a model id.
# This id is this page's substitution. The upstream example does not print it.
vllm serve unsloth/Llama-3.1-8B-Instruct --port 8000

The Ollama example sets model_type to llama3.2. The first agent, copied:

ollama_model = ModelFactory.create(
    model_platform=ModelPlatformType.OLLAMA,
    model_type="llama3.2",
    model_config_dict={"temperature": 0.4},
)

assistant_sys_msg = "You are a helpful assistant."

agent = ChatAgent(assistant_sys_msg, model=ollama_model, token_limit=4096)

The comment under that call says the server started on http://localhost:11434/v1 for a mistral model. llama3.2 and mistral are not the same string. camel/models/ollama_model.py is the same blob on tag v0.2.90, tag v0.2.91a7, and main. It sets self._url from url or OLLAMA_BASE_URL, and if that is empty it runs:

["ollama", "server", "--port", "11434"]
self._url = "http://localhost:11434/v1"

The constructor uses api_key or "Not_Provided". A later block in the same example sets response_format and comments that Ollama version 0.5.1 or newer is what that block uses for structured output. That is a version comment, not a startup time. The files this page read do not print a Hugging Face id for llama3.2. This page does not add hf download for that tag. How to run Ollama on a cloud GPU is the Ollama install.

The OpenAI-compatible example uses ModelPlatformType.OPENAI_COMPATIBLE_MODEL. Copied:

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="qwen-plus",
    api_key="sk-xxxx",
    url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    model_config_dict={"temperature": 0.4},
)

That url is the host the file prints. It is not localhost, and it is not port 8000 or port 11434. qwen-plus is not a Hugging Face repository id in that file. This page does not add hf download for it. The vLLM example model id is a Hugging Face id. This page does not copy that id. It substitutes unsloth/Llama-3.1-8B-Instruct. The CAMEL files this page read do not print hf download. How to download a Hugging Face model prints pip install -U "huggingface_hub" and hf download. The block below is added on this page. This page did not download the repository.

# Added on this page. This id is this page's substitution. The upstream example does not print it.
pip install -U "huggingface_hub"
hf download unsloth/Llama-3.1-8B-Instruct

On 2026-11-14, GET https://huggingface.co/api/models/unsloth/Llama-3.1-8B-Instruct reported gated false, cardData.license llama3.1, pipeline_tag text-generation, lastModified 2025-05-09T19:32:57.000Z, and sha 4699cc75b550f9c6f3173fb80f4703b62d946aa5. safetensors.parameters listed BF16 8030261248. usedStorage was 16077766296. The card YAML still has extra_gated fields. A request for model-00001-of-00004.safetensors without a token returned HTTP 302 and then HTTP 206. The card README prints no inference GPU GB figure. Its Hardware section prints a training-hardware line. This page does not copy that line and does not treat it as inference vram_gb. The card’s transformers example names a different repository id. This page does not copy that id. This page does not treat 8B in the id, the parameter count, or usedStorage as vram_gb.

The files this page read do not print an SSH command. For a server on port 8000 or port 11434, the tunnel is How to use SSH port forwarding on a cloud GPU.

When it fails

CUDA out of memory. The CAMEL examples this page read print no GPU GB figure. If the process raises CUDA out of memory, use how to fix CUDA out of memory on a cloud GPU. This page does not pick a smaller model id for you.

“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. The README, pyproject.toml, and the vLLM example do not name compute capability 12.0. The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. This page did not install a torch wheel and did not re-test this library on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.

What to copy off, then destroy

The examples print assistant_response.msg.content. Copy that text before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.

The pricing page FAQ states the billing rule in these words:

Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.

Prices are not copied here.

Frequently asked questions

What memory figure do the CAMEL docs print?

The README, the installation page, the vLLM example, the Ollama example, and the OpenAI-compatible example print no GPU GB figure. token_limit 4096 is not vram_gb. This page substitutes unsloth/Llama-3.1-8B-Instruct. The upstream example does not print that id. That card README does not print an inference GPU GB figure. Its model-information table prints context length 128k on the Llama 3.1 8B row. This page does not treat 128k as vram_gb. Its Hardware section prints a training-hardware line. This page does not copy that line. That line is not vram_gb. The model API safetensors parameters field lists BF16 8030261248. usedStorage was 16077766296. This page does not treat those numbers, or 8B in the id, as vram_gb. https://cloudgpu.app/guides/how-much-vram-do-i-need-to-run-an-llm states about 2 bytes per parameter at FP16. This page does not turn that sentence into a catalog row. This page does not mark a catalog row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which install line and class do the docs print?

The README and the installation page print pip install camel-ai. pyproject.toml on main sets version 0.2.91a7, requires-python >=3.10,<3.15, and license Apache-2.0. The installation page says Python >=3.10 and <=3.14. Those bounds are not the same string. PyPI camel-ai info.version on 2026-11-14 was 0.2.90, requires_python <3.15,>=3.10, info.license empty. pip install camel-ai without a pre-release flag resolves to 0.2.90, not 0.2.91a7. The vLLM example class is ChatAgent. The README quickstart sets a closed-model id. This page does not copy that id. The vLLM example names a model id. This page does not copy that id. It substitutes unsloth/Llama-3.1-8B-Instruct. This page did not install the package.

How do the docs point ChatAgent at vLLM, Ollama, or an OpenAI-compatible server?

The vLLM example sets ModelPlatformType.VLLM. This page substitutes model_type unsloth/Llama-3.1-8B-Instruct. The upstream example does not print that id. The class uses http://localhost:8000/v1 when url and VLLM_BASE_URL are empty, and _start_server runs vllm server --port 8000. That list does not include a model id. That list is not the string vllm serve. This page adds vllm serve unsloth/Llama-3.1-8B-Instruct --port 8000. That command does not pass max-model-len. The card prints context length 128k on the 8B row. This page does not treat 128k as vram_gb and does not pick a max-model-len. That command was not run. The Ollama example sets model_type llama3.2. Its comment names a mistral model and http://localhost:11434/v1. Those model strings are not the same. The class runs ollama server --port 11434 when url and OLLAMA_BASE_URL are empty. The OpenAI-compatible example sets ModelPlatformType.OPENAI_COMPATIBLE_MODEL, model_type qwen-plus, and a url that is not localhost. The files do not print an SSH command.

What license does the file print?

The LICENSE file begins with Apache License Version 2.0, January 2004. Its appendix copyright line is Copyright 2023 @ CAMEL-AI.org. The GitHub license field on 2026-11-14 was Apache-2.0. pyproject.toml sets license Apache-2.0. PyPI info.license for camel-ai was empty on 2026-11-14. The unsloth/Llama-3.1-8B-Instruct card license field was llama3.1. That license text is not a CloudGPU price.

Sources (read 2026-11-14, Asia/Shanghai)

  • camel-ai/camel README (pip install camel-ai, ChatAgent quickstart): commit 0366b64bf3609c76f50e396715aab73ba58a930c, committed 2026-11-09T10:25:05Z. GitHub license field Apache-2.0. pushed_at 2026-11-09T10:25:06Z. The quickstart model id is not copied. LICENSE begins with Apache License Version 2.0, January 2004. The appendix copyright line is Copyright 2023 @ CAMEL-AI.org. pyproject.toml version 0.2.91a7, requires-python >=3.10,<3.15, license Apache-2.0
  • Tag v0.2.91a7, commit e74ee50679de3f7a67e6626d20bf29edb27fd771, committed 2026-09-03T05:27:14Z. README, pyproject.toml, LICENSE, docs/get_started/installation.md, the three model examples, and camel/models/ollama_model.py match main. camel/models/vllm_model.py also matches main. docs/key_modules/models.md does not. This page does not cite that file. PyPI 0.2.91a7 uploaded 2026-09-03T05:28:31.749568Z
  • Tag v0.2.90, commit deb286f36702ab15a2cb890c6e223a79e4ce4284, tagger date 2026-03-22T08:35:56Z. pyproject.toml version 0.2.90. PyPI info.version 0.2.90, uploaded 2026-03-22T08:37:02.259084Z, requires_python <3.15,>=3.10, info.license empty. The three model examples, the installation page, LICENSE, and camel/models/ollama_model.py match main. camel/models/vllm_model.py does not. The docstring URL, VLLM_BASE_URL, and the vllm server --port 8000 list are on that copy. This page did not diff the rest of the file. pip install camel-ai without a pre-release flag resolves to 0.2.90
  • docs/get_started/installation.md (pip install camel-ai, pip install 'camel-ai[all]', pip show camel-ai, Python note >=3.10 and <=3.14): same blob on tag v0.2.90, tag v0.2.91a7, and main. The extras list names other providers. This page does not list them
  • examples/models/vllm_model_example.py (ModelPlatformType.VLLM, ChatAgent, token_limit=4096, comment URL http://localhost:8000/v1): https://github.com/camel-ai/camel/blob/0366b64bf3609c76f50e396715aab73ba58a930c/examples/models/vllm_model_example.py same blob on tag v0.2.90, tag v0.2.91a7, and main. The model id in that file is not copied. This page substitutes unsloth/Llama-3.1-8B-Instruct. The sample reply is not copied
  • camel/models/vllm_model.py on main and tag v0.2.91a7 (docstring http://localhost:8000/v1, VLLM_BASE_URL, subprocess vllm, server, --port, 8000, api_key="Not_Used", API-call timeout fallback 180 seconds). That 180 is not a startup time. The default token counter names a closed-model id. This page does not copy it
  • examples/models/ollama_model_example.py (ModelPlatformType.OLLAMA, llama3.2, comment URL http://localhost:11434/v1 for a mistral model, Ollama version comment >= 0.5.1): same blob on the three refs above. Those model strings are not the same
  • camel/models/ollama_model.py (OLLAMA_BASE_URL, subprocess ollama, server, --port, 11434, http://localhost:11434/v1, api_key or "Not_Provided"): same blob on the three refs above
  • examples/models/openai_compatibility_model_examples/qwen.py (ModelPlatformType.OPENAI_COMPATIBLE_MODEL, qwen-plus, api_key="sk-xxxx", url="https://dashscope.aliyuncs.com/compatible-mode/v1"): same blob on the three refs above. That url is not localhost
  • Hugging Face model API unsloth/Llama-3.1-8B-Instruct: gated false, cardData.license llama3.1, pipeline_tag text-generation, lastModified 2025-05-09T19:32:57.000Z, sha 4699cc75b550f9c6f3173fb80f4703b62d946aa5. safetensors.parameters.BF16 8030261248. usedStorage 16077766296. The card YAML still has extra_gated fields. A request for model-00001-of-00004.safetensors without a token returned HTTP 302 and then HTTP 206. The card README prints no inference GPU GB figure. The model-information table prints context length 128k on the 8B row. This page does not treat 128k, 8B, the parameter count, or usedStorage as vram_gb. The Hardware training line is not copied. The card’s transformers example names a different repository id. This page does not copy that id. hf download and vllm serve unsloth/Llama-3.1-8B-Instruct --port 8000 are added on this page and were not run
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-14T08:11:19.550Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-14T08:11:20.588Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no CAMEL template

Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.

Last updated: 2026-11-14 (Asia/Shanghai).