ramalama

GitHub
2.7k 322 简单 1 次阅读 昨天MIT图像语言模型开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

RamaLama 是一款开源开发者工具,旨在让 AI 模型的本地部署与推理服务变得像管理容器一样简单直观。它核心解决了传统 AI 开发中环境配置繁琐、依赖冲突多以及硬件适配困难等痛点。用户无需在主机上手动安装复杂的驱动或库文件,RamaLama 能自动检测本地 GPU 类型,拉取包含所有必要依赖的加速容器镜像,从而实现“开箱即用”。

该工具特别适合希望快速将 AI 模型集成到工作流中的软件工程师、DevOps 人员及 AI 研究者。其独特亮点在于完全采用 OCI 容器标准,将 AI 模型视为类似 Docker 或 Podman 的镜像进行管理,支持从多种注册表源获取模型。此外,RamaLama 默认以无根(rootless)模式运行,提供沙箱隔离以确保安全,并在退出时自动清理临时数据,同时支持通过 REST API 或聊天界面与模型交互。无论是 macOS 还是 Linux 环境,它都能帮助开发者利用熟悉的容器命令轻松构建和生产级 AI 应用。

使用场景

某金融科技公司的后端工程师需要在本地开发环境中快速集成并测试一个最新的开源欺诈检测大模型,以便在明天晨会前验证其推理效果。

没有 ramalama 时

  • 环境配置繁琐:工程师需手动安装特定版本的 CUDA、PyTorch 及各类依赖库,极易与主机现有的 Python 环境发生冲突,导致“依赖地狱”。
  • 硬件适配困难:不同开发者的显卡型号各异,需反复查阅文档调整底层驱动和容器镜像,耗费大量时间在排查硬件兼容性上。
  • 安全隐患高:直接在宿主机运行未经验证的模型代码,缺乏隔离机制,一旦模型包含恶意逻辑可能危及整个开发机安全。
  • 清理工作耗时:测试结束后,残留的大型模型文件和临时缓存占用大量磁盘空间,手动清理过程容易遗漏或误删系统文件。

使用 ramalama 后

  • 一键自动适配:ramalama 自动识别本机 GPU 型号,直接拉取预配置好的加速容器镜像,无需人工干预任何底层依赖安装。
  • 统一操作体验:工程师像使用 Docker 拉取普通镜像一样,通过简单的 ramalama run 命令即可加载任意来源的 AI 模型,流程标准化。
  • 原生安全隔离:模型默认在无网络权限的无根(rootless)容器中运行,既保护了主机数据,又在退出时自动清除所有临时痕迹。
  • 即时交互验证:启动后立刻获得可用的 REST API 或聊天机器人接口,工程师可立即编写脚本进行欺诈场景的推理测试。

ramalama 通过将复杂的 AI 基础设施抽象为熟悉的容器操作,让开发者从繁琐的环境配置中解放出来,专注于核心业务逻辑的验证与创新。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需(支持 CPU 回退)
  • 支持多种硬件:NVIDIA GPU (CUDA), AMD GPU (ROCm/Vulkan), Apple Silicon (M1/M2/M3+ via MLX 或 Asahi), Intel ARC/iGPU, Ascend NPU, Moore Threads GPU
  • Windows 需 WSL2 后端
  • 具体显存大小未说明,取决于所选模型
内存

未说明

依赖
notes1. 核心机制:默认通过 Podman 或 Docker 拉取针对宿主机的特定加速容器镜像运行,无需在宿主机配置复杂的 AI 依赖。2. Windows 支持:必须安装 Docker Desktop 或 Podman Desktop 并启用 WSL2 后端。3. macOS 特殊模式:若使用 MLX 运行时优化,需添加 `--nocontainer` 参数且在宿主机安装 `mlx-lm`,此时不使用容器。4. 安全性:默认以 rootless 模式运行,网络隔离 (`--network=none`),模型以只读方式挂载。5. 存储:模型默认存储在 `~/.local/share/ramalama`,可能占用大量空间。
python3.10+
Podman 或 Docker (容器引擎)
llama.cpp 或 vLLM (容器内运行时)
mlx-lm (仅 macOS MLX 模式需要)
ramalama hero image

快速开始

未解决的问题 许可证 主要编程语言 PyPI版本 支持的Python版本 加入Discord 加入Matrix

RamaLama 致力于通过使用 OCI 容器,让 AI 的使用变得简单、直接且熟悉。

描述

RamaLama 是一款开源工具,它通过熟悉的容器化方式,简化了从任何来源进行推理的 AI 模型的本地使用和部署。它使工程师能够将以容器为中心的开发模式及其优势扩展到 AI 场景中。

RamaLama 无需配置宿主机系统,而是会拉取与宿主机上检测到的 GPU 相匹配的容器镜像,从而允许用户处理各种模型和平台。

  • 消除了用户为 AI 配置宿主机系统的复杂性。
  • 自动检测并拉取与宿主机 GPU 匹配的加速容器镜像,处理依赖关系和硬件优化。
  • RamaLama 支持多种AI 模型仓库,包括 OCI 容器注册表。
  • 模型的管理方式与 Podman 和 Docker 管理容器镜像的方式类似。
  • 使用常见的容器命令来操作 AI 模型。
  • 在无特权容器中安全地运行 AI 模型,将模型与底层宿主机隔离。
  • 默认不访问网络,并在应用程序退出时删除所有临时数据,从而确保数据安全。
  • 可以通过 REST API 或聊天机器人与模型交互。

安装

在 macOS 上安装(自包含安装程序)

下载包含 Python 和所有依赖项的自包含 macOS 安装程序:

  1. Releases 下载最新的 .pkg 安装包。
  2. 双击安装,或运行:sudo installer -pkg RamaLama-*-macOS-Installer.pkg -target /

详细说明请参阅 macOS 安装指南

在 Fedora 上安装

RamaLama 已在 Fedora 及更高版本中提供。要安装它,请运行:

sudo dnf install ramalama

Fedora Silverblue 和 Toolbox

