ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleNLP 推理优化实战指南:高性能环境变量调优与投机解码加速

PaddleNLP 推理优化实战指南:高性能环境变量调优与投机解码加速 人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读本文基于 PaddleNLP 推理文档体系中的《Practical Optimization》与《Speculative Decoding Tutorial》系统梳理 PaddleNLP 在 LLM 推理侧的完整优化手段一类是通过环境变量FLAGS对 GEMM、GQA、内存、Append Attention、MLA、allreduce 等算子与资源进行细粒度调优的高性能推理最佳实践另一类是通过speculate_method系列参数启用 inference_with_reference、MTP、EAGLE 等投机解码算法用草稿-验证范式显著降低解码延迟。读完本文你将掌握 PaddleNLP 推理服务的环境变量调优清单、量化模型A8W8 / FP8 / weight_only的 GEMM 加速配置以及 DeepSeek-R1 MTP 从单机 TP8 到双机 TP16 的完整部署与推理命令。说明本主题相关内容同时存在中英文文档版本本文以英文版为骨架可对照阅读 best_practices.md 与 speculative_decoding.md并配合 inference.md完整推理参数表与 deepseek.mdDeepSeek 专项部署交叉使用。一、高性能推理最佳实践环境变量总览PaddleNLP 提供了大量环境变量FLAGS用于在推理时优化性能与资源利用率。它们通常在启动推理进程前通过export设置作用于 CUDA 算子层底层实现在 csrc/gpu/env.h 与 paddlenlp/experimental/transformers/fused_transformer_layers.py 等文件中读取并消费。下面按优化维度逐一说明推荐配置。1.1 GEMM 优化矩阵乘加速重点覆盖量化模型GEMM 是 Transformer 推理中最重的计算瓶颈PaddleNLP 针对 int8A8W8与 fp8 两类量化精度提供了独立开关与调优通道。环境变量默认值作用与推荐配置FLAGS_enable_blaslt_global_search0关闭是否在推理时动态搜索最优 int8 gemm 算法。置 1 可提升 A8W8 模型的推理性能。FLAGS_cublaslt_device_best_config空当FLAGS_enable_blaslt_global_search1时指定预调优的 int8 gemm 配置文件。配置文件由 csrc/utils/tune_cublaslt_int8_gemm.py 生成该脚本会在当前输入尺寸下自动搜索最优 gemm 配置并输出 CSV。注意不同 CUDA 版本需要分别调优。FLAGS_CUTLASS_FP8_GEMMFalse是否使用 CUTLASS 实现 fp8 gemm。置 True 后 A8W8 模型会走 Tensor Core性能更优。源码中该开关在 fused_transformer_layers.py 中被读取并打印使用日志。FLAGS_use_cutlass_device_best_config_path空当FLAGS_CUTLASS_FP8_GEMMTrue时指定预调优的 fp8 gemm 配置文件。配置文件由 csrc/utils/tune_cutlass_fp8_*.py 系列脚本生成默认输出fp8_fuse_gemm_config.json。不同 NVIDIA GPU 型号与 CUDA 版本需要分别调优SM89 与 SM90 GPU 需要做 dual_gemm 调优参考同目录下的dual_gemm.py。支持的值tune开启调优、空或default使用默认配置、其他任意值使用指定配置文件。同时支持 DeepSeek 系列模型 Block-wise FP8 gemm 调优参考 csrc/tools/tune_fp8_gemm.sh。FLAGS_cuda_core_int8_gemm关闭是否启用小 batch 场景的 Int8 Gemm 优化。置 1 可在 SM70 的 GPU 上将 A8W8 模型推理加速约 40%–55%。FLAGS_cuda_core_fp8_gemm关闭是否启用小 batch 场景的 FP8 Gemm 优化。置 1 可在 SM89 的 GPU 上将 FP8 模型推理加速约 30%。该开关在 env.h 中以环境变量字符串是否等于 1 进行严格判断。实战建议对于 A8W8 模型推荐组合FLAGS_enable_blaslt_global_search1 预调优的FLAGS_cublaslt_device_best_config并在 SM70 的卡上开启FLAGS_cuda_core_int8_gemm1对于 FP8 模型优先开启FLAGS_CUTLASS_FP8_GEMMTrue并配合FLAGS_use_cutlass_device_best_config_path在 SM89 的卡上可叠加FLAGS_cuda_core_fp8_gemm1。关于 int8 gemm 调优脚本的细节tune_cublaslt_int8_gemm.py内部针对 llama3.1-8b、llama3.1-405bmp8、qwen2-1.5b、qwen2-7b 四类典型模型的 [qkv, out_linear, ffn1, ffn2] 矩阵形状从 M1 到 M32768 全范围搜索并将结果写入cublaslt_gemm_search.csv。这意味着调优结果天然覆盖了多档 batch/seq 长度可直接用于后续FLAGS_cublaslt_device_best_config引用。1.2 GQA 优化FLAGS_use_xqa_optim是否启用 GQAGrouped Query Attention场景的 XQA 优化默认 0关闭。置 1 可提升 GQA 类模型如 llama3/3.1、qwen2的性能。1.3 内存优化环境变量默认值作用与推荐配置FLAGS_fraction_of_gpu_memory_to_use0.9GPU 显存使用比例。文档建议保持 0.9。该变量同时被 PaddleNLP 测试框架使用例如 tests/transformers/test_modeling_common.py 在测试进程中将之设为 0.1 以控制显存占用。FLAGS_gemm_use_half_precision_compute_type0是否使用半精度浮点计算。文档建议保持 0关闭。在 tests/llm/test_grpo.py 与 tests/llm/test_reinforce_plus_plus.py 的 RL 训练用例中同样以False显式设置说明关闭该选项是默认的稳定配置。1.4 Append Attention 优化Append Attention 是 PaddleNLP 面向增量解码增量 KV设计的注意力实现以下变量控制其在 decoder/encoder 阶段的分块策略环境变量默认值作用FLAGS_cascade_attention_max_partition_size随 batch 变化batch_size1 时为 128batch_size1 时为 512Attention decoder 计算中 cache_kv 划分的 chunk 大小。显式设置后覆盖按 batch_size 的默认区分逻辑。FLAGS_dec_block_shape_q16Append Attention decoder 计算中 q 划分的 block 大小。FLAGS_enc_block_shape_q64Append Attention encoder 计算中 q 划分的 block 大小。以上三个变量在 env.h 中有对应的 C 读取实现未设置时分别回退到 16、64 与 32768cascade 内部上限设置后立即覆盖默认值说明它们是纯算子层的零开销调参通道。同文件还提供了FLAGS_cascade_attention_deal_each_time默认 32、FLAGS_cascade_attention_num_stages默认 2、FLAGS_cascade_attention_num_threads默认 128等更细粒度的 cascade 控制项供高级用户深入调节。1.5 MLA 相关优化FLAGS_mla_use_tensorcore是否使用 Tensor Core 实现 MLAMulti-head Latent Attention计算默认 True仅在 Hopper 架构 GPU 上受支持置 False 时改用 CUDA core 实现Ampere 与 Hopper 均支持。在 deepseek.md 的部署示例中Hopper 环境一律导出FLAGS_mla_use_tensorcore1并明确标注only support Hopper, Amper should be 0。底层实现在 env.h 中读取。1.6 allreduce 优化FLAGS_custom_allreduce是否在多卡推理计算中使用高性能自定义 allreduce 实现默认 False。置 True 时启用读取逻辑见 fused_transformer_layers.py。二、投机解码Speculative Decoding实战投机解码的核心思想是每次解码时先用草稿模型Draft Model一次性生成多个候选 token再用目标模型并行验证、接受其中连续正确的部分从而在保证输出分布等价的前提下减少逐 token 串行解码的等待。PaddleNLP 为此提供了一套简单高效的推理工作流。2.1 高效投机解码框架传统方案中草稿 token 验证与 MTPEagle/Draft Model推理往往需要把 batch_size 按草稿 token 数成倍扩展。PaddleNLP 的高效注意力机制则在保持原始 batch 大小不变的前提下降低计算量从根上解决了大 batch 下投机解码无法加速的痛点。该设计参考了 Vllm 的 batch_extension 思路。2.2 参数说明以下参数在 llm/predict/predictor.py 中定义均可通过命令行--前缀传入参数默认值说明speculate_methodNone投机解码算法。合法取值None常规自回归解码、inference_with_reference基于上下文的投机解码、mtp、eagle。speculate_max_draft_token_num1投机解码中每轮产生的最大 draft tokens 数目最大支持 5。speculate_max_ngram_size1用 n-gram 匹配 draft tokens 时的最大窗口大小。在inference_with_reference算法中会先从 prompt 中滑动 ngram 窗口匹配出 draft tokens窗口大小与输入输出重叠程度共同决定生成 draft tokens 的开销从而影响加速效果。speculate_verify_window2暂时废弃验证策略默认采用 TopP window verify 的窗口大小。speculate_max_candidate_len5暂时废弃产生的最大候选 tokens 数目通过候选 tokens 与 draft tokens 比较完成验证仅在 TopP window verify 时生效。draft_model_name_or_pathNoneMTP或EAGLE模式下草稿模型的路径。draft_model_quant_typeMTP或EAGLE模式下草稿模型的推理量化精度取值参考--quant_type。return_full_hidden_statesFalse在MTP或EAGLE模式下是否返回全部 hidden statesMTP 验证需要开启。其他限制与联动规则投机解码当前支持的最大 batch_size 为 128。参数联动见 predictor.py 的__post_init__一旦设置speculate_method会自动打开append_attn进而自动打开block_attn与inference_model——即投机解码强制走增量注意力 推理模式无需手动配置。speculate_verify_window与speculate_max_candidate_len虽已标记为暂时废弃参数仍保留在解析器中以兼容旧配置。2.3 方法一inference_with_reference基于上下文的投机解码该算法使用 n-gram 窗口从 prompt 中匹配出草稿 token适合输入输出重叠度高的场景例如代码编辑、文档问答、长文档续写等。动态图模型推理命令示例以 Llama-2-7b-chat 为例python predictor.py \ --model_name_or_path meta-llama/Llama-2-7b-chat \ --inference_model \ --dtype float16 \ --speculate_method inference_with_reference \ --speculate_max_draft_token_num 5 \ --speculate_max_ngram_size 22.4 方法二MTPMulti-Token PredictionMTP 是 DeepSeek-V3 引入的多 token 预测训练范式PaddleNLP 支持 DeepSeek-V3/R1 及其 MTP 模型的推理。其关键特性包括在 Base Model 验证阶段使用优化的 Attention 一次前向生成所有 Draft Token 的 logits无需 batch_extension 增大 batch_size解决了大 batch 下投机解码无法加速的问题在 MTP 推理阶段统一处理上一轮草稿 token 的各种接受情况全部拒绝、部分接受、全部接受只需原始 batch 大小即可一次处理所有输入请求采用 Base Model 与 MTP 权重分离加载的解耦框架导出后支持多种解码方式。2.4.1 支持的量化精度组合Base Model部署方式Base Model 量化类型MTP 量化类型DeepSeek-R1TP8a8w8_fp8_wint4a8w8_fp8DeepSeek-R1TP8weight_only_int4weight_only_int8DeepSeek-R1TP16(2*TP8)a8w8_fp8a8w8_fp8DeepSeek-R1TP16(2*TP8)weight_only_int8weight_only_int8支持 DeepSeek-R1 与 MTP 的混合精度组合推理可通过容器或脚本两种方式部署。2.4.2 方式一一键容器部署DeepSeek-R1(a8w8_fp8_wint4) MTP(a8w8_fp8)单机 TP8 部署FP8 示例docker run --gpus all --shm-size 10g \ -v /path/to/R1-AWQ:/opt/tritonrt/model_repository/llm/1/ \ -v /path/to/MTP-FP8:/opt/tritonrt/model_repository/mtp/1/ \ -p 8080:8080 -p 8081:8081 -p 8082:8082 \ --ulimit memlock-1 --ulimit stack67108864 \ registry.cn-hangzhou.aliyuncs.com/trt-inference-server/triton_23.09_tp8:latest对应的 LMDeploy 推理命令示例python3 -m lmdeploy.mtp.pipeline \ --model-path /path/to/DeepSeek-R1 \ --mtp-path /path/to/MTP \ --tp 8 \ --session-len 4096 \ --max-batch-size 16 \ --quantization a8w8_fp8_wint4 \ --mtp-quant a8w8_fp8 \ --cache-max-entry-count 0.5 \ --num-tokens 8参数含义--tp张量并行配置--quantizationBase 模型量化类型--mtp-quantMTP 模型量化类型--num-tokens每次前向生成的 token 数MTP 为 8常规解码为 1其余参数与常规 LMDeploy 推理一致。单机 TP8 的 PaddleNLP 推理服务镜像启动脚本环境变量方式配置投机解码export MODEL_PATH${MODEL_PATH:-/PATH_TO_MODEL/} export MODEL_MTP_PATH${MODEL_PATH:-/PATH_TO_MTP/} export model_namedeepseek-ai/DeepSeek-R1-MTP/a8w8_fp8_wint4 docker run --gpus all --shm-size 32G --networkhost --privileged --cap-addSYS_PTRACE \ -v $MODEL_PATH:/models -v $MODEL_MTP_PATH:/models-mtp -v /ssd2/paddle_example:/work \ -e model_name${model_name} \ -dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.1 /bin/bash \ -c -ex export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 export MP_NUM8 \ export SPECULATE_MODEL_QUANT_TYPEa8w8_fp8 export SPECULATE_METHODmtp \ export SPECULATE_MODEL_PATH/models-mtp export SPECULATE_MAX_DRAFT_TOKEN_NUM1 \ export BLOCK_BS32 export BLOCK_RATIO0.25 export BATCH_SIZE128 \ start_server $model_name tail -f /dev/nullDeepSeek-R1(weight_only_int8) MTP(weight_only_int8)双机 TP16 配置先确保两个节点可以互相 ping 通master 节点ping 192.168.0.1slave 节点ping 192.168.0.2然后在两台机器上分别启动容器model_name${model_name:-deepseek-ai/DeepSeek-R1-MTP-2nodes/weight_only_int8} export POD_0_IPmaster_ip export POD_IPSmaster_ip,slave_ip # 该环境变量两台机器必须保持一致 # 默认服务端口若冲突可通过 export 修改 export SERVICE_HTTP_PORT${PUSH_MODE_HTTP_PORT:-${SERVICE_HTTP_PORT:-9965}} # 注意SPECULATE_MODEL_QUANT_TYPE 需与 MTP 支持精度表匹配 export SPECULATE_MODEL_QUANT_TYPEweight_only_int8 # /PATH_TO_MODEL 为模型挂载路径/PATH_TO_MTP 为 MTP 挂载路径node1 与 node2 使用相同命令export model_name${model_name:-deepseek-ai/DeepSeek-R1-MTP-2nodes/weight_only_int8} export MODEL_PATH${MODEL_PATH:-/PATH_TO_MODEL/} export MODEL_MTP_PATH${MODEL_PATH:-/PATH_TO_MTP/} docker run --gpus all --shm-size 32G --networkhost --privileged --cap-addSYS_PTRACE \ -v $MODEL_PATH:/models -v $MODEL_MTP_PATH:/models-mtp -e model_name${model_name} \ -dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.1 /bin/bash \ -c -ex export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 export MP_NUM16 export MP_NNODE2 \ export POD_0_IP192.168.0.1 export POD_IPS192.168.0.1,192.168.0.2 \ export SPECULATE_MODEL_QUANT_TYPEweight_only_int8 export SPECULATE_METHODmtp \ export SPECULATE_MODEL_PATH/models-mtp export SPECULATE_MAX_DRAFT_TOKEN_NUM1 \ start_server $model_name tail -f /dev/null服务验证curl 请求curl ${ip}:9965/v1/chat/completions \ -H Content-Type: application/json \ -d { model:default, text:Hello, how are you? }OpenAI 兼容请求Pythonimport openai client openai.Client(base_urlfhttp://127.0.0.1:9965/v1/chat/completions, api_keyEMPTY_API_KEY) # 非流式响应 response client.completions.create( modeldefault, promptHello, how are you?, max_tokens50, streamFalse, ) print(response) print(\n) # 流式响应 response client.completions.create( modeldefault, promptHello, how are you?, max_tokens100, streamTrue, ) for chunk in response: if chunk.choices[0] is not None: print(chunk.choices[0].text, end) print(\n)2.4.3 方式二脚本推理测试DeepSeek-R1 动态图 MTP 动态图双机 TP16weight_only_int8 weight_only_int8双机推理前确保节点可互相 ping 通node1 与 node2 使用完全相同的脚本$ cat run_dynamic_mtp.sh export MODEL_TAGdeepseek-ai/DeepSeek-R1 export DRAFT_MODEL_TAGdeepseek-ai/DeepSeek-R1-MTP export QUANT_MODEweight_only_int8 export DRAFT_MODEL_QUANT_MODEweight_only_int8 export TOTAL_MAX_LENGTH8192 export MAX_DEC_LEN2048 # 算子加速策略 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ predictor.py \ --model_name_or_path ${MODEL_TAG} \ --dtype bfloat16 \ --mode dynamic \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --max_length ${MAX_DEC_LEN} \ --speculate_method mtp \ --draft_model_name_or_path ${DRAFT_MODEL_TAG} \ --draft_model_quant_type ${DRAFT_MODEL_QUANT_MODE} \ --speculate_max_draft_token_num 1 \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash run_dynamic_mtp.shDeepSeek-R1 动态图 MTP 动态图双机 TP16FP8 FP8node1 与 node2 脚本相同将模型与量化相关变量替换为 FP8 版本$ cat run_dynamic_mtp.sh export MODEL_TAGdeepseek-ai/DeepSeek-R1-FP8 export DRAFT_MODEL_TAGdeepseek-ai/DeepSeek-R1-MTP-FP8 export QUANT_MODEa8w8_fp8 export DRAFT_MODEL_QUANT_MODEa8w8_fp8 export TOTAL_MAX_LENGTH8192 export MAX_DEC_LEN2048 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ predictor.py \ --model_name_or_path ${MODEL_TAG} \ --dtype bfloat16 \ --mode dynamic \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --max_length ${MAX_DEC_LEN} \ --speculate_method mtp \ --draft_model_name_or_path ${DRAFT_MODEL_TAG} \ --draft_model_quant_type ${DRAFT_MODEL_QUANT_MODE} \ --speculate_max_draft_token_num 1 \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash run_dynamic_mtp.shDeepSeek-R1 动态图 MTP 动态图单机 TP8weight_only_int4 weight_only_int8$ cat run_dynamic_mtp.sh export MODEL_TAGdeepseek-ai/DeepSeek-R1 export DRAFT_MODEL_TAGdeepseek-ai/DeepSeek-R1-MTP export QUANT_MODEweight_only_int4 export DRAFT_MODEL_QUANT_MODEweight_only_int8 export TOTAL_MAX_LENGTH8192 export MAX_DEC_LEN2048 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch \ --gpus ${CUDA_VISIBLE_DEVICES} \ predictor.py \ --model_name_or_path ${MODEL_TAG} \ --dtype bfloat16 \ --mode dynamic \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --max_length ${MAX_DEC_LEN} \ --speculate_method mtp \ --draft_model_name_or_path ${DRAFT_MODEL_TAG} \ --draft_model_quant_type ${DRAFT_MODEL_QUANT_MODE} \ --speculate_max_draft_token_num 1 \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash run_dynamic_mtp.sh【推荐】Base Model 静态图 MTP 动态图双机 TP16注意事项投机解码导出的模型支持所有方法因此导出时speculate_method设置为默认的inference_with_reference即可静态图模型可从 DeepSeek-R1 导出也可直接下载官方预导出的模型。1weight_only_int8 weight_only_int8 组合。先双机导出静态图node1 与 node2 脚本相同$ cat export.sh export MODEL_TAGdeepseek-ai/DeepSeek-R1 export OUTPUT_PATH/path/to/exported_model export QUANT_MODEweight_only_int8 export TOTAL_MAX_LENGTH8192 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ export_model.py \ --model_name_or_path ${MODEL_TAG} \ --output_path ${OUTPUT_PATH} \ --dtype bfloat16 \ --inference_model 1 \ --append_attn 1 \ --block_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --speculate_method inference_with_reference \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash export.sh再双机运行推理node1 与 node2 脚本相同$ cat run_mtp_infer.sh export OUTPUT_PATH/path/to/exported_model export DRAFT_MODEL_TAGdeepseek-ai/DeepSeek-R1-MTP export TOTAL_MAX_LENGTH8192 export MAX_DEC_LEN2048 export QUANT_MODEweight_only_int8 export DRAFT_MODEL_QUANT_MODEweight_only_int8 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ predictor.py \ --model_name_or_path ${OUTPUT_PATH} \ --dtype bfloat16 \ --mode static \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --max_length 1024 \ --speculate_method mtp \ --draft_model_name_or_path ${DRAFT_MODEL_TAG} \ --draft_model_quant_type ${DRAFT_MODEL_QUANT_MODE} \ --speculate_max_draft_token_num 1 \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash run_mtp_infer.sh2FP8 FP8 组合双机 TP16。导出脚本中替换为 FP8 模型与量化配置$ cat export.sh export MODEL_TAGdeepseek-ai/DeepSeek-R1-FP8 export OUTPUT_PATH/path/to/exported_model export QUANT_MODEa8w8_fp8 export TOTAL_MAX_LENGTH8192 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ export_model.py \ --model_name_or_path ${MODEL_TAG} \ --output_path ${OUTPUT_PATH} \ --dtype bfloat16 \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --speculate_method inference_with_reference \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash export.sh推理脚本node1 与 node2 相同$ cat run_mtp_infer.sh export OUTPUT_PATH/path/to/exported_model export DRAFT_MODEL_TAGdeepseek-ai/DeepSeek-R1-MTP-FP8 export TOTAL_MAX_LENGTH8192 export MAX_DEC_LEN2048 export QUANT_MODEa8w8_fp8 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --ips 192.168.0.1,192.168.0.2 \ --gpus ${CUDA_VISIBLE_DEVICES} \ predictor.py \ --model_name_or_path ${OUTPUT_PATH} \ --dtype bfloat16 \ --mode static \ --inference_model 1 \ --append_attn 1 \ --total_max_length ${TOTAL_MAX_LENGTH} \ --quant_type ${QUANT_MODE} \ --max_length ${MAX_DEC_LEN} \ --speculate_method mtp \ --draft_model_name_or_path ${DRAFT_MODEL_TAG} \ --draft_model_quant_type ${QUANT_MODE} \ --speculate_max_draft_token_num 1 \ --return_full_hidden_states 1 \ --mla_use_matrix_absorption 1 $ bash run_mtp_infer.sh2.5 方法三EAGLEspeculate_method同样支持eagle其参数体系draft_model_name_or_path、draft_model_quant_type、speculate_max_draft_token_num等与 MTP 保持一致。在源码层面predictor.py 将eagle与mtp统一路由到EagleProposer完成草稿 token 的生成与验证因此两者的使用流程可以相互参考。三、总结与推荐组合将两类优化手段叠加使用可以同时压榨单算子性能与解码算法效率算子层根据模型量化精度选择 GEMM 优化组合A8W8 走 blaslt 全局搜索 cuda_core_int8FP8 走 CUTLASS cuda_core_fp8GQA 模型开启 XQADeepSeek 系列在 Hopper 上开启 MLA Tensor Core多卡推理开启 custom allreduce并通过 Append Attention 分块参数适配 batch 规模。算法层输入输出重叠高的场景代码编辑、文档问答用inference_with_reference追求极致吞吐与低延迟的大模型服务用mtpDeepSeek-V3/R1或eagle配合speculate_max_draft_token_num与speculate_max_ngram_size调节草稿长度与匹配窗口。工程层静态图导出export_model.py--mode static与动态图--mode dynamic均可搭配投机解码大模型多卡部署时使用paddle.distributed.launch --ips指定节点列表容器化部署则通过SPECULATE_METHOD、SPECULATE_MODEL_PATH、SPECULATE_MODEL_QUANT_TYPE等环境变量注入配置。所有参数与命令均可在 llm/predict/predictor.py、llm/predict/export_model.py、csrc/gpu/env.h 与 csrc/utils/tune_cublaslt_int8_gemm.py 中进一步核实与调参完整推理参数表见 inference.mdDeepSeek 系列专项部署见 deepseek.md。赞分享人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 高性能推理最佳实践环境变量调优全指南PaddleNLP 高性能推理最佳实践环境变量调优全指南 PaddleNLP 为大模型推理提供了丰富的环境变量FLAGS体系用于在不改动代码的前提下显著人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测PaddleNLP投机解码MTP技术推理加速PaddleNLP投机解码MTP技术推理加速 引言大模型推理的瓶颈与突破 在大语言模型LLM的实际部署中推理速度一直是制约应用性能的关键因素。传统的自人工智能大模型深度学习NLP预训练微调模型推理服务模型量化分布式训练强化学习MXNet Gluon 调试与性能优化实战指南Hybridize 原理、NaiveEngine 与关键环境变量调优MXNet Gluon 调试与性能优化实战指南Hybridize 原理、NaiveEngine 与关键环境变量调优 本文是一份面向 MXNetApache人工智能深度学习机器学习上一篇Rspack测试覆盖率确保代码质量的关键指标下一篇cheat.sh 完全指南一条 curl 命令统一访问 56 种语言与 1000 命令的终极速查表创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表