news 2026/3/28 1:42:37

如何实现数学问题求解推理速度提升4倍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何实现数学问题求解推理速度提升4倍

概述

大语言模型能够解决复杂的数学问题。然而,要使其在规模上高效运行,仅有一个强大的模型检查点是不够的。您需要合适的服务堆栈、量化策略和解码方法——这些通常分散在不同的工具中,无法很好地协同工作。团队最终需要管理容器、转换脚本和临时代码,才能比较BF16与FP8,或者测试推测解码设置。

本文展示了如何使用某中心NeMo-Skills库来管理某中心TensorRT-LLM,从而构建一个快速、可复现的推理流水线。这个流水线是我们在2024年赢得人工智能数学奥林匹克奖时所使用配置的简化版本,它在两个某中心H100 GPU上,通过FP8量化和ReDrafter推测解码实现了4倍的批量推理加速。相同的工作流程可以在单个工作站上运行,也可以轻松扩展到集群,只需极少改动。

关键步骤

通过本文,您将学习如何:

  1. 准备一个OpenMath模型并将其量化为FP8 TensorRT-LLM引擎。
  2. 训练并集成用于推测解码的ReDrafter草案模型。
  3. 启动一个优化的推理服务器,可选择通过安全的代码沙箱进行工具调用。
  4. 在BF16、FP8和FP8+ReDrafter配置之间对延迟和吞吐量进行基准测试。

设置环境

第一步是建立一个一致且隔离的环境。我们将使用一个某中心PyTorch NGC容器,并安装必要的库:用于模型优化的TensorRT-LLM和用于整体流水线管理的NeMo-Skills。FP8推理需要支持FP8推理的某中心GPU,包括某中心Ada Lovelace、Hopper、Blackwell或Rubin架构。本文假设有两个GPU可用。

容器设置与库安装

nvcr.io/nvidia/pytorch:25.05-py3容器中运行以下命令来安装TensorRT-LLM和NeMo-Skills:

# 确保没有冲突的TensorRT安装,然后安装TensorRT-LLM[-f/etc/pip/constraint.txt]&&:>/etc/pip/constraint.txt pip uninstall-ytensorrt pip3installtensorrt_llm==1.1.0rc0# 安装NeMo-Skillspipinstallgit+https://github.com/NVIDIA/NeMo-Skills.git

准备模型权重

下一步是准备我们的大语言模型。我们将下载nvidia/OpenMath-Nemotron-14B-Kaggle模型,并使用FP8量化将其转换为优化的TensorRT-LLM引擎。

关于FP8量化的说明:FP8(8位浮点)量化效率很高,但需要支持E4M3 FP8的GPU(如某中心Hopper GPU)。对于其他GPU,建议使用int8_wo(仅权重的8位整数量化),它不需要校准。

下载模型权重和数据集

生成一个Hugging Face令牌并将其导出为环境变量。然后使用Hugging Face CLI下载必要的模型和数据集。

# 导出您的Hugging Face令牌exportHF_TOKEN=hf_YOUR_HUGGING_FACE_TOKEN# 安装Hugging Face CLIpipinstall-U"huggingface_hub[cli]"# 下载14B参数的主模型huggingface-cli download nvidia/OpenMath-Nemotron-14B-kaggle --local-dir OpenMath-Nemotron-14B-kaggle# 下载用于校准的OpenMathReasoning数据集huggingface-cli download nvidia/OpenMathReasoning --repo-type dataset --local-dir OpenMathReasoning
为FP8量化准备校准数据集

对于FP8量化,一个能够代表推理数据的小型校准数据集至关重要。我们将使用OpenMathReasoning数据集的子集来创建它。提供了一个示例来生成HuggingFace格式的数学校准数据集。

转换并量化为TensorRT-LLM引擎

现在,将Hugging Face模型转换为TensorRT-LLM引擎,应用FP8量化,并使用准备好的校准数据集。此步骤生成FP8量化后的LLM推理引擎。

ns convert\--input_modelOpenMath-Nemotron-14B-kaggle\--output_modelOpenMath-Nemotron-14B-kaggle-fp8-trtllm\--convert_fromhf\--convert_totrtllm\--num_gpus2\--dtypefp8\--hf_model_namenvidia/OpenMath-Nemotron-14B-kaggle\--model_typeqwen\--max_input_len30000\--max_seq_len32000\--no-trt_reuse_tmp_engine\--calib_dataset./calibration_dataset

此命令执行后,您的FP8 LLM引擎已准备就绪,可以进行部署。

使用ReDrafter加速推理