Fedora Silverblue 和其他不可变发行版上,系统是只读的。您可以通过以下两种方式运行 RamaLama:

  • Toolbox:创建一个 Toolbox 容器,并在其内安装 RamaLama(pip install ramalamadnf install ramalama,如果可用)。使用宿主机上的 Podman(或 Docker),以便 RamaLama 能够启动模型容器;确保容器引擎已安装,并且 toolbox 能够访问宿主机的容器引擎(例如,通过绑定挂载套接字,或配置 toolbox 使用宿主机的 podman 命令)。
  • 宿主机安装或具有宿主机访问权限的 Toolbox:如果您的镜像支持该软件包,可通过 rpm-ostree install ramalama 在宿主机上安装 RamaLama;或者在 toolbox 中运行 RamaLama,确保 Podman/Docker 可用,并且模型存储位于可写位置(例如,您的主目录)。

模型存储默认位于 ~/.local/share/ramalama,在 Silverblue 上是可写的。

通过 PyPI 安装

RamaLama 可通过 PyPI 获取,地址为 https://pypi.org/project/ramalama

pip install ramalama

安装脚本(Linux 和 macOS)

通过运行以下命令安装 RamaLama:

curl -fsSL https://ramalama.ai/install.sh | bash

在 Windows 上安装

RamaLama 支持 Windows 平台,需配合 Docker Desktop 或 Podman Desktop 使用:

pip install ramalama

要求:

  • Python 3.10 或更高版本
  • Docker Desktop 或 Podman Desktop,且后端为 WSL2
  • 如需 GPU 支持,请参阅 WSL2 的 NVIDIA GPU 设置

注意:Windows 支持需要通过 Docker/Podman 运行容器。模型存储使用硬链接(无需管理员权限),若硬链接不可用,则回退到文件复制。

卸载

通过 pip 卸载

如果您使用 pip 安装了 RamaLama,可以使用以下命令卸载:

pip uninstall ramalama

在 Fedora 上卸载

如果您使用 DNF 安装了 RamaLama:

sudo dnf remove ramalama

在 macOS 上卸载(自包含安装程序)

若您通过 .pkg 安装程序安装了 RamaLama,可按如下步骤卸载:

# 删除可执行文件
sudo rm /usr/local/bin/ramalama

# 删除配置和数据文件
sudo rm -rf /usr/local/share/ramalama

# 删除手册页(可选)
sudo rm /usr/local/share/man/man1/ramalama*.1
sudo rm /usr/local/share/man/man5/ramalama*.5
sudo rm /usr/local/share/man/man7/ramalama*.7

# 删除 shell 补全文件(可选)
sudo rm /usr/local/share/bash-completion/completions/ramalama
sudo rm /usr/local/share/fish/vendor_completions.d/ramalama.fish
sudo rm /usr/local/share/zsh/site-functions/_ramalama

更多详情请参阅 macOS 安装指南

清除用户数据和配置

无论使用上述哪种方法卸载 RamaLama 后,您可能还需要清除已下载的模型和配置文件:

# 删除已下载的模型和数据(可能占用大量空间)
rm -rf -- "${XDG_DATA_HOME:-~/.local/share}/ramalama"

# 删除配置文件
rm -rf -- "${XDG_CONFIG_HOME:-~/.config}/ramalama"

如果您以 root 用户身份运行 RamaLama,还需删除:

sudo rm -rf /var/lib/ramalama


**注意:** 模型数据目录(默认为 `~/.local/share/ramalama`)可能会非常大,具体取决于您下载了多少模型。在执行上述命令之前,请确保您确实希望删除这些文件。

## 加速镜像

| 加速器                       | 镜像                      |
| :---------------------------------| :------------------------- |
|  GGML_VK_VISIBLE_DEVICES (或 CPU) | quay.io/ramalama/ramalama  |
|  HIP_VISIBLE_DEVICES              | quay.io/ramalama/rocm      |
|  CUDA_VISIBLE_DEVICES             | quay.io/ramalama/cuda      |
|  ASAHI_VISIBLE_DEVICES            | quay.io/ramalama/asahi     |
|  INTEL_VISIBLE_DEVICES            | quay.io/ramalama/intel-gpu |
|  ASCEND_VISIBLE_DEVICES           | quay.io/ramalama/cann      |
|  MUSA_VISIBLE_DEVICES             | quay.io/ramalama/musa      |

### GPU 支持检测
首次运行时,RamaLama 会检查您的系统是否支持 GPU;如果未检测到 GPU,则会回退到 CPU。RamaLama 使用 Podman 或 Docker 等容器引擎来拉取适合您系统配置的 OCI 镜像,其中包含运行 AI 模型所需的所有软件。

<details>
<summary>
RamaLama 如何选择合适的镜像?
</summary>
<br>

初始化完成后,RamaLama 会在基于 OCI 镜像的容器内运行 AI 模型。RamaLama 会根据您系统中检测到的 GPU 拉取特定的容器镜像,这些镜像与 RamaLama 的次版本号绑定。
- 例如,在 NVIDIA 系统上运行 RamaLama 1.2.3 时,会拉取 quay.io/ramalama/cuda:1.2。若要覆盖默认镜像,可以使用 `--image` 选项。

随后,RamaLama 会从模型仓库中拉取 AI 模型,并通过一条简单的命令启动聊天机器人或 REST API 服务。模型的处理方式与 Podman 和 Docker 处理容器镜像的方式类似。
</details>
<br>

## 硬件支持

| 硬件                           | 已启用                     |
| :--------------------------------- | :-------------------------: |
| CPU                                | &check;                     |
| Apple Silicon GPU(Linux / Asahi)  | &check;                     |
| Apple Silicon GPU(macOS)          | &check; llama.cpp 或 MLX    |
| Apple Silicon GPU(podman-machine) | &check;                     |
| Nvidia GPU(cuda)                  | &check; 请参阅下方说明      |
| AMD GPU(rocm、vulkan)             | &check;                     |
| Ascend NPU(Linux)                 | &check;                     |
| Intel ARC GPUs(Linux)             | &check; 请参阅下方说明      |
| Intel GPUs(vulkan / Linux)        | &check;                     |
| Moore Threads GPU(musa / Linux)   | &check; 请参阅下方说明      |
| Windows(配合 Docker/Podman)       | &check; 需要 WSL2       |

### Nvidia GPUs
在配备 NVIDIA GPU 的系统上,请参阅 [ramalama-cuda](docs/ramalama-cuda.7.md) 文档,了解正确的主机系统配置。

