TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

腾讯混元 Hunyuan-A13B 用 vLLM 部署

用 vLLM 在四张卡上部署腾讯混元 Hunyuan-A13B-Instruct,兼容 OpenAI 接口;含思考模式开关和天气工具调用示例。

这篇适合谁

适合有多卡 GPU 服务器、想把腾讯混元 Hunyuan-A13B-Instruct 放到 OpenAI 兼容接口后面的开发者。读完你能启动服务,会按请求开关思考模式,并且跑通一次完整的工具调用。

vLLM 能做什么

vLLM 是一个高性能的大模型推理和服务框架。它基于 PagedAttention 管理 KV 缓存,减少显存浪费,在长文本和高并发场景下更能保持吞吐。它提供 completions 和 chat completions 接口,兼容 OpenAI 协议,现有的 OpenAI 客户端代码可以直接调用[1]。

环境和安装

基础环境是 Ubuntu 22.04、Python 3.12、CUDA 12.8 和 PyTorch 2.8.0[1]。先把 pip 的索引换成清华镜像,再安装 vllm==0.10.0、openai==1.90.0 和 modelscope==1.25.0,版本号都是固定的[1]。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install vllm==0.10.0
pip install openai==1.90.0
pip install modelscope==1.25.0

装完先做自检。确认 NVIDIA 驱动、CUDA 版本和 PyTorch 的 CUDA 编译版本能对上,可以分别用 nvidia-smi 和一行 PyTorch 命令查看[1]。这一步是最常见的排错入口,版本不一致时,后面的服务往往根本起不来。

下载权重

下载完成后,模型目录会出现在你设置的 cache_dir 下面。后面 --model 参数要指向的,是这个目录里模型所在的完整路径,两处路径必须一致。路径是否正确,是启动阶段最先排查的内容。

用 ModelScope 的 snapshot_download 下载,模型名是 Tencent-Hunyuan/Hunyuan-A13B-Instruct。cache_dir 要改成你实际保存的路径,直接用示例里的占位文字会出错[1][2]。

from modelscope import snapshot_download
model_dir = snapshot_download('Tencent-Hunyuan/Hunyuan-A13B-Instruct', cache_dir='请修改我!!!', revision='master')

思考模式怎么开关

Hunyuan-A13B-Instruct 默认使用慢思考,也就是推理模式。关闭它有两种方法,一是在请求的 extra_body 里传 {"chat_template_kwargs": {"enable_thinking": false}},二是在提示词前加上 /no_think 前缀[1]。

如果希望服务端把推理过程作为单独的 reasoning_content 字段返回,启动时要加上 --enable-reasoning,并指定正确的推理解析器 hunyuan_a13b[1]。少了这两个参数,客户端拿不到 reasoning_content,这是常见的疑惑来源。

启动服务

下面的命令用 vLLM 的 OpenAI API 服务器,在 8085 端口上跑,使用四张卡。它设置了 --max-model-len 8192 和 --gpu_memory_utilization 0.9,并把模型名定为 Hunyuan-A13B-Instruct[1]。官方给出的显存预算建议是 4 张 H20[1]。服务就绪时,日志会出现 Application startup complete[1]。

CUDA_VISIBLE_DEVICES=0,1,2,3 python -m vllm.entrypoints.openai.api_server \
  --model /请修改我!!!/Tencent-Hunyuan/Hunyuan-A13B-Instruct \
  --served-model-name Hunyuan-A13B-Instruct \
  --max-model-len 8192 \
  --tensor-parallel-size 4 \
  --port 8085 \
  --trust_remote_code \
  --gpu_memory_utilization 0.9 \
  --enable-reasoning \
  --reasoning-parser hunyuan_a13b

几个参数最值得调整。--tensor-parallel-size 是张量并行的分片数,通常与使用的 GPU 数相同[1]。--max-model-len 限制的是单个请求输入加输出的总长度,值越大占用的显存越多,容易触发显存不足[1]。出现这种情况时,可以把 --gpu_memory_utilization 下调到 0.8 或 0.7[1]。--trust_remote_code 允许加载模型仓库里的自定义代码,有些模型必须打开它才能正确初始化[1]。

服务起来后,用 curl 访问模型列表,确认接口可用[1]。

curl http://127.0.0.1:8085/v1/models

用 Python 调用

