首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Qwen3.5 本地部署

Qwen3.5 本地部署

作者头像
Ai学习的老章
发布2026-03-02 20:52:50
发布2026-03-02 20:52:50
1060
举报

这一篇我们来聊点更实际的——怎么本地跑起来

397B 参数的模型,哪怕只激活 17B,完整模型也有 807GB。听起来吓人,但实际上,得益于 Unsloth 的 Dynamic 2.0 量化技术,192GB 内存的 Mac 就能跑 3-bit 版本,256GB 的 Mac 就能跑 4-bit 版本

Unsloth Dynamic 2.0 量化

Unsloth 其实是第一时间就发布了 Qwen3.5-397B-A17B 的 GGUF 格式文件(Qwen 给了 Unsloth day zero 访问权限),而且用的是他们家的 Dynamic 2.0 量化策略。

这个策略的核心和我上篇文章介绍的 AngelSlim 思路类似——不是所有层都用同一个精度

关键层会自动提升到 8-bit 甚至 16-bit,不那么重要的层才用低精度。这样即使整体是 4-bit 量化,模型的推理能力也不会崩。

不同量化版本的资源需求:

量化版本

磁盘大小

最低内存 / 显存需求

适用场景

BF16 / FP16(原始)

~807GB

至少 800GB 显存

几乎不可能本地跑

8-bit

~400GB

512GB RAM / VRAM

高端服务器

MXFP4 / UD-Q4_K_XL(4-bit)

~214GB

256GB Mac / RAM

256GB M3 Ultra

3-bit

~150GB

192GB RAM

192GB Mac Studio

UD-Q2_K_XL(2-bit)

~100GB

128GB RAM

最低推荐配置

💡 Unsloth 官方推荐:至少用 2-bit Dynamic 量化(UD-Q2_K_XL),这是精度和体积的平衡点。

有几个关键信息:

  • VRAM + RAM 加起来 ≥ 模型文件大小,就可以以相当不错的速度推理
  • 如果内存不够,也可以借助硬盘 / SSD 卸载(offloading),只是速度会慢一些
  • 1 块 24GB 显卡 + 256GB 内存,配合 MoE 卸载,可以跑 4-bit 版本,速度约 25+ tokens/s

方案一:llama.cpp 本地部署

llama.cpp 是目前跑 GGUF 模型最成熟的方案。Qwen3.5 本身就是混合架构(Gated Delta Networks + MoE),llama.cpp 已经做了支持。

1. 编译 llama.cpp
代码语言:javascript
复制
# 安装依赖(Ubuntu/Debian)
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y

# macOS 用户通常已有 Xcode Command Line Tools,直接 clone
git clone https://github.com/ggml-org/llama.cpp

# 编译(有 GPU 用 -DGGML_CUDA=ON,Mac 用 -DGGML_METAL=ON,纯 CPU 用 -DGGML_CUDA=OFF)
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON

cmake --build llama.cpp/build --config Release -j \
    --clean-first \
    --target llama-cli llama-mtmd-cli llama-server llama-gguf-split

cp llama.cpp/build/bin/llama-* llama.cpp

macOS M 系列芯片用户把 -DGGML_CUDA=ON 换成 -DGGML_METAL=ON 即可利用 Metal GPU 加速。

2. 下载模型
代码语言:javascript
复制
# 先安装下载工具
pip install huggingface_hub hf_transfer

# 下载 4-bit 版本(约 214GB,适合 256GB Mac)
hf download unsloth/Qwen3.5-397B-A17B-GGUF \
    --local-dir unsloth/Qwen3.5-397B-A17B-GGUF \
    --include "*MXFP4_MOE*"

# 或者下载 2-bit 版本(约 100GB,适合 128GB Mac / 内存较小的机器)
hf download unsloth/Qwen3.5-397B-A17B-GGUF \
    --local-dir unsloth/Qwen3.5-397B-A17B-GGUF \
    --include "*UD-Q2_K_XL*"
3. 运行推理

Qwen3.5 支持两种模式:思考模式(Thinking)快速模式(Non-Thinking),两者需要不同的采样参数。

思考模式(适合复杂推理、数学、编程):

代码语言:javascript
复制
export LLAMA_CACHE="unsloth/Qwen3.5-397B-A17B-GGUF"

./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-397B-A17B-GGUF:MXFP4_MOE \
    --ctx-size 16384 \
    --temp 0.6 \
    --top-p 0.95 \
    --top-k 20 \
    --min-p 0.00

快速模式(适合日常对话、简单问答):

代码语言:javascript
复制
./llama.cpp/llama-cli \
    -hf unsloth/Qwen3.5-397B-A17B-GGUF:MXFP4_MOE \
    --ctx-size 16384 \
    --temp 0.7 \
    --top-p 0.8 \
    --top-k 20 \
    --min-p 0.00 \
    --chat-template-kwargs "{\"enable_thinking\": false}"

📌 关键参数差异:思考模式用 temp=0.6, top_p=0.95,非思考模式用 temp=0.7, top_p=0.8

其他常用参数调整:

  • --threads 32:CPU 线程数,根据你的 CPU 核心数调整
  • --ctx-size 16384:上下文窗口,最大支持 262,144
  • --n-gpu-layers 2:GPU 层卸载数,显卡内存不够就减小,纯 CPU 就移除

方案二:部署为 API 服务(llama-server)

如果你想把 Qwen3.5 部署成 OpenAI 兼容的 API 服务,用 llama-server 非常方便:

代码语言:javascript
复制
./llama.cpp/llama-server \
    --model unsloth/Qwen3.5-397B-A17B-GGUF/MXFP4_MOE/Qwen3.5-397B-A17B-MXFP4_MOE-00001-of-00006.gguf \
    --alias "unsloth/Qwen3.5-397B-A17B" \
    --temp 0.6 \
    --top-p 0.95 \
    --ctx-size 16384 \
    --top-k 20 \
    --min-p 0.00 \
    --port 8001

服务启动后,就可以用标准的 OpenAI Python 库调用:

代码语言:javascript
复制
from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8001/v1",
    api_key="sk-no-key-required",
)

completion = client.chat.completions.create(
    model="unsloth/Qwen3.5-397B-A17B",
    messages=[
        {"role": "user", "content": "用 Python 写一个快速排序"},
    ],
)
print(completion.choices[0].message.content)

这意味着你可以把 Qwen3.5 无缝接入所有支持 OpenAI API 格式的工具——Qwen Code、Claude Code、Cline、OpenClaw、OpenCode 等等。

方案三:Transformers 直接推理

如果你有靠谱的 GPU 集群,Hugging Face Transformers 提供了最简单的一行命令:

代码语言:javascript
复制
# 启动 OpenAI 兼容服务
transformers serve --model Qwen/Qwen3.5-397B-A17B --port 8000 --continuous-batching

# 或者直接命令行对话
transformers chat Qwen/Qwen3.5-397B-A17B

方案四:SGLang / vLLM 高性能部署

对于生产环境部署,SGLang 和 vLLM 是更专业的选择:

SGLang

代码语言:javascript
复制
python -m sglang.launch_server \
    --model-path Qwen/Qwen3.5-397B-A17B \
    --port 8000 \
    --tensor-parallel-size 8 \
    --context-length 262144 \
    --reasoning-parser qwen3

vLLM

代码语言:javascript
复制
vllm serve Qwen/Qwen3.5-397B-A17B \
    --port 8000 \
    --tensor-parallel-size 8 \
    --max-model-len 262144 \
    --reasoning-parser qwen3

⚠️ 这两个方案都需要多卡(至少 8 块 A100 / H100),--tensor-parallel-size 8 就是 8 卡张量并行。

方案五:Apple Silicon 专属(MLX)

Mac 用户还有一个选择——MLX 框架:

代码语言:javascript
复制
# 纯文本推理
pip install mlx-lm
mlx_lm.chat --model Qwen/Qwen3.5-397B-A17B

# 视觉 + 文本推理(原生多模态)
pip install mlx-vlm
mlx_vlm.chat --model Qwen/Qwen3.5-397B-A17B

工具调用(Tool Calling)

Qwen3.5 最大的亮点之一就是 Agent 能力。本地部署后,通过 llama-server 的 OpenAI 兼容 API 就可以直接使用工具调用:

代码语言:javascript
复制
import json
from openai import OpenAI

# 定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "add_numbers",
            "description": "Add two numbers together",
            "parameters": {
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "First number"},
                    "b": {"type": "number", "description": "Second number"},
                },
                "required": ["a", "b"],
            },
        },
    },
]

# 工具函数映射
def add_numbers(a, b):
    return a + b

MAP_FN = {"add_numbers": add_numbers}

# 调用
client = OpenAI(
    base_url="http://127.0.0.1:8001/v1",
    api_key="sk-no-key-required",
)

response = client.chat.completions.create(
    model="unsloth/Qwen3.5-397B-A17B",
    messages=[{"role": "user", "content": "123456 加上 789012 等于多少?"}],
    tools=tools,
    tool_choice="auto",
)

# 处理工具调用
for tool_call in response.choices[0].message.tool_calls:
    fn_name = tool_call.function.name
    args = json.loads(tool_call.function.arguments)
    result = MAP_FN[fn_name](**args)
    print(f"工具调用: {fn_name}({args}) = {result}")

推荐的采样参数总结

参数

思考模式(Thinking)

快速模式(Non-Thinking)

temperature

0.6

0.7

top_p

0.95

0.8

top_k

20

20

min_p

0

0

repeat_penalty

1.0(关闭)

1.0(关闭)

最大上下文

262,144

262,144

建议输出长度

32,768 tokens

32,768 tokens

如何选择适合你的方案?

场景

推荐方案

硬件要求

Mac 用户尝鲜

llama.cpp + GGUF(2-bit 或 3-bit)

128-192GB 统一内存

Mac 高配用户

llama.cpp + MXFP4

256GB M3/M4 Ultra

个人 GPU 服务器

llama.cpp + llama-server

1×24GB GPU + 256GB RAM

生产环境

SGLang / vLLM

8×A100 / H100

纯 CPU

llama.cpp(去掉 GPU 参数)

256GB+ RAM,速度较慢

最后

能在 MacBook 上跑一个和 GPT-5.2 正面对抗的模型,放在两年前简直不敢想。虽然 397B 的模型跑起来还是需要不小的投入,但 Unsloth Dynamic 2.0 量化 + MoE 架构的稀疏激活,已经把门槛拉到了"一台高配 Mac"的水平。

对了,如果你之前跑过 Qwen3 的 GGUF,这次升级也很简单——下载新的 GGUF 文件,启动命令几乎不变,模板都是兼容的。

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Unsloth Dynamic 2.0 量化
  • 方案一:llama.cpp 本地部署
    • 1. 编译 llama.cpp
    • 2. 下载模型
    • 3. 运行推理
  • 方案二:部署为 API 服务(llama-server)
  • 方案三:Transformers 直接推理
  • 方案四:SGLang / vLLM 高性能部署
  • 方案五:Apple Silicon 专属(MLX)
  • 工具调用(Tool Calling)
  • 推荐的采样参数总结
  • 如何选择适合你的方案?
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档