### Intel GPUs
以下 Intel GPU 将由 RamaLama 自动检测:

| GPU ID  | 描述                        |
| :------ | :--------------------------------- |
|`0xe20b` | Intel® Arc™ B580 Graphics          |
|`0xe20c` | Intel® Arc™ B570 Graphics          |
|`0x7d51` | Intel® Graphics - Arrow Lake-H     |
|`0x7dd5` | Intel® Graphics - Meteor Lake      |
|`0x7d55` | Intel® Arc™ Graphics - Meteor Lake |

更多信息请参阅 [Intel 硬件表](https://dgpu-docs.intel.com/devices/hardware-table.html)。
<br>
<br>

### Moore Threads GPUs
在配备 Moore Threads GPU 的系统上,请参阅 [ramalama-musa](docs/ramalama-musa.7.md) 文档,了解正确的主机系统配置。

### MLX 运行时(仅限 macOS)
MLX 运行时为 Apple Silicon Mac 提供优化的推理能力。MLX 需要:
- macOS 操作系统
- Apple Silicon 硬件(M1、M2、M3 或更高版本)
- 必须使用 `--nocontainer` 选项(不支持容器)
- 主机系统上已安装 `mlx-lm` uv 包作为 uv 工具

要在 MLX 上安装并运行 Phi-4,请使用 `uv`。如果尚未安装 `uv`,可以通过以下命令进行安装:`curl -LsSf https://astral.sh/uv/install.sh | sh`:
```bash
uv tool install mlx-lm
# 或升级到最新版本:
uv tool upgrade mlx-lm

ramalama --runtime=mlx serve hf://mlx-community/Unsloth-Phi-4-4bit

默认容器引擎

当同时安装了 Podman 和 Docker 时,RamaLama 默认使用 Podman。可通过设置环境变量 RAMALAMA_CONTAINER_ENGINE=docker 来覆盖此行为。如果两者均未安装,RamaLama 将尝试在本地系统上直接运行模型。

安全性

更安全地测试和运行您的模型

由于 RamaLama 默认使用 Podman 或 Docker 在无根容器中运行 AI 模型,这些容器可将 AI 模型与底层主机上的信息隔离开来。在 RamaLama 容器中,AI 模型以只读模式挂载为卷。

这使得运行模型的进程(llama.cpp 或 vLLM)与主机完全隔离。此外,由于 ramalama run 使用了 --network=none 选项,容器无法访问网络,从而防止任何信息泄露到系统外部。最后,容器以 --rm 选项运行,这意味着在应用程序退出时,容器内写入的所有内容都会被删除。

RamaLama 如何提供强大的安全保护:

  • 容器隔离 – AI 模型在隔离的容器中运行,防止直接访问主机系统。
  • 只读卷挂载 – AI 模型以只读模式挂载,因此容器内的进程无法修改主机文件。
  • 无网络访问ramalama run 使用 --network=none 选项,模型没有出站连接,不会泄露任何信息。
  • 自动清理 – 容器以 --rm 选项运行,会话结束后所有临时数据都会被清除。
  • 丢弃所有 Linux 能力 – 不允许访问 Linux 能力来攻击底层主机。
  • 禁止新增权限 – Linux 内核功能,可阻止容器进程获得额外权限。

传输方式

RamaLama 支持多种称为“传输方式”的 AI 模型注册中心类型。

支持的传输方式

传输方式 网站
HuggingFace huggingface.co
ModelScope modelscope.cn
Ollama ollama.com
RamaLama 实验室容器注册表 ramalama.com
OCI 容器注册表 opencontainers.org
示例:quay.ioDocker HubPulpArtifactory

默认传输方式

RamaLama 默认使用 Ollama 注册表传输方式。

如何更改传输方式。

使用 RAMALAMA_TRANSPORT 环境变量来修改默认设置。例如,export RAMALAMA_TRANSPORT=huggingface 将使 RamaLama 使用 HuggingFace 传输方式。

在指定模型时,可以通过 huggingface://oci://modelscope://ollama://rlcr:// 前缀来单独修改各个模型的传输方式。

示例:

ramalama pull huggingface://afrideva/Tiny-Vicuna-1B-GGUF/tiny-vicuna-1b.q2_k.gguf

传输方式简写

为了方便用户,RamaLama 使用简写文件,其中包含全名 AI 模型的别名,允许用户用较短的名字来引用模型。

关于简写的更多信息。

RamaLama 会读取存在的 shortnames.conf 文件。这些文件包含一系列名称-值对,用于指定模型。下表列出了 RamaLama 读取文件的顺序。如果出现重复名称,则会覆盖之前定义的简写。

简写类型 路径
开发阶段 ./shortnames.conf
用户(配置) $XDG_CONFIG_HOME/ramalama/shortnames.conf
用户(数据) $XDG_DATA_HOME/ramalama/shortnames.conf
管理员 /etc/ramalama/shortnames.conf
发行版 /usr/share/ramalama/shortnames.conf
本地发行版 /usr/local/share/ramalama/shortnames.conf

$ cat /usr/share/ramalama/shortnames.conf
[shortnames]
  "tiny" = "ollama://tinyllama"
  "granite" = "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "granite:7b" = "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "ibm/granite" = "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "merlinite" = "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf"
  "merlinite:7b" = "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf"
  ...


命令

ramalama-bench

对指定的 AI 模型进行基准测试。

  • 对指定的 AI 模型进行基准测试
    $ ramalama bench granite3-moe
    

ramalama-containers

列出所有 RamaLama 容器。

  • 列出所有正在运行 AI 模型的容器
    $ ramalama containers
    

    返回示例:

    CONTAINER ID  IMAGE                             COMMAND               CREATED        STATUS                    PORTS                   NAMES
    85ad75ecf866  quay.io/ramalama/ramalama:latest  /usr/bin/ramalama...  5 小时前    Up 5 小时                0.0.0.0:8080->8080/tcp  ramalama_s3Oh6oDfOP
    85ad75ecf866  quay.io/ramalama/ramalama:latest  /usr/bin/ramalama...  4 分钟前  已退出 (0) 4 分钟前                          granite-server
    
  • 以特定格式列出所有容器
    $ ramalama ps --noheading --format "{{ .Names }}"
    

    返回示例:

    ramalama_s3Oh6oDfOP
    granite-server
    

    </details。

ramalama-convert

将 AI 模型从本地存储转换为 OCI 镜像。

  • 从 Ollama 模型生成 OCI 模型。
    $ ramalama convert ollama://tinyllama:latest oci://quay.io/rhatdan/tiny:latest
    

    返回示例:

    正在构建 quay.io/rhatdan/tiny:latest...
    第 1 步/共 2 步:FROM scratch
    第 2 步/共 2 步:复制 sha256:2af3b81862c6be03c769683af18efdadb2c33f60ff32ab6f83e42c043d6c7816 /model
    --> 使用缓存 69db4a10191c976d2c3c24da972a2a909adec45135a69dbb9daeaaf2a3a36344
    提交 quay.io/rhatdan/tiny:latest
    --> 69db4a10191c
    成功标记 quay.io/rhatdan/tiny:latest
    69db4a10191c976d2c3c24da972a2a909adec45135a69dbb9daeaaf2a3a36344
    

    </details。

  • 生成并运行一个由 Safetensors 转换而来的量化 GGUF 的 OCI 模型。

    生成 OCI 模型

    $ ramalama --image quay.io/ramalama/ramalama-rag convert --gguf Q4_K_M hf://ibm-granite/granite-3.2-2b-instruct oci://quay.io/kugupta/granite-3.2-q4-k-m:latest
    

    返回示例:

    正在将 /Users/kugupta/.local/share/ramalama/models/huggingface/ibm-granite/granite-3.2-2b-instruct 转换为 quay.io/kugupta/granite-3.2-q4-k-m:latest...
    正在构建 quay.io/kugupta/granite-3.2-q4-k-m:latest...
    

    运行生成的模型

    $ ramalama run oci://quay.io/kugupta/granite-3.2-q4-k-m:latest
    

    </details。

ramalama-info

显示 RamaLama 的配置信息。

  • 不使用容器引擎时的信息。
    $ ramalama info
    ```
    返回示例如下:
    ```
    {
        "Accelerator": "cuda",
        "Engine": {
        "Name": ""
        },
        "Image": "quay.io/ramalama/cuda:0.7",
        "Inference": {
            "Default": "llama.cpp",
            "Engines": {
                "llama.cpp": "/usr/share/ramalama/inference-spec/engines/llama.cpp.yaml",
                "mlx": "/usr/share/ramalama/inference-spec/engines/mlx.yaml",
                "vllm": "/usr/share/ramalama/inference-spec/engines/vllm.yaml"
            },
            "Schema": {
                "1-0-0": "/usr/share/ramalama/inference-spec/schema/schema.1-0-0.json"
            }
        },
        "Shortnames": {
        "Names": {
            "cerebrum": "huggingface://froggeric/Cerebrum-1.0-7b-GGUF/Cerebrum-1.0-7b-Q4_KS.gguf",
            "deepseek": "ollama://deepseek-r1",
            "dragon": "huggingface://llmware/dragon-mistral-7b-v0/dragon-mistral-7b-q4_k_m.gguf",
            "gemma3": "hf://bartowski/google_gemma-3-4b-it-GGUF/google_gemma-3-4b-it-IQ2_M.gguf",
            "gemma3:12b": "hf://bartowski/google_gemma-3-12b-it-GGUF/google_gemma-3-12b-it-IQ2_M.gguf",
            "gemma3:1b": "hf://bartowski/google_gemma-3-1b-it-GGUF/google_gemma-3-1b-it-IQ2_M.gguf",
            "gemma3:27b": "hf://bartowski/google_gemma-3-27b-it-GGUF/google_gemma-3-27b-it-IQ2_M.gguf",
            "gemma3:4b": "hf://bartowski/google_gemma-3-4b-it-GGUF/google_gemma-3-4b-it-IQ2_M.gguf",
            "granite": "ollama://granite3.1-dense",
            "granite-code": "hf://ibm-granite/granite-3b-code-base-2k-GGUF/granite-3b-code-base.Q4_K_M.gguf",
            "granite-code:20b": "hf://ibm-granite/granite-20b-code-base-8k-GGUF/granite-20b-code-base.Q4_K_M.gguf",
            "granite-code:34b": "hf://ibm-granite/granite-34b-code-base-8k-GGUF/granite-34b-code-base.Q4_K_M.gguf",
            "granite-code:3b": "hf://ibm-granite/granite-3b-code-base-2k-GGUF/granite-3b-code-base.Q4_K_M.gguf",
            "granite-code:8b": "hf://ibm-granite/granite-8b-code-base-4k-GGUF/granite-8b-code-base.Q4_K_M.gguf",
            "granite-lab-7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite-lab-8b": "huggingface://ibm-granite/granite-8b-code-base-GGUF/granite-8b-code-base.Q4_K_M.gguf",
            "granite-lab:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite:2b": "ollama://granite3.1-dense:2b",
            "granite:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite:8b": "ollama://granite3.1-dense:8b",
            "hermes": "huggingface://NousResearch/Hermes-2-Pro-Mistral-7B-GGUF/Hermes-2-Pro-Mistral-7B.Q4_K_M.gguf",
            "ibm/granite": "ollama://granite3.1-dense:8b",
            "ibm/granite:2b": "ollama://granite3.1-dense:2b",
            "ibm/granite:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "ibm/granite:8b": "ollama://granite3.1-dense:8b",
            "merlinite": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite-lab-7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite-lab:7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite:7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "mistral": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b-v1": "huggingface://TheBloke/Mistral-7B-Instruct-v0.1-GGUF/mistral-7b-instruct-v0.1.Q5_K_M.gguf",
            "mistral:7b-v2": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b-v3": "huggingface://MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF/Mistral-7B-Instruct-v0.3.Q4_K_M.gguf",
            "mistral_code_16k": "huggingface://TheBloke/Mistral-7B-Code-16K-qlora-GGUF/mistral-7b-code-16k-qlora.Q4_K_M.gguf",
            "mistral_codealpaca": "huggingface://TheBloke/Mistral-7B-codealpaca-lora-GGUF/mistral-7b-codealpaca-lora.Q4_K_M.gguf",
            "mixtao": "huggingface://MaziyarPanahi/MixTAO-7Bx2-MoE-Instruct-v7.0-GGUF/MixTAO-7Bx2-MoE-Instruct-v7.0.Q4_K_M.gguf",
            "openchat": "huggingface://TheBloke/openchat-3.5-0106-GGUF/openchat-3.5-0106.Q4_K_M.gguf",
            "openorca": "huggingface://TheBloke/Mistral-7B-OpenOrca-GGUF/mistral-7b-openorca.Q4_K_M.gguf",
            "phi2": "huggingface://MaziyarPanahi/phi-2-GGUF/phi-2.Q4_K_M.gguf",
            "smollm:135m": "ollama://smollm:135m",
            "tiny": "ollama://tinyllama"
        },
        "Files": [
            "/usr/share/ramalama/shortnames.conf",
            "/home/dwalsh/.config/ramalama/shortnames.conf",
        ]
        },
        "Store": "/usr/share/ramalama",
        "UseContainer": true,
        "Version": "0.7.5"
    }
    ```
</details>

- <details>
    <summary>
        使用 Podman 引擎的信息。
    </summary>
    <br>
$ ramalama info
```
返回示例如下:
```
{
    "Accelerator": "cuda",
    "Engine": {
    "Info": {
        "host": {
        "arch": "amd64",
        "buildahVersion": "1.39.4",
        "cgroupControllers": [
            "cpu",
            "io",
            "memory",
            "pids"
        ],
        "cgroupManager": "systemd",
        "cgroupVersion": "v2",
        "conmon": {
            "package": "conmon-2.1.13-1.fc42.x86_64",
            "path": "/usr/bin/conmon",
            "version": "conmon version 2.1.13, commit: "
        },
        "cpuUtilization": {
            "idlePercent": 97.36,
            "systemPercent": 0.64,
            "userPercent": 2
        },
        "cpus": 32,
        "databaseBackend": "sqlite",
        "distribution": {
            "distribution": "fedora",
            "variant": "workstation",
            "version": "42"
        },
        "eventLogger": "journald",
        "freeLocks": 2043,
        "hostname": "danslaptop",
        "idMappings": {
            "gidmap": [
            {
                "container_id": 0,
                "host_id": 3267,
                "size": 1
            },
            {
                "container_id": 1,
                "host_id": 524288,
                "size": 65536
            }
            ],
            "uidmap": [
            {
                "container_id": 0,
                "host_id": 3267,
                "size": 1
            },
            {
                "container_id": 1,
                "host_id": 524288,
                "size": 65536
            }
            ]
        },
        "kernel": "6.14.2-300.fc42.x86_64",
        "linkmode": "dynamic",
        "logDriver": "journald",
        "memFree": 65281908736,
        "memTotal": 134690979840,
        "networkBackend": "netavark",
        "networkBackendInfo": {
            "backend": "netavark",
            "dns": {
            "package": "aardvark-dns-1.14.0-1.fc42.x86_64",
            "path": "/usr/libexec/podman/aardvark-dns",
            "version": "aardvark-dns 1.14.0"
            },
            "package": "netavark-1.14.1-1.fc42.x86_64",
            "path": "/usr/libexec/podman/netavark",
            "version": "netavark 1.14.1"
        },
        "ociRuntime": {
            "name": "crun",
            "package": "crun-1.21-1.fc42.x86_64",
            "path": "/usr/bin/crun",
            "version": "crun version 1.21\ncommit: 10269840aa07fb7e6b7e1acff6198692d8ff5c88\nrundir: /run/user/3267/crun\nspec: 1.0.0\n+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +YAJL"
        },
        "os": "linux",
        "pasta": {
            "executable": "/bin/pasta",
            "package": "passt-0^20250415.g2340bbf-1.fc42.x86_64",
            "version": ""
        },
        "remoteSocket": {
            "exists": true,
            "path": "/run/user/3267/podman/podman.sock"
        },
        "rootlessNetworkCmd": "pasta",
        "security": {
            "apparmorEnabled": false,
            "capabilities": "CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT",
            "rootless": true,
            "seccompEnabled": true,
            "seccompProfilePath": "/usr/share/containers/seccomp.json",
            "selinuxEnabled": true
        },
        "serviceIsRemote": false,
        "slirp4netns": {
            "executable": "/bin/slirp4netns",
            "package": "slirp4netns-1.3.1-2.fc42.x86_64",
            "version": "slirp4netns version 1.3.1\ncommit: e5e368c4f5db6ae75c2fce786e31eef9da6bf236\nlibslirp: 4.8.0\nSLIRP_CONFIG_VERSION_MAX: 5\nlibseccomp: 2.5.5"
        },
        "swapFree": 8589930496,
        "swapTotal": 8589930496,
        "uptime": "116h 35m 40.00s (Approximately 4.83 days)",
        "variant": ""
        },
        "plugins": {
        "authorization": null,
        "log": [
            "k8s-file",
            "none",
            "passthrough",
            "journald"
        ],
        "network": [
            "bridge",
            "macvlan",
            "ipvlan"
        ],
        "volume": [
            "local"
        ]
        },
        "registries": {
        "search": [
            "registry.fedoraproject.org",
            "registry.access.redhat.com",
            "docker.io"
        ]
        },
        "store": {
        "configFile": "/home/dwalsh/.config/containers/storage.conf",
        "containerStore": {
            "number": 5,
            "paused": 0,
            "running": 0,
            "stopped": 5
        },
        "graphDriverName": "overlay",
        "graphOptions": {},
        "graphRoot": "/usr/share/containers/storage",
        "graphRootAllocated": 2046687182848,
        "graphRootUsed": 399990419456,
        "graphStatus": {
            "Backing Filesystem": "btrfs",
            "Native Overlay Diff": "true",
            "Supports d_type": "true",
            "Supports shifting": "false",
            "Supports volatile": "true",
            "Using metacopy": "false"
        },
        "imageCopyTmpDir": "/var/tmp",
        "imageStore": {
            "number": 297
        },
        "runRoot": "/run/user/3267/containers",
        "transientStore": false,
        "volumePath": "/usr/share/containers/storage/volumes"
        },
        "version": {
        "APIVersion": "5.4.2",
        "BuildOrigin": "Fedora Project",
        "Built": 1743552000,
        "BuiltTime": "Tue Apr  1 19:00:00 2025",
        "GitCommit": "be85287fcf4590961614ee37be65eeb315e5d9ff",
        "GoVersion": "go1.24.1",
        "Os": "linux",
        "OsArch": "linux/amd64",
        "Version": "5.4.2"
        }
    },
    "Name": "podman"
    },
    "Image": "quay.io/ramalama/cuda:0.7",
    "Inference": {
        "Default": "llama.cpp",
        "Engines": {
            "llama.cpp": "/usr/share/ramalama/inference-spec/engines/llama.cpp.yaml",
            "mlx": "/usr/share/ramalama/inference-spec/engines/mlx.yaml",
            "vllm": "/usr/share/ramalama/inference-spec/engines/vllm.yaml"
        },
        "Schema": {
            "1-0-0": "/usr/share/ramalama/inference-spec/schema/schema.1-0-0.json"
        }
    },
    "Shortnames": {
        "Names": {
            "cerebrum": "huggingface://froggeric/Cerebrum-1.0-7b-GGUF/Cerebrum-1.0-7b-Q4_KS.gguf",
            "deepseek": "ollama://deepseek-r1",
            "dragon": "huggingface://llmware/dragon-mistral-7b-v0/dragon-mistral-7b-q4_k_m.gguf",
            "gemma3": "hf://bartowski/google_gemma-3-4b-it-GGUF/google_gemma-3-4b-it-IQ2_M.gguf",
            "gemma3:12b": "hf://bartowski/google_gemma-3-12b-it-GGUF/google_gemma-3-12b-it-IQ2_M.gguf",
            "gemma3:1b": "hf://bartowski/google_gemma-3-1b-it-GGUF/google_gemma-3-1b-it-IQ2_M.gguf",
            "gemma3:27b": "hf://bartowski/google_gemma-3-27b-it-GGUF/google_gemma-3-27b-it-IQ2_M.gguf",
            "gemma3:4b": "hf://bartowski/google_gemma-3-4b-it-GGUF/google_gemma-3-4b-it-IQ2_M.gguf",
            "granite": "ollama://granite3.1-dense",
            "granite-code": "hf://ibm-granite/granite-3b-code-base-2k-GGUF/granite-3b-code-base.Q4_K_M.gguf",
            "granite-code:20b": "hf://ibm-granite/granite-20b-code-base-8k-GGUF/granite-20b-code-base.Q4_K_M.gguf",
            "granite-code:34b": "hf://ibm-granite/granite-34b-code-base-8k-GGUF/granite-34b-code-base.Q4_K_M.gguf",
            "granite-code:3b": "hf://ibm-granite/granite-3b-code-base-2k-GGUF/granite-3b-code-base.Q4_K_M.gguf",
            "granite-code:8b": "hf://ibm-granite/granite-8b-code-base-4k-GGUF/granite-8b-code-base.Q4_K_M.gguf",
            "granite-lab-7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite-lab-8b": "huggingface://ibm-granite/granite-8b-code-base-GGUF/granite-8b-code-base.Q4_K_M.gguf",
            "granite-lab:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite:2b": "ollama://granite3.1-dense:2b",
            "granite:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "granite:8b": "ollama://granite3.1-dense:8b",
            "hermes": "huggingface://NousResearch/Hermes-2-Pro-Mistral-7B-GGUF/Hermes-2-Pro-Mistral-7B.Q4_K_M.gguf",
            "ibm/granite": "ollama://granite3.1-dense:8b",
            "ibm/granite:2b": "ollama://granite3.1-dense:2b",
            "ibm/granite:7b": "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf",
            "ibm/granite:8b": "ollama://granite3.1-dense:8b",
            "merlinite": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite-lab-7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite-lab:7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "merlinite:7b": "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf",
            "mistral": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b-v1": "huggingface://TheBloke/Mistral-7B-Instruct-v0.1-GGUF/mistral-7b-instruct-v0.1.Q5_K_M.gguf",
            "mistral:7b-v2": "huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
            "mistral:7b-v3": "huggingface://MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF/Mistral-7B-Instruct-v0.3.Q4_K_M.gguf",
            "mistral_code_16k": "huggingface://TheBloke/Mistral-7B-Code-16K-qlora-GGUF/mistral-7b-code-16k-qlora.Q4_K_M.gguf",
            "mistral_codealpaca": "huggingface://TheBloke/Mistral-7B-codealpaca-lora-GGUF/mistral-7b-codealpaca-lora.Q4_K_M.gguf",
            "mixtao": "huggingface://MaziyarPanahi/MixTAO-7Bx2-MoE-Instruct-v7.0-GGUF/MixTAO-7Bx2-MoE-Instruct-v7.0.Q4_K_M.gguf",
            "openchat": "huggingface://TheBloke/openchat-3.5-0106-GGUF/openchat-3.5-0106.Q4_K_M.gguf",
            "openorca": "huggingface://TheBloke/Mistral-7B-OpenOrca-GGUF/mistral-7b-openorca.Q4_K_M.gguf",
            "phi2": "huggingface://MaziyarPanahi/phi-2-GGUF/phi-2.Q4_K_M.gguf",
            "smollm:135m": "ollama://smollm:135m",
            "tiny": "ollama://tinyllama"
        },
        "Files": [
            "/usr/share/ramalama/shortnames.conf",
            "/home/dwalsh/.config/ramalama/shortnames.conf",
        ]
    },
    "Store": "/usr/share/ramalama",
    "UseContainer": true,
    "Version": "0.7.5"
}
```
  • 使用 jq 打印特定的 `ramalama info` 内容。
    $ ramalama info |  jq .Shortnames.Names.mixtao
    
    返回示例:
     "huggingface://MaziyarPanahi/MixTAO-7Bx2-MoE-Instruct-v7.0-GGUF/MixTAO-7Bx2-MoE-Instruct-v7.0.Q4_K_M.gguf"
    

ramalama-inspect

检查指定的人工智能模型。

  • 检查 smollm:135m 模型的基本信息。
    $ ramalama inspect smollm:135m
    

    返回示例:

    smollm:135m
       路径:/var/lib/ramalama/models/ollama/smollm:135m
       注册表:ollama
       格式:GGUF
       版本:3
       字节序:小端
       元数据:39 条
       张量:272 条
    
  • 以 JSON 格式检查 smollm:135m 模型的所有信息。
    $ ramalama inspect smollm:135m --all --json
    

    返回示例:

    {
        "Name": "smollm:135m",
        "Path": "/home/mengel/.local/share/ramalama/models/ollama/smollm:135m",
        "Registry": "ollama",
        "Format": "GGUF",
        "Version": 3,
        "LittleEndian": true,
        "Metadata": {
        "general.architecture": "llama",
        "general.base_model.0.name": "SmolLM 135M",
        "general.base_model.0.organization": "HuggingFaceTB",
        "general.base_model.0.repo_url": "https://huggingface.co/HuggingFaceTB/SmolLM-135M",
        ...
        },
        "Tensors": [
        {
            "dimensions": [
            576,
            49152
            ],
            "n_dimensions": 2,
            "name": "token_embd.weight",
            "offset": 0,
            "type": 8
        },
        ...
        ]
    }
    

ramalama-list

列出所有已下载的人工智能模型。

  • 可以列出所有拉取到本地存储的模型。
    $ ramalama list
    
    返回示例:
    NAME                                                                    MODIFIED      SIZE
    ollama://smollm:135m                                                    16 hours ago  5.5M
    huggingface://afrideva/Tiny-Vicuna-1B-GGUF/tiny-vicuna-1b.q2_k.gguf     14 hours ago  460M
    ollama://moondream:latest                                               6 days ago    791M
    ollama://phi4:latest                                                    6 days ago    8.43 GB
    ollama://tinyllama:latest                                               1 week ago    608.16 MB
    ollama://granite3-moe:3b                                                1 week ago    1.92 GB
    ollama://granite3-moe:latest                                            3 months ago  1.92 GB
    ollama://llama3.1:8b                                                    2 months ago  4.34 GB
    ollama://llama3.1:latest                                                2 months ago  4.34 GB
    

ramalama-login

登录远程注册表。

  • 登录 quay.io/username OCI 注册表
    $ export RAMALAMA_TRANSPORT=quay.io/username
    $ ramalama login -u username
    
  • 登录 Ollama 注册表
    $ export RAMALAMA_TRANSPORT=ollama
    $ ramalama login
    
  • 登录 Hugging Face 注册表
    $ export RAMALAMA_TRANSPORT=huggingface
    $ ramalama login --token=XYZ
    

    登录 Hugging Face 需要使用 hf 工具。有关安装和使用说明,请参阅 Hugging Face 命令行界面 的文档。

ramalama-logout

从远程注册表登出。

  • 从 quay.io/username OCI 仓库登出
    $ ramalama logout quay.io/username
    
  • 从 Ollama 注册表登出
    $ ramalama logout ollama
    
  • 从 Hugging Face 登出
    $ ramalama logout huggingface
    

ramalama-perplexity

计算指定人工智能模型的困惑度。

  • 计算人工智能模型的困惑度。
    困惑度用于衡量模型预测下一个标记的能力,数值越低表示性能越好。
    $ ramalama perplexity granite3-moe
    

ramalama-pull

从模型注册表将人工智能模型拉取到本地存储。

  • 拉取一个模型
    可以使用 pull 命令拉取模型。默认情况下,它会从 Ollama 注册表 拉取。
    $ ramalama pull granite3-moe
    

ramalama-push

将人工智能模型从本地存储推送到远程注册表。

  • 推送指定的人工智能模型(目前仅支持 OCI)
    模型可以来自 RamaLama 模型存储中的 Huggingface、Ollama 或 OCI 模型格式。该模型也可以只是存储在磁盘上的模型。
    $ ramalama push oci://quay.io/rhatdan/tiny:latest
    

ramalama-rag

从提供的文档中生成并转换检索增强生成(RAG)数据,将其打包成 OCI 镜像。

[!注意] 此命令需要容器引擎才能运行。

  • 从提供的文档中生成 RAG 数据,并将其转换为 OCI 镜像。

    该命令使用包含 docling 工具的特定容器镜像,将指定内容转换为 RAG 向量数据库。如果本地不存在该镜像,RamaLama 将会拉取镜像并启动容器来处理数据。

    位置参数:

    PATH 包含 PDF、DOCX、PPTX、XLSX、HTML、AsciiDoc 和 Markdown 格式文件的文件或目录,可多次指定。

    IMAGE 用于存放处理后的 RAG 数据的 OCI 镜像名称

    ramalama rag ./README.md https://github.com/containers/podman/blob/main/README.md quay.io/ramalama/myrag
    100% |███████████████████████████████████████████████████████|  114.00 KB/    0.00 B 922.89 KB/s   59m 59s
    Building quay.io/ramalama/myrag...
    adding vectordb...
    c857ebc65c641084b34e39b740fdb6a2d9d2d97be320e6aa9439ed0ab8780fe0
    

    之后可以使用该镜像:

    ramalama run --rag quay.io/ramalama/myrag instructlab/merlinite-7b-lab
    

ramalama-rm

从本地存储中移除 AI 模型。

  • 指定一个或多个要从本地存储中移除的 AI 模型。
    $ ramalama rm ollama://tinyllama
    
  • 移除本地存储中的所有 AI 模型。
    $ ramalama rm --all
    

ramalama-run

将指定的 AI 模型作为聊天机器人运行。

  • 使用 run 命令在模型上运行聊天机器人。默认情况下,它会从 Ollama 注册表 中拉取镜像。

    注意:RamaLama 会检查您的机器是否支持原生 GPU,然后使用 Podman 等容器引擎拉取包含适当代码和库的 OCI 容器镜像来运行 AI 模型。这可能需要较长时间进行设置,但仅在首次运行时发生。

    $ ramalama run instructlab/merlinite-7b-lab
    
  • 在初始容器镜像下载完成后,您可以使用该容器镜像与不同的模型进行交互。
    $ ramalama run granite3-moe
    

    例如返回:

    > 写一个 Python 的 Hello World 程序
    
    print("Hello World")
    
  • 在另一个终端窗口中查看正在运行的 Podman 容器。
    $ podman ps
    CONTAINER ID  IMAGE                             COMMAND               CREATED        STATUS        PORTS       NAMES
    91df4a39a360  quay.io/ramalama/ramalama:latest  /home/dwalsh/rama...  4 minutes ago  Up 4 minutes              gifted_volhard
    

ramalama-serve

在指定的 AI 模型上提供 REST API 服务。

  • 提供模型服务并通过浏览器连接。
    $ ramalama serve llama3
    

    当启用 Web UI 时,您可以通过浏览器访问:127.0.0.1:<端口>。默认的服务端口为 8080(如果可用),否则会在 8081–8090 范围内随机选择一个空闲端口。如果您愿意,可以使用 --port/-p 参数指定要使用的端口。

  • 同时运行两个 AI 模型。请注意,这两个模型都在 Podman 容器中运行。
    $ ramalama serve -d -p 8080 --name mymodel ollama://smollm:135m
    09b0e0d26ed28a8418fb5cd0da641376a08c435063317e89cf8f5336baf35cfa
    
    $ ramalama serve -d -n example --port 8081 oci://quay.io/mmortari/gguf-py-example/v1/example.gguf
    3f64927f11a5da5ded7048b226fbe1362ee399021f5e8058c73949a677b6ac9c
    
    $ podman ps
    CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS         PORTS                   NAMES
    09b0e0d26ed2  quay.io/ramalama/ramalama:latest  /usr/bin/ramalama...  32 seconds ago  Up 32 seconds  0.0.0.0:8081->8081/tcp  ramalama_sTLNkijNNP
    3f64927f11a5  quay.io/ramalama/ramalama:latest  /usr/bin/ramalama...  17 seconds ago  Up 17 seconds  0.0.0.0:8082->8082/tcp  ramalama_YMPQvJxN97
    
  • 若要禁用 Web UI,请使用 `--webui` off 标志。
    $ ramalama serve --webui off llama3
    

ramalama-stop

停止正在运行 AI 模型的命名容器。

  • 如果模型正在容器中运行,则停止该模型。
    $ ramalama stop mymodel
    
  • 停止所有正在容器中运行的模型。
    $ ramalama stop --all
    

ramalama-version

显示 RamaLama 的版本。

  • 打印 RamaLama 的版本。
    $ ramalama version
    
    例如返回:
    ramalama version 1.2.3
    

附录

命令 描述
ramalama(1) RamaLama 主手册页
ramalama-bench(1) 对指定的 AI 模型进行基准测试
ramalama-chat(1) 与指定的 OpenAI REST API 进行对话
ramalama-containers(1) 列出所有 RamaLama 容器
ramalama-convert(1) 将本地存储中的 AI 模型转换为 OCI 镜像
ramalama-info(1) 显示 RamaLama 的配置信息
ramalama-inspect(1) 检查指定的 AI 模型
ramalama-list(1) 列出所有已下载的 AI 模型
ramalama-login(1) 登录远程注册表
ramalama-logout(1) 从远程注册表登出
ramalama-perplexity(1) 计算指定 AI 模型的困惑度
ramalama-pull(1) 从模型注册表拉取 AI 模型到本地存储
ramalama-push(1) 将本地存储中的 AI 模型推送到远程注册表
ramalama-rag(1) 根据提供的文档生成并转换检索增强生成 (RAG) 数据为 OCI 镜像
ramalama-rm(1) 从本地存储中移除 AI 模型
ramalama-run(1) 将指定的 AI 模型作为聊天机器人运行
ramalama-serve(1) 在指定的 AI 模型上提供 REST API服务
ramalama-stop(1) 停止正在运行指定 AI 模型的命名容器
ramalama-version(1) 显示 RamaLama 的版本

图表

+---------------------------+
|                           |
| ramalama run granite3-moe |
|                           |
+-------+-------------------+
    |
    |
    |           +------------------+           +------------------+
    |           | 拉取推理       |           | 拉取模型层       |
    +-----------| 运行时 (cuda)   |---------->| granite3-moe     |
                +------------------+           +------------------+
                           | 仓库选项:    |
                           +-+-------+------+-+
                             |       |      |
                             v       v      v
                         +---------+ +------+ +----------+
                         | Hugging | | OCI  | | Ollama   |
                         | Face    | |      | | Registry |
                         +-------+-+ +---+--+ +-+--------+
                             |       |      |
                             v       v      v
                           +------------------+
                           | 使用       |
                           | cuda 运行时     |
                           | 和             |
                           | granite3-moe     |
                           +------------------+

开发中

关于这个 Alpha 版本,所有功能仍在开发中,因此可能会有不兼容的更改。如果您需要重置安装,请参阅上方的“卸载”部分,了解如何移除 RamaLama 并清理所有数据文件,然后重新安装。

已知问题

  • 在 macOS 的某些 Python 版本上,证书可能未正确安装,从而导致 SSL 错误(例如,在访问 huggingface.co 时)。要解决这个问题,请运行“Install Certificates”命令,通常如下所示:
/Applications/Python 3.x/Install Certificates.command

感谢支持

没有以下项目的帮助,本项目将无法实现:

所以,如果您喜欢这个工具,请给这些仓库点个赞,顺便也给我们点个赞吧。

Star History Chart

社区

如需一般性问题或讨论,请使用 RamaLama 的

Matrix

对于问题/错误及功能相关的讨论,您可以使用 GitHub 的 IssuesPRs 跟踪系统。

社区/开发者聚会

我们每隔一周在 Discord 上举办一次面向公众的社区和开发者聚会,讨论项目发展方向,并为用户提供一个开放的交流平台,以便获得帮助、提问以及展示新功能。

加入 Discord 会议议程

路线图

查看完整的路线图

贡献者

欢迎贡献者

版本历史

v0.17.02026/02/04
v0.16.02025/12/18
v0.15.02025/12/05
v0.14.02025/10/31
v0.13.02025/10/15
v0.12.42025/10/07
v0.12.32025/09/28
v0.12.22025/09/11
v0.12.12025/08/27
v0.10.02025/06/30
v0.12.02025/08/15
v0.11.32025/08/04
v0.11.22025/07/28
v0.11.12025/07/21
v0.11.02025/07/14
v0.10.12025/07/07
v0.18.02026/03/19
v0.17.12026/02/06
v0.9.32025/06/23
v0.9.22025/06/16

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架