测试脚本一次发送三个问题:一句日常问候,问模型是谁;一道 AIME 2025 的数学题;以及一个用 Python 写快速排序的请求[1]。整体评价是三个回答都不错,自我认知清晰,数学题的推理和最终答案正确,代码的注释、解释和测试用例也完整[1]。

这种组合很有参考价值。日常问答看的是基本对话能力,数学题考验的是长推理,代码题检验的是输出格式和完整性。三类问题放在一起跑,能比单看一个问题更快地发现服务是否正常。

客户端的基础地址是 http://127.0.0.1:8085/v1,API Key 填占位符 EMPTY[1]。注意端口要和启动命令里的 --port 一致。

from openai import OpenAI

openai_api_key = "EMPTY"
openai_api_base = "http://127.0.0.1:8085/v1" # 使用正确的端口

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

对话请求里设置 temperature=0 和 max_tokens=8000,并通过 chat_template_kwargs 打开思考[1]。

response = client.chat.completions.create(
    model="Hunyuan-A13B-Instruct",
    messages = [{"role": "user", "content": prompts[i]}],
    temperature=0,
    max_tokens=8000,
    extra_body={
        "chat_template_kwargs": {"enable_thinking": True}, # 默认开启思考,设置为False则关闭
    }
)

返回的 message 中,reasoning_content 和 content 是分开的两个字段[1]。做数学题的测试用的是一道 AIME 2025 的题目,题目答案为 70,模型最终给出的答案也是 70[1]。

工具调用

工具调用要额外加两个参数,启动命令里增加 --tool-call-parser hunyuan_a13b 和 --enable-auto-tool-choice[1][2]。

CUDA_VISIBLE_DEVICES=0,1,2,3 python -m vllm.entrypoints.openai.api_server \
  --model /请修改我!!!/Tencent-Hunyuan/Hunyuan-A13B-Instruct \
  --served-model-name Hunyuan-A13B-Instruct \
  --max-model-len 8192 \
  --tensor-parallel-size 4 \
  --port 8085 \
  --trust_remote_code \
  --gpu_memory_utilization 0.9 \
  --tool-call-parser hunyuan_a13b \
  --enable-auto-tool-choice \
  --enable-reasoning \
  --reasoning-parser hunyuan_a13b

官方 README 中有两处没有更新。在 vLLM 里,工具调用解析器的值应为 hunyuan_a13b,而推理解析器已经集成在 vLLM 中,不需要额外处理[1][2]。

示例中的天气函数是模拟的,接收 location、date 和 unit 三个参数,返回固定的天气描述。真实环境需要接入外部天气接口[1]。

normalized_unit = "°C" if unit == "celsius" else "°F"
# 这里返回一个模拟结果,真实场景可替换为外部 API 调用
return f"{location}{date}多云,气温 28{normalized_unit},湿度 70%,东北风 3 级。"

工具调用分三步走。先把包含 tool_calls 的 assistant 消息加入对话历史,再追加一条 role 为 tool 的消息,并带上对应的 tool_call_id,最后再发一次请求,让模型基于工具结果写出最终回答[1]。在深圳天气的测试中,模型最终回答为多云、28°C、湿度 70%、东北风 3 级,内容与模拟结果一致[1]。

常见问题

启动失败时,先看日志里是否出现显存不足的报错,再看模型路径是否存在。确认 CUDA_VISIBLE_DEVICES 列出的卡数和 --tensor-parallel-size 一致,两者不一致时,服务会因为分片数对不上而无法正常启动。

如果思考内容很长,导致回答迟迟不出来,可以按前文的方法在请求里关闭思考,或在提示词前加 /no_think,再比较两种输出的差别。

最常见的问题是显存不足。先降低 --gpu_memory_utilization,再考虑缩短 --max-model-len。客户端的 model 字段必须与 --served-model-name 一致,否则请求会失败[1]。

本文改编自 Datawhale 开源项目 self-llm 中的混元 Hunyuan-A13B-Instruct vLLM 部署教程[1],原文以 Apache-2.0 许可证发布。

来源

  1. 1
    02-Hunyuan-A13B-Instruct-vLLMDatawhale self-llm (Apache-2.0)
  2. 2
    tencent/Hunyuan-A13B-InstructHugging Face (Tencent)

引用本页: 腾讯混元 Hunyuan-A13B 用 vLLM 部署. TellWorld, https://www.tellworld.net/zh/practice/practice-hunyuan-a13b-vllm. 更新于 2026-11-14

相关动态