Ollama 与 AI 模型:在 openEuler 上安装与使用 Qwen3.5-2B 指南

一、概念理解:Ollama 与 AI 模型的关系

在深入安装部署之前,首先需要明确 Ollama 与 AI 模型之间的关系,这对于理解整个技术架构至关重要。

1.1 核心概念

简单来说,Ollama 是一个开源的、用户友好的本地 AI 模型运行工具,而 AI 模型(如 Qwen3.5-2B)是核心的「大脑」。它们的关系可以类比为以下日常生活中的例子:

AI 模型等同于电影文件(MP4)或游戏卡带。电影文件包含了完整的视听内容和故事情节,游戏卡带则包含了游戏的全部数据和逻辑代码。AI 模型同样包含了海量的知识和推理能力,但这些文件本身无法直接运行,必须借助相应的播放器或运行平台才能发挥作用。

Ollama 等同于播放器(VLC)或游戏主机。播放器提供了解码和渲染视频的能力,让用户能够观看电影内容;游戏主机则提供了硬件环境和软件支持,让游戏卡带中的内容能够运行。Ollama 同样扮演着这样的角色,它提供了模型运行的环境、硬件加速支持和 API 服务,使得 AI 模型能够被调用并产生推理结果。

1.2 Ollama 的主要功能

Ollama 作为本地 AI 模型运行工具,提供了以下核心功能:

模型管理是 Ollama 的基础功能之一。用户可以通过简单的命令自动下载、存储和加载各种主流的开源大语言模型。Ollama 会维护一个本地模型库,类似于应用商店,用户可以方便地查看已安装的模型、删除不需要的模型,或者更新到最新版本的模型。

推理引擎是 Ollama 的核心技术能力。它基于 llama.cpp 构建,能够高效利用 CPU 或 GPU 的计算资源运行模型。这意味着即使没有昂贵的图形处理器,用户也可以在普通服务器或个人电脑上运行中小规模的 AI 模型。Ollama 会对硬件进行优化调度,在有限的资源下尽可能提升推理速度。

API 服务是 Ollama 便于集成的关键特性。它提供了兼容 OpenAI 格式的本地接口,开发者可以直接使用熟悉的 OpenAI SDK 来调用本地部署的模型。这种设计大大降低了学习和迁移成本,使得将 AI 能力集成到现有应用中变得简单快捷。

1.3 为什么选择本地部署

在云端 API 越来越便捷的今天,本地部署仍然具有不可替代的优势。首先是数据隐私考量,对于涉及敏感信息的企业或个人用户,数据不需要离开本地环境,这就消除了上传到第三方服务器带来的潜在风险。其次是成本控制,虽然前期需要投入硬件资源,但长期来看可以避免按调用次数付费的持续开销,特别是对于高频使用场景尤为经济。最后是可控性和稳定性,本地部署的服务不依赖外部网络连接,在网络不稳定或云服务宕机时仍能保证业务连续性。

二、环境准备与系统要求

2.1 硬件要求

在 openEuler 系统上部署 Ollama 和 Qwen3.5-2B 模型,需要满足以下基本硬件条件:

项目 最低配置 推荐配置
CPU 4 核心 8 核心及以上
内存 8 GB 16 GB 及以上
存储 2 GB 可用空间 10 GB 及以上
系统 openEuler 22.03+ openEuler 22.03 LTS

需要特别说明的是,Qwen3.5-2B 模型文件本身约占用 1-2 GB 存储空间,但考虑到模型运行时的缓存和交换空间,建议预留充足的磁盘容量。内存方面,8 GB 可以满足基本运行需求,但如果需要同时运行其他服务或处理较大规模的请求,16 GB 或更多内存会带来更好的体验。

2.2 系统环境检查

在开始安装之前,需要确认当前系统满足基本要求。可以通过以下命令检查系统资源:

# 检查内存容量
free -h

# 检查可用磁盘空间
df -h

# 检查 CPU 核心数
nproc

# 确认系统版本
cat /etc/os-release

如果内存低于 8 GB,Ollama 可能无法正常运行或响应速度会非常缓慢。磁盘空间不足则会导致模型无法下载或运行过程中出现异常。

