
示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载导读本文围绕 inference/huggingface/text-generation/run-generation-script 目录下的 DeepSpeed HuggingFace 文本生成示例展开讲解如何通过test-run-generation.py配合 DeepSpeed 启动一条deepspeed --num_nodes 1 --num_gpus 1的单机单卡生成命令让 GPT-2 等自回归模型在 DeepSpeed Inference 引擎上完成条件文本生成。读完本文你将掌握该脚本的完整参数语义、--ds-inference背后的内核注入kernel injection原理、输入文本的组织方式以及如何解读脚本输出的延迟统计指标。该目录中的核心脚本是 test-run-generation.py改编自 HuggingFace Transformers 的 run_generation 示例配套的 test-gpt.sh 提供了一个可直接复制的运行入口适合在已有 DeepSpeed 与 CUDA 环境的机器上快速验证 DeepSpeed 推理加速效果。环境准备Python 依赖安装运行脚本前需先安装依赖仓库在 requirements.txt 中固定了依赖清单pip install -r requirements.txt该文件内容如下各依赖的作用可结合脚本源码理解deepspeed提供init_inference、module_inject等推理引擎与内核注入能力torch模型与张量运算基础transformers4.21.2固定版本保证GPT2LMHeadModel、GPT2Tokenizer等类与脚本兼容numpy随机种子设置依赖sentencepiece与protobuf部分 Tokenizer如 XLM、Transformer-XL 相关模型加载所需的依赖。从父目录 README.md 可见若使用 conda推荐先创建独立环境再安装conda create -c conda-forge -n deepspeed python3.10 conda activate deepspeed pip install -r requirements.txt建议在 GPU 机器上运行因为脚本默认会把模型加载到cuda:0见源码中model.cuda(torch.cuda.current_device())且--fp16与--ds-inference的收益都依赖 CUDA 内核。快速运行test-gpt.sh 与单条启动命令仓库提供了封装好的示例启动脚本 test-gpt.sh内容即一条 DeepSpeed 启动命令deepspeed --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逐段拆解该命令deepspeed --num_nodes 1 --num_gpus 1通过 DeepSpeed 的 launcher 以 1 节点 1 GPU 的方式启动脚本对应脚本内--local_rank参数默认 0--model_typegpt2指定模型族脚本内部会据此查表选择模型类与 Tokenizer 类--model_name_or_pathgpt2-xl指定预训练模型名称或本地路径这里使用 HuggingFace 上的gpt2-xl约 15 亿参数--sample_input single_query.txt从文件中读取提示文本promptsingle_query.txt 的内容是一行What is DeepSpeed?--fp16将模型转为半精度源码中model.half()降低显存占用并启用混合精度推理--ds-inference关键开关触发 DeepSpeed 推理引擎初始化见下文“--ds-inference 内部原理”。运行结果示例README 中给出了该命令的预期输出 GENERATED SEQUENCE 1 What is DeepSpeed? DeepSpeed is a multi-dimensional data compression framework designed to achieve high compression ratio on human readable GENERATED SEQUENCE N 与逐条生成文本来自源码 test-run-generation.py 的打印逻辑每条输入会调用model.generate(...)随后用 Tokenizer 解码并输出完整序列prompt 生成内容。支持的模型族与输入组织方式MODEL_CLASSES 注册表脚本顶部定义了支持模型族与对应模型类/Tokenizer 类的映射表源码 L55-L63--model_type模型类Tokenizer 类说明gpt2GPT2LMHeadModelGPT2Tokenizer默认示例使用也是 README 演示的模型gptneoGPTNeoModelGPT2TokenizerGPT-Neo 系列ctrlCTRLLMHeadModelCTRLTokenizer需以控制码开头且建议较低 temperatureopenai-gptOpenAIGPTLMHeadModelOpenAIGPTTokenizerOpenAI GPT 原始模型xlnetXLNetLMHeadModelXLNetTokenizer短 prompt 下需要前缀填充transfo-xlTransfoXLLMHeadModelTransfoXLTokenizer同样需要前缀填充xlmXLMWithLMHeadModelXLMTokenizer可选--xlm_language指定语言传入不支持的--model_type时脚本会抛出KeyError并提示“你可以自行添加并提交 PR”源码 L242-L246。提示文本prompt的三种来源源码 L270-L274 定义了输入读取顺序指定--sample_input时按行读取文件内容作为多条 promptsample_query.txt内含 50 余行查询可用于批量测试否则指定--prompt使用命令行传入的字符串两者都未指定时进入交互模式等待用户键入Model prompt 。不同模型的输入预处理PREPROCESSING_FUNCTIONS源码 L129-L134为ctrl、xlm、xlnet、transfo-xl注册了专属预处理CTRL检查输入是否以控制码开头并提示温度高于 0.7 时效果不佳XLM根据config.lang2id设置生成语言XLNet / Transformer-XL由于短 prompt 会影响生成质量会在开头拼接一段长前缀源码内置的PREFIX文本也可用--prefix或--padding_text覆盖模拟论文中“为短提示补充上下文”的做法。--ds-inference 内部原理DeepSpeed 推理引擎与内核注入核心调用链当传入--ds-inference时脚本在加载模型并转半精度之后执行如下初始化源码 L256-L266if args.ds_inference: import deepspeed.module_inject as module_inject import deepspeed injection_policy{gpt2_transformer: module_inject.replace_policy.HFGPT2LayerPolicy} model deepspeed.init_inference(model, mp_size1, dtype(torch.half if args.fp16 else torch.float), injection_policyinjection_policy, replace_with_kernel_injectTrue) model model.module要点解释脚本从transformers.models.gpt2.modeling_gpt2导入GPT2Block并将其与HFGPT2LayerPolicy绑定为injection_policy告诉 DeepSpeed 如何把 HuggingFace 的 GPT-2 Transformer 层替换为高性能内核实现mp_size1表示单卡张量并行不切分模型dtype由--fp16决定开启时为torch.half否则为torch.floatreplace_with_kernel_injectTrue开启内核注入将部分算子融合/替换为优化实现最后取model.module以便后续按普通model.generate方式调用。关闭该开关的对比效果若去掉--ds-inference脚本将直接以原始 HuggingFace 模型含--fp16半精度调用model.generate此时等价于原生 Transformers 推理可用于对照 DeepSpeed 推理引擎的加速效果。同目录下的 ds-hf-compare.py 正是为此设计的专门对比脚本。生成参数全景脚本支持的命令行参数以下是 test-run-generation.py 中 argparse 定义的全部参数及默认值便于你按需组合出属于自己的运行命令参数类型默认值作用说明--model_typestr必填上述模型族注册表中的 key--model_name_or_pathstr必填预训练模型名或本地路径--sample_inputstrNone含 prompt 的输入文件按行读取--promptstr直接指定的 prompt 文本--lengthint20期望生成的序列长度会与模型max_position_embeddings自动对齐--stop_tokenstrNone遇此 token 停止生成并截断输出--temperaturefloat1.0采样温度1.0 表示无影响更低值趋向贪心--repetition_penaltyfloat1.0重复惩罚CTRL 模型建议 1.2--kint0top-k 采样0 表示关闭--pfloat0.9top-p核采样--prefixstr在输入前追加的文本--padding_textstr已弃用建议改用--prefix--xlm_languagestrXLM 模型可选语言--local_rankint0由 DeepSpeed launcher 注入的本地 rank--seedint42随机种子set_seed同步设置 numpy、torch 与 CUDA 种子--no_cudaboolFalse强制使用 CPU--num_return_sequencesint1每个 prompt 生成的样本数--fp16boolFalse半精度推理--ds-inferenceboolFalse启用 DeepSpeed 推理引擎长度与停止逻辑adjust_length_to_model源码 L137-L144会把--length与模型max_position_embeddings对齐长度超出模型上限时截断负数或缺失时回退到硬编码的MAX_LENGTH 10000避免无限循环实际传给model.generate的max_length是args.length len(encoded_prompt[0])即“新生成长度 提示长度”采样阶段固定使用do_sampleTrue并透传 temperature、top_k、top_p、repetition_penalty 等参数源码 L309-L318。理解输出延迟统计与序列解码每 Token 延迟统计脚本对每条 prompt 的model.generate调用计时并除以输出序列元素数得到“每 token 延迟”累计到latencies列表循环结束后调用print_latency源码 L146-L171输出统计默认丢弃前 10 次查询作为 warmup输出 Avg平均、P50、P90、P95、P99、P999 六个分位延迟单位 ms。这意味着该脚本不仅是一个生成演示也内置了轻量级性能基准能力。若需要更完整的吞吐与带宽统计可参考同目录的 inference-test.py配合 utils.py 中的DSPipeline与Performance类支持 AutoTP、meta tensor、kernel injection 与 batch 推理并输出每 Token 延迟、带宽 GB/s 与算力 TFlops/s。序列解码与展示每条生成序列的处理流程源码 L326-L344打印 GENERATED SEQUENCE N 分隔行用 Tokenizerdecode还原文本若指定了--stop_token截断其后的所有文本将 prompt 原文拼接到生成结果之前输出完整序列。总结与延伸阅读通过 test-gpt.sh 这一条命令即可完整走通“DeepSpeed launcher → 加载 HuggingFace GPT-2 → 半精度转换 →init_inference内核注入 →model.generate条件生成 → 延迟统计输出”的全链路。在此基础上你可以自行尝试将--model_type换成gptneo、ctrl、xlnet等以体验不同预处理逻辑改用--sample_input sample_query.txt批量验证多条 prompt 的生成效果去掉--ds-inference运行一次对比原生 Transformers 与 DeepSpeed 推理引擎的差异参考同目录 README.md 中inference-test.py的--use_kernel、--use_meta、--batch_size等能力在更大模型上进一步压榨推理性能。需要提醒的是transformers4.21.2为仓库固定的兼容版本若升级 Transformers 版本建议同步回归验证 test-run-generation.py 中模型类导入与generate参数的行为一致性。赞分享示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载相关推荐5分钟快速上手Mermaid Live Editor免费在线图表编辑器的终极指南5分钟快速上手Mermaid Live Editor免费在线图表编辑器的终极指南 还在为复杂的图表制作工具而头疼吗想象一下当你需要快速绘制流程图、时序图或人工智能基础模型深度学习计算机视觉NLP媒体生成Easydict 发布流程改造统一 PR 分类、机器人过滤与无关联 Issue 的版本通知机制Easydict 发布流程改造统一 PR 分类、机器人过滤与无关联 Issue 的版本通知机制 Easydict 的发布与发布后跟进release foll示例工程7步快速上手基于ggml的GPT-2文本生成实战指南7步快速上手基于ggml的GPT 2文本生成实战指南 ggml是一个轻量级机器学习张量库特别适合在资源受限环境中部署AI模型。本文将带你通过7个简单步骤使后端认证鉴权运维网络安全上一篇如何完整导出微信聊天记录三步实现数据永久保存与智能分析下一篇IPXWrapper完整指南在Windows 10/11上让经典游戏重获联机能力创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考