ARTICLE DETAIL

资讯详情

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

DeepSpeed + HuggingFace 文本生成推理实战:AutoTP、Kernel Injection 与 Meta Tensor 加载指南

DeepSpeed + HuggingFace 文本生成推理实战:AutoTP、Kernel Injection 与 Meta Tensor 加载指南 示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载导读本篇文章以 DeepSpeedExamples 仓库中 text-generation 示例目录 为蓝本系统讲解如何用 DeepSpeed Inference 引擎加速 HuggingFace 因果语言模型的文本生成推理。你将掌握三条核心技术路径通过 AutoTP自动张量并行在单机多卡上切分大模型、通过 Kernel Injection 用高性能内核替换 Transformer 模块、以及通过 Meta Tensor DSPipeline工具类快速加载 BLOOM 等超大模型 checkpoint并学会用ds-hf-compare.py定量验证 DeepSpeed 输出与 HuggingFace 原生推理的一致性。环境准备与依赖安装示例运行前需要安装 Python 依赖requirements.txt 中声明的核心依赖为deepspeed torch transformers4.28.1直接安装pip install -r requirements.txt使用 conda 时仓库 README 给出了推荐的完整链路conda create -c conda-forge -n deepspeed python3.10 conda activate deepspeed pip install -r requirements.txt安装完成后即可运行示例。示例的启动方式统一为deepspeed --num_gpus [N] 脚本 [参数]通过deepspeed启动器拉起分布式环境脚本内部通过LOCAL_RANK、WORLD_SIZE环境变量感知进程拓扑详见 arguments.py 中的默认值定义。核心推理测试脚本inference-test.py 功能总览inference-test.py 是本节的核心入口README 明确列出它可以测试的四类能力能力触发方式作用AutoTP自动张量并行--num_gpus 1在多卡间自动切分模型权重与计算Kernel Injection--use_kernel用 DeepSpeed 高性能内核替换 Transformer 算子Batching批量推理--batch_size 1单次前向处理多条输入Meta Tensor 加载--use_meta_tensor以 meta 张量初始化模型、加速大模型 checkpoint 加载默认行为不传任何参数仅指定--model时脚本走deepspeed.init_inference包装路径但具体的优化开关需要用户根据目标模型自行组合。三个关键规则的原文表述只要--num_gpus 1就会自动启用 AutoTP该值经由world_size参数推断Kernel Injection 只有显式传入--use_kernel才生效且对部分模型可与多卡并行组合使用Meta Tensor 特性服务于大模型 checkpoint 的快速加载。对应到源码inference-test.py 在非 baseline 分支中调用pipe.model deepspeed.init_inference(pipe.model, dtypedata_type, mp_sizeargs.world_size, replace_with_kernel_injectargs.use_kernel, max_tokensargs.max_tokens, save_mp_checkpoint_pathargs.save_mp_checkpoint_path, **ds_kwargs)其中mp_sizeworld_size即 AutoTP 的并行度来源replace_with_kernel_inject即内核注入开关max_tokens控制文本生成 KV-cache 的容量上限。脚本还额外支持--test_hybrid_engine走 DeepSpeed Hybrid Engine训练/推理一体引擎以及--hf_baseline跑纯 HuggingFace 基线此时仅允许单卡否则直接抛出RuntimeError。完整命令行参数参考arguments.py 定义了脚本全部参数是精确控制实验的关键参数类型默认值说明--modelstr必填模型名称或本地路径--checkpoint_pathstrNone本地 checkpoint 路径用于 meta tensor 加载--save_mp_checkpoint_pathstrNone保存切分后新 checkpoint 的路径--batch_sizeint1批大小--dtypestrfloat16数据类型可选float32/float16/int8/bfloat16--hf_baselineflag关禁用 DeepSpeed 推理跑 HF 基线--use_kernelflag关启用 Kernel Injection--max_tokensint1024文本生成 KV-cache 的最大 token 数--max_new_tokensint50单次生成的最大新 token 数--greedyflag关贪心解码模式否则使用采样--use_meta_tensorflag关使用 meta tensor 初始化模型--test_performanceflag关输出延迟、带宽、吞吐统计--local_rankint环境变量进程本地 rank--world_sizeint环境变量并行世界大小--test_hybrid_engineflag关启用 Hybrid Engine 测试--trust_remote_codeflag关信任 HF 远程代码通用调用模板为deepspeed --num_gpus [GPU数量] inference-test.py --model [模型名/路径] --batch_size [批大小] --dtype [数据类型]快速上手单批次与多批次示例单批次示例deepspeed --num_gpus 1 inference-test.py --model facebook/opt-125m脚本默认使用内置的 8 条测试输入如 DeepSpeed is a machine learning framework、He is working on 等见 inference-test.py--batch_size超过 8 时会通过重复输入列表自动扩批。单批次输出示例inDeepSpeed is a machine learning framework outDeepSpeed is a machine learning framework based on TensorFlow. It was first released in 2015, then improved on 2016, and is now a major addition to the deep learning tools on GitHub. ------------------------------------------------------------多批次示例deepspeed --num_gpus 1 inference-test.py --model bigscience/bloom-3b --batch_size 2输出中每个输入对应一段生成文本以---分隔inDeepSpeed is a machine learning framework outDeepSpeed is a machine learning framework that takes a machine learning algorithm ... ------------------------------------------------------------ inHe is working on outHe is working on the new video game Bloodbornes expansion pack ... ------------------------------------------------------------多批次模式下DSPipeline内部通过tokenizer.batch_encode_plus统一编码、pad 对齐后一次前向生成再由batch_decode逐条还原为文本见下文实现细节。大模型进阶Kernel Injection Meta Tensor 组合对于 BLOOM-3B 这类较大模型README 推荐组合使用两项特性deepspeed --num_gpus 1 inference-test.py --model bigscience/bloom-3b --use_meta --use_kernelREADME 明确指出上述命令对 Bloom-3B 能提供最佳性能对其他模型需要用户自行实验各项特性的组合来获得最优效果。这一提醒也对应源码中的实现路径——meta tensor 分支会向init_inference额外传入base_dirpipe.repo_root与checkpointpipe.checkpoints_json让推理引擎从 checkpoint 清单逐层填充权重if args.use_meta_tensor: ds_kwargs dict(base_dirpipe.repo_root, checkpointpipe.checkpoints_json) else: ds_kwargs dict()而 kernel injection 的适用性取决于模型结构是否被注入策略覆盖因此 README 才强调需要针对模型实验。DSPipeline 工具类深度解析设计动机BLOOM 的特殊加载方式utils.py 中的DSPipeline是这些示例共用的核心工具类它的设计目标是模仿 HuggingFace transformer pipeline并封装 DeepSpeed meta tensor 加载细节。README 特别解释了 BLOOM 场景BLOOM 模型非常大DeepSpeed 加载其 checkpoint 的方式与其他 HF 模型不同——先以 meta tensor 初始化模型骨架再加载权重with deepspeed.OnDevice(dtypeself.dtype, devicemeta):这种方式在多卡环境下显著降低加载模型所需的系统/GPU 总内存并加快 checkpoint 加载速度。DSPipeline正是为了在这种差异下统一完成加载模型 跑推理的封装。构造与推理调用链从源码看DSPipeline.__init__的核心逻辑如下设备解析device 0时落到 CPU否则映射到对应加速器设备tokenizer 配置以padding_sideleft加载 tokenizer左填充保证自回归解码不偏移并将pad_token设为eos_tokenmeta 分支AutoConfig.from_pretrained后调用_generate_json生成 checkpoint 清单再在deepspeed.OnDevice(dtypetorch.float16, devicemeta)上下文中用AutoModelForCausalLM.from_config构建空模型非 meta 分支直接AutoModelForCausalLM.from_pretrained加载完整权重最后统一model.eval()若 dtype 为float16则执行model.half()。checkpoint 清单的生成_generate_json方法在未指定checkpoint_path时通过snapshot_download下载模型仓库忽略*.safetensors以加速并优先复用仓库自带的ds_inference_config.json否则扫描仓库下所有*.bin/*.pt/*.bin分片文件写出checkpoints.jsonfile_list [str(entry).split(/)[-1] for entry in Path(repo_root).rglob(*.[bp][it][n]) if entry.is_file()] data {type: BLOOM, checkpoints: file_list, version: 1.0} json.dump(data, f)另外utils.py内置了tp_presharded_models列表如microsoft/bloom-deepspeed-inference-int8、microsoft/bloom-deepspeed-inference-fp16这类仓库自带预切分 checkpoint 与配套配置加载速度极快约 1 分钟而非 10~20 分钟无需重新切分。生成接口DSPipeline.__call__将输入归一为列表后调用generate_outputs先batch_encode_plus编码并搬运到设备再调用model.generate(max_new_tokensnum_tokens, do_sampledo_sample)。值得注意的是针对LlamaTokenizerFast有专门分支——Llama 的 generate 不识别token_type_idskwarg因此退化为仅传input_ids。最终batch_decode(skip_special_tokensTrue)输出文本列表。性能统计--test_performance 模式inference-test.py在--test_performance开启时会执行 30 次迭代默认仅 2 次含 warmup并借助 utils.py 中的Performance.print_perf_stats输出三项指标Avg Per Token Latency去掉前 3 次 warmup 后的每 token 平均延迟msAvg BW根据层数、hidden_size推算的参数总量与 dtype 字节数计算的平均带宽GB/sAvg flops结合批大小估算的平均算力TFlops/s。其中参数量估算公式为num_layers * hidden_size * hidden_size * 12dtype 字节数按 float162、float324、其余1 取值。该模式适合在固定 batch 与max_new_tokens下横向对比不同优化组合的收益。输出一致性验证DeepSpeed vs HuggingFace 对比脚本ds-hf-compare.py 用于在单卡上对比DeepSpeed kernel injection与纯 HuggingFace 推理对同一模型、同一输入的生成结果是否一致。用法模板README 原文deepspeed --num_gpus 1 ds-hf-compare.py --model [模型名/路径] --dtype [数据类型] --num_inputs [测试输入数] --print_outputs --use_kernel[启用内核注入]关键参数--num_inputs控制取用内置测试输入的数量内置 43 条多样化 prompt--min_length/--max_length控制生成长度--print_outputs打印逐条对比--use_kernel启用内核注入默认关闭。脚本的执行流程与判定逻辑如下对应 ds-hf-compare.py 源码先用 HuggingFacepipeline(text-generation, ...)以do_sampleFalse生成基线输出再对同一模型调用deepspeed.init_inference(pipe.model, dtypedata_type, replace_with_kernel_injectargs.use_kernel)逐条重新生成统计Matches / Mismatches并用SequenceMatcher输出两条生成文本的相似度百分比。注意该脚本的对比基于贪心解码do_sampleFalse只有在内核注入不改变模型数值行为的前提下两组输出才可能完全一致——这正是验证 DeepSpeed 推理正确性的直观手段。附录GPT-2 风格生成脚本 run-generation-script同目录下还提供了一套源自 HuggingFace 的经典条件文本生成脚本 run-generation-script/test-run-generation.py支持 GPT-2、GPT-Neo、CTRL、XLNet、XLM 等模型类型核心区别在于它通过显式injection_policy{gpt2_transformer: HFGPT2LayerPolicy}完成 GPT-2 的算子注入而非依赖自动策略。推荐运行方式见 test-gpt.shdeepspeed --num_nodes 1 --num_gpus 1 test-run-generation.py \ --model_typegpt2 \ --model_name_or_pathgpt2-xl \ --sample_input single_query.txt \ --fp16 \ --ds-inference输入来自 single_query.txt内容为 What is DeepSpeed?输出示例 GENERATED SEQUENCE 1 What is DeepSpeed? DeepSpeed is a multi-dimensional data compression framework designed to achieve high compression ratio on human readable该脚本还会在结束时打印 P50/P90/P95/P99/P999 延迟分位数统计test-run-generation.py 中print_latency适合对生成延迟分布做更细粒度观测。小结与使用建议从单卡小模型如facebook/opt-125m开始确认环境链路通畅后再切换大模型大模型推理优先组合--use_meta_tensor --use_kernel并视 GPU 显存与模型规模决定是否增加--num_gpus触发 AutoTP更换模型时先跑ds-hf-compare.py验证输出一致性再投入性能调优性能评估统一使用--test_performance模式保证 warmup 与统计口径一致当前示例依赖transformers4.28.1见 requirements.txt升级 transformers 大版本时需注意 API 兼容性。赞分享示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载相关推荐DeepSpeed HuggingFace 文本生成脚本基于 deepspeed.init_inference 快速启动 GPT-2 推理DeepSpeed HuggingFace 文本生成脚本基于 deepspeed.init_inference 快速启动 GPT 2 推理 导读 本文围绕 i示例工程ESP-IDF 安装配置5 步跑通 ESP32 开发环境高频坑一次说清ESP IDF 安装配置5 步跑通 ESP32 开发环境高频坑一次说清 终端里敲下 idf.py 屏幕弹出一行 command not found ——十物联网嵌入式DeepSpeed HuggingFace Fill-Mask 推理示例实战BERT / RoBERTa / ELECTRA 掩码填充加速指南DeepSpeed HuggingFace Fill Mask 推理示例实战BERT / RoBERTa / ELECTRA 掩码填充加速指南 本文基于 De示例工程上一篇FanControl中文设置终极指南5个简单步骤让你的Windows风扇说中文下一篇3分钟解决Windows程序运行问题Visual C Redistributable AIO终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表