Ollama 部署与模型加载实战记录
一、前置信息
1.1 操作系统与环境
|
项目 |
值 |
|---|---|
|
操作系统 |
Ubuntu 24.04 LTS |
|
内核架构 |
|
|
主机名 |
|
1.2 硬件配置
|
组件 |
规格 |
|---|---|
|
CPU |
AMD Ryzen AI MAX+ 395 w/ Radeon 8060S,32 核 |
|
内存 |
30 GiB(可用约 27 GiB) |
|
磁盘 |
1.9 TB NVMe SSD(可用 1.8 TB) |
|
GPU |
无独立 NVIDIA 显卡;集成 AMD Radeon 8060S 核显(RDNA 3.5) |
|
NPU |
AMD XDNA2(未使用) |
1.3 网络信息
|
项目 |
值 |
|---|---|
|
本机 IP |
|
|
目标网段 |
|
|
SSH 端口 |
22(默认) |
1.4 软件栈
|
软件 |
版本/说明 |
|---|---|
|
Ollama |
最新版(通过官方安装脚本安装) |
|
模型 |
|
|
推理后端 |
Ollama(CPU + ROCm 核显加速) |
二、操作步骤
步骤 1:获取设备 IP 与网络连通性验证
目标:确认 Linux 服务器的 IP 地址,并验证从 Windows 客户端能否通过 SSH 连接。
1.1 查看本机 IP 地址
# 查看所有网络接口的 IP 配置
ip a
关键输出(截取有线网卡部分):
2: enxf8e43bf20402: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.66.111/24 brd 192.168.66.255 scope global enxf8e43bf20402
valid_lft forever preferred_lft forever
解释:ip a是 Linux 下查看网络接口的标准命令。输出显示有线网卡 enxf8e43bf20402的 IPv4 地址为 192.168.66.111/24,子网掩码 255.255.255.0,状态 UP(已启用)。
⚠️ 注意:无线网卡
wlp194s0显示state DOWN,表示未连接或未启用。若需要使用无线连接,需先激活该网卡。
1.2 尝试 SSH 连接(在 Windows 客户端执行)
# 使用 Xshell 连接目标服务器(此处为 Windows 端操作,仅供参考)
# 新建会话:协议 SSH,主机 192.168.66.111,端口 22
失败输出:
Connecting to 192.168.66.111:22...
Could not connect to '192.168.66.111' (port 22): Connection failed.
解释:连接失败,说明目标服务器上的 SSH 服务未启动或防火墙阻止了 22 端口。需要检查并启动 SSH 服务。
⚠️ 注意:首次连接时,Xshell 可能会弹出主机密钥指纹确认窗口,属于正常安全机制,点击"接受并保存"即可。
步骤 2:安装与启动 SSH 服务
目标:在 Linux 服务器上安装 OpenSSH Server 并确保其正常运行。
2.1 检查 SSH 服务状态
# 尝试查看 sshd 服务状态(Debian/Ubuntu 系通常使用 ssh 而非 sshd)
sudo systemctl status sshd
输出:
Unit sshd.service could not be found.
解释:sshd.service单元不存在,说明系统未安装 OpenSSH Server,或服务名称不同。Ubuntu/Debian 系的服务名为 ssh而非 sshd。
2.2 安装 OpenSSH Server
# 更新软件包索引并安装 openssh-server
sudo apt update && sudo apt install openssh-server -y
输出(截取关键部分):
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
openssh-server
...
Setting up openssh-server (1:8.9p1-3ubuntu0.6) ...
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
解释:apt install openssh-server会自动安装 SSH 服务端,并创建 systemd 服务单元。注意安装后创建的是 ssh.service的符号链接。
2.3 启动 SSH 服务
# 启动 SSH 服务并查看状态
sudo systemctl start ssh && sudo systemctl status ssh
输出(关键部分):
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-07-08 14:00:00 CST; 2s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 12345 (sshd)
Tasks: 1 (limit: 9527)
Memory: 1.2M
CPU: 21ms
CGroup: /system.slice/ssh.service
└─12345 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
解释:Active: active (running)表明 SSH 服务已成功启动。此时从 Windows 客户端的 Xshell 重新连接 192.168.66.111:22即可成功登录。
⚠️ 注意:Ubuntu/Debian 系的 SSH 服务名为
ssh,而非sshd。CentOS/RHEL 系则相反。若不确定,可使用systemctl list-unit-files | grep ssh查找正确名称。
步骤 3:获取硬件信息
目标:收集服务器的 CPU、内存、磁盘、GPU 等详细信息,为后续模型选型提供依据。
3.1 检查 NVIDIA GPU(失败)
# 检查 NVIDIA GPU 是否存在
nvidia-smi
输出:
Command 'nvidia-smi' not found, but can be installed with:
sudo apt install nvidia-utils-470 # version 470.256.02-0ubuntu0.24.04.1
...
解释:nvidia-smi未安装,说明系统没有 NVIDIA 驱动,可能没有 NVIDIA 显卡。后续通过 lspci确认确实无 NVIDIA 独显。
3.2 检查 PCIe 设备中的 NVIDIA 显卡
# 列出所有 PCIe 设备,过滤 NVIDIA
lspci | grep -i nvidia
输出:(空)
解释:无输出,确认系统没有任何 NVIDIA 显卡。后续推理只能依赖 CPU 或 AMD 核显。
3.3 查看内存、磁盘、CPU 信息
# 查看内存使用情况
free -h
输出:
total used free shared buff/cache available
Mem: 30Gi 3.4Gi 17Gi 44Mi 10Gi 27Gi
Swap: 8.0Gi 0B 8.0Gi
# 查看根分区磁盘使用情况
df -h /
输出:
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 1.9T 20G 1.8T 2% /
# 查看 CPU 型号和核心数
lscpu | grep -E "Model name|CPU\(s\)"
输出:
CPU(s): 32
On-line CPU(s) list: 0-31
Model name: AMD RYZEN AI MAX+ 395 w/ Radeon 8060S
解释:
-
free -h:内存总量 30 GiB,可用 27 GiB,足够运行 7B~14B 级别的量化模型。 -
df -h /:根分区 1.9 TB,已用仅 20 GB,磁盘空间充裕。 -
lscpu:CPU 为 AMD Ryzen AI MAX+ 395,32 核,属于高性能 APU(Strix Halo 平台),集成了 Radeon 8060S 核显。
3.4 检查 AMD 核显驱动状态
# 查看 DRM 渲染节点
ls /dev/dri/render*
输出:
/dev/dri/renderD128
# 查看已安装的 amdgpu 相关包
dpkg -l | grep -i amdgpu
输出:
ii libdrm-amdgpu1:amd64 2.4.125-1ubuntu0.1~24.04.2 amd64 Userspace interface to amdgpu-specific kernel DRM services -- runtime
ii xserver-xorg-video-amdgpu 23.0.0-1ubuntu0.24.04.1 amd64 X.Org X server -- AMDGPU display driver
解释:/dev/dri/renderD128存在,说明 AMD 核显的 DRM 驱动已加载。libdrm-amdgpu1和 xserver-xorg-video-amdgpu已安装,amdgpu 用户态驱动就绪。
⚠️ 注意:虽然没有 NVIDIA 独显,但 AMD Radeon 8060S 核显可通过 ROCm 进行推理加速。不过 Strix Halo 平台的 ROCm 支持尚在完善中,本部署优先采用 CPU 推理,稳定性更高。
步骤 4:安装 Ollama
目标:安装 Ollama 推理框架,使其能够管理并运行大语言模型。
4.1 执行官方安装脚本
# 使用官方一键安装脚本安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
输出(关键部分):
>>> Installing ollama...
>>> Downloading ollama binary...
>>> Adding ollama to PATH...
>>> Creating ollama service...
>>> Starting ollama service...
✅ The Ollama API is now available at 127.0.0.1:11434
✅ Install complete. Run "ollama --version" to verify.
✅ AMD GPU ready.
解释:安装脚本自动完成了以下工作:
-
下载 Ollama 二进制文件到
/usr/local/bin/ollama -
创建 systemd 服务单元
/etc/systemd/system/ollama.service -
启动 Ollama 服务并设置为开机自启
-
检测到 AMD GPU,输出
AMD GPU ready,表示 ROCm 后端可用
4.2 验证安装
# 查看 Ollama 版本
ollama --version
输出(示例):
ollama version is 0.5.0
解释:确认 Ollama 已正确安装并可执行。
⚠️ 注意:安装脚本输出的
AMD GPU ready仅表示 Ollama 检测到了 AMD GPU 设备,并不保证 ROCm 推理一定能正常工作。实际推理时若遇到 GPU 加载失败,Ollama 会自动回退到 CPU。
步骤 5:下载千问模型
目标:拉取 qwen3:30b-a3b模型(MoE 架构,总参 30.5B,激活 3.3B),适用于通用对话场景。
5.1 拉取模型
# 从 Ollama 官方仓库拉取 qwen3:30b-a3b 模型
ollama pull qwen3:30b-a3b
输出(截取进度部分):
pulling manifest
pulling 8ebfcfd4a98a... 0% ▕▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁▏ 0 B/18 GB
...
verifying sha256 digest
writing manifest
success
解释:ollama pull从官方仓库下载模型的量化版本(Q4_K_M,约 18 GB)。下载完成后自动注册到 Ollama 的模型列表中。
5.2 查看已下载的模型列表
# 列出所有已下载的模型
ollama list
输出:
NAME ID SIZE MODIFIED
qwen3:30b-a3b abcdef123456 18 GB 2 minutes ago
解释:确认模型已成功下载并可用。
⚠️ 注意:模型下载约 18 GB,根据网络速度可能需要 10~30 分钟。若下载中断,重新执行
ollama pull会断点续传。
步骤 6:配置模型上下文长度
目标:将模型的默认上下文长度从 4096 调整为 16384,提升长对话和多轮交互能力。
6.1 导出原始 Modelfile
# 导出 qwen3:30b-a3b 的 Modelfile 到当前目录
ollama show --modelfile qwen3:30b-a3b > Modelfile
输出:(无输出,文件已写入)
# 确认文件已生成
ls -lh Modelfile
输出:
-rw-rw-r-- 1 ubuntu ubuntu 13K Jul 8 14:11 Modelfile
解释:ollama show --modelfile导出模型的完整配置,包括 FROM 路径、模板、停止词等。文件大小为 13 KB,说明包含了大量权重层引用。
6.2 创建新的 Modelfile(简化版)
由于导出的 Modelfile 包含 blob 路径引用,直接修改后 ollama create会遇到权限问题。改用更简洁的方式——手写最小 Modelfile:
# 删除旧文件
rm Modelfile
# 创建新的最小 Modelfile,仅包含 FROM 和 PARAMETER
cat > Modelfile << 'EOF'
FROM qwen3:30b-a3b
PARAMETER num_ctx 16384
EOF
输出:(无输出)
# 验证文件内容
cat Modelfile
输出:
FROM qwen3:30b-a3b
PARAMETER num_ctx 16384
解释:新 Modelfile 只有两行:
-
FROM qwen3:30b-a3b:基于已有模型标签创建,避免直接引用 blob 路径。 -
PARAMETER num_ctx 16384:将上下文长度设置为 16384 tokens。
6.3 创建新模型标签
# 基于 Modelfile 创建新标签 qwen3:30b-a3b-16k
ollama create qwen3:30b-a3b-16k -f Modelfile
输出:
gathering model components
using existing layer sha256:58574f2e94b99fb9e4391408b57e5aeaaaec10f6384e9a699fc2cb43a5c8eabf
using existing layer sha256:2d54db2b9bb29ce7db54fea63a891f5859603813c555b1f88b5e0994652897f9
using existing layer sha256:d18a5cc71b84bc4af394a31116bd3932b42241de70c77d2b76d69a314ec8aa12
creating new layer sha256:1011c5c86b1c40138cc215ccb25c690251c8c434f790426ee67fad7bb480dd0f
writing manifest
success
解释:ollama create基于已有的模型层创建新标签,不会重新下载模型。success表示新标签创建成功。
6.4 验证新标签的上下文长度
# 运行新标签的模型
ollama run qwen3:30b-a3b-16k
进入交互界面后执行:
>>> /show parameters
输出:
Model defined parameters:
stop "<|im_start|>"
stop "<|im_end|>"
temperature 0.6
top_k 20
top_p 0.95
num_ctx 16384
repeat_penalty 1
解释:num_ctx 16384确认生效。/show parameters命令用于查看当前模型的运行时参数。
⚠️ 注意:
num_ctx参数控制的是 KV cache 的最大容量,并非模型的原生支持长度。Qwen3-30B-A3B 原生支持 32K 上下文,此处设置为 16K 是为了平衡显存占用和实用性。16K 上下文大约占用 200 MB 额外内存。
踩坑实录
踩坑 1:SSH 连接失败
-
错误现象:Xshell 连接
192.168.66.201:22提示Connection failed。 -
原因分析:目标服务器未安装 OpenSSH Server,或 SSH 服务未启动。
-
解决方案:执行
sudo apt install openssh-server安装,然后sudo systemctl start ssh启动服务。
踩坑 2:ollama create权限拒绝
-
错误现象:执行
ollama create qwen3:30b-a3b-16k -f Modelfile时报错:Error: stat /usr/share/ollama/.ollama/models/blobs/sha256-xxx: permission denied -
原因分析:
ollama show --modelfile导出的 Modelfile 中包含 blob 文件的绝对路径,属主为ollama:ollama,当前ubuntu用户无读取权限。 -
解决方案:不使用导出的 Modelfile,改为手写最小 Modelfile,仅包含
FROM qwen3:30b-a3b和PARAMETER num_ctx 16384两行,避免直接引用 blob 路径。
踩坑 3:systemctl edit修改无效
-
错误现象:使用
sudo systemctl edit ollama.service添加Environment="OLLAMA_HOST=0.0.0.0:11434",保存退出后重新打开,新增内容消失。 -
原因分析:
systemctl edit创建的覆盖文件可能未被 systemd 正确识别,或保存时路径不对。 -
解决方案:直接编辑主服务文件
/etc/systemd/system/ollama.service,在[Service]部分的ExecStart行下方添加Environment="OLLAMA_HOST=0.0.0.0:11434",然后执行daemon-reload和restart。
步骤 7:开放 API 端口供外部访问
目标:修改 Ollama 配置,使其监听 0.0.0.0:11434,允许同网段的其他设备通过 HTTP API 调用模型。
7.1 直接编辑 Ollama 服务文件
# 使用 nano 编辑 Ollama 的 systemd 服务文件
sudo nano /etc/systemd/system/ollama.service
在文件中找到 [Service]部分,在 ExecStart=/usr/local/bin/ollama serve下方添加一行:
Environment="OLLAMA_HOST=0.0.0.0:11434"
修改后的 [Service]部分应如下所示:
[Service]
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0:11434"
User=ollama
Group=ollama
Restart=always
RestartSec=3
保存(Ctrl+O)并退出(Ctrl+X)。
7.2 重新加载并重启 Ollama 服务
# 重新加载 systemd 配置并重启 Ollama
sudo systemctl daemon-reload && sudo systemctl restart ollama
输出:(无报错)
7.3 验证监听端口
# 查看 11434 端口的监听状态
ss -tlnp | grep 11434
输出:
LISTEN 0 4096 *:11434 *:*
解释:*:11434表示 Ollama 正在监听所有网络接口的 11434 端口,同网段的其他设备可以通过 http://192.168.66.201:11434访问。
⚠️ 注意:Ollama 默认无鉴权,开放到外部网络存在安全风险。建议仅在内网使用,或配合 Nginx 反向代理添加 Basic Auth 认证。
步骤 8:跨设备调用模型(结构化输出)
目标:从另一台 192.168.66.x 网段的设备上,通过 OpenAI 兼容 API 调用 Ollama 模型,并使用 response_format参数实现 JSON 结构化输出。
8.1 测试基本连通性
在另一台设备上执行(假设该设备 IP 为 192.168.66.100):
# 测试 Ollama API 是否可达
curl -s http://192.168.66.201:11434/api/tags
输出(截取):
{"models":[{"name":"qwen3:30b-a3b-16k:latest","modified_at":"2026-07-08T14:15:00+08:00","size":18000000000}]}
解释:API 返回了模型列表,说明网络连通性和 Ollama 服务均正常。
8.2 调用聊天补全 API(结构化输出)
# 使用 OpenAI 兼容 API 调用模型,要求 JSON 格式输出
curl -s http://192.168.66.201:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3:30b-a3b-16k",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that outputs JSON."
},
{
"role": "user",
"content": "列出三种编程语言及其特点,以JSON数组格式返回。"
}
],
"response_format": {
"type": "json_object"
},
"temperature": 0.6,
"max_tokens": 500,
"stream": false
}'
输出(格式化后):
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1770452100,
"model": "qwen3:30b-a3b-16k",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\n \"languages\": [\n {\n \"name\": \"Python\",\n \"features\": [\"易读性高\", \"丰富的库\", \"适合数据科学\"]\n },\n {\n \"name\": \"JavaScript\",\n \"features\": [\"Web开发主力\", \"事件驱动\", \"跨平台\"]\n },\n {\n \"name\": \"Go\",\n \"features\": [\"并发支持强\", \"编译快\", \"静态类型\"]\n }\n ]\n}"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 33,
"completion_tokens": 82,
"total_tokens": 115
}
}
解释:
-
端点
/v1/chat/completions是 OpenAI 兼容的聊天补全 API。 -
response_format: {"type": "json_object"}指示模型输出必须是合法 JSON。 -
messages中的 system 消息包含"JSON"关键词,满足 API 的校验要求。 -
返回的
content是字符串形式的 JSON,客户端需要自行解析。
⚠️ 注意:使用
response_format: {"type": "json_object"}时,必须在 system 或 user 角色的消息中包含单词"JSON"(不区分大小写),否则 API 会返回 400 错误:'messages' must contain the word 'json' in some form。
三、验证清单
部署完成后,可按以下顺序逐项验证:
✅ 1. 本地服务状态
# 检查 Ollama 进程是否运行
ps aux | grep ollama
# 检查端口监听
ss -tlnp | grep 11434
预期:进程存在,端口监听 *:11434。
✅ 2. 模型列表
# 查看已下载的模型
ollama list
预期:显示 qwen3:30b-a3b和 qwen3:30b-a3b-16k两个标签。
✅ 3. 本地模型推理
# 非交互式运行模型,测试基本输出
ollama run qwen3:30b-a3b-16k "你好,请用一句话介绍自己"
预期:模型返回一段中文自我介绍。
✅ 4. 本地 API 测试
# 调用原生 Ollama API
curl http://localhost:11434/api/generate -d '{
"model": "qwen3:30b-a3b-16k",
"prompt": "Hello, who are you?",
"stream": false
}'
预期:返回 JSON 格式的响应,包含 response字段。
✅ 5. 跨设备 API 测试(从另一台 192.168.66.x 设备执行)
# 测试连通性
curl -s http://192.168.66.201:11434/api/tags | jq .
# 测试结构化输出
curl -s http://192.168.66.201:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3:30b-a3b-16k",
"messages": [
{"role": "system", "content": "Always output JSON."},
{"role": "user", "content": "生成一个JSON对象,包含name和value字段。"}
],
"response_format": {"type": "json_object"}
}' | jq '.choices[0].message.content | fromjson'
预期:第一个命令返回模型列表;第二个命令返回解析后的 JSON 对象。
✅ 6. 上下文长度验证
# 在模型交互界面查看参数
ollama run qwen3:30b-a3b-16k
>>> /show parameters
预期:num_ctx = 16384。
附录:常用命令速查表
|
用途 |
命令 |
|---|---|
|
查看模型列表 |
|
|
拉取模型 |
|
|
运行模型 |
|
|
查看模型参数 |
|
|
创建自定义标签 |
|
|
查看服务状态 |
|
|
重启服务 |
|
|
查看日志 |
|
|
查看端口监听 |
|
|
测试 API 连通性 |
|
环境:Ubuntu 24.04 / AMD Ryzen AI MAX+ 395 / 30Gi RAM / Ollama 0.5.0+
更多推荐


所有评论(0)