前言

最近入手了一台搭载骁龙 X2 Elite (X2E-96-100) 的轻薄本,18 核 Oryon CPU + 85 TOPS Hexagon NPU,这配置不拿来跑本地 AI 简直是浪费。之前已经写过 X2 Elite 的架构解析和 边缘AI应用开发,这次打算系统性地从零开始,手把手带你在这台 ARM64 笔记本上搭建一套完整的本地 AI 开发环境。

整篇分三个部分,包括:

  • 第一部分:WSL2 安装 + Ubuntu ARM64 基础环境配置
  • 第二部分:Ollama 本地大模型部署与性能实测
  • 第三部分:Open WebUI + Continue.dev 打造本地 AI 编程助手

不管你是刚拿到 X2 Elite 新机,还是已经用了一阵子但没折腾过开发环境,跟着走就完事了。

第一部分:WSL2 安装与 Ubuntu ARM64 基础环境配置

一. 为什么用 WSL2 而不是直接装 Linux?

骁龙 X2 Elite 跑的是 Windows 11 ARM64 原生系统。你可以选择直接在 Windows 上装工具链,但我个人强烈建议走 WSL2 路线,原因有三:

  • Linux 生态对 AI 工具链的支持远比 Windows ARM64 完善。Ollama、Python 依赖、各种推理框架在 Linux ARM64 上都能原生编译运行。
  • WSL2 的性能损耗几乎可以忽略。微软和高通在 ARM64 架构上对 WSL2 做了深度优化,CPU 和内存性能跟原生 Linux 差距在 5% 以内。
  • 环境隔离。WSL2 里随便折腾,搞崩了重装也就几分钟的事,不污染宿主机。

二. 前置检查

在动手之前,先把几个前置条件确认好。

2.1 确认 Windows 版本

打开 PowerShell,执行:

winver

确保你的 Windows 版本是 Windows 11 24H2 或更高。X2 Elite 对老版本 Windows 的支持不完整,尤其是 NPU 驱动需要 24H2 才能正常工作。

2.2 确认 ARM64 架构

echo $env:PROCESSOR_ARCHITECTURE

输出应该是 ARM64
在这里插入图片描述

三. 安装 WSL2

3.1 启用 WSL 功能

以管理员身份打开 PowerShell,执行下面两条命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

执行完必须重启电脑,别偷懒跳过。

3.2 安装 WSL2 内核更新包

从微软官方下载 ARM64 版本的 WSL2 内核更新包:

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi

下载后双击安装,一路下一步就行。

3.3 将 WSL2 设为默认版本

重启后打开 PowerShell:

wsl --set-default-version 2

这条命令把 WSL2 设为默认版本,后续安装的所有发行版都会自动走 WSL2。

3.4 安装 Ubuntu ARM64

wsl --install -d Ubuntu-24.04

等它下载安装完,会弹出 Ubuntu 终端窗口让你创建用户名和密码。这里建议用户名用小写英文,密码别太简单。

安装完成后验证一下:

wsl -l -v

输出应该显示 Ubuntu-24.04 的 VERSION2

四. Ubuntu ARM64 基础环境配置

4.1 换国内镜像源

默认的 Ubuntu 源在国外,从国内下载慢得让人想砸电脑。进 WSL2 的 Ubuntu 终端,先备份再换源:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

这里用了清华源,你也可以换成阿里云 mirrors.aliyun.com 或者中科大 mirrors.ustc.edu.cn

4.2 更新系统

sudo apt update && sudo apt upgrade -y

这一步取决于你的网速,一般 3-5 分钟搞定。更新完顺手装一些必备工具:

sudo apt install -y build-essential cmake git curl wget vim net-tools

4.3 配置 Git

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

4.4 安装 Python 3.12 和虚拟环境

Ubuntu 24.04 自带了 Python 3.12,但缺一些开发用的头文件:

sudo apt install -y python3 python3-pip python3-venv python3-dev

验证一下版本:

python3 --version

输出 Python 3.12.x 就对了。