为了进一步提高推理效率,我们集成了ReDrafter。这种推测解码技术使用一个更小的“草案”模型来预测令牌,使主LLM能够更快地生成响应。ReDrafter是由某机构开发的基于RNN的推理方法。其实现与TensorRT-LLM库支持的大多数模型兼容。

安装和训练ReDrafter

首先,安装ReDrafter库。草案模型的Tokenizer和训练数据应与基础模型使用的保持一致。如果无法获取原始训练数据,也可以使用基础模型的输出来训练草案模型。

# 安装ReDrafter库pipinstall--no-binary=protobuf --ignore-requires-python\"git+https://github.com/apple/ml-recurrent-drafter.git#egg=recurrent-drafting[dev,train]"# 训练ReDrafter模型ns run_cmd--log_dir./logs/\torchrun--nproc_per_node=2-mnemo_skills.training.train_redrafter\--llm_name_or_path'OpenMath-Nemotron-14B-kaggle'\--dataset"OpenMathReasoning"\--dataset_split"tir"\--bf16True\--output_dir"redrafter_output"\--num_train_epochs1\--per_device_train_batch_size1\--gradient_accumulation_steps4\--save_strategy"no"\--learning_rate0.001\--weight_decay0.\--warmup_ratio0.1\--lr_scheduler_type"cosine"\--logging_steps20\--tf32True\--model_max_length2048\--dataset_nrows50000\--drafter_predict_n_tokens3\--drafter_num_layers2\--rnnTrue\--phasetrain\--report_towandb# 如果不使用wandb则删除此行

在训练过程中,观察redrafter2_top1分数。如果该分数高于0.6,则表明接近2倍的运行时性能(60%的步骤接受接下来三个起草的令牌)。

为ReDrafter模型构建TensorRT-LLM引擎

接下来,我们将把训练好的ReDrafter模型转换为TensorRT-LLM检查点,然后将其与我们的主LLM结合,创建最终的、加速的TensorRT-LLM引擎。

首先,克隆TensorRT-LLM仓库以访问其转换脚本:

gitclone https://github.com/NVIDIA/TensorRT-LLM/

然后,将训练好的ReDrafter PyTorch检查点转换为TensorRT-LLM检查点。

# FP8量化步骤中生成的基础模型中间检查点exportBASE_TRTLLM_CKPT=$(pwd)/OpenMath-Nemotron-14B-kaggle-fp8-trtllm-tmp-ckpt# 训练好的草案检查点exportREDRAFTER_PYTORCH_CKPT=$(pwd)/redrafter_output/redrafter__redrafter_OpenMath-Nemotron-14B-kaggle_n_3_lr_0.001_layers_2exportREDRAFTER_TRTLLM_CKPT=$(pwd)/OpenMath-Nemotron-14B-kaggle-fp8-draft-ckptcd./TensorRT-LLM/examples/redrafter python convert_checkpoint.py\--base_model_checkpoint_dir$BASE_TRTLLM_CKPT\--drafter_model_dir$REDRAFTER_PYTORCH_CKPT\--output_dir$REDRAFTER_TRTLLM_CKPT\--dtypebfloat16\--tp_size2\--redrafter_num_beams1\--redrafter_draft_len_per_beam3cd../../../

最后,构建集成了草案头用于推测解码的TensorRT-LLM引擎。

trtllm-build\--checkpoint_dir$REDRAFTER_TRTLLM_CKPT\--output_dirOpenMath-Nemotron-14B-kaggle-fp8-redrafter-trtllm\--gemm_pluginfp8\--use_paged_context_fmha=enable\--max_batch_size32\--max_seq_len32000\--max_input_len32000\--max_num_tokens32000\--speculative_decoding_modeexplicit_draft_tokens\--max_beam_width1\--kv_cache_typepaged

至此,您的TensorRT-LLM引擎已通过ReDrafter技术增强,可以开始服务了!

基准测试与结果

我们准备了一个配套的笔记本,您可以自己尝试完整的流程。该笔记本使用了与上述“容器设置”部分相同的容器设置和安装步骤,并使用两个H100 GPU进行推理。在该笔记本中,您可以:

  • 在不同的TensorRT-LLM引擎(BF16、FP8、FP8+ReDrafter)上运行推理。
  • 比较性能基准,如首个令牌时间和每设备吞吐量。
  • 探索高级控制,例如在固定时间后提前停止或在完成前N次生成后终止。
  • 使用工具调用运行推理。

以下是一组基准测试结果的示例:

指标BF16FP8FP8+ReDrafter
总生成时间(秒)144.264.730.5
平均样本吞吐量(令牌/秒)34.675.2138.5