2.3 网络准备

Ollama 在安装和模型下载过程中需要访问互联网。确保服务器能够正常访问以下域名:

  • ollama.com(用于下载 Ollama 安装包和模型文件)
  • huggingface.co(模型文件的备用来源)

如果服务器处于企业内网或需要通过代理访问互联网,需要提前配置好相应的网络代理环境。

三、Ollama 安装详解

3.1 官方一键安装

Ollama 官方提供了便捷的一键安装脚本,这在大多数 Linux 发行版上都能正常工作,包括 openEuler。执行以下命令即可完成安装:

curl -fsSL https://ollama.com/install.sh | sh

安装脚本会自动完成以下工作:下载对应架构的二进制文件、将其放置到系统路径、创建必要的目录结构、配置基础运行环境。安装完成后,可以通过以下命令验证是否成功:

# 查看 Ollama 版本
ollama --version

# 查看帮助信息
ollama --help

3.2 手动安装(备选方案)

如果一键安装脚本由于网络或其他原因无法正常工作,可以尝试手动安装。手动安装需要从 GitHub releases 页面下载预编译的二进制文件:

# 下载 Ollama(根据系统架构选择合适的版本)
# 以下为 Linux x86_64 版本的示例
curl -LO https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64.tar.gz

# 解压文件
sudo tar -C /usr -xzf ollama-linux-amd64.tar.gz

# 添加到系统路径
sudo ln -s /usr/bin/ollama /usr/local/bin/ollama

3.3 验证安装

安装完成后,建议执行以下验证步骤确保 Ollama 能够正常工作:

# 启动 Ollama 服务(后台运行)
ollama serve &

# 等待几秒后,检查服务是否正常响应
curl http://localhost:11434/

# 查看已安装的模型(首次使用应为空)
ollama list

如果服务正常启动,会返回类似 "Ollama is running" 的响应信息。此时 Ollama 已经在本地监听 11434 端口,可以接受 API 请求了。

四、模型下载与管理

4.1 下载 Qwen3.5-2B 模型

在确保 Ollama 服务正常运行后下一步是下载所需的 AI 模型。Qwen3.5-2B 是阿里云通义千问系列的中文优化模型,2B 表示约 20 亿参数,在消费级硬件上也能流畅运行。下载模型非常简单,执行以下命令即可:

# 拉取 Qwen3.5-2B 模型
ollama pull qwen3.5:2b

模型文件较大,首次下载可能需要较长时间,取决于网络带宽。Ollama 会显示下载进度,用户可以直观地了解下载状态。

如果需要指定特定的模型版本或标签,可以使用冒号分隔的方式指定:

# 下载特定版本的模型
ollama pull qwen3.5:2b-instruct

4.2 模型管理命令

Ollama 提供了一系列便捷的模型管理命令,帮助用户维护本地模型库:

# 列出所有已安装的模型
ollama list

# 查看特定模型的详细信息
ollama show qwen3.5:2b

# 删除不需要的模型
ollama rm qwen3.5:2b

# 复制模型(可用于创建自定义变体)
ollama copy qwen3.5:2b my-custom-model

4.3 其他推荐模型

除了 Qwen3.5-2B 之外还有许多其他优秀的开源模型可以根据需求选择:

模型名称 参数量 特点 适用场景
llama3.2 1B/3B Meta 出品,英文能力强 通用对话
qwen2.5 0.5B/1.5B/3B 中文优化,小巧高效 中文场景
phi3 3.8B Microsoft 出品 快速推理
mistral 7B 欧洲模型,多语言支持 通用任务

对于资源受限的环境,建议选择参数规模较小的模型,如 Qwen2.5-0.5B 或 Qwen2.5-1.5B,这些模型在 4 核 CPU 和 8 GB 内存的环境下也能正常运行。

五、服务配置与开机自启

5.1 systemd 服务配置

为了让 Ollama 能够在服务器重启后自动运行,需要将其配置为 systemd 服务。这样做的好处是服务会由系统统一管理,崩溃时自动重启,而且可以通过标准的 systemctl 命令进行控制。

创建 systemd 服务文件:

cat > /etc/systemd/system/ollama.service << 'EOF'
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="PATH=/usr/local/cuda/bin:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

上述配置中需要特别关注几个关键参数:Environment="OLLAMA_HOST=0.0.0.0:11434" 表示 Ollama 监听所有网络接口的 11434 端口,这样外部机器也能访问服务。如果仅需要本地访问,可以改为 127.0.0.1。Restart=always 确保服务在任何情况下退出都会自动重启,保证服务的高可用性。

5.2 启用和管理服务

服务文件创建完成后,需要通知 systemd 重新加载配置并启用服务:

# 重新加载 systemd 配置
systemctl daemon-reload

# 启用开机自启
systemctl enable ollama

# 启动服务
systemctl start ollama

# 查看服务状态
systemctl status ollama

如果服务启动成功,status 命令会显示 "active (running)" 的状态。后续可以使用以下常用命令来管理服务:

# 重启服务
systemctl restart ollama

# 停止服务
systemctl stop ollama

# 查看实时日志
journalctl -u ollama -f

5.3 防火墙配置

Ollama 默认监听 11434 端口,如果需要从其他机器访问这个服务,需要在防火墙中开放这个端口。openEuler 默认使用 firewalld 作为防火墙管理工具:

# 开放 11434 端口(TCP 协议)
firewall-cmd --zone=public --add-port=11434/tcp --permanent

# 重新加载防火墙规则
firewall-cmd --reload

# 验证端口已开放
firewall-cmd --list-ports

如果是生产环境,建议仅对特定 IP 范围开放端口,或者使用 iptables 进行更精细的访问控制,以避免不必要的安全风险。

六、API 使用详解

6.1 API 基础

Ollama 提供了 RESTful 风格的 API,兼容 OpenAI 接口格式。这使得已经熟悉 OpenAI API 的开发者能够无缝迁移到本地部署。API 的基本端点是 http://localhost:11434,可以通过 curl 或任何 HTTP 客户端调用。

6.2 查看模型列表

首先,可以查询当前已安装的模型列表:

curl http://localhost:11434/api/tags

返回的 JSON 数据会列出所有已安装模型的名称、大小和其他元信息。这对于确认模型是否正确安装以及选择合适的模型进行推理非常有用。

6.3 基础对话生成

使用模型进行对话生成是最常见的应用场景。以下是一个完整的请求示例:

curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5:2b",
    "prompt": "你好,请用一句话介绍你自己",
    "stream": false
  }'

这个请求中,model 字段指定使用的模型,prompt 字段是输入的提示词,stream 字段表示是否使用流式输出。设置为 false 时,服务器会等生成完全部内容后一次性返回;设置为 true 则会像打字一样逐词返回结果。

6.4 流式输出

流式输出能够提供更好的用户体验,特别是对于较长的生成任务,用户不需要等待全部内容生成完毕就能看到部分结果:

curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5:2b",
    "prompt": "写一首关于春天的诗",
    "stream": true
  }'

6.5 更多 API 参数

Ollama 的 API 还支持许多可选参数,用于控制生成内容的质量、长度和风格:

参数 类型 说明 默认值
model string 使用的模型名称 必填
prompt string 输入提示 必填
stream boolean 是否流式输出 false
temperature float 采样温度 (0-2) 0.8
top_p float 核采样概率 0.9
top_k int Top-K 采样 40
max_tokens int 最大生成 token 数 128
repeat_penalty float 重复惩罚 1.1

temperature 控制生成的随机性,值越低结果越确定性,值越高越具创造性。top_p 和 top_k 用于控制采样的多样性。max_tokens 限制生成内容的长度,避免产生过长的回复。

七、Web 界面部署(可选)

7.1 为什么需要 Web 界面

虽然通过 API 调用已经能够正常使用 Ollama,但对于非技术用户或快速测试场景,拥有一个可视化的 Web 界面会更加便利。通过浏览器可以直接与 AI 模型进行对话,无需编写代码或使用命令行工具。

7.2 部署步骤

部署 Web 界面需要安装 Python 和 Flask 框架,然后创建前后端文件。

首先安装依赖:

pip3 install flask requests

然后下载 Markdown 渲染库(用于美化输出):

