当前位置: 首页 > news >正文

20250704-基于强化学习在云计算环境中的虚拟机资源调度研究

基于强化学习在云计算环境中的虚拟机资源调度研究

随着云计算规模的持续扩大,数据中心虚拟机资源调度面临动态负载、异构资源适配及多目标优化等挑战。传统启发式算法在复杂场景下易陷入局部最优,而深度强化学习(DRL)凭借序贯决策能力为该问题提供了新路径。本研究以动态多目标组合优化理论为基础,结合CloudSimPy仿真框架与TensorFlow,构建“仿真-训练-验证”闭环调度系统,重点设计动态加权多目标奖励函数、时序建模网络及多进程并行训练策略,支持非DAG任务、长周期分块任务等复杂场景。实验表明,DRL算法在总完成时间(Makespan)、平均完成时间(AC)、平均延迟(AD)等指标上显著优于传统算法(如首次适应、Tetris),资源利用率提升5%以上,训练效率通过多进程优化缩短80%。研究为云计算智能运维提供了可迁移的模型与策略,推动DRL从理论验证向实际落地迈进。

关键字:云计算;虚拟机资源调度;深度强化学习;多目标优化;长周期任务;CloudSimPy;策略网络;动态环境适配

更多应用细节功能参考:CloudSimPy 开源项目使用教程-CSDN博客
本文实现与报告见绑定资源:基于强化学习在云计算环境中的虚拟机资源调度研究 Cloud_Computing.7z

Job数据集的字段含义说明

根据 CloudSimPy 框架中对作业(Job)、任务(Task)、任务实例(TaskInstance)的建模逻辑,以下是字段的含义:

字段名含义关联实体(参考 CloudSimPy 建模)
submit_time作业或任务的提交时间(仿真时间戳),表示该任务/作业被提交到集群的时刻。作业(Job)/任务(Task)
duration任务实例的执行持续时间(仿真时间单位),表示该任务实例需要运行多久才能完成。任务实例(TaskInstance)
cpu任务实例运行所需的 CPU 资源量(如核心数)。任务实例(TaskInstance)
memory任务实例运行所需的内存资源量(如 GB)。任务实例(TaskInstance)
job_id作业的全局唯一标识符,用于区分不同作业。作业(Job)
task_id任务的局部唯一标识符(需结合 job_id 唯一确定),表示作业中的具体任务。任务(Task)(属于某个 Job)
instances_num该任务包含的任务实例数量(即一个任务由多少个并行的 TaskInstance 组成)。任务(Task)(Task 是 TaskInstance 的集合)
disk任务实例运行所需的磁盘存储资源量(如 GB)。任务实例(TaskInstance)

补充说明

  • 数据集中的每条记录可能对应一个 任务(Task),其中 instances_num 表示该任务需要创建的任务实例数量,而 duration、cpu、memory、disk 是该任务下所有任务实例的统一资源需求(假设任务内实例资源需求相同)。
  • job_id 和 task_id 的组合可唯一标识一个任务,而任务通过 instances_num 生成多个任务实例(TaskInstance),最终由调度算法分配到集群机器上运行。

仿真逻辑补充

结合 CloudSimPy 的仿真流程(来自「高性能仿真」部分):

  • Broker 进程会 按照作业的提交时间(即 submit_time) 将作业配置列表中的作业提交至集群 Cluster 实例。
  • 作业提交后,需要等待调度器 Scheduler 根据调度算法分配资源(如机器的 CPU、内存等),才能开始运行。因此,作业的实际开始运行时间通常会晚于 submit_time(具体取决于调度算法的效率和集群资源的空闲状态)。

Job 和 Task 补充

  1. 数据结构层面(代码视角)
  • Task(任务):由 TaskConfig 表示,对应数据集中的一条记录(每行数据)。每个 TaskConfig 包含任务的基本信息(如 task_id、instances_num(任务实例数量)、cpu/memory/disk(资源需求)、duration(执行时长))。
  • Job(作业):由 JobConfig 表示,是多个 TaskConfig 的集合。一个 JobConfig 包含:
    • job_id(作业唯一标识)
    • submit_time(作业提交时间)
    • task_configs(该作业包含的所有 TaskConfig 列表)
  1. 业务逻辑层面(仿真视角)
  • Task(任务):是作业的子单元,一个作业可包含多个任务(例如,一个作业可能需要先执行数据预处理任务,再执行模型训练任务,每个任务是作业的一个步骤)。
  • Job(作业):是用户提交的完整计算需求,由多个具有逻辑关联的任务组成(如 DAG 任务间的依赖关系,或 Non-DAG 任务的并行执行)。
  1. 实例化关系(运行时视角)

在仿真运行时:

  • 每个 Task(任务)会根据 instances_num 生成多个 TaskInstance(任务实例),这些实例是实际占用资源(CPU、内存、磁盘)并运行的实体。
  • 每个 Job(作业)的状态(如“运行中”“完成”)由其所有 Task 的状态合成(例如,当作业的所有任务都完成时,作业才标记为完成)。