表 1. 在两个H100 GPU上不同配置的TensorRT-LLM性能对比

完整的基准测试和代码可在笔记本中找到。更多结果请查看AIMO-2获奖方案论文。

可选:启用工具调用和代码执行沙箱

OpenMath LLM是一个强大的工具指令推理模型。这意味着它不仅生成文本,还能在安全的沙箱中编写和执行Python代码来解决问题。在配套笔记本中,我们提供了如何启动LLM服务器及其伴随的代码执行沙箱的示例。

其交互流程如下:

  1. LLM生成包裹在<tool_call></tool_call>令牌中的Python代码。
  2. 推理引擎提取此代码并将其发送到沙箱。
  3. 沙箱执行代码并返回结果。
  4. 输出被反馈给LLM以继续生成或完成其答案。

以下是此类交互的一个示例:

<tool_call> # 初始化一个列表来存储有效的基数 valid_bases = [] # 检查从10开始的基数 for b in range(10, 10000): # 任意大的上限 num1 = 9 * b + 7 num2 = b + 7 if num1 % num2 == 0: valid_bases.append(b) print(f"Found base: {b}") # 对有效的基数求和 sum_bases = sum(valid_bases) print(f"Sum: {sum_bases}") # 如果和超过1000,则取模1000 if sum_bases > 1000: result = sum_bases % 1000 else: result = sum_bases print(f"Final Result: {result}") </tool_call>

输出:

Found base: 21 Found base: 49 Sum: 70 Final Result: 70

要在配套笔记本中关闭工具调用,请使用get_model而不是get_code_execution_model,如NeMo-Skills文档所示。

您可以亲自尝试。运行配套笔记本来在您的硬件上对这些性能改进进行基准测试,并体验工具调用功能。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 2:10:08

Deno终极指南:用现代JavaScript技术栈构建跨平台应用

Deno终极指南&#xff1a;用现代JavaScript技术栈构建跨平台应用 【免费下载链接】deno denoland/deno: 是一个由 Rust 编写的新的 JavaScript 和 TypeScript 运行时&#xff0c;具有安全、快速和可扩展的特点。适合对 JavaScript、TypeScript 以及想要尝试新的运行时的开发者。…

作者头像 李华
网站建设 2026/3/27 4:04:50

Qwen-Image图像生成模型完整部署指南:从环境搭建到实战应用

Qwen-Image图像生成模型完整部署指南&#xff1a;从环境搭建到实战应用 【免费下载链接】Qwen-Image 我们隆重推出 Qwen-Image&#xff0c;这是通义千问系列中的图像生成基础模型&#xff0c;在复杂文本渲染和精准图像编辑方面取得重大突破。 项目地址: https://ai.gitcode.c…

作者头像 李华
网站建设 2026/3/27 12:29:58

NotchDrop终极指南:将MacBook刘海屏变身高效文件管理中心

NotchDrop终极指南&#xff1a;将MacBook刘海屏变身高效文件管理中心 【免费下载链接】NotchDrop Use your MacBooks notch like Dynamic Island for temporary storing files and AirDrop 项目地址: https://gitcode.com/gh_mirrors/no/NotchDrop 还在为MacBook的刘海屏…

作者头像 李华
网站建设 2026/3/27 1:10:36

3大核心功能解密:nteract如何重新定义交互式计算体验?

3大核心功能解密&#xff1a;nteract如何重新定义交互式计算体验&#xff1f; 【免费下载链接】nteract &#x1f4d8; The interactive computing suite for you! ✨ 项目地址: https://gitcode.com/gh_mirrors/nt/nteract 在数据科学和机器学习快速发展的今天&#xf…

作者头像 李华
网站建设 2026/3/27 16:57:17

Parsr智能文档解析实战:构建企业级数据自动化流水线

Parsr智能文档解析实战&#xff1a;构建企业级数据自动化流水线 【免费下载链接】Parsr Transforms PDF, Documents and Images into Enriched Structured Data 项目地址: https://gitcode.com/gh_mirrors/pa/Parsr 在数字化浪潮中&#xff0c;企业面临着海量文档数据的…

作者头像 李华
网站建设 2026/3/27 3:10:02

终极Python效率工具包:50+实用应用10行代码搞定一切

终极Python效率工具包&#xff1a;50实用应用10行代码搞定一切 【免费下载链接】qxresearch-event-1 Python hands on tutorial with 50 Python Application (10 lines of code) xiaowuc2 项目地址: https://gitcode.com/gh_mirrors/qx/qxresearch-event-1 还在为重复性…

作者头像 李华