How to run CrewAI with a self-hosted model on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install CrewAI the way the official installation page prints, serve a model on that machine, and point the LLM class at the Ollama base URL or the OpenAI-compatible base URL those docs print. Copy the printed crew output and any file a task wrote 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 CrewAI 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 local agent UI whose Docker command publishes port 3000 is How to run OpenHands 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. A coding-agent server whose card prints --tool-call-parser qwen3_coder is How to serve Qwen3-Coder for coding agents 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 ChatAgent whose vLLM example sets ModelPlatformType.VLLM is How to run CAMEL-AI 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. A TurboMind server whose lmdeploy serve api_server listens on port 23333 is How to serve LLMs with LMDeploy 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 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. 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 Ollama page sets base_url to http://localhost:11434/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 pipeline whose Ollama page sets url to http://localhost:11434, and whose vLLM page defaults api_base_url to http://localhost:8000/v1, 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, and whose GPU-server example sets api_base to http://localhost:7501/v1, 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, and whose VLLM class defaults base_url to http://localhost:8000/v1/, is How to run Agno agents with a self-hosted model on a cloud GPU. 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 CrewAI LICENSE file begins with “MIT License”, its copyright notice names 2025 crewAI, Inc., and the GitHub license field on 2026-11-14 was MIT.

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 and the LLMs page also name other providers. This page does not list those names.

What the docs print about memory

The README, the installation page, the LLMs page, and the LLM connections page print no GPU GB figure for the Ollama examples. One section of the LLMs page names a large model and a GPU count. This page does not copy that sentence and does not treat it as vram_gb. This page 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-14T04:12:38.192Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-14T04:12:39.202Z) 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 CrewAI template. It did have Ollama templates (jupyterlab-ollama, ollama-qwen3, ollama). Those templates are a different install. This page does not treat them as CrewAI.

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 and the installation page say CrewAI requires Python 3.10 or newer and below 3.14. The check they print:

python3 --version

The Linux install of uv, copied from the README. The same page also prints a wget line and a Windows line. This page keeps the curl line:

curl -LsSf https://astral.sh/uv/install.sh | sh

Then the CLI install, copied:

uv tool install crewai

If that command prints a PATH warning, the README says to run uv tool update-shell. Verify with uv tool list. The sample output on the installation page prints crewai v0.102.0. lib/crewai/src/crewai/__init__.py at the main commit below says __version__ = "1.15.41". Tag 1.15.41 is commit 878d6c5c801ae4053bd80d77ef303f48f95aa493, tagged 2026-11-12T18:42:03Z, and that commit’s __init__.py also says 1.15.41. Main is commit d7dfa0ef5ade793bd48ff7357c6eb45a45294371, committed 2026-11-13T18:43:20Z. Those are not the same commit. PyPI info.version for crewai on 2026-11-14 was 1.15.41, requires_python 3.10 or newer and below 3.14, uploaded 2026-11-12T18:42:55.673371Z. The unpinned uv tool install crewai installs the PyPI release. This page did not install it. The installation page also says CrewAI 0.175.0 requires openai >= 1.13.3. That version string is not 1.15.41.

The same install lines, including uv tool install crewai, the Python range, custom_openai=True, ollama/llama3:70b with http://localhost:11434, and ollama/llama3.2 with that base URL, are also in the tag commit. This page did not diff every line of the two commits.

Agents, tasks, and a crew