Jobs(作业)是用户提交的完整计算任务集合,由多个具有逻辑关联的 Tasks(任务) 组成;每个 Task(任务) 进一步拆分为多个 TaskInstance(任务实例)(实际运行的最小单元)

考虑任务类型(非DAG vs DAG)、并行方式(多进程 vs 单进程)、优化目标(总完成时间 vs 平均完成时间)、任务输入方式(单批 vs 分块长周期)、特殊功能(任务依赖 vs 任务分组)

文件名称任务类型并行方式优化目标特殊功能
main-makespan.py非DAG多进程总完成时间(makespan)基础非DAG任务调度
main-AC.py非DAG多进程平均完成时间适配平均完成时间的奖励函数
main-makespan-long.py非DAG(长周期)多进程总完成时间(makespan)分块处理大规模任务
main-single-process.pyDAG(有依赖)单进程总完成时间(makespan)处理DAG任务

性能评估指标

指标名称计算方式/含义代码实现位置
总完成时间所有任务完成的最大时间(仿真环境中最后一个任务实例的完成时间),即 episode.env.now基准测试中直接获取:episode.env.now;训练循环中通过 makespans 列表统计平均值
平均完成时间单个任务从提交到完成的平均时长(所有任务实例的完成时间 - 提交时间的平均值)通过工具函数 average_completion(episode) 计算,训练循环中统计 average_completions 平均值
平均延迟任务完成时间与任务本身时长的平均值(反映任务执行的“拖延程度”)通过工具函数 average_slowdown(episode) 计算,训练循环中统计 average_slowdowns 平均值

性能对比方法

  1. 基准算法对比(横向对比)

通过运行 3 种经典启发式算法(随机算法、首次适应算法、Tetris 算法),在相同任务配置下收集上述指标,作为强化学习算法的性能基线。具体步骤如下:

  • 相同输入条件:使用同一组机器配置(machine_configs)和任务配置(jobs_configs);
  • 独立运行:分别运行每种基准算法的 episode.run(),记录各指标;
  • 输出对比:直接打印各算法的指标结果
  1. 强化学习训练迭代统计(纵向对比)

在强化学习训练过程中,通过多进程并行收集多轮次的模拟数据,统计每轮迭代的平均指标,观察算法性能随训练轮次的变化趋势。具体逻辑如下:

  • 多进程数据收集:每轮迭代启动 n_episode 个子进程(默认 12 个),并行执行强化学习模拟,收集各回合的 makespans、average_completions、average_slowdowns;
  • 指标统计:计算每轮迭代的平均指标(如 avg_makespan = np.mean(makespans)),并输出对比:
  • 趋势观察:通过多轮迭代的指标变化(如总完成时间是否逐渐降低),评估强化学习算法的优化效果。
  1. 总结:模型性能通过 总完成时间、平均完成时间、平均延迟 三个核心指标评价,对比方法包括:
  • 与经典启发式算法(随机、首次适应、Tetris)的横向对比;
  • 强化学习训练过程中多轮次的纵向性能趋势对比。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/596874.html

相关文章:

  • OpenCV 零基础到项目实战 | DAY 2:图像预处理全解析
  • 基于Seata的微服务分布式事务实战经验分享
  • 7月23号打卡
  • 四、cv::Mat的介绍和使用
  • 【趣味解读】淘宝登录的前后端交互机制:Cookie-Session 如何保障你的账户安全?
  • 密码学中的概率论与统计学:从频率分析到现代密码攻击
  • 从8h到40min的极致并行优化:Spark小数据集UDTF处理的深度实践与原理剖析
  • 通用图片 OCR 到 Word API 数据接口
  • AI黑科技:GAN如何生成逼真人脸
  • Jquery、Vue 、Ajax、axios、Fetch区别
  • 微算法科技(NASDAQ: MLGO)研究量子机器学习算法 (Quantum Machine Learning Algorithms),加速机器学习任务
  • 【OpenCV篇】OpenCV——02day.图像预处理(1)
  • 基于Trae IDE与MCP实现网页自动化测试的最佳实践
  • 神经网络和机器学习的一些基本概念
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • PDF转Word的简单方法
  • Fluent许可与硬件绑定的解决方法
  • 2027.7.23深搜算法复习总结
  • Semantic Kernel实现调用Kernel Memory
  • 多模态Embedding技术
  • 视觉BPE统一多模态理解-北大
  • 动态路由协议基础:从原理到应用场景全解析
  • 使用LLaMA-Factory对大模型进行微调
  • 希尔排序cc
  • js面试题 高频(1-11题)
  • 初识opencv02——图像预处理1
  • 论文笔记:On the Biology of a Large Language Model
  • 如何使用内部逻辑分析仪来验证通用边缘图像处理应用程序
  • 渗透测试实战 | docker复杂环境下的内网打点
  • 【图像处理基石】如何实现一个车辆检测算法?