🌠Qwen3-Coder:如何在本地运行

使用 Unsloth 动态量化在本地运行 Qwen3-Coder-30B-A3B-Instruct 和 480B-A35B。

Qwen3-Coder 是 Qwen 的新一系列编码代理模型,提供 30B(Qwen3-Coder-Flash)和 480B 参数版本。 Qwen3-480B-A35B-Instruct 在编码性能上达到了与 Claude Sonnet-4、GPT-4.1 相媲美的 SOTA 水平,并且 Kimi K2,在 Aider Polygot 上取得 61.8%,并支持 256K(可扩展至 1M)令牌上下文。

我们还上传了具有原生 1M 上下文长度 的 Qwen3-Coder,通过 YaRN 扩展,并提供全精度 8bit 和 16bit 版本。 Unslotharrow-up-right 现在也支持对 Qwen3-Coder 的微调和 RL

circle-check

运行 30B-A3B运行 480B-A35B

circle-check

Qwen3 Coder - Unsloth 动态 2.0 GGUFs:

🖥️ 运行 Qwen3-Coder

下面是针对该模型 30B-A3B480B-A35B 变体的指南。

⚙️ 推荐设置

Qwen 为两个模型推荐以下推理设置:

temperature=0.7, top_p=0.8, top_k=20, repetition_penalty=1.05

  • Temperature 为 0.7

  • Top_K 为 20

  • Min_P 为 0.00(可选,但 0.01 效果良好,llama.cpp 默认是 0.1)

  • Top_P 为 0.8

  • 重复惩罚(Repetition Penalty)为 1.05

  • 聊天模板:

    {% code overflow="wrap" %}

    <|im_start|>user
    Hey there!<|im_end|>
    <|im_start|>assistant
    What is 1+1?<|im_end|>
    <|im_start|>user
    2<|im_end|>
    <|im_start|>assistant

    {% endcode %}

  • 推荐的上下文输出:65,536 令牌(可增加)。详情在此。

聊天模板/提示格式,换行未渲染

用于工具调用的聊天模板 (获取旧金山当前温度)。有关如何格式化工具调用的更多细节在此。

circle-info

提醒:该模型仅支持非思考模式,并且不会在其输出中生成 <think></think> 块。同时,不再需要指定 enable_thinking=False

运行 Qwen3-Coder-30B-A3B-Instruct:

要使我们的 Dynamic 4-bit 量化达到每秒 6+ 令牌的推理速度,至少需要 18GB 的统一内存 (VRAM 与 RAM 合计)或 仅 18GB 的系统内存 。作为经验法则,可用内存应与所用模型的大小相匹配或超过。例如,UD_Q8_K_XL 量化(全精度)为 32.5GB,将至少需要 33GB 的统一内存 (VRAM + RAM)或 33GB 的 RAM 以获得最佳性能。

注意: 模型可以在少于其总大小的内存下运行,但这会降低推理速度。只有在追求最快速度时才需要最大内存。

鉴于这是非思考模型,无需设置 thinking=False 并且模型不会生成 <think> </think> 块。

circle-info

请遵循上面的 最佳实践。它们与 480B 模型相同。

🦙 Ollama:运行 Qwen3-Coder-30B-A3B-Instruct 教程

  1. 安装 ollama 如果你还没有!你只能运行最多 32B 的模型。

  1. 运行模型!注意如果失败,你可以在另一个终端中调用 ollama serve!我们在 Hugging Face 上传中将所有修复和建议参数(如 temperature 等)包含在 params 中!

Llama.cpp:运行 Qwen3-Coder-30B-A3B-Instruct 教程

  1. 获取最新的 llama.cppGitHub 此处arrow-up-right。你也可以按照下面的构建说明。若你没有 GPU 或只想进行 CPU 推理,将 -DGGML_CUDA=ON 更改为 -DGGML_CUDA=OFF

  1. 你也可以直接通过 HuggingFace 拉取:

  2. 通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。你可以选择 UD_Q4_K_XL 或其他量化版本。