The installation page says crewai create crew creates a JSON-first project. Agents live in agents/*.jsonc, tasks and crew-level settings live in crew.jsonc, and crewai run loads that JSON. The README example, copied:

crewai create crew latest-ai-development
cd latest_ai_development

The folder name in the second line uses an underscore. This page does not change it. Then the installation page prints crewai install and crewai run. The README’s example llm value in those JSON files is a closed-model id. This page does not copy it. The reporting task in that crew.jsonc sets output_file to output/report.md.

The agents page also shows a direct Agent class. The basic research example, copied in the parts this page keeps. It does not set llm:

research_agent = Agent(
    role="Research Analyst",
    goal="Find and summarize information about specific topics",
    backstory="You are an experienced researcher with attention to detail",
    tools=[SerperDevTool()],
    verbose=True
)

The longer example on that page sets llm to a closed-model id. This page does not copy that id. The tasks page’s direct-code example, copied in the parts this page keeps. reporting_task sets output_file="report.md":

research_task = Task(
    description="Conduct a thorough research about AI Agents.",
    expected_output="A list with 10 bullet points of the most relevant information about AI Agents",
    agent=researcher
)

reporting_task = Task(
    description="Review the context you got and expand each topic into a full section for a report.",
    expected_output="A fully fledge reports with the mains topics, each with a full section of information.",
    agent=reporting_analyst,
    markdown=True,
    output_file="report.md"
)

The descriptions above are shortened from the page. The page’s own strings are longer and include the year 2025. The crews page then runs the crew, copied in the parts this page keeps:

crew = Crew(
    agents=[research_agent, writer_agent],
    tasks=[research_task, write_article_task],
    verbose=True
)

crew_output = crew.kickoff()
print(f"Raw Output: {crew_output.raw}")

Crew(output_log_file=True) writes logs.txt. This page did not run kickoff.

Ollama and an OpenAI-compatible server

The LLMs page’s Ollama section says to install Ollama, run ollama run llama3, then set model to ollama/llama3:70b. Those are not the same tag. The Ollama library page for llama3, fetched 2026-11-14, prints ollama run llama3 and, as a separate instruct example, ollama run llama3:70b. Its model table lists llama3:latest and llama3:8b at 4.7GB and llama3:70b at 40GB. The readme on that page says the family is available in 8B and 70B parameter sizes. Those sizes are the library page’s size column. This page does not treat them as vram_gb and does not mark a catalog row as enough. The command below is added on this page, copied from that library page, before the constructor, so the downloaded tag is the tag the constructor asks for. This page did not run it.

# Added on this page. The CrewAI LLMs page runs llama3 and then sets model to ollama/llama3:70b.
ollama run llama3:70b

The constructor, copied:

llm = LLM(
    model="ollama/llama3:70b",
    base_url="http://localhost:11434"
)

That section says this provider uses LiteLLM and prints:

uv add 'crewai[litellm]'

The LLM connections page prints ollama pull llama3.2 and:

agent = Agent(
    role='Local AI Expert',
    goal='Process information using a local model',
    backstory="An AI assistant running on local hardware.",
    llm=LLM(model="ollama/llama3.2", base_url="http://localhost:11434")
)

Neither CrewAI Ollama block prints a GPU GB figure. Those tags are Ollama tags. The files this page read do not print a Hugging Face repository id for them, and they do not print hf download. This page does not add one.

The same LLMs page’s OpenAI-compatible block sets custom_openai=True and base_url="https://your-gateway.example.com/v1". The example model on that block is a closed-model id. This page does not copy it. The block’s note prints:

uv add "crewai[openai]"

The connections page also sets OPENAI_API_BASE to https://api.your-provider.com/v1 and base_url to that same placeholder. A second example on that tab uses a closed-model id and a hosted URL. This page does not copy them. One local example on the LLMs page sets base_url to http://localhost:8000/v1. The CrewAI files this page read do not print a vLLM serve command. How to serve an OpenAI-compatible API with vLLM on a cloud GPU is the server install. How to run Ollama on a cloud GPU is the Ollama install. This page does not add a port those CrewAI files do not print.

For a server you start on the instance, the SSH tunnel is How to use SSH port forwarding on a cloud GPU. The Ollama blocks print port 11434. The placeholder OpenAI-compatible URL does not print a numeric port.

When it fails

CUDA out of memory. The CrewAI files this page read print no GPU GB figure for the Ollama examples. 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 installation page does 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

crew.kickoff() returns crew_output.raw in the process that called it. The direct-code reporting task sets output_file="report.md". The README’s crew.jsonc example sets output_file to output/report.md. Crew(output_log_file=True) writes logs.txt. Copy those files, and the printed raw output, 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 CrewAI docs print?

The README, the installation page, the LLMs page, and the LLM connections page print no GPU GB figure for the Ollama examples. One section of the LLMs page names a large model and a GPU count. This page does not copy that sentence and does not treat it as vram_gb. This page does not mark a catalog row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which install lines and classes do the docs print?

The installation page requires Python 3.10 or newer and below 3.14 and prints uv tool install crewai. The sample uv tool list output on that page prints crewai v0.102.0. lib/crewai/src/crewai/__init__.py at the main commit says 1.15.41. PyPI info.version on 2026-11-14 was 1.15.41. Tag 1.15.41 is an earlier commit than main. This page did not install the package. Agent takes role, goal, and backstory. Task takes description, expected_output, and agent. Crew takes agents and tasks, and kickoff runs it. The direct-code Agent example sets llm to a closed-model id. This page does not copy that id.

How do the docs point the LLM at a local or OpenAI-compatible server?

The Ollama section of the LLMs page sets model to ollama/llama3:70b and base_url to http://localhost:11434, and prints uv add crewai[litellm]. That section also prints ollama run llama3. Those tags are not the same. The Ollama library page prints ollama run llama3:70b as a separate command, and this page adds that command before the constructor. The LLM connections page sets model to ollama/llama3.2 with the same base_url, and prints ollama pull llama3.2. That pair uses one tag. The OpenAI-compatible block sets custom_openai to True and base_url to a placeholder. Its example model id is not copied on this page. The same page prints uv add crewai[openai]. One local example sets base_url to http://localhost:8000/v1. The CrewAI files do not print a vLLM serve command.

What license does the file print?

The LICENSE file begins with MIT License, its copyright notice names 2025 crewAI, Inc., and the GitHub license field on 2026-11-14 was MIT.

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

  • crewAIInc/crewAI README (Python 3.10 or newer and below 3.14, curl -LsSf https://astral.sh/uv/install.sh | sh, uv tool install crewai, crewai create crew latest-ai-development, cd latest_ai_development, JSON llm id not copied, output/report.md): commit d7dfa0ef5ade793bd48ff7357c6eb45a45294371, committed 2026-11-13T18:43:20Z. GitHub license field MIT. pushed_at 2026-11-13T18:43:21Z. LICENSE copyright notice names 2025 crewAI, Inc. The README also names other providers. This page does not list them
  • Tag 1.15.41, commit 878d6c5c801ae4053bd80d77ef303f48f95aa493, tagged 2026-11-12T18:42:03Z. __version__ is also 1.15.41. The install line, the Python range, custom_openai=True, and the two Ollama base URL lines checked on this tag match the lines quoted above. This page did not diff every file. PyPI crewai info.version 1.15.41, uploaded 2026-11-12T18:42:55.673371Z, requires_python 3.10 or newer and below 3.14
  • docs/edge/en/installation.mdx (same Python range, uv tool install crewai, sample uv tool list output crewai v0.102.0, the sentence that names CrewAI 0.175.0): main commit above
  • docs/edge/en/concepts/agents.mdx, tasks.mdx, and crews.mdx (Agent role, goal, backstory; Task description, expected_output, agent, output_file="report.md"; Crew.kickoff, output_log_file=True writes logs.txt): main commit. The comprehensive Agent example’s llm id is not copied
  • docs/edge/en/concepts/llms.mdx (ollama run llama3, then ollama/llama3:70b, http://localhost:11434, uv add 'crewai[litellm]', custom_openai=True, placeholder base URL, uv add "crewai[openai]", one local example at http://localhost:8000/v1): main commit. The run tag and the constructor tag are not the same. The OpenAI-compatible example model id is not copied. A GPU-count sentence on that page is not copied
  • Ollama library page for llama3 (ollama run llama3, separate instruct example ollama run llama3:70b, table sizes 4.7GB for llama3:latest and llama3:8b, 40GB for llama3:70b, readme says 8B and 70B parameter sizes): https://ollama.com/library/llama3, fetched 2026-11-14. Those sizes are the library page’s size column, not vram_gb. This page adds ollama run llama3:70b before the constructor and did not run it
  • docs/edge/en/learn/llm-connections.mdx (ollama pull llama3.2, ollama/llama3.2, OPENAI_API_BASE): main commit. The hosted example model id on that page is not copied
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-14T04:12:38.192Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-14T04:12:39.202Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no CrewAI 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).