4.5 配置 pip 国内镜像

mkdir -p ~/.pip
cat > ~/.pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF

4.6 安装 VS Code 远程开发支持

回到 Windows 的 PowerShell,装 VS Code(如果还没装的话)。X2 Elite 上 VS Code 有原生 ARM64 版本,直接在官网下载 ARM64 安装包即可。

然后在 WSL2 的 Ubuntu 终端里执行:

code .

这句会自动安装 VS Code Server 到 WSL2 里,之后你就可以在 Windows 的 VS Code 里直接操作 WSL2 里的文件了。

4.7 验证 ARM64 环境

在 WSL2 终端里跑:

uname -m

输出 aarch64,说明 Linux 内核也是 ARM64 的。再跑:

lscpu

你会看到 18 个 CPU 核心,这就是 X2 Elite 的那 18 核 Oryon——12 个性能核 + 6 个能效核。
在这里插入图片描述

到这里,WSL2 + Ubuntu ARM64 的基础环境就搭好了。回顾一下我们完成了哪些事:

  • 在 X2 Elite 的 Windows 11 ARM64 上启用了 WSL2
  • 安装了 Ubuntu 24.04 ARM64
  • 配置了国内镜像源
  • 装好了 Python、Git 等基础开发工具
  • 打通了 VS Code 远程开发

第二部分:Ollama 本地大模型部署与性能实测

上一部分我们把 WSL2 + Ubuntu ARM64 的基础环境搭好了,这里就开始进入正题——在 X2 Elite 上跑本地大模型。

选型上,我直接用 Ollama。原因很简单:Ollama 对 ARM64 支持非常好,安装一条命令搞定,模型管理傻瓜化,还提供了 REST API 方便后续对接。对比 vLLM 和 llama.cpp 裸跑,Ollama 在易用性上吊打。

另外,很多人以为 ARM64 平台上跑大模型会很折腾,实际情况比想象中好得多——Ollama 官方已经提供了 ARM64 的原生二进制,主流开源模型(Qwen2.5、Llama 3.2、DeepSeek-R1 等)都有 ARM64 兼容的 GGUF 量化版本。

一. Ollama 安装

1.1 一条命令安装

进 WSL2 的 Ubuntu 终端:

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

1.2 验证安装

ollama --version

输出类似 ollama version is 0.11.x 就说明装好了。

1.3 启动 Ollama 服务

Ollama 安装后默认不会自动启动服务,需要手动拉起:

ollama serve

这个命令会在前台运行 Ollama 服务,占用 11434 端口。如果你想让它在后台跑:

nohup ollama serve > /tmp/ollama.log 2>&1 &

建议先在前台跑着,方便观察日志。

二. 模型选择与拉取

2.1 模型推荐

X2 Elite 的内存一般是 16GB 或 32GB LPDDR5x,这意味着我们不能跑太大的模型。经过实测,以下模型在这台机器上表现最佳:

模型 参数量 量化 内存占用 推理速度
Qwen2.5 7B Q4_K_M ~4.5GB 18-22 tok/s
Llama 3.2 3B Q4_K_M ~2.2GB 35-40 tok/s
DeepSeek-R1-Distill-Qwen 7B Q4_K_M ~4.7GB 16-20 tok/s
Qwen2.5-Coder 7B Q4_K_M ~4.5GB 18-22 tok/s

重点推荐 Qwen2.5:7BQwen2.5-Coder:7B。Qwen 系列在 ARM64 上的兼容性是最好的,而且中文能力强,写代码也靠谱。Llama 3.2:3B 胜在速度快,适合做实时对话。

2.2 拉取模型

ollama pull qwen2.5:7b
ollama pull qwen2.5-coder:7b
ollama pull llama3.2:3b

每个模型大概 4-5GB,三个模型总共约 13GB。网速快的话 15 分钟内搞定。

2.3 查看已安装模型

ollama list

输出你会看到已拉取的模型列表和大小。

三. 运行模型与实测

3.1 交互式对话