运行 Qwen3-Coder-480B-A35B-Instruct:

要使我们的 1-bit 量化达到每秒 6+ 令牌的推理速度,我们建议至少拥有 150GB 的统一内存 (VRAM 与 RAM 合计)或 仅 150GB 的系统内存 。作为经验法则,可用内存应与所用模型的大小相匹配或超过。例如 Q2_K_XL 量化为 180GB,将至少需要 180GB 的统一内存 (VRAM + RAM)或 180GB 的 RAM 以获得最佳性能。

注意: 模型可以在少于其总大小的内存下运行,但这会降低推理速度。只有在追求最快速度时才需要最大内存。

circle-info

请遵循上面的 最佳实践。它们与 30B 模型相同。

📖 Llama.cpp:运行 Qwen3-Coder-480B-A35B-Instruct 教程

对于 Coder-480B-A35B,我们将专门使用 Llama.cpp 以获得优化的推理和大量选项。

circle-check
  1. 获取最新的 llama.cppGitHub 此处arrow-up-right。你也可以按照下面的构建说明。若你没有 GPU 或只想进行 CPU 推理,将 -DGGML_CUDA=ON 更改为 -DGGML_CUDA=OFF

  2. 你可以直接使用 llama.cpp 下载模型,但我通常建议使用 huggingface_hub 要直接使用 llama.cpp,请执行:

    {% code overflow="wrap" %}

    {% endcode %}

  3. 或者,通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。你可以选择 UD-Q2_K_XL 或其他量化版本。

  4. 在对话模式下运行模型并尝试任意提示。

  5. 编辑 --threads -1 以设置 CPU 线程数, --ctx-size 262114 用作上下文长度, --n-gpu-layers 99 用于指定有多少层进行 GPU 卸载。如果你的 GPU 内存不足,请尝试调整它。如果只有 CPU 推理,则移除该设置。

circle-check
circle-check

🛠️ 提升生成速度

如果你有更多 VRAM,可以尝试卸载更多 MoE 层,或卸载整个层本身。

通常, -ot ".ffn_.*_exps.=CPU" 将所有 MoE 层卸载到 CPU!这可有效使所有非 MoE 层适配到 1 个 GPU,从而提高生成速度。你可以自定义正则表达式以在拥有更多 GPU 容量时适配更多层。

如果你有更多 GPU 内存,尝试 -ot ".ffn_(up|down)_exps.=CPU" 这会卸载上投影和下投影的 MoE 层。

尝试 -ot ".ffn_(up)_exps.=CPU" 如果你有更多 GPU 内存。这仅卸载上投影的 MoE 层。

你也可以自定义正则,例如 -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" 表示仅从第 6 层起卸载 gate、up 和 down MoE 层。

最新的 llama.cpp 版本arrow-up-right 也引入了高吞吐量模式。使用 llama-parallel。在此阅读更多內容 此处arrow-up-right。你还可以 将 KV 缓存量化到 4bits 例如以减少 VRAM / RAM 数据移动,这也可以加快生成过程。

📐如何适配长上下文(256K 到 1M)

要适配更长的上下文,你可以使用 KV 缓存量化 将 K 和 V 缓存量化为更低位数。由于减少了 RAM / VRAM 的数据移动,这也可以提升生成速度。K 量化的可选项(默认为 f16)包括下列内容。

--cache-type-k f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1

你应该使用具有 _1 变体以获得略微提高的准确性,尽管速度稍慢。例如 q4_1, q5_1

你也可以对 V 缓存进行量化,但你需要 使用 Flash Attention 编译 llama.cpp ,通过 -DGGML_CUDA_FA_ALL_QUANTS=ON,并使用 --flash-attn 来启用它。

我们还通过 YaRN 缩放上传了 100 万上下文长度的 GGUF 文件 此处.

🧰 工具调用修复