curl -o /home/wcs/openclaw-docs/marked.min.js https://cdn.jsdelivr.net/npm/marked/marked.min.js

接着创建 Flask 服务端文件 serve_webui.py:

cat > /home/wcs/openclaw-docs/serve_webui.py << 'EOF'
#!/usr/bin/env python3
from flask import Flask, send_file, jsonify, request
import requests
import os

app = Flask(__name__)

OLLAMA_HOST = os.environ.get('OLLAMA_HOST', '127.0.0.1')
OLLAMA_PORT = os.environ.get('OLLAMA_PORT', '11434')
OLLAMA_URL = f"http://{OLLAMA_HOST}:{OLLAMA_PORT}"

@app.route('/')
def index():
    return send_file('ollama-webui.html')

@app.route('/marked.min.js')
def marked_js():
    return send_file('marked.min.js', mimetype='application/javascript')

@app.route('/api/tags')
def tags():
    try:
        resp = requests.get(f"{OLLAMA_URL}/api/tags")
        return jsonify(resp.json())
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/api/generate', methods=['POST'])
def generate():
    try:
        resp = requests.post(
            f"{OLLAMA_URL}/api/generate",
            json=request.json,
            headers={"Content-Type": "application/json"}
        )
        return jsonify(resp.json())
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=False)
EOF

还需要创建前端界面文件 ollama-webui.html,这个文件包含完整的 HTML、CSS 和 JavaScript 代码,实现了一个类似 DeepSeek 风格的深色主题聊天界面。由于代码较长,这里不再展开,项目目录中已有完整实现。

7.3 配置 WebUI 服务

同样需要将 WebUI 也配置为 systemd 服务:

cat > /etc/systemd/system/ollama-webui.service << 'EOF'
[Unit]
Description=Ollama Web UI
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/wcs/openclaw-docs
ExecStart=/usr/bin/python3 /home/wcs/openclaw-docs/serve_webui.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

然后启用服务:

systemctl daemon-reload
systemctl enable ollama-webui
systemctl start ollama-webui

7.4 访问 Web 界面

WebUI 启动后,通过浏览器访问 http://服务器IP:8080 即可使用图形界面与 AI 模型对话。如果无法访问,记得开放 8080 端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

八、一键部署脚本

8.1 脚本概述

为了简化部署流程,项目提供了 deploy.sh 一键部署脚本。这个脚本会自动完成系统检查、Ollama 安装、模型下载、防火墙配置和服务启动等全部步骤,用户只需执行一个命令即可完成整个部署。

脚本已经经过在 openEuler 系统上的测试,能够自动适应不同的系统环境。脚本会进行必要的前置检查,包括内存容量、磁盘空间等,确保满足最低运行要求。

8.2 使用方法

使用一键部署脚本非常简便:

# 添加执行权限
chmod +x deploy.sh

# 执行部署
./deploy.sh

脚本执行过程中会显示详细的进度信息,包括当前正在进行的步骤和最终结果。如果某一步骤失败,脚本会给出明确的错误提示和解决建议。

8.3 脚本功能

deploy.sh 脚本实现了以下自动化功能:

系统检查:验证内存是否达到 8 GB 以上,磁盘空间是否至少有 2 GB 可用。如果不满足条件,脚本会给出警告或直接退出。

Ollama 安装:自动检测 Ollama 是否已安装,如果未安装则执行官方一键安装脚本。

服务配置:自动创建 systemd 服务文件,配置开机自启和环境变量。

模型下载:自动拉取 Qwen3.5-2B 模型,如果模型已存在则跳过下载步骤以节省时间。

防火墙配置:自动检测 firewalld 状态并开放相应端口。

部署测试:完成后自动测试 API 可用性,并输出服务地址和测试命令。

8.4 部署后的信息