最基础的用法:

ollama run qwen2.5:7b

进去后直接打字聊天。试几个典型问题:

>>> 用 Python 写一个快速排序算法
>>> 解释一下 Transformer 的注意力机制
>>> 帮我写一段 C++ 的智能指针使用示例

回答质量日常辅助编码和知识问答完全够用。

3.2 实测性能数据

我在这台 X2E-96-100(32GB 内存版本)上做了完整的性能测试,数据如下:

Qwen2.5:7B (Q4_K_M)

  • 首 token 延迟:0.8s
  • 生成速度:18-22 tokens/s
  • 内存占用:4.5GB
  • CPU 占用:85%-95%(全核负载)
  • 温度:68℃(持续推理 30 分钟后)

Qwen2.5-Coder:7B (Q4_K_M)

  • 首 token 延迟:0.9s
  • 生成速度:17-20 tokens/s
  • 内存占用:4.5GB
  • 代码补全场景下表现优秀,上下文理解准确

Llama 3.2:3B (Q4_K_M)

  • 首 token 延迟:0.3s
  • 生成速度:35-40 tokens/s
  • 内存占用:2.2GB
  • 速度快但中文能力弱于 Qwen

说实话,18-22 tok/s 的速度已经超过大多数人的阅读速度了,日常使用完全不会觉得卡,而且这是完全离线的——没网也能用,数据不出本地。

3.3 关于 NPU 加速

很多人问:X2 Elite 的 Hexagon NPU 有 85 TOPS 算力,Ollama 能不能用上?

目前的实际情况是:不能

Ollama 底层用的是 llama.cpp,llama.cpp 目前的推理主要跑在 CPU 上(ARM NEON 指令集加速)。Hexagon NPU 需要模型通过 QNN(Qualcomm Neural Network)工具链转换后才能运行,而 llama.cpp 还没有支持 QNN 后端。

但这不意味着 NPU 在这台机器上是摆设。往下看我们讲 Continue.dev 的时候,我会提到怎么利用 NPU 跑 embedding 模型和代码补全的小模型,这些场景下 NPU 的优势很明显。
在这里插入图片描述

四. Ollama REST API 使用

Ollama 自带 REST API,这对后续对接 Open WebUI 和 Continue.dev 至关重要。

4.1 测试 API

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "用一句话介绍高通骁龙X2 Elite",
  "stream": false
}'

返回的 JSON 里 response 字段就是模型输出。

4.2 列出模型

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

4.3 Python 调用示例

装一下 ollama 的 Python 库:

pip install ollama

写个简单的 Python 脚本测试:

import ollama

response = ollama.chat(
    model="qwen2.5:7b",
    messages=[
        {"role": "user", "content": "你好,介绍一下你自己"}
    ]
)
print(response["message"]["content"])

跑一下看看,如果正常返回就说明整个链路通了。

五. 设置 Ollama 开机自启

每次手动 ollama serve 太麻烦,配一个 systemd 服务让它开机自动跑:

sudo useradd -r -s /bin/false ollama
sudo tee /etc/systemd/system/ollama.service > /dev/null << 'EOF'
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=default.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama

注意 OLLAMA_HOST=0.0.0.0 这行,这让 Ollama 监听所有网络接口。如果你只在 WSL2 内部使用可以去掉,但如果想让 Windows 宿主机也能访问(后面 Open WebUI 需要),就必须加上

验证服务状态:

sudo systemctl status ollama

看到 active (running) 就 OK 了。

X2 Elite 跑 7B 模型 18-22 tok/s,这个速度超出了我的预期。CPU 全核跑满的情况下,温度控制得不错,持续推理半小时也就 68℃。

第三部分:Open WebUI + Continue.dev 打造本地 AI 编程助手

这是本文重点:把本地模型变成一个真正好用的 AI 助手。

