12 代酷睿核显笔记本配置 Ubuntu Server + Ollama + Qwen2.5-coder 大模型
12 代酷睿核显笔记本配置 Ubuntu Server + Ollama + Qwen2.5-coder 大模型
主题:在 12 代酷睿(Alder Lake)核显笔记本上,基于 Ubuntu Server 离线部署 Ollama 并启用 Intel 核显(Vulkan)加速,最终跑通 Qwen2.5-coder 大模型。
适用场景:无外网 / 内网隔离环境,从 2 号机把离线安装包传到 1 号机(x86_64 Linux),完成安装、配置与验证。
对常见问题进行了分析并给出解决方法。整个操作流程每个操作步骤都有「命令 + 解释 + 正确反馈」便于对照执行。
整理时间:2026-11-05
一、电脑配置与环境说明
本次部署涉及两台机器:1 号机是真正的部署目标机,2 号机只作为离线包的传输源机。
1.1 1 号机(Ollama 部署目标机)
|
项目 |
实际配置 / 取值 |
|
主机名 / 用户 |
maza@maza |
|
IP 地址 |
192.168.31.185 |
|
CPU 架构 |
x86_64(Intel/AMD 64 位) |
|
显卡 |
Intel Iris Xe Graphics (ADL GT2) |
|
显卡类型 |
核芯显卡(集成显卡 / iGPU),无独立显卡 |
|
平台代号 |
Alder Lake(英特尔第 12 代酷睿) |
|
核显规格 |
GT2 级别,Xe 架构,96 个执行单元(EU),常见于第 12 代酷睿移动标压 P/H 系列 |
|
内存 |
约 16 GB(系统可见 14.8 GiB) |
|
核显可用共享显存 |
11.1 GiB(Ollama 识别结果,来自系统内存) |
|
操作系统 |
Ubuntu Server(无桌面环境,使用 apt与 systemd) |
|
内核 / 显示环境 |
无 X11/Wayland,纯命令行(Vulkan 走无头 Headless 模式) |
|
Ollama 版本 |
0.40.13 |
|
二进制安装路径 |
/usr/local/bin/ollama |
|
依赖库路径 |
/usr/local/lib/ollama/ |
|
模型存储目录 |
/home/maza/.ollama/models |
|
目标大模型 |
Qwen2.5-coder(首测 qwen2.5-coder:1.5b,约 986 MB,核显友好) |
关于这块核显需要说明两点:
- ADL 是 Alder Lake 的缩写,即英特尔第 12 代酷睿处理器平台;GT2 是核显档次代号。二者组合就是「Iris Xe 96 EU」这一档核显。
- 核显没有独立显存(VRAM),它借用系统内存当显存用。所以上面看到的「11.1 GiB 可用显存」实际上是系统内存划出来的,并不是真实存在的独立显存——这也是核显跑大模型时速度受限的根本原因之一。
1.2 2 号机(离线包传输源机)
|
项目 |
说明 |
|
角色 |
存放离线安装包 ollama-linux-amd64.tar.zst,通过网络推送到 1 号机 |
|
网络位置 |
与 1 号机同网段(192.168.31.x) |
|
必备条件 |
能通过 ping/ ssh访问 1 号机的 192.168.31.185 |
之所以要「2 号机传包」而不是直接 curl 下载:内网隔离环境无法访问外网,只能提前在能联网的机器上下好包,再离线搬过去。
1.3 两机关系示意
离线安装包 部署目标
┌──────────────┐ scp (22 端口) ┌──────────────────────┐
│ 2 号机 │ ───────────────► │ 1 号机 │
│ 持有 .tar.zst │ │ maza@192.168.31.185 │
│ │ │ x86_64 + Iris Xe 核显 │
└──────────────┘ └──────────────────────┘
二、完整操作流程
以下「步骤 1」在 2 号机 执行,其余步骤都在 1 号机 执行。
步骤 0:前置条件确认
|
检查项 |
命令 / 说明 |
|
1 号机已开 SSH |
1 号机上 sudo systemctl enable --now ssh |
|
两机网络互通 |
2 号机 ping 192.168.31.185 |
|
22 端口放行 |
1 号机防火墙放行 SSH(默认 22) |
|
1 号机系统架构 |
uname -m→ x86_64 |
步骤 1:在 2 号机上,把离线包推送到 1 号机
# 在 2 号机执行:把当前目录下的离线包推到 1 号机的家目录
scp ollama-linux-amd64.tar.zst maza@192.168.31.185:~/
命令解释:
- scp:基于 SSH 的安全文件复制命令。
- ollama-linux-amd64.tar.zst:要传输的本地文件(注意是 amd64 / x86_64 包,不是 arm64)。
- maza@192.168.31.185:~/:目标为 1 号机的 maza 用户家目录(/home/maza/)。
- 首次连接会提示确认主机指纹(输入 yes),随后输入 1 号机 maza 用户的密码。
正确反馈:
ollama-linux-amd64.tar.zst 100% 1850MB 45.3MB/s 00:41
常用变体:
# 若 SSH 端口不是默认 22(例如 2222)
scp -P 2222 ollama-linux-amd64.tar.zst maza@192.168.31.185:~/
# 反向:在 1 号机上从 2 号机拉取(把 2 号机 IP 换成实际地址)
scp 用户名@2号机IP:~/ollama-linux-amd64.tar.zst ~/
# 校验是否传成功(在 2 号机执行,远程列出文件)
ssh maza@192.168.31.185 "ls -lh ~/ollama-linux-amd64.tar.zst"
步骤 2:登录 1 号机,清理旧文件并安装解压工具
# 从 2 号机登录 1 号机(也可直接在 1 号机的终端操作)
ssh maza@192.168.31.185
# 确认架构
uname -m # 期望输出: x86_64
# 安装 zstd(解压 .zst 必需)
sudo apt update && sudo apt install -y zstd
# 清理之前装错的 ARM 版本残留(如果做过)
sudo systemctl stop ollama
sudo rm -rf /usr/local/bin/ollama
sudo rm -rf /usr/local/lib/ollama
步骤 3:解压安装包
# 解压到临时目录(路径最可控,推荐)
mkdir -p ~/ollama-install
tar -I zstd -xf ~/ollama-linux-amd64.tar.zst -C ~/ollama-install
# 查看解压结果,确认结构
ls -R ~/ollama-install | head -n 30
期望看到的结构:
~/ollama-install/bin/ollama
~/ollama-install/lib/ollama/llama-server
~/ollama-install/lib/ollama/libggml-*.so
~/ollama-install/lib/ollama/cuda_v12/...
~/ollama-install/lib/ollama/cuda_v13/...
步骤 4:安装到系统目录
# 1) 主程序
sudo cp ~/ollama-install/bin/ollama /usr/local/bin/ollama
sudo chmod +x /usr/local/bin/ollama
# 2) 依赖库与后端引擎(关键:整个 lib/ollama 目录都要复制)
sudo mkdir -p /usr/local/lib/ollama
sudo cp -r ~/ollama-install/lib/ollama/* /usr/local/lib/ollama/
# 3) 更新动态链接库缓存
sudo ldconfig
(备选)直接解压到 /usr:
官方 amd64 包内是 bin/ + lib/ 结构,直接解压到 /usr 会自动得到 /usr/bin/ollama 与 /usr/lib/ollama,无需手动复制:
sudo tar -I zstd -xf ~/ollama-linux-amd64.tar.zst -C /usr
步骤 5:验证架构一致性(最容易漏的一步)
file /usr/local/bin/ollama
file /usr/local/lib/ollama/llama-server
正确反馈(两个都必须含 x86-64):
/usr/local/bin/ollama: ELF 64-bit LSB pie executable, x86-64, ...
/usr/local/lib/ollama/llama-server: ELF 64-bit LSB executable, x86-64, ...
若出现 ARM aarch64 → 说明包拿错了,回到步骤 1 重新传 amd64 包。
步骤 6:配置 systemd 服务并启用核显加速
sudo systemctl edit ollama
在编辑器中填入以下内容(只写需要新增的部分即可):
[Service]
# 启用 Intel 核显(关键,不加这行核显会被丢弃)
Environment="OLLAMA_IGPU_ENABLE=1"
# 启用 Vulkan 后端(核显走 Vulkan 加速)
Environment="OLLAMA_VULKAN=1"
保存退出(Nano:Ctrl+O → Enter → Ctrl+X;Vim::wq)。
核对覆盖文件已正确写入:
cat /etc/systemd/system/ollama.service.d/override.conf
(可选)让局域网其他机器也能访问 API:
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
步骤 7:修正数据目录权限
# 确保运行用户(User=ollama)的数据目录存在且归属正确
sudo mkdir -p /usr/share/ollama
sudo chown -R ollama:ollama /usr/share/ollama
如果你的服务不是以 ollama 用户运行,请先 systemctl cat ollama | grep User 确认实际用户,再对应用户名调整上面的命令。
步骤 8:重载并启动服务
sudo systemctl daemon-reload # 让 systemd 读取新的覆盖配置(必须)
sudo systemctl enable ollama # 设置开机自启
sudo systemctl start ollama # 启动服务
步骤 9:验证服务与核显是否生效
# 查看服务状态
sudo systemctl status ollama
✅ 正确反馈:
Active: active (running)
# 查看日志(重点看显卡识别)
journalctl -u ollama -n 30 --no-pager
✅ 核显生效的关键日志:
msg="inference compute" ... library=Vulkan ... name="Intel(R) Iris(R) Xe Graphics (ADL GT2)" ... type=iGPU total="11.1 GiB" available="10.0 GiB"
msg="vram-based default context" total_vram="11.1 GiB" default_num_ctx=4096
判断要点:library=Vulkan、type=iGPU、total_vram 不再是 0 B。
# 测试 API 是否可达
curl http://localhost:11434/api/tags
✅ 正确反馈: 返回 JSON,例如 {"models":[]}。
步骤 10:拉取并运行模型
# 先测试轻量模型(核显友好)
ollama run qwen2.5-coder:1.5b
✅ 正确反馈:
pulling manifest
pulling 29d8c98fa6b0: 100% ▕██████████▏ 986 MB
verifying sha256 digest
writing manifest
success
核显负载监控(可选):
sudo apt install -y intel-gpu-tools
sudo intel_gpu_top
运行模型时观察 Render/3D 引擎是否有负载波动,确认核显正在参与计算。
三、常见问题分析(本次踩坑汇总)
这一节把整个部署过程中遇到的 6 类问题按「现象 → 原因 → 结论」讲清楚,方便日后换机或重装时避开同样的坑。
3.1 问题一:安装包架构与系统架构不匹配(最核心的坑)
现象:
Failed to execute /usr/local/bin/ollama: Exec format error
systemd[1]: ollama.service: Main process exited, code=exited, status=203/EXEC
后续运行模型时又出现:
Error: 500 Internal Server Error: error starting llama-server:
fork/exec /usr/local/lib/ollama/llama-server: exec format error
原因:
1 号机是 x86_64 架构,但最初下载的是 ARM64(aarch64) 的安装包 ollama-linux-arm64.tar.zst。x86 的 CPU 无法执行 ARM 指令集的程序,所以一启动就报 Exec format error。
判断方法(一条命令定生死):
# 看系统架构
uname -m
# 正确输出: x86_64
# 看已安装文件的架构
file /usr/local/bin/ollama
如果 uname -m 是 x86_64,而 file 的结果写着 ARM aarch64,就是架构装错了。
最容易忽略的一点(重点):
Ollama 由两部分组成,两者架构必须一致:
- 前端守护进程:/usr/local/bin/ollama
- 后端推理引擎:/usr/local/lib/ollama/llama-server
当时出现过「只替换了主程序、没换 lib/ollama 目录」的情况:结果 ollama serve 能正常启动(主程序已是 x86-64),但一运行模型就报 exec format error(后端引擎还是 ARM 的)。所以务必用 file 命令同时检查这两个文件。
结论: 凡是看到 Exec format error / status=203/EXEC / exec format error,第一反应就是「架构不匹配」,先去核对 uname -m 和 file 的结果。
3.2 问题二:核显与独显的区别,以及 Ollama 默认会禁用核显
现象:
手动启动时日志显示显卡被「丢弃」,退回到纯 CPU:
msg="dropping integrated GPU; to enable, set OLLAMA_IGPU_ENABLE=1"
id=0 library=Vulkan name=Vulkan0 description="Intel(R) Iris(R) Xe Graphics (ADL GT2)"
msg="inference compute" id=cpu library=cpu ... total="14.8 GiB"
msg="vram-based default context" total_vram="0 B"
独显与核显的关键区别:
|
对比项 |
独立显卡(dGPU) |
核芯显卡(iGPU,本机情况) |
|
显存来源 |
自带独立 VRAM |
共享系统内存,无独立显存 |
|
显存容量 |
固定(如 8GB / 12GB) |
随内存变化(本机显示 11.1 GiB) |
|
Ollama 识别 |
默认直接识别并启用 |
默认被禁用,需手动开启 |
|
加速后端 |
CUDA(NVIDIA)/ ROCm |
Vulkan |
|
性能定位 |
强,可跑大模型 |
中低,适合 1.5B~3B 小模型 |
原因:
Ollama 出于稳定性考虑,默认不启用集成显卡(日志里的 dropping integrated GPU 就是被丢弃的意思)。想用核显,必须显式打开开关。
解决方法:
设置环境变量 OLLAMA_IGPU_ENABLE=1(配合 OLLAMA_VULKAN=1 启用 Vulkan 后端)。
结论: 没有独显 ≠ 不能用 GPU 加速。Intel 核显可以通过 Vulkan 后端参与推理,开启后日志里 library=Vulkan、type=iGPU、total_vram 不再为 0 B,即为生效。
3.3 问题三:.tar.zst 的解压方式错误
现象:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
原因:
.tar.zst 是 Zstandard(zstd) 压缩,不是 gzip。用 tar -xzf(-z 表示 gzip)去解压,自然报「not in gzip format」。
正确做法(三选一):
# 方式一:让 tar 显式走 zstd
tar --zstd -xf ollama-linux-amd64.tar.zst -C 目标目录
# 方式二:用 -I 指定 zstd 程序
tar -I zstd -xf ollama-linux-amd64.tar.zst -C 目标目录
# 方式三:分两步,先解 zst 再解 tar(最通用)
zstd -d ollama-linux-amd64.tar.zst -o ollama-linux-amd64.tar
tar -xf ollama-linux-amd64.tar -C 目标目录
前提:系统已装 zstd(sudo apt update && sudo apt install -y zstd)。Ollama 从 0.14.0 版本起改用 zstd 压缩,所以这个坑很常见。
3.4 问题四:解压目录层级与路径冲突
现象 A(层级不对):
解压后执行 chmod 报错:
chmod: cannot access '/usr/local/bin/ollama': No such file or directory
原因 A:
安装包内部结构是 bin/ollama、lib/ollama/...。如果直接 -C /usr/local/bin 解压,文件会落到 /usr/local/bin/bin/ollama,比预期多出一层 bin/ 目录。
现象 B(Not a directory):
tar: ollama/libggml-base.so: Cannot open: Not a directory
tar: ollama/libggml.so: Cannot create symlink to 'libggml.so.0': Not a directory
一大堆 Cannot open: Not a directory。
原因 B:
目标位置 /usr/local/bin/ollama 已经存在同名的「文件」(之前手动放进去的二进制)。而压缩包里要创建的是 ollama/ 目录。一个路径不可能既是文件又是目录,所以 tar 报「Not a directory」。
解决方法:
- 先删掉冲突的同名文件:sudo rm -f /usr/local/bin/ollama
- 解压到临时目录,再把文件分别复制到正确位置(推荐,路径最可控):
mkdir -p ~/ollama-install
tar -I zstd -xf ~/ollama-linux-amd64.tar.zst -C ~/ollama-install
# 得到 ~/ollama-install/bin/ollama 与 ~/ollama-install/lib/ollama/...
- 或在解压前先看清包内结构,再决定是否加 --strip-components:
tar tf ~/ollama-linux-amd64.tar.zst | head -n 10
结论: 不要盲目用 --strip-components;「先解压到临时目录,再精确复制」是最不容易出错的方式。
3.5 问题五:运行用户与数据目录权限
现象:
服务反复重启,日志报:
Couldn't find '/usr/share/ollama/.ollama/id_ed25519'. Generating new private key.
Error: could not create directory mkdir /usr/share/ollama: permission denied
ollama.service: Main process exited, code=exited, status=1/FAILURE
原因:
systemd 服务里配置了 User=ollama,该用户的 HOME 是 /usr/share/ollama。但这个目录不存在,且普通用户对系统目录 /usr/share/ 没有写权限,于是 mkdir /usr/share/ollama 失败,服务启动即退出,并触发无限自动重启(日志里 restart counter 已经涨到 499)。
解决方法(二选一):
- 方案 A(推荐,符合 Linux 规范):给服务用户建好数据目录
sudo mkdir -p /usr/share/ollama
sudo chown -R ollama:ollama /usr/share/ollama
- 方案 B:用环境变量把数据目录重定向到用户家目录在 systemd 覆盖配置里加:
Environment="OLLAMA_HOME=/home/maza/.ollama"
并确保目录归属正确:
mkdir -p /home/maza/.ollama
sudo chown -R maza:maza /home/maza/.ollama
结论: 只要日志里出现 permission denied + mkdir /usr/share/ollama,就是运行用户与数据目录权限对不上。查清 User= 是谁,再把目录归它所有。
3.6 问题六:systemd 覆盖文件(drop-in)的编辑方式
现象:
Found modifications outside of the staging area, which would be discarded.
/etc/systemd/system/ollama.service.d/override.conf:
after editing, new contents are empty, not writing file.
原因:
- 不能直接改 /lib/systemd/system/ollama.service:那是软件包自带的原始文件,升级时会被覆盖还原。
- 用 systemctl edit ollama 时,如果把内容全部删空或全部写成注释(# 开头),systemd 判定为「空配置」,拒绝写入。
- 覆盖文件里必须保留 [Service] 段头 + 至少一行有效键值。
正确的覆盖文件写法:
[Service]
Environment="OLLAMA_IGPU_ENABLE=1"
Environment="OLLAMA_VULKAN=1"
只需要写「要新增/修改」的部分,其余配置会自动从原始单元文件继承,不需要复制整份。
改完后必须重载:
sudo systemctl daemon-reload
sudo systemctl restart ollama
daemon-reload 是必须的,否则 systemd 不会读取新的覆盖文件。
结论: 用 systemctl edit 而非手改原始文件;覆盖文件要留有 [Service] 与有效配置;改完必须 daemon-reload。
四、命令速查表
|
操作 |
命令 |
|
查看系统架构 |
uname -m |
|
查看文件架构 |
file /usr/local/bin/ollama |
|
从 2 号机传包 |
scp ollama-linux-amd64.tar.zst maza@192.168.31.185:~/ |
|
解压 zst 包 |
tar -I zstd -xf 包名.tar.zst -C 目标目录 |
|
启动服务 |
sudo systemctl start ollama |
|
停止服务 |
sudo systemctl stop ollama |
|
重启服务 |
sudo systemctl restart ollama |
|
查看状态 |
sudo systemctl status ollama |
|
查看日志 |
journalctl -u ollama -n 50 --no-pager |
|
重载配置 |
sudo systemctl daemon-reload |
|
查看完整配置 |
systemctl cat ollama |
|
列出已装模型 |
ollama list |
|
删除模型 |
ollama rm 模型名 |
|
在线升级 Ollama |
curl -fsSL https://ollama.com/install.sh \| sh |
五、常见报错速查表
|
报错信息 |
根本原因 |
处理方式 |
|
gzip: stdin: not in gzip format |
用 gzip 方式解压 .zst文件 |
改用 tar -I zstd或 zstd -d |
|
Cannot open: Not a directory |
目标路径已有同名文件,无法再建同名目录 |
先 rm掉同名文件,或解压到临时目录再复制 |
|
Exec format error/ status=203/EXEC |
安装包架构与 CPU 架构不符 |
核对应为 amd64,重新下载/传输 |
|
error starting llama-server: exec format error |
后端引擎 llama-server架构不对(只换了主程序) |
file检查两个文件,整套重装 |
|
dropping integrated GPU; set OLLAMA_IGPU_ENABLE=1 |
Ollama 默认禁用核显 |
加环境变量 OLLAMA_IGPU_ENABLE=1 |
|
mkdir /usr/share/ollama: permission denied |
服务用户对数据目录无写权限 |
mkdir+ chown ollama:ollama |
|
after editing, new contents are empty |
systemctl edit内容为空/全注释 |
保留 [Service]+ 有效键值 |
|
address already in use |
11434 端口已被占用 |
sudo kill -9 $(lsof -t -i:11434)后重启 |
|
could not connect to ollama server |
后台服务未运行 |
用 systemd 启动服务,或先 ollama serve |
六、结论与建议
- 架构必须一致:x86_64 机器只能用 linux-amd64 包;且 bin/ollama 与 lib/ollama/llama-server 必须同为 x86-64。这是本次排查耗时最长的环节。
- 核显要手动开:Ollama 默认丢弃集显,必须 OLLAMA_IGPU_ENABLE=1 + Vulkan 后端才能用上 Intel Iris Xe。
- 权限要对上:systemd 服务以哪个用户跑,就要保证那个用户对数据目录有写权限。
- 模型选择:核显加速适合 1.5B~3B 的量化模型;7B 及以上模型会大量占用共享内存,导致系统卡顿。
- 离线部署最适合的场景:内网隔离环境用「2 号机下包 → scp 传 1 号机 → 本地解压安装」,比在所有机器上跑在线脚本更可控。
更多推荐



所有评论(0)