脚本执行成功后,会输出以下信息供用户参考:

  • Ollama 服务的访问地址(http://服务器IP:11434)
  • 模型名称和基本信息
  • 测试 API 的示例命令
  • 常用管理命令(查看状态、重启服务、查看日志等)

九、性能优化与最佳实践

9.1 性能指标

了解基本的性能指标有助于合理设置使用预期和进行优化:

  • 模型大小:Qwen3.5-2B 约占用 1-2 GB 存储空间
  • 内存占用:运行状态下约需 3-4 GB 内存
  • 推理速度:CPU 模式下约 3-8 tokens/秒
  • 首次响应:冷启动需要加载模型,约需 10-30 秒

这些数值会因硬件配置和系统负载而有所不同。如果服务器配备了 NVIDIA 显卡并配置了 CUDA 加速,推理速度可以提升数倍甚至数十倍。

9.2 性能优化建议

保持服务常驻:由于首次启动需要加载模型,建议保持 Ollama 服务持续运行,避免频繁重启导致的等待时间。systemd 配置中的 Restart=always 已经实现了这一点。

监控资源使用:可以通过 top 或 htop 命令监控 CPU 和内存使用情况。如果发现资源紧张,可以考虑关闭不必要的进程或升级硬件配置。

使用流式输出:对于较长的生成任务,优先使用流式输出(stream: true),这样可以让用户更早看到结果,同时减轻服务器端的内存压力。

合理设置 max_tokens:根据实际需求设置最大生成长度,避免生成过长的内容导致响应缓慢或资源耗尽。

9.3 安全建议

当前配置开放了外网访问,建议仅在内网环境使用。如需在生产环境中对外提供服务,应考虑以下安全措施:

访问控制:使用防火墙规则限制可访问的 IP 范围,只允许受信任的 IP 地址连接到 Ollama 服务。

认证机制:可以配置 Nginx 反向代理,添加基本的 HTTP 认证或基于令牌的身份验证。

传输加密:配置 HTTPS/TLS 加密,防止数据在传输过程中被窃听或篡改。

日志审计:定期检查服务日志,记录和分析异常访问行为。

十、故障排查

10.1 服务启动失败

如果 Ollama 服务无法启动,首先检查服务状态和日志:

# 查看详细日志
journalctl -u ollama -n 100

# 查看实时日志
journalctl -u ollama -f

常见原因包括:端口被占用(11434 端口已被其他程序使用)、权限不足(需要 root 权限运行)、环境变量配置错误等。根据日志中的错误信息可以定位具体原因。

10.2 端口被占用

如果发现 11434 端口被其他程序占用,可以查找并终止占用进程:

# 查找占用 11434 端口的进程
lsof -i :11434

# 根据显示的 PID 终止进程
kill -9 <PID>

或者修改 Ollama 的监听端口,编辑 /etc/systemd/system/ollama.service 文件中的 OLLAMA_HOST 环境变量。

10.3 模型加载缓慢

首次运行时模型需要从磁盘加载到内存,可能需要较长时间。请耐心等待 10-30 秒。如果后续运行仍然很慢,可以考虑增加物理内存或使用 SSD 存储。

10.4 API 调用失败

如果 API 调用返回错误,首先确认服务正在运行:

# 检查服务状态
systemctl status ollama

# 测试本地连接
curl http://localhost:11434/

如果本地连接正常但远程连接失败,检查防火墙是否已开放相应端口,以及网络路由是否正常。

十一、相关资源

以下是本文档涉及的相关资源和进一步学习的链接:

  • Ollama 官网:https://ollama.com — 官方安装文档和模型库
  • Ollama GitHub:https://github.com/ollama/ollama — 源代码和问题反馈
  • Qwen 模型库:https://huggingface.co/Qwen — 通义千问系列模型信息
  • OpenEuler 官网:https://www.openeuler.org — 操作系统官方文档

十二、总结

本文档详细介绍了在 openEuler 系统上安装和使用 Ollama 运行 Qwen3.5-2B 模型的全过程。通过阅读本文档,应该能够理解 Ollama 与 AI 模型之间的关系,掌握从环境准备到服务部署的完整流程,并能够熟练使用 API 进行开发集成。

本地部署 AI 模型不仅能够保护数据隐私,还能提供稳定的服务和可控的成本。希望这份指南能够帮助你在本地环境中成功运行 AI 模型,并将其应用于实际项目中。如果在部署过程中遇到任何问题,可以参考本文档最后的故障排查章节或查阅官方文档获取更多帮助。