具体做两件事:

  1. Open WebUI:给 Ollama 套一个 ChatGPT 同款界面,让你在浏览器里跟本地模型聊天,支持多轮对话、文档上传、Markdown 渲染。
  2. Continue.dev:VS Code 里的 AI 编程助手插件,对接本地 Ollama,实现 Tab 补全、代码解释、重构等功能。相当于你自己部署了一个 GitHub Copilot,但完全离线、免费。

这两个工具的 ARM64 兼容性都经过了验证,在 X2 Elite 上跑没有任何问题。

一. Open WebUI 部署

1.1 为什么选 Open WebUI

市面上给 Ollama 做前端的工具不少,但 Open WebUI 是综合体验最好的:

  • 界面跟 ChatGPT 几乎一模一样,学习成本为零
  • 原生支持 Ollama,不需要额外配置
  • 支持多模型切换、对话历史管理、文档上传(RAG)

1.2 安装 Docker

WSL2 的 Ubuntu 里装 Docker:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

第二条命令把你的用户加到 docker 组里,执行完需要退出 WSL2 再重新进来才能生效:

exit
wsl

验证:

docker --version
docker run hello-world

hello-world 正常跑完说明 Docker 没毛病。

1.3 部署 Open WebUI

一条命令:

docker run -d \
  --name open-webui \
  --restart always \
  -p 3000:8080 \
  -v open-webui:/app/backend/data \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:main

参数解释:

  • -d:后台运行
  • --name open-webui:容器名称
  • --restart always:Docker 启动时自动重启
  • -p 3000:8080:把容器的 8080 端口映射到宿主机的 3000 端口
  • -v open-webui:/app/backend/data:持久化对话数据
  • -e OLLAMA_BASE_URL=http://host.docker.internal:11434:指向宿主机上的 Ollama 服务

1.4 访问 Open WebUI

在 Windows 浏览器里打开:

http://localhost:3000

第一次打开会让你注册一个管理员账号。
这个账号数据存在本地 Docker 卷里,不存在云端,随便填。

进去后在左上角选择模型,你应该能看到之前 Ollama 里下载的 qwen2.5:7b、qwen2.5-coder:7b、llama3.2:3b。

1.5 测试对话

选 Qwen2.5:7B,试几个问题:

  • “解释一下 Rust 的所有权机制”
  • “帮我写一个 Python Flask 的 Hello World”
  • “把下面这段代码翻译成 C++:[粘贴一段 Python 代码]”

响应速度跟直接在终端里跑 Ollama 一致,18-22 tok/s,体验流畅。

二. Continue.dev 配置

Continue.dev 是目前最流行的开源 AI 编程助手,能直接对接本地 Ollama。装上它,你的 VS Code 就有了一个完全离线的 AI 编程伙伴。

2.1 安装 Continue 插件

在 VS Code 扩展商店搜索 Continue,安装即可。
X2 Elite 上 VS Code 是原生 ARM64 版本,Continue 插件完全兼容。

2.2 配置 Continue 对接 Ollama

安装完成后,VS Code 左侧会出现 Continue 的图标,点击后在右侧面板打开。也可以按 Ctrl+I 快速呼出聊天面板,Ctrl+L 呼出内联编辑。

点击 Continue 面板右下角的设置齿轮,或者直接编辑配置文件。Continue 的配置文件在:

  • Windows: %USERPROFILE%\.continue\config.json
  • 也可以在 Continue 面板里通过 UI 配置

配置内容如下:

{
  "models": [
    {
      "title": "Qwen2.5-Coder",
      "provider": "ollama",
      "model": "qwen2.5-coder:7b",
      "apiBase": "http://localhost:11434"
    }
  ],
  "tabAutocompleteModel": {
    "title": "Llama 3.2 3B",
    "provider": "ollama",
    "model": "llama3.2:3b",
    "apiBase": "http://localhost:11434"
  },
  "embeddingsProvider": {
    "provider": "ollama",
    "model": "nomic-embed-text",
    "apiBase": "http://localhost:11434"
  },
  "systemMessage": "你是一个专业的编程助手。回答要简洁准确,代码示例要完整可运行。"
}

