2026/2/18 23:32:29
网站建设
项目流程
怎么在百度建设网站,常州金坛建设局网站,golang 做网站,wordpress字符图标vLLM 是一款专为大语言模型推理加速而设计的框架#xff0c;实现了 KV 缓存内存几乎零浪费#xff0c;解决了内存管理瓶颈问题。
更多 vLLM 中文文档及教程可访问 →vllm.hyper.ai/
*在线运行 vLLM 入门教程#xff1a;零基础分步指南
源码 examples/offline_inference/r…vLLM 是一款专为大语言模型推理加速而设计的框架实现了 KV 缓存内存几乎零浪费解决了内存管理瓶颈问题。更多 vLLM 中文文档及教程可访问 →vllm.hyper.ai/*在线运行 vLLM 入门教程零基础分步指南源码 examples/offline_inference/rlhf.py# SPDX-License-Identifier: Apache-2.0 一个基于 vLLM 的 RLHF 简单实现演示灵感来源于 OpenRLHF 框架 https://github.com/OpenRLHF/OpenRLHF 。 该设计采用训练进程(training processes)与推理进程(inference processes)分离的方案它们运行在不同的 GPU 上。 训练进程向推理进程发送提示(prompts)以生成数据 同时通过将模型权重从训练进程广播(broadcast)到推理进程 来实现模型权重的同步。 注意本演示仅展示单个训练实例(training instance)和单个 推理实例(inference instance)的简单场景。 实际应用中可能存在多个训练实例和多个推理实例。 完整实现请参考 OpenRLHF 框架。importosimportrayimporttorch from ray.util.placement_groupimportplacement_group from ray.util.scheduling_strategiesimportPlacementGroupSchedulingStrategy from rlhf_utilsimportstateless_init_process_group from transformersimportAutoModelForCausalLM from vllmimportLLM, SamplingParams from vllm.utilsimportget_ip, get_open_port class MyLLM(LLM): def __init__(self, *args, **kwargs):# a hack to make the script work.# stop ray from manipulating CUDA_VISIBLE_DEVICES# at the top-level# 临时解决方案确保脚本正常运行# 禁止 Ray 在顶层修改 CUDA_VISIBLE_DEVICES 环境变量os.environ.pop(CUDA_VISIBLE_DEVICES, None)super().__init__(*args, **kwargs) 开始训练过程在这里我们使用 HuggingFace Transformer 作为在 GPU0上保存模型的示例。 train_modelAutoModelForCausalLM.from_pretrained(facebook/opt-125m)train_model.to(cuda:0) 启动推理过程我们使用 vLLM 在 GPU1和 GPU2。有关如何使用 ray 的详细信息 请参考 ray 文档 https://docs.ray.io/en/latest/。 os.environ[CUDA_VISIBLE_DEVICES]1,2ray.init()pg_inferenceplacement_group([{GPU:1,CPU:0}]*2)ray.get(pg_inference.ready())scheduling_inferencePlacementGroupSchedulingStrategy(placement_grouppg_inference,placement_group_capture_child_tasksTrue,placement_group_bundle_index0,) 启动 vLLM 推理引擎。 在这里我们使用enforce_eager减少开始时间。 llmray.remote(num_cpus0,num_gpus0,scheduling_strategyscheduling_inference,)(MyLLM).remote(modelfacebook/opt-125m,enforce_eagerTrue,worker_extension_clsrlhf_utils.WorkerExtension,tensor_parallel_size2,distributed_executor_backendray,)# 从提示中生成文本。prompts[Hello, my name is,The president of the United States is,The capital of France is,The future of AI is,]sampling_paramsSamplingParams(temperature0)outputsray.get(llm.generate.remote(prompts, sampling_params))foroutputinoutputs: promptoutput.prompt generated_textoutput.outputs[0].text print(fPrompt: {prompt!r}, fGenerated text: {generated_text!r})# 设置训练进程与推理引擎之间的通信master_addressget_ip()master_portget_open_port()handlellm.collective_rpc.remote(init_weight_update_group,args(master_address, master_port,1,3))model_update_groupstateless_init_process_group(master_address, master_port,0,3, torch.device(cuda:0))ray.get(handle)# 模拟训练修改模型的权重。forname, pintrain_model.named_parameters(): p.data.zero_()# 同步从训练过程到推理引擎的权重。forname, pintrain_model.named_parameters(): handlellm.collective_rpc.remote(update_weight,args(name, p.dtype, p.shape))model_update_group.broadcast(p,src0,streamtorch.cuda.current_stream())ray.get(handle)# 检查权重是否更新。assert all(ray.get(llm.collective_rpc.remote(check_weights_changed)))# 使用更新的模型生成文本它们会胡说八道# 因为权重都是零。outputs_updatedray.get(llm.generate.remote(prompts, sampling_params))foroutputinoutputs_updated: promptoutput.prompt generated_textoutput.outputs[0].text print(fPrompt: {prompt!r}, fGenerated text: {generated_text!r})