我们设法修复了通过 llama.cpp --jinja 进行的工具调用, 专门用于通过llama-server

  1. 进行服务的情况!如果你正在下载我们的 30B-A3B 量化文件,不用担心,因为这些已包含我们的修复。对于 480B-A35B 模型,请:

  2. 使用 下载 https://huggingface.co/unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF/tree/main/UD-Q2_K_XL 上的第一个文件以获取 UD-Q2_K_XL,并替换你当前的文件 snapshot_download

  3. 像平常一样,按 https://docs.unsloth.ai/basics/qwen3-coder-how-to-run-locally#llama.cpp-run-qwen3-tutorial 中的做法,这将自动覆盖旧文件 通过使用新的聊天模板--chat-template-file 。参见arrow-up-rightGGUF 聊天模板arrow-up-right

  4. chat_template.jinja

另外我们还制作了一个单一的 150GB UD-IQ1_M 文件(以便 Ollama 可用),位于 https://huggingface.co/unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF/blob/main/Qwen3-Coder-480B-A35B-Instruct-UD-IQ1_M.gguf

这应该能解决诸如: https://github.com/ggml-org/llama.cpp/issues/14915 之类的问题

使用工具调用

为了格式化工具调用的提示,让我们用一个示例来展示。 我创建了一个名为 get_current_temperature

"unit": unit,

💡prompt = tokenizer.apply_chat_template(messages, tokenize = False)

circle-info

性能基准 这些官方基准针对的是完整 BF16 检查点。要使用它,只需使用我们上传的 Q8_K_XL、Q8_0、BF16

检查点——你仍然可以对这些版本使用诸如 MoE 卸载之类的技巧!

以下是 480B 模型的基准:

智能编码(Agentic Coding)
基准
Qwen3‑Coder 480B‑A35B‑Instruct
Kimi‑K2
DeepSeek‑V3-0324
Claude 4 Sonnet

GPT‑4.1

37.5

30.0

2.5

35.5

25.3

Terminal‑Bench

69.6

SWE‑bench 经 OpenHands 验证(500 回合)

SWE‑bench 经 OpenHands 验证(500 回合)

70.4

SWE‑bench 经 OpenHands 验证(500 回合)

67.0

65.4

38.8

68.0

48.6

SWE‑bench 经 OpenHands 验证(100 回合)

SWE‑bench 经 OpenHands 验证(500 回合)

65.8

SWE‑bench 经 OpenHands 验证(500 回合)

72.7

63.8

SWE‑bench 经私有支架验证

26.3

22.3

13.0

27.7

SWE‑bench 经 OpenHands 验证(500 回合)

SWE‑bench 实况

54.7

47.3

13.0

53.3

31.5

SWE‑bench 多语言

25.8

19.8

7.5

24.8

SWE‑bench 经 OpenHands 验证(500 回合)

Multi‑SWE‑bench mini

27.0

20.7

SWE‑bench 经 OpenHands 验证(500 回合)

25.0

SWE‑bench 经 OpenHands 验证(500 回合)

Multi‑SWE‑bench flash

61.8

60.0

56.9

56.4

52.4

Aider‑Polyglot

31.1

25.2

12.8

31.1

16.5

Spider2

智能编码(Agentic Coding)
基准
Qwen3‑Coder 480B‑A35B‑Instruct
Agentic 浏览器使用
DeepSeek‑V3 0324
Claude 4 Sonnet

Claude Sonnet‑4

49.9

47.4

40.0

51.1

44.3

WebArena

55.8

42.7

36.0

47.4

49.6

Mind2Web

智能编码(Agentic Coding)
基准
Qwen3‑Coder 480B‑A35B‑Instruct
Agentic 浏览器使用
DeepSeek‑V3 0324
Claude 4 Sonnet

Agentic 工具使用

68.7

65.2

56.9

73.3

62.9

BFCL‑v3

77.5

70.7

59.1

80.5

SWE‑bench 经 OpenHands 验证(500 回合)

TAU‑Bench 零售

60.0

53.5

40.0

60.0

SWE‑bench 经 OpenHands 验证(500 回合)

最后更新于

这有帮助吗?