凌晨三点的云数据中心,运维工程师小林盯着屏幕上跳动的红色告警——订单峰值流量涌来,几百台服务器有的忙到冒烟,有的闲着吃灰。他想起老师傅传给自己的经验规则:“CPU超过80%就把任务移到空闲机器”,可今天这招失灵了,移来移去反而更乱。这时,旁边一位研究AI的朋友说:“你这不是在调度资源,是在当厨房大厨——面对源源不断的订单,经验再丰富也会手忙脚乱,真正的解法是让一个'会学习的调度员'自己摸索出一套最佳炒菜顺序。” 这就是强化学习(Reinforcement Learning, RL)的用武之地。想象你是一家繁忙餐厅的主厨:订单(任务)不断涌来,灶台(服务器)数量有限,食材(内存带宽)就那么多,你要决定每道菜先做哪个、在哪个灶台做、何时翻锅。传统启发式规则像“谁先点谁先做”的固定菜谱,在简单场景有效,一旦口味多变(负载动态变化)就彻底失灵。强化学习的调度员则像一个学徒,他不断试错——每做一个决策收到“好评”或“差评”(奖励信号),久而久之学会了一套超越固定菜谱的动态策略。本文将带你从零看懂:如何把资源调度变成一个强化学习问题,并了解它在真实云和网络环境中的落地效果与挑战。
掌握用强化学习解决资源调度问题,是云原生时代运维工程师、调度系统架构师的核心竞争力——当你面对上千台机器、上万个微服务时,靠人写规则已到天花板,AI 调度员才是破局之道。
可视化演示
展示强化学习在云和网络资源调度中的MDP建模、与启发式算法对比及PPO实战部署架构,切换模式查看核心技术。
本节配有交互动效(进入视口后自动加载,约 3KB)。
资源调度MDP建模 状态S为集群资源占用,动作A为迁移决策,奖励R权衡利用率与SLA合规 MDP: (S, A, P, R, γ) Bellman最优方程指导策略学习
调度困境破局
想象你是一家餐厅的主厨,中午高峰期订单像雪花一样飘进来。你有 10 个灶台(服务器),每道菜的用时、食材需求各不相同。你的直觉(经验规则)是“哪个灶台空就炒哪个”,但很快发现:有些灶台的厨师(CPU)忙到冒烟,有些却闲得发呆。更糟的是,一道菜炒到一半需要加急(任务优先级变化),把整个排程全打乱了。这就是今天云和网络调度面临的核心困境——环境是动态的、未知的,固定规则永远慢半拍。
在传统云计算中,调度器像一个照本宣科的传菜员,他手里的“菜谱”就是启发式规则:比如“CPU 超过 80% 就把任务移到空闲机器”、“按 FIFO 顺序执行”。这些规则在负载平稳时表现尚可,但云环境的流量像过山车——电商大促、突发热搜、容器频繁启停,规则调度员根本来不及反应。而且规则是人工设计的,它只能看到局部信息,无法做到全局最优。
强化学习的破局思路完全不同:它不写规则,而是让调度员变成一个“学徒”,通过不断试错来学习。每次把任务放到某台服务器上,系统会反馈一个“好评”(吞吐量高)或“差评”(响应变慢),学徒的目标是让长期好评总和最大。有意思的是,学徒可能会学出反直觉的策略:比如故意让某台服务器保持 70% 负载,而不是越空越好——因为这样能留出余量应对突发流量。这种“反直觉策略”正是超越人工规则的地方。调度优化的目标也因此从“局部空闲”变成了“全局长期收益最大化”。
MDP决策建模
要把调度问题教给强化学习,第一步是把它翻译成一套“决策剧本”——这就是 MDP(马尔可夫决策过程)。你可以把它理解成一部舞台剧的剧本框架:每个时刻都有“当前场景”(状态)、“演员可以做的动作”(动作)、“观众的反应”(奖励),还有“场景如何转换”(状态转移)。调度问题一旦填入这个框架,就从“无法下手的复杂问题”变成了“结构清晰的数学问题”。
MDP 由五个元素组成,称为五元组:状态集合 $S$、动作集合 $A$、状态转移概率 $P(s'|s,a)$、奖励函数 $R(s,a)$ 和折扣因子 $\gamma$。在云调度场景中:状态是“当前所有服务器的 CPU/内存/网络状况”,动作是“把任务分配给哪台服务器”,转移概率刻画的是“分配后系统状态如何变化”,奖励是“任务完成速度和服务质量的综合评分”。
强化学习要学的,是在每个状态下选择一个动作的策略 $\pi(a|s)$,让长期累积折扣回报最大化。注意“折扣因子”这个设计——它就像你对未来的耐心程度:$\gamma$ 接近 1 表示你愿意为长远利益牺牲眼前收益(例如现在拒绝一些任务以保持集群稳定);$\gamma$ 接近 0 则表示你只顾眼前。这个权衡在调度中至关重要,因为今天的调度决策会影响未来几个小时的系统状态。
MDP 框架的价值在于,它把一个看似混沌的调度问题变成了一个模式清晰的决策问题。回到厨房的比喻:主厨不再凭直觉乱炒,而是明确知道——我现在的食材库存是什么(状态)、我能选择先做哪道菜(动作)、客人满意度如何变化(奖励)、接下来厨房状态会怎样演变(转移)。有了这个剧本,AI 学徒就能开始系统地练习了。
- 立即奖励$R_{t+1}$ 是执行当前调度动作后立刻得到的奖励。
- 未来奖励打折$\gamma R_{t+2}$ 是下一步奖励乘上折扣因子,$\gamma$ 在 0 到 1 之间。
- 远期衰减$\gamma^2 R_{t+3}$ 代表更远未来的奖励按平方衰减——远期收益越来越“不值钱”。
- 无限求和$\sum_{k=0}^{\infty}$ 表示把从当前到无限远未来所有折扣奖励加起来,这就是一个策略的长期价值。
状态空间设计
有了决策剧本,下一个问题至关重要:主厨炒菜时应该“看什么”来做决策?如果他只看每道菜的订单时间,却忽略灶台温度、食材余量,那他的决策一定是盲目的。状态空间设计,就是决定 AI 调度员的“视野”——它能看到哪些信息,直接决定了它能否做出好决策。
在云资源调度中,常用的状态特征包括:每台服务器的 CPU 使用率、内存占用率、磁盘 I/O、网络带宽利用率、当前任务队列长度、任务预计执行时间等。但特征不是越多越好——这就好比主厨如果同时盯着 100 个仪表盘,反而会眼花缭乱,错过关键信号。特征工程决定了学习上限:好的特征让 AI 一眼看清局势,冗余特征让 AI 陷入噪声。
状态空间还有一个现实问题:如果集群有 1000 台服务器,每台测 10 个指标,状态维度就到 10000 维,直接输入给强化学习算法会导致“维度灾难”(学习极慢)。此时需要降维和编码技巧:可以用主成分分析(PCA)提取核心特征,也可以把相似服务器分组(例如按 racks 或 pods 聚合)来压缩状态空间。还有一个技巧是相对特征——比如用“当前机器负载减去集群平均负载”来代替绝对负载值,让 AI 快速感知“这台机器算忙还是闲”。
回到厨房:最优秀的副厨不会每分钟看一遍所有食材库存,他只看“哪些菜快断货了”“哪些灶台快空出来了”这几个关键信号。状态设计的艺术,就是帮 AI 提炼出这几个“关键仪表盘”。
动作空间设计
看清楚了局势,主厨要决定“怎么炒”。动作空间设计,就是明确 AI 调度员手里握着哪些“操作旋钮”。这个设计决定了 AI 能做出多精细的决策,也直接影响训练难度。
最简单的动作空间是离散动作:把任务分配给某一台服务器。就像传菜员说“这道菜给 3 号灶台”。如果集群有 10 台服务器,动作就是一个 10 选 1 的离散集合。离散动作空间适合用 DQN(深度 Q 网络)等算法处理,实现直观,但缺点是:当集群规模变大(例如上万台服务器),动作空间会膨胀,导致学习效率下降。这时需要分层调度——先选服务器组,再选组内具体机器,把一个大动作拆成两个小动作。
更精细的是连续动作空间:AI 直接输出一个“任务分配比例”,例如“把 30% 的流量分给服务器 A,70% 分给服务器 B”。这适合用 DDPG、PPO 等策略梯度算法处理。连续动作的优点是表达力强,但训练难度更高,容易不稳定。实际系统中常采用另一种做法:动作空间设计成“调度规则参数”,AI 不直接决定分配,而是调整规则的阈值(例如“负载超过多少才触发迁移”)——这保持了系统的可解释性,因为最终决定仍由人可理解的规则执行。
动作空间还必须满足“合法性约束”:AI 不能把任务分配到一台已宕机的服务器,也不能把超过内存上限的任务塞进小内存机器。这就像主厨不能把需要 40 分钟炖的菜分配给只剩 10 分钟的灶台——看似聪明的动作在现实中是无效的。约束可以通过动作掩码(mask)实现:在动作输出层把非法动作的概率设为 0。
回到厨房:给 AI 调度员的动作旋钮越精准,它越能灵活应对局面;但如果旋钮太多太细,它反而会手忙脚乱。好的动作设计是“够用就好”——从粗粒度开始,逐步精细化。
奖励函数设计
厨房里,“好吃”是最终目标,但“好吃”是个模糊概念。奖励函数设计,就是把这个模糊目标翻译成 AI 能优化的数字信号。这是强化学习中最重要也最容易被搞砸的一步——奖励设计不好,AI 会“好心办坏事”。
调度场景中,自然的目标是“任务平均完成时间最短”、“服务器利用率高”和“SLA(服务等级协议)达标率高”。一个直观的奖励函数可以是:每个任务完成时给予 +1 奖励,任务超时则给予 -1 惩罚。但这就遇到了“稀疏奖励”问题:一个任务从提交到完成可能要几分钟,期间 AI 做了几十个中间决策,却一个奖励信号都没收到。稀疏奖励下学习极慢,就像主厨炒完一整桌菜才知道客人评价如何,中途没有任何反馈。
解决方法是“奖励塑形”(Reward Shaping):把最终目标拆解成过程中的小反馈。例如:每次调度后,奖励 = 任务预测完成时间的变化量(如果有改善就给正奖励),再加上资源均衡度的改善(方差变小给奖励)。这样 AI 每一步都能收到反馈,学习速度大幅提升。但塑形要小心“奖励黑客”(Reward Hacking)——AI 可能学会钻空子:比如把任务全部推到一台机器上,让“均衡度”这项指标因服务器全部过载而“意外达标”。这就像主厨发现“只要把所有菜都做成辣的,客人就给好评”——这不是我们想要的行为。
实际工程中常用多目标加权奖励:
回到厨房:好的奖励函数就像一位耐心的美食评论家——不仅给出最终评分,还会在每道菜完成时点评“火候不错”“略咸”,让主厨能及时调整。奖励塑形的核心就是给 AI 提供“过程反馈”,同时守住“最终目标”不被钻空子。
- 响应速度项$w_1 \times \frac{1}{\text{avg\_response}}$ 奖励平均响应时间短——响应越快,分数越高。
- 均衡度项$w_2 \times (1 - \text{util\_std})$ 中 $\text{util\_std}$ 是服务器利用率的方差,方差越小说明负载越均衡,奖励越高。
- SLA 达标项$w_3 \times \text{sla\_hit\_rate}$ 奖励服务等级协议达标率——百分百达标当然最好。
- 能耗罚项$w_4 \times \text{energy\_cost}$ 减去能耗成本,防止 AI 用“所有机器全开”的暴力方式换性能。
启发式算法对比
清楚了 RL 怎么做,自然有个问题:它真的比传统方法强吗?这就像问“AI 主厨比有 20 年经验的老师傅强在哪”。我们来看看三类调度算法的差异——贪心算法、遗传算法和强化学习。
贪心算法是“只看眼前的厨师”:每次都选择当前最优的动作。在调度中体现为“任务总是提交给当前负载最低的服务器”(Least Loaded,最空闲优先)。优点是简单快速,缺点是目光短浅——今天把任务都塞给空闲机器,可能忽略了这台机器即将接收大量新任务。“只扫门前雪”的结果是局部最优。
遗传算法是“离线反复试菜的团队”:它模拟生物进化,维护一批候选调度方案,通过交叉、变异迭代出最优解。在云调度中常用于离线规划:比如每周生成一次容器部署方案。优点是能全局搜索,缺点是需要完整的环境信息,且计算量大,无法在线实时响应。它适合“离线批量规划”,不适合“在线毫秒级调度”。
强化学习则结合两者优点:训练时像遗传算法一样大量探索(在模拟环境里反复试错),部署后像贪心算法一样快速决策(一次前向传播毫秒级出结果)。它的核心优势是“动态自适应”——随着负载模式变化,策略可以不断微调。
为了量化对比,业界常用标准的调度模拟器(如 CloudSim、Gym 化的调度环境)做实验对比。评估指标包括:平均任务完成时间(JCT)、资源利用率、SLA 违规率。典型结论是:在静态负载下,RL 与贪心算法差距不大;但在动态突发负载下,RL 能降低 20%-40% 的平均 JCT,SLA 违规率降低显著。需要注意的是,RL 的胜出依赖“训练时见过足够多样的负载模式”——如果真实流量是全新的分布,RL 可能表现不佳。这是部署前必须评估的风险。
回到厨房:贪心主厨只看当前哪口锅空着,遗传算法主厨回家研究一整周的菜单后才来决定明天做什么,RL 主厨则既在营业中不断学习,又能瞬间应对突发订单——这才是云调度真正需要的“自适应决策力”。
在线部署挑战
训练好的 RL 调度策略像一位刚拿到厨师证的毕业生——在模拟厨房里(训练环境)表现出色,但真到营业时间,面对真实灶台的火候不均、客人口味刁钻,可能手忙脚乱。在线部署是 RL 落地最“惊险一跳”的环节。
第一个挑战是“模拟到真实”(sim-to-real gap):训练时用的负载数据来自历史流量,但真实环境总会出现没见过的模式(如突发热搜、新业务上线)。策略可能产生“幻觉”——在模拟里表现好,现实中却做出荒谬决策。这就像学徒在培训厨房里只会用平底锅,到了真实厨房看到铁锅就慌了。缓解方案包括:训练时注入噪声扰动(Domain Randomization),让策略见过更多变体;以及先用“影子模式”部署——AI 的决策只记录不执行,和实际调度结果做离线对比。
第二个挑战是安全约束。调度关乎生产系统,AI 一个错误决策可能导致大规模服务不可用。就像试菜可以失败,但客人已经下单的菜不能做砸。业界常采用“人在回路”(Human-in-the-loop)机制:AI 给出调度建议,但如果动作风险超过阈值(例如它想把 100 个容器全迁移到一台机器),系统自动否决并回退到规则调度器。另外还可以设置“安全护栏”(Safety Guardrail):AI 只能操作冷却期已过的节点,且每次操作前后负载变化不得超过 10%。
第三个挑战是灰度发布。不能“一键切换”所有流量到 AI 调度。成熟的实践是:先把 AI 调度应用到 5% 的低优先级任务上,观察一段时间,若 QoS 指标稳定再逐步扩大比例。同时建立完善的监控和回滚机制:一旦发现指标劣化,立即回退到旧策略。这个“渐进式上线”的过程像试营业——先请熟人试吃(低风险流量),再逐步对外开放(核心流量)。
回到厨房:一位优秀的厨师长会在推出新菜单前先做一周的“试菜周”——让少数客人品尝新菜、收集反馈、调整配方,再正式上线。RL 部署的本质也是“试菜”的过程:小流量验证、收集反馈、快速调整、逐步放量——这才是 AI 调度落地的正确姿势。
AI 应用场景
场景一:字节跳动的容器资源调度
阶段:MDP建模 + 奖励函数设计 + 在线部署
解决的问题:大规模微服务部署时,容器如何分配到物理机直接影响资源利用率和响应延迟。传统启发式规则(如 Best Fit)在流量波动时容易造成热点机器,导致资源浪费或 SLA 违规。用 RL 调度器学习“哪些服务适合放在一起”、“何时需要迁移容器”,可在保持 SLA 的同时提高集群资源利用率 15% 以上。
具体案例:某推荐系统团队将容器的 CPU/内存/网络特征编码为状态,动作为“把容器迁移到哪台机器”,奖励函数结合了“迁移成本”和“负载均衡度”。在 5000 台机器的集群上灰度上线,初期只调度 10% 的低优任务,运行两周后扩展到 60%,整体利用率从 45% 提升到 58%。
场景二:CDN 边缘节点的流量调度
阶段:状态空间设计 + 动作空间设计 + 效果评估
解决的问题:CDN(内容分发网络)的边缘节点遍布全球,用户请求需要被路由到最优节点。传统方法基于“最近节点”或“最低延迟”规则,但忽略了各节点的实时负载和带宽成本。RL 通过学习历史流量模式,在每个决策点选择“延迟低且不过载”的节点,动态平衡用户体验和带宽成本。
具体案例:一家视频流媒体服务商在晚间高峰时段,将 RL 调度器接入 30% 的流量,卡顿率降低了 22%,同时跨网带宽费用下降了 18%。模型每 5 秒做一次路由决策,状态包含各节点最近 1 分钟的延迟和负载统计。
Python 演示
import numpy as npimport random class Task: def __init__(self, arrival_time, workload): self.arrival_time = arrival_time self.workload = workload class RLScheduler: """用 Q-Learning 学习调度策略,状态=各服务器负载等级,动作=选择服务器""" def __init__(self, n_servers=3, n_levels=5): self.n_servers = n_servers self.n_levels = n_levels self.alpha = 0.1 # 学习率:新信息覆盖旧信息的速度 self.gamma = 0.9 # 折扣因子:对长期收益的重视程度 self.epsilon = 0.2 # 探索率:随机尝试新动作的概率 self.q_table = np.zeros((n_levels ** n_servers, n_servers)) self.server_loads = [0] * n_servers def _state_idx(self): """把各服务器负载等级压缩为状态索引""" idx = 0 for i, load in enumerate(self.server_loads): level = min(load // 20, self.n_levels - 1) idx += level * (self.n_levels ** i) return idx def choose_action(self): """epsilon-greedy:大部分时候选Q值最高的,偶尔随机探索""" state = self._state_idx() if random.random() < self.epsilon: return random.randint(0, self.n_servers - 1) return int(np.argmax(self.q_table[state])) def update(self, state, action, reward, next_state): """Q-Learning 更新规则:Q(s,a) += lr * (r + gamma * max Q(s',a') - Q(s,a))""" best_next = np.max(self.q_table[next_state]) td_target = reward + self.gamma * best_next td_error = td_target - self.q_table[state][action] self.q_table[state][action] += self.alpha * td_error def assign(self, task): """调度主流程:选服务器,更新负载,返回服务器编号""" state = self._state_idx() action = self.choose_action() self.server_loads[action] += task.workload reward = -self.server_loads[action] # 负载越高奖励越低 next_state = self._state_idx() self.update(state, action, reward, next_state) return action def simulate(episodes=200, n_tasks=100): scheduler = RLScheduler() for ep in range(episodes): scheduler.server_loads = [0] * 3 for t in range(n_tasks): task = Task(t, workload=random.randint(1, 5)) sched = scheduler.assign(task) scheduler.server_loads[sched] -= 0.2 # 模拟任务处理过程 print("最终 Q 表(行=状态,列=选择服务器的价值):") print(scheduler.q_table[:8].round(2)) print("\n调度完成,最终负载分布:", scheduler.server_loads) if __name__ == "__main__": simulate(episodes=500, n_tasks=200)
self.q_table = np.zeros((n_levels ** n_servers, n_servers))建立“状态-动作”价值表,每个格子存储“在这个状态下选这台服务器的长期价值有多高”。def _state_idx(self)这是“厨师的眼睛”:把三台服务器负载压缩成一个数字,让 Q 表能索引当前局面。def choose_action(self)epsilon-greedy:80% 时间选当前最优,20% 时间随机探索——就像主厨偶尔试试新菜式。td_target = reward + self.gamma * best_next这是“事后诸葛亮”:用即时奖励加上未来最佳收益来修正当前判断。random.randint(1, 5)模拟任务负载随机性,让调度器见识各种“菜品难度”。
常见误区
误区把能想到的指标全塞进奖励函数,认为指标越多、奖励函数越“完善”,AI 学到的策略就越好。实际结果往往是训练半天不收敛,或者学出各种莫名其妙的行为。
正解奖励函数是“指挥棒”,不是“考核表”。每加一个指标,AI 就多一个钻空子的机会。少而精的奖励(2-3 个核心指标)比面面俱到的奖励更容易训练出好策略。就像教新手做菜,你只说“别烧焦、别太咸”,他反而学得快;你一口气说二十个要求,他直接懵了。
为何常见:人天然倾向“全面覆盖”,总觉得指标少了会漏掉重要目标,却没意识到奖励函数的核心是“引导”而非“评价”。
误区认为给 RL 调度器喂入所有可观测指标(每台服务器 50 个指标× 1000 台 = 5 万维状态),AI 就能“全知全能”做出最佳决策。
正解高维状态导致“维度灾难”——训练所需样本量随维度指数增长,实际数据根本喂不够。更糟的是冗余特征引入噪声,干扰 AI 对关键信号的感知。正确的做法是做特征选择:保留与调度决策强相关的特征(CPU 负载、队列深度、带宽余量),用 PCA 降维或聚合服务器组。就像品酒师不需要知道酒瓶的包装颜色也能判断酒的品质——抓住关键特征就够了。
为何常见:深度学习领域“更多数据更好”的经验被误迁移到了特征设计上,忽视了 RL 样本效率低的特点。
误区在历史数据或模拟器上训练好的 RL 调度器,直接全量上线替换原有规则调度器,认为“训练时效果这么好,上线肯定没问题”。
正解模拟环境永远无法完全模拟真实世界的复杂性(网络抖动、硬件故障、用户行为突变),直接全量上线轻则效果不及预期,重则引发生产事故。正确做法是影子模式 + 灰度发布:先用历史流量回放对比 AI 和现有策略的决策差异,再逐步扩大 AI 控制的流量比例,全程监控核心指标并设置自动回滚。
为何常见:急于看到效果,低估了“环境差异”的影响,把训练时的指标误当成上线后的保证。
误区认为 RL 一旦训练完成,就具备了举一反三的能力,任何没见过的流量模式都能从容应对。
正解RL 的本质是“在见过的模式中选择最优”——它不能凭空推理从未见过的场景。如果真实流量分布与训练分布差异巨大,RL 可能做出荒谬决策。这就是为什么需要持续监控数据分布漂移,并定期用新数据微调模型。就像老司机也怕完全陌生的路况,但经验丰富的司机会更谨慎地应对。
为何常见:人容易把“智能”想象成全知全能,忽视了 RL 依赖训练数据分布的本质。
面试题
Q1. 强化学习解决资源调度问题的核心优势是什么?
- A.完全不需要历史数据
- B.在动态环境中学习长期最优策略← 正确答案
- C.保证每次决策都全局最优
- D.无需定义任何奖励函数
答案:B。RL 的核心优势是通过与环境的交互学习长期累积收益最大化的策略,特别适合云环境这类动态变化的场景。A 错——RL 需要与环境交互(可模拟);C 错——RL 不保证每次最优,是统计意义上的最优;D 错——奖励函数是 RL 的必要组成部分。
Q2. 关于 MDP 五元组中折扣因子 γ 的描述,正确的是?
- A.γ=0 时只关注即时奖励← 正确答案
- B.γ=1 时所有远期奖励同等重要← 正确答案
- C.γ 越大,调度策略越短视
- D.γ 可以大于 1
答案:AB。γ 的范围是 [0,1),γ=0 完全不关注未来,γ 趋近 1 则未来奖励与当前奖励同等权重。C 选项说反了——γ 越大策略越长远而非越短视。D 错误——γ>1 会导致累积回报发散,数学上不成立。
Q3. 状态空间设计中出现“维度灾难”时,最有效的应对策略是?
- A.增加训练数据量到足够覆盖高维空间
- B.用 PCA 降维或聚合相似节点压缩状态← 正确答案
- C.让动作空间也同步扩大
- D.放弃强化学习改用启发式算法
答案:B。维度灾难的本质是样本需求随维度指数增长,实践中最有效的方法就是降维和特征压缩——这就像看地图时不需要看清每条街道的门牌号,先看主干道就够了。A 不现实——数据量永远追不上维度增长;C 会加剧问题;D 是回避而非解决。
Q4. 奖励塑形(Reward Shaping)的主要目的是?
- A.让奖励函数更复杂
- B.解决稀疏奖励导致的学习缓慢问题← 正确答案
- C.防止 AI 钻奖励函数的空子
- D.增加环境的随机性
答案:B。奖励塑形把稀疏的最终奖励拆解为过程反馈,让 AI 每一步都能获得学习信号。就像教小朋友写字,与其等到整篇写完再评分,不如每写一个笔画就给予反馈。A 不是目的;C 是需要塑形时额外防范的问题;D 与塑形无关。
Q5. 关于 RL 调度器在线部署,以下做法正确的是?
- A.先用影子模式离线对比新旧策略← 正确答案
- B.一次性全量切换以快速验证效果
- C.灰度发布并设置自动回滚机制← 正确答案
- D.上线后无需人工监控
答案:AC。影子模式(A)能无风险地评估策略差异,灰度发布加自动回滚(C)是控制爆炸半径的标准做法。B 风险极高——一旦策略在未见过的模式上失误,全量切换会导致大规模故障。D 显然错误——上线后必须持续监控数据分布漂移。
Q6. RL 调度器与传统贪心算法相比,最本质的区别是?
- A.RL 不需要环境信息
- B.RL 考虑长期累积收益而非只看眼前← 正确答案
- C.RL 训练速度快于贪心算法
- D.RL 一定能得到全局最优解
答案:B。贪心算法是“眼前最优”,RL 通过折扣回报学习“长期最优”。就像下棋时新手只看下一步吃子,高手会算五步后的局面。A 错——RL 必须从环境反馈中学习;C 错——RL 训练很慢;D 错——RL 的收敛结果是近似最优而非保证全局最优。
Q7. 在奖励函数设计中,出现“奖励黑客”(Reward Hacking)是指?
- A.AI 通过合法但违背设计意图的方式获取高奖励← 正确答案
- B.攻击者入侵奖励函数
- C.奖励值被黑客篡改
- D.奖励函数导致训练崩溃
答案:A。奖励黑客是 RL 中的经典问题:AI 发现“把任务全推到一台机器上”能因负载均衡指标“意外达标”而获得高分,虽然这不是设计者想要的。这是目标不对齐的表现,需要通过约束守卫或更细致的奖励设计来防范。B/C 是字面歧义,D 是训练不稳定问题。
Q8. 关于强化学习和遗传算法在云调度中的应用场景,说法正确的是?
- A.遗传算法适合离线批量规划← 正确答案
- B.RL 适合在线毫秒级调度决策← 正确答案
- C.遗传算法适合实时响应突发流量
- D.RL 在线推理速度通常很快← 正确答案
答案:ABD。遗传算法需要迭代进化产生方案,计算开销大,适合离线规划(如每周容器部署方案),不适合实时响应(C 错)。RL 训练虽慢,但部署后只需一次神经网络前向传播就能出决策,能在毫秒级完成在线调度(B/D 对)。
Q9. 在云调度 MDP 建模中,以下哪个是“状态”?
- A.把任务分配给服务器 A
- B.服务器的 CPU 和内存使用率← 正确答案
- C.任务完成后的 +1 奖励
- D.折扣因子 γ
答案:B。状态是 AI 做决策时观察到的环境信息,如各服务器负载、队列长度等。A 是动作;C 是奖励;D 是 MDP 的超参数而非状态。
Q10. 关于“模拟到真实”(sim-to-real)的应对策略,业界常用方法包括?
- A.训练时注入随机扰动增强泛化← 正确答案
- B.完全依赖模拟器精度提升
- C.影子模式部署验证后再切换← 正确答案
- D.逐步灰度扩大 AI 控制范围← 正确答案
答案:ACD。领域随机化(A)让策略见过更多环境变体,是提升泛化能力的标准做法。影子模式(C)和灰度发布(D)都是控制 sim-to-real 风险的手段。B 不现实——模拟器永远无法完全精确,提升精度只能减小差距不能消除。