支持生成文本的多进程 GPT-2 分布式推理:generate + KV Cache 实战解析

部署运行你感兴趣的模型镜像

本文基于 dist_infer_demo_v3.py,介绍如何在多进程环境下使用 .generate() 方法进行完整文本生成推理,并结合 KV Cache 加速性能,展示每个进程独立生成自然语言输出的实战方法。


📁 项目结构回顾

dist_infer_demo/
├── dist_infer_demo_v3.py       # ✅ 本文主程序
├── launch_v3.sh                # 启动脚本(torchrun)
├── gpt2_student_v2/            # 训练后小模型

🧠 本篇目标

  • 使用 .generate() 进行多 token 生成
  • 启用 use_cache=True(KV Cache)加速解码
  • 每个进程使用独立 prompt 并输出完整自然语言结果
  • 支持 torchrun 多进程协同运行

1️⃣ 启动方式

bash launch_v3.sh

内容如下:

torchrun --nproc_per_node=4 dist_infer_demo_v3.py

2️⃣ KV Cache 背景知识

GPT 解码阶段若每轮都重新计算上下文,将极其低效。KV Cache 可以将历史 token 的注意力值缓存,从而 仅计算新 token 的上下文结果

在 Transformers 中:

generate(..., use_cache=True)

自动启用缓存,默认开启。


3️⃣ 多进程主逻辑解读

分布式初始化

dist.init_process_group("gloo")
rank = dist.get_rank()
world_size = dist.get_world_size()

Prompt 分发

prompts = [
    "你好,今天是",
    "我喜欢的颜色是",
    "Artificial intelligence is",
    "GPT-2 is a"
]
prompt = prompts[rank % len(prompts)]

使用 generate 生成文本

inputs = tokenizer(prompt, return_tensors="pt").to(device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_length=30,
        do_sample=True,
        top_k=50,
        top_p=0.95,
        temperature=0.7,
        use_cache=True,
        pad_token_id=tokenizer.eos_token_id
    )

参数说明:

参数含义
max_length生成的最大 token 数
top_k从前 k 个概率最高词中采样
top_p累计概率达到 p 的词中采样
temperature控制生成的随机程度
use_cache启用 KV Cache 加速解码(默认启用)

解码输出并打印结果

text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"[Rank {rank}] 生成内容:{text}")

4️⃣ 输出示例

[Rank 0] 生成内容:你好,今天是晴朗的一天,我打算去散步。
[Rank 1] 生成内容:我喜欢的颜色是蓝色,因为它很平静。
[Rank 2] 生成内容:Artificial intelligence is changing the world of technology rapidly.
[Rank 3] 生成内容:GPT-2 is a powerful language model developed by OpenAI.

✅ 技术亮点总结

特性说明
多进程独立生成每个进程使用不同 prompt 各自生成文本
KV Cache 加速避免重复计算,显著提升 decode 效率
generate 样式灵活支持 sampling、多样性控制、max length 限制
分布式稳定性强可平稳支持高并发模型服务(如 API 接口)

📌 总结

  • 本文展示了如何使用 .generate() 实现 GPT-2 的完整多 token 文本生成
  • 启用 KV Cache 后生成更快,性能优于传统 forward
  • 多进程环境下每个进程独立生成内容,适合部署扩展对话服务或批量推理

🧭 本系列为 GPT-2 分布式推理项目第3篇(共三篇)


📌 YoanAILab 技术导航页

💡 项目源码 × 实战部署 × 转型经验,一页总览
👉 点击查看完整导航页

📚 包含内容:

  • 🧠 GPT-2 项目源码(GitHub)
  • ✍️ 优快云 技术专栏合集
  • 💼 知乎转型日志
  • 📖 公众号 YoanAILab 全文合集

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

DB-GPT输出如下所示: =========================== VLLMDeployModelParameters =========================== name: DeepSeek-R1-Distill-Qwen-32B provider: vllm verbose: False concurrency: 100 backend: None prompt_template: None context_length: None reasoning_model: None path: models/DeepSeek-R1-Distill-Qwen-32B device: auto trust_remote_code: True download_dir: None load_format: auto config_format: auto dtype: auto kv_cache_dtype: auto seed: 0 max_model_len: None distributed_executor_backend: None pipeline_parallel_size: 1 tensor_parallel_size: 4 max_parallel_loading_workers: None block_size: None enable_prefix_caching: None swap_space: 4.0 cpu_offload_gb: 0.0 gpu_memory_utilization: 0.9 max_num_batched_tokens: None max_num_seqs: None max_logprobs: 20 revision: None code_revision: None tokenizer_revision: None tokenizer_mode: auto quantization: fp8 max_seq_len_to_capture: 8192 worker_cls: auto extras: None ====================================================================== 2025-08-05 06:33:38 1249bbe41ac7 dbgpt.util.code.server[15208] INFO Code server is ready INFO 08-05 06:33:42 config.py:520] This model supports multiple tasks: {'classify', 'embed', 'reward', 'score', 'generate'}. Defaulting to 'generate'. INFO 08-05 06:33:42 config.py:1328] Defaulting to use ray for distributed inference WARNING 08-05 06:33:42 arg_utils.py:1107] Chunked prefill is enabled by default for models with max_model_len > 32K. Currently, chunked prefill might not work with some features or models. If you encounter any issues, please disable chunked prefill by setting --enable-chunked-prefill=False. INFO 08-05 06:33:42 config.py:1483] Chunked prefill is enabled with max_num_batched_tokens=2048. INFO 08-05 06:33:43 llm_engine.py:232] Initializing an LLM engine (v0.7.0) with config: model='/app/models/DeepSeek-R1-Distill-Qwen-32B', speculative_config=None, tokenizer='/app/models/DeepSeek-R1-Distill-Qwen-32B', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=4, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=fp8, enforce_eager=False, kv_cache_dtype=auto, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=/app/models/DeepSeek-R1-Distill-Qwen-32B, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=False, chunked_prefill_enabled=True, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={"splitting_ops":[],"compile_sizes":[],"cudagraph_capture_sizes":[256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],"max_capture_size":256}, use_cached_outputs=False, 2025-08-05 06:33:43,755 WARNING worker.py:1395 -- SIGTERM handler is not set because current thread is not the main thread. 2025-08-05 06:33:46,674 INFO worker.py:1715 -- Started a local Ray instance. View the dashboard at 127.0.0.1:8265 WARNING 08-05 06:33:48 ray_utils.py:315] The number of required GPUs exceeds the total number of available GPUs in the placement group. INFO 08-05 06:33:58 ray_utils.py:212] Waiting for creating a placement group of specs for 10 seconds. specs=[{'GPU': 1.0, 'node:172.17.0.2': 0.001}, {'GPU': 1.0}, {'GPU': 1.0}, {'GPU': 1.0}]. Check `ray status` to see if you have enough resources. INFO 08-05 06:34:18 ray_utils.py:212] Waiting for creating a placement group of specs for 30 seconds. specs=[{'GPU': 1.0, 'node:172.17.0.2': 0.001}, {'GPU': 1.0}, {'GPU': 1.0}, {'GPU': 1.0}]. Check `ray status` to see if you have enough resources.
08-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoanAILab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值