Ollama 部署与模型加载实战记录
一、前置信息1.1 操作系统与环境项目值操作系统Ubuntu 24.04 LTS内核架构x86_64主机名ubuntu-GTR-Pro1.2 硬件配置组件规格CPUAMD Ryzen AI MAX 395 w/ Radeon 8060S32 核内存30 GiB可用约 27 GiB磁盘1.9 TB NVMe SSD可用 1.8 TBGPU无独立 NVIDIA 显卡集成 AMD Radeon 8060S 核显RDNA 3.5NPUAMD XDNA2未使用1.3 网络信息项目值本机 IP192.168.66.111目标网段192.168.66.0/24SSH 端口22默认1.4 软件栈软件版本/说明Ollama最新版通过官方安装脚本安装模型qwen3:30b-a3b→ 定制标签qwen3:30b-a3b-16k推理后端OllamaCPU 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磁盘空间充裕。lscpuCPU 为 AMD Ryzen AI MAX 39532 核属于高性能 APUStrix 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 额外内存。踩坑实录踩坑 1SSH 连接失败错误现象Xshell 连接192.168.66.201:22提示Connection failed。原因分析目标服务器未安装 OpenSSH Server或 SSH 服务未启动。解决方案执行sudo apt install openssh-server安装然后sudo systemctl start ssh启动服务。踩坑 2ollama 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 路径。踩坑 3systemctl edit修改无效错误现象使用sudo systemctl edit ollama.service添加EnvironmentOLLAMA_HOST0.0.0.0:11434保存退出后重新打开新增内容消失。原因分析systemctl edit创建的覆盖文件可能未被 systemd 正确识别或保存时路径不对。解决方案直接编辑主服务文件/etc/systemd/system/ollama.service在[Service]部分的ExecStart行下方添加EnvironmentOLLAMA_HOST0.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下方添加一行EnvironmentOLLAMA_HOST0.0.0.0:11434修改后的[Service]部分应如下所示[Service] ExecStart/usr/local/bin/ollama serve EnvironmentOLLAMA_HOST0.0.0.0:11434 Userollama Groupollama Restartalways RestartSec3保存CtrlO并退出CtrlX。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:0008: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。附录常用命令速查表用途命令查看模型列表ollama list拉取模型ollama pull 模型名运行模型ollama run 模型名查看模型参数/show parameters交互模式下创建自定义标签ollama create 新标签 -f Modelfile查看服务状态sudo systemctl status ollama重启服务sudo systemctl restart ollama查看日志journalctl -u ollama -f查看端口监听ss -tlnp \| grep 11434测试 API 连通性curl http://localhost:11434/api/tags环境Ubuntu 24.04 / AMD Ryzen AI MAX 395 / 30Gi RAM / Ollama 0.5.0