注意几个要点:

  • tabAutocompleteModel 用了 Llama 3.2 3B,因为它推理速度最快(35-40 tok/s),Tab 补全对延迟非常敏感,不能用 7B 模型。
  • embeddingsProvider 需要额外下载 nomic-embed-text 模型:
ollama pull nomic-embed-text

2.3 Continue 功能实测

2.3.1 Tab 自动补全

打开一个 Python 文件,正常写代码。当你输入到一个可以推断后续的位置时,Continue 会弹出灰色的补全建议,按 Tab 接受。

实测效果:写简单函数体、for 循环、列表推导式时命中率很高。复杂业务逻辑的补全质量不如大模型,但毕竟是 3B 的小模型,在离线环境下足够使用了。

2.3.2 对话式辅助 (Ctrl+I)

选中一段代码,按 Ctrl+I,输入:

给这段代码添加详细的类型注解和 docstring

Continue 会把 Qwen2.5-Coder:7B 的回复直接插入到编辑器里。你也可以在右侧面板自由聊天。

2.3.3 代码解释 (Ctrl+L)

选中一段代码,按 Ctrl+L,Continue 会在聊天面板里解释这段代码。适合阅读别人的代码或者回顾自己之前写的复杂逻辑。

2.3.4 @符号上下文

Continue 支持 @符号引用上下文,例如:

  • @file app.py — 引用当前项目的某个文件
  • @folder src/ — 引用整个文件夹
  • @url https://... — 引用网页文档
  • @terminal — 引用最近的终端输出

这个功能在调试的时候特别实用,直接把终端报错喂给模型:

@terminal 这个报错怎么解决?

三. 全链路验证

走到这里,整套系统就搭完了。做一个完整的端到端测试:

场景:用 Python 写一个文件批量重命名工具

  1. 在 VS Code 里新建 rename_tool.py
  2. 写注释描述需求:
    # 批量重命名工具:遍历指定目录,将所有 .jpg 文件按 "IMG_0001.jpg" 格式重命名
    
  3. Continue 的 Tab 补全开始给出代码建议,逐段接受
  4. 遇到不确定的地方,按 Ctrl+I 选中代码块,问 “这段代码有没有边界条件没处理?”
  5. Continue 指出文件名冲突的情况没处理,给出改进建议
  6. 最终在终端运行,有报错的话 @terminal 粘贴给 Continue 分析

整个流程下来,除了思路是我自己的,代码编写和调试的效率提升了至少 50%。关键是全程离线,代码不会上传到任何云端服务器。

最终总结

全篇内容整合下来,我们在骁龙 X2 Elite 上搭好了一套完整的本地 AI 开发环境:

组件 作用 部署位置
WSL2 + Ubuntu 24.04 基础运行环境 Windows 宿主机
Ollama 本地大模型推理引擎 WSL2 Ubuntu
Open WebUI 类 ChatGPT 交互界面 Docker (WSL2)
Continue.dev VS Code AI 编程助手 VS Code 插件

关键性能指标总结:

  • Qwen2.5:7B 推理速度:18-22 tok/s
  • Qwen2.5-Coder:7B 代码生成:17-20 tok/s
  • Llama 3.2:3B Tab 补全延迟:< 500ms
  • 全系统内存占用:~12GB(含三个模型)
  • 完全离线运行,零网络依赖

X2 Elite 作为一台 ARM64 笔记本,18 核 Oryon CPU 全核跑推理半小时,68℃ 的温度控制和 18-22 tok/s 的速度,在本地 AI 场景下的表现相当不错。

后面如果有时间,还可以尝试在 X2 Elite 上用 QNN 工具链把模型转换到 NPU 上跑推理——那才是真正把 85 TOPS 算力用起来。
在这里插入图片描述
本系列所有操作均基于:

  • 骁龙 X2 Elite (X2E-96-100)
  • 32GB / Windows 11 24H2
  • WSL2 / Ubuntu 24.04 ARM64

其他 X2 Elite SKU 型号步骤通用。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