1. 项目概述:当大模型学会“临场应变”
最近在AI圈里,ATLAS这个词的热度有点高。乍一看,你可能会联想到那个著名的地理信息系统,或者某个数据库。但今天我们要聊的,是AI领域一个全新的、充满潜力的研究方向:ATLAS (Agentic Test-time Learning-to-Allocate Scaling)。简单来说,它试图解决大语言模型(LLM)在实际部署中的一个核心痛点:如何在推理阶段(Test-time)动态、智能地分配计算资源,以应对复杂多变的任务。
想象一下,你有一个能力强大的LLM,比如GPT-4或Claude 3。当你问它“今天天气怎么样?”这种简单问题时,它可能只需要动用一小部分“脑力”(计算层或参数)就能给出完美答案。但当你丢给它一个需要多步推理、代码生成、或者从长文档中精确抽取信息的复杂任务时,它就需要“全功率运转”,调用更深、更广的网络能力。传统上,无论任务难易,模型在推理时都是“一视同仁”地走完所有计算路径,这造成了巨大的计算浪费和延迟。
ATLAS的核心思想,就是赋予LLM一种“智能体(Agentic)”的能力,让它能在推理的当下,根据输入问题的具体内容和难度,自主决策应该调用模型的哪些部分、以何种深度进行计算。这不仅仅是简单的“早退”(Early Exiting)机制,而是一种更精细、更动态的“学习式分配(Learning-to-Allocate)”策略。它让模型从一个固定的计算管道,转变为一个能根据情境调整自身“思考强度”的智能体。
这对于任何关心LLM应用成本、延迟和效率的开发者或研究者来说,都是一个极具吸引力的方向。无论是构建需要快速响应的聊天机器人、处理海量文档的智能分析系统,还是运行在边缘设备上的轻量级AI应用,ATLAS所代表的技术路径,都可能成为下一代高效LLM推理的关键。
2. ATLAS的核心设计思路与原理拆解
要理解ATLAS,我们需要把它拆解成几个关键部分:智能体(Agentic)、测试时学习(Test-time Learning)和分配与扩展(Allocate Scaling)。这三者环环相扣,共同构成了其方法论的基础。
2.1 从静态推理到“智能体”式决策
传统的LLM推理是一个确定性过程:输入文本经过嵌入层,然后顺序通过Transformer的每一层(前馈网络、注意力机制),最终得到输出概率。这个过程是固定的,模型内部没有“选择”的余地。
ATLAS引入的“智能体”概念,借鉴了AI智能体(AI Agent)的思想。在这里,智能体不是指一个外部的、调用API的程序,而是内化于模型推理流程中的一个决策模块。这个模块在模型处理输入的每一个关键步骤(例如,经过几个Transformer块之后),都会对当前已处理的中间表示进行评估,并决定下一步的行动。行动可能包括:
- 继续深入计算:调用下一个或下一组更复杂的层。
- 调用特定专家模块:如果模型是混合专家(MoE)架构,则决定路由到哪个专家。
- 提前输出:如果当前信息已经足够置信,则直接生成最终答案,跳过剩余计算。
- 请求更多上下文:在流式或交互式场景中,决定是否需要向用户追问以澄清意图。
这个决策过程本身,就是一个轻量级的神经网络或策略模型,它被训练来最大化“任务性能”与“计算成本”之间的权衡收益。
2.2 “测试时学习”的动态适应性
“测试时学习(Test-time Learning/TTL)”是ATLAS另一个精髓。传统机器学习严格区分训练(Training)和推理(Inference/Test)两个阶段。模型参数在训练后冻结,推理时不再改变。但TTL打破了这个界限,它允许模型在面对每一个具体的测试样本时,进行极小幅、快速的参数调整或激活值校准。
在ATLAS的语境下,TTL主要体现在两个方面:
- 决策策略的微调:智能体决策模块可以根据当前输入样本的某些特征(如困惑度、注意力分布),动态调整其决策阈值或策略。例如,对于一眼就能看出是简单问候的句子,决策模块会立刻调低“继续计算”的倾向。
- 模型激活的校准:基于当前输入,对模型中某些层的激活值进行轻微的缩放或偏置,使其更适合处理当前这类问题。这可以看作是一种极其高效的“单样本微调”。
TTL的关键在于“轻量”和“快速”。它通常只涉及非常少量的参数(如适配器层)或基于梯度的单步优化,其计算开销必须远小于主干模型的一次完整前向传播,否则就失去了意义。这使得模型能够实时适应输入数据的分布,而无需重新训练整个庞然大物。
2.3 “学习分配”与“可扩展性”的协同
“学习分配(Learning-to-Allocate)”是智能体决策的具体目标。它需要学习一个策略:给定输入 ( x ) 和当前计算状态 ( s_t ),如何分配剩余可用的计算资源 ( R )(可以理解为可用的Transformer层数、专家网络、或浮点运算量),以最大化最终输出质量 ( Q ),同时最小化资源消耗 ( C )。这本质上是一个序列决策问题,通常可以用强化学习(Reinforcement Learning)来训练这个分配策略。
“可扩展性(Scaling)”则指明了ATLAS的设计目标与优势。一个好的ATLAS系统应该具备以下扩展特性:
- 模型规模扩展友好:当主干LLM从百亿参数扩展到千亿、万亿时,ATLAS的决策模块开销应只缓慢增长,从而让超大模型的推理效率提升更为显著。
- 任务复杂度扩展:能够应对从简单QA到复杂编程、逻辑推理等不同难度谱系的任务,智能地分配与之匹配的计算量。
- 硬件资源扩展:在不同的硬件约束(云端GPU、边缘设备)下,可以通过调整策略的激进程度(例如,更倾向于早退)来适配。
将这三者结合起来,ATLAS的完整图景是:一个LLM配备了一个轻量的、具备测试时学习能力的智能体决策模块。对于每一个输入,该模块在推理过程中动态地“学习”这个输入的特点,并据此“分配”差异化的计算路径。最终,在几乎不损失精度的前提下,实现计算资源消耗的显著降低和推理速度的大幅提升,并且这种好处随着模型和任务复杂度的“扩展”而越发明显。
3. 关键技术组件与实现路径解析
理解了宏观思路,我们深入到技术层。构建一个ATLAS系统,需要解决几个核心组件的设计问题。
3.1 智能体决策模块的架构选择
决策模块是ATLAS的大脑。它的设计必须在效果、开销和通用性之间取得平衡。
基于阈值的启发式方法:最简单的方式。在模型的某些层(如每隔4层)后,计算一个“退出置信度”分数,例如当前预测token的概率最大值,或序列的熵。如果分数超过预设阈值,则提前退出。这种方法几乎零开销,但策略僵硬,无法适应复杂任务。
- 实操要点:阈值需要在大规模验证集上进行网格搜索确定,且对不同任务类型(分类、生成)可能需要不同的阈值。它更适合作为基线或与其他方法结合使用。
轻量级判别网络(Classifier):在中间层插入一个极小的神经网络(如2层MLP),输入是当前层的隐藏状态(通常经过池化),输出是“继续”或“退出”的二元决策,甚至是“跳转到第N层”的多类决策。这个小网络与主干模型一起训练或微调。
- 注意事项:这个小网络的参数量必须严格控制(例如,只占主干模型的万分之一)。它的训练是关键,需要设计合适的损失函数,既要鼓励正确预测,也要惩罚不必要的计算。
强化学习策略网络:这是更高级但也更复杂的方法。将决策过程建模为马尔可夫决策过程(MDP),状态是模型中间表示和任务历史,动作是分配决策,奖励是最终任务得分减去计算成本惩罚。使用PPO、A2C等策略梯度方法进行训练。
- 实现难点:奖励函数的设计非常关键。计算成本的量化(FLOPs,延迟)需要与任务精度(BLEU,准确率)在一个合理的量纲上平衡。训练过程不稳定,需要大量的环境交互(即用模型推理)来收集数据,成本高昂。
基于路由的混合专家(MoE)集成:如果主干模型本身就是MoE架构(如Mixtral),ATLAS的决策模块可以天然地作为路由器(Router)的增强版。传统的路由器为每个token选择top-k个专家。增强版路由器可以更智能地决定:是否真的需要调用k个专家?对于简单的token,是否可以只调用1个甚至0个专家(直接使用共享参数)?这实现了token级别的计算分配。
- 优势:与模型架构深度融合,效率潜力最高。
- 挑战:需要从模型设计阶段就统筹考虑,对现有非MoE模型的改造难度大。
3.2 测试时学习(TTL)的具体实现机制
TTL让模型在推理时“微调”自己。具体如何做?
梯度适配(Gradient-based Adaptation):
- 原理:对于当前输入样本,让模型进行一次前向传播,计算一个基于该样本的损失(例如,语言建模损失,或一个特定任务的损失)。然后,仅对模型中的一小部分参数(如特定层的偏置、缩放因子,或插入的适配器层)执行一步或几步梯度下降。更新后的参数仅用于处理当前这个样本,处理完后即丢弃,下一个样本使用原始参数重新开始。
- 示例:在文本分类任务中,对于当前句子,可以计算其下一个词预测的损失,然后用这个损失去更新最后几层LayerNorm的增益(gain)和偏置(bias)参数。
- 核心技巧:学习率必须设置得非常小(例如1e-5),且优化步数通常只有1步,以防止在单个样本上过拟合。计算图需要精心设计,以避免内存爆炸。
前向校准(Forward-time Calibration):
- 这是一种无梯度的方法。通过分析当前输入在前几层产生的激活统计量(均值、方差),动态地计算一组校准参数(如仿射变换的参数),并应用于后续层的输入。这可以看作是一种实时的批量归一化(BatchNorm)或层归一化(LayerNorm)的调整。
- 优点:速度极快,没有反向传播开销。
- 缺点:表达能力有限,通常只能做分布平移和缩放,无法进行复杂的特征变换。
基于记忆的原型学习(Memory-based Prototype Learning):
- 维护一个小的、可快速检索的外部记忆库,里面存储了不同任务或数据模式的“原型”特征向量或适配器参数。对于当前输入,通过快速相似度匹配(如余弦相似度)从记忆库中检索出最相关的原型,并将其对应的轻量级参数“加载”到模型中,临时改变模型的行为。
- 这种方法将TTL从“优化”问题变成了“检索”问题,延迟更可控。
3.3 计算分配策略与资源建模
分配策略需要知道“资源”是什么,以及如何度量“消耗”。
资源粒度建模:
- 层粒度(Layer-wise):最直观。资源就是剩余的Transformer层数。决策动作是“使用下一层”或“跳过N层”。
- 专家粒度(Expert-wise):针对MoE模型。资源是可选择的专家网络集合。决策动作是为当前token或序列块选择哪些专家。
- 计算子图粒度(Subgraph-wise):更细粒度。将单个Transformer层内的计算进一步分解(如注意力头、前馈网络中间维度),决策可以关闭某些头或使用低精度计算。
- FLOPs/时间预算:最通用的建模。将资源抽象为一个总预算(如允许消耗的最大FLOPs数或毫秒数)。每个决策动作(使用某个模块)会消耗预算的一部分,策略需要在预算耗尽前完成任务。
策略训练目标:
- 通常是一个多目标优化问题:
最大化 E[任务性能(Reward)] - λ * E[资源消耗(Cost)]。 - λ 是一个超参数,控制着效率与效果的权衡。λ=0时,策略会倾向于使用全部资源以追求最高性能;λ很大时,策略会极其节俭,可能损害性能。
- 在强化学习框架下,Reward可以是任务完成的准确率、BLEU分数等,Cost可以是实际测量的延迟或估算的FLOPs。
- 通常是一个多目标优化问题:
4. 实战构建:一个简化的ATLAS概念验证项目
理论说了这么多,我们来动手设计一个最小化的概念验证(PoC),以层粒度早退为例,展示ATLAS的核心实现逻辑。这里我们使用PyTorch框架和Hugging Face Transformers库进行示意。
注意:以下代码为概念演示,突出逻辑,无法直接运行。实际实现需要考虑更多工程细节,如梯度截断、内存管理等。
4.1 环境准备与模型加载
首先,我们需要一个预训练的语言模型作为主干,并为其植入决策点。
import torch import torch.nn as nn from transformers import AutoModelForCausalLM, AutoTokenizer class AtlasEnabledLM(nn.Module): def __init__(self, base_model_name: str, exit_layers: list): """ Args: base_model_name: 预训练模型名称,如 'gpt2' exit_layers: 设置决策点的层索引,如 [4, 8, 12] """ super().__init__() # 加载主干模型 self.base_model = AutoModelForCausalLM.from_pretrained(base_model_name) self.config = self.base_model.config self.tokenizer = AutoTokenizer.from_pretrained(base_model_name) if self.tokenizer.pad_token is None: self.tokenizer.pad_token = self.tokenizer.eos_token self.num_layers = self.config.n_layer self.exit_layers = sorted(exit_layers) # 决策点位置 assert all(0 < l < self.num_layers for l in self.exit_layers), "Exit layers must be within model depth." # 构建决策模块:每个决策点对应一个轻量级分类器 self.exit_classifiers = nn.ModuleDict() hidden_size = self.config.n_embd # 每个分类器是一个简单的两层MLP for layer_idx in self.exit_layers: self.exit_classifiers[str(layer_idx)] = nn.Sequential( nn.Linear(hidden_size, hidden_size // 4), nn.ReLU(), nn.Linear(hidden_size // 4, 2), # 输出2维,分别对应“继续”和“退出”的logits nn.LogSoftmax(dim=-1) ) # 用于测试时学习(TTL)的轻量适配器参数(示例:每个决策点一个缩放因子) self.ttl_scalers = nn.ParameterDict() for layer_idx in self.exit_layers: self.ttl_scalers[str(layer_idx)] = nn.Parameter(torch.ones(hidden_size)) def forward(self, input_ids, attention_mask=None, training=False): """ 前向传播,集成动态早退逻辑。 Args: training: 训练模式下,会强制走完全程以收集数据;推理模式下,执行早退决策。 """ if attention_mask is None: attention_mask = torch.ones_like(input_ids) # 获取词嵌入 hidden_states = self.base_model.transformer.wte(input_ids) position_ids = torch.arange(0, input_ids.size(-1), dtype=torch.long, device=input_ids.device) position_embeds = self.base_model.transformer.wpe(position_ids) hidden_states = hidden_states + position_embeds layer_logits = [] # 存储每个决策点产生的logits(用于训练) exit_layer = None # 实际退出的层 # 逐层通过Transformer for layer_idx in range(self.num_layers): # 通过当前层 layer_module = self.base_model.transformer.h[layer_idx] hidden_states = layer_module(hidden_states, attention_mask=attention_mask)[0] # 检查是否为决策点 if layer_idx in self.exit_layers: # --- 测试时学习(TTL)示例:应用可学习的缩放 --- if not training: # 在推理时,使用存储的缩放因子对当前隐藏状态进行微调 scale = self.ttl_scalers[str(layer_idx)] # 这里采用极简的逐元素乘法,实际可以更复杂 hidden_states_adapted = hidden_states * scale.unsqueeze(0).unsqueeze(0) else: hidden_states_adapted = hidden_states # 计算当前层的“退出分数” # 使用池化后的[CLS] token或平均池化作为分类器输入 pooled_state = hidden_states_adapted.mean(dim=1) # (batch, hidden_size) exit_logits = self.exit_classifiers[str(layer_idx)](pooled_state) # (batch, 2) # 获取“退出”类别的概率 exit_prob = torch.exp(exit_logits[:, 1]) # 假设索引1对应“退出” # 训练模式:记录logits,用于计算损失,并强制继续 if training: layer_logits.append(exit_logits) # 推理模式:根据概率做决策 else: # 决策逻辑:如果“退出”概率大于阈值,则生成最终输出并退出循环 decision_threshold = 0.7 # 可调阈值 if (exit_prob > decision_threshold).any(): # batch中任意样本决定退出 exit_layer = layer_idx break # 如果提前退出,使用当前层的隐藏状态计算输出 if exit_layer is not None: # 使用提前退出层的隐藏状态 last_hidden_state = hidden_states else: # 正常走完全部层 last_hidden_state = hidden_states # 通过语言模型头得到最终logits lm_logits = self.base_model.lm_head(last_hidden_state) outputs = { 'logits': lm_logits, 'exit_layer': exit_layer, 'layer_logits': layer_logits if training else None } return outputs4.2 决策模块的训练策略
决策分类器不能随机初始化,需要训练。我们需要一个两阶段的训练流程:
- 主干模型冻结,训练决策器:使用一个标注了“最佳退出层”的数据集。这个数据集可以通过在完整模型上运行样本,并观察在哪个层之后模型的预测置信度趋于稳定来近似生成。损失函数是决策器在每个决策点预测的“退出/继续”标签与真实“最佳退出层”标签的交叉熵损失。
- 联合微调(可选):以较小的学习率,同时微调解锁的最后几层主干模型参数和决策器参数,使用最终任务损失(如语言建模损失)加上决策器的稀疏性鼓励损失(鼓励早退)。
def train_exit_classifier(model, dataloader, optimizer, device): model.train() total_loss = 0 for batch in dataloader: input_ids = batch['input_ids'].to(device) attention_mask = batch['attention_mask'].to(device) optimal_exit_layer_labels = batch['exit_label'].to(device) # 假设数据集中包含“最佳退出层”标签 optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, training=True) all_layer_logits = outputs['layer_logits'] loss = 0 # 为每个决策点计算损失 for i, layer_idx in enumerate(model.exit_layers): logits = all_layer_logits[i] # (batch, 2) # 生成该决策点的真实标签:如果optimal_exit_layer <= layer_idx,则为“退出”(1),否则为“继续”(0) true_label = (optimal_exit_layer_labels <= layer_idx).long() layer_loss = nn.functional.cross_entropy(logits, true_label) loss += layer_loss loss.backward() optimizer.step() total_loss += loss.item() return total_loss / len(dataloader)4.3 集成测试时学习(TTL)
在我们的概念模型中,TTL体现为self.ttl_scalers参数。这些参数在推理时是固定的,但我们可以设想一个更高级的场景:在每次推理前,用当前输入的一个子集(或历史相似输入)快速调整这些缩放因子。
def adaptive_ttl_update(model, calibration_input_ids, calibration_steps=1, lr=1e-5): """ 使用少量校准数据,快速更新TTL参数。 注意:此操作会修改模型参数,仅适用于当前推理会话或批次。 """ original_params = {n: p.clone() for n, p in model.named_parameters() if 'ttl_scalers' in n} ttl_optimizer = torch.optim.SGD([p for n, p in model.named_parameters() if 'ttl_scalers' in n], lr=lr) model.train() # 切换到训练模式以启用梯度 for _ in range(calibration_steps): ttl_optimizer.zero_grad() # 使用校准数据计算一个损失,例如语言模型损失 outputs = model(calibration_input_ids, training=False) # 注意,这里决策器不参与梯度 logits = outputs['logits'] # 简单的语言建模损失(预测下一个token) shift_logits = logits[..., :-1, :].contiguous() shift_labels = calibration_input_ids[..., 1:].contiguous() loss = nn.functional.cross_entropy(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) loss.backward() ttl_optimizer.step() model.eval() # 切换回推理模式 # 在实际生产环境中,可能需要在推理后恢复原始参数,或者为每个请求克隆模型。 # 这里演示了TTL的思想,工程实现需谨慎处理参数隔离。这个PoC展示了ATLAS的核心循环:前向传播、在决策点评估、应用TTL调整、做出继续或退出的决策。真实的系统远比这复杂,需要考虑批量推理的决策一致性、更高效的决策网络、与MoE路由器的结合等。
5. 挑战、应对策略与未来展望
ATLAS理念虽好,但通往实用化的路上布满荆棘。下面是我在研究和复现类似思路时,总结的几个核心挑战及思考。
5.1 核心挑战与应对思路
决策延迟与开销的平衡
- 问题:决策模块本身需要计算。如果决策过程太复杂(如一个大神经网络),其开销可能抵消甚至超过早退节省的计算量。
- 应对:
- 极度轻量化设计:决策网络应只有几千到几万参数,使用深度可分离卷积、分组线性层等设计。
- 异步决策与前瞻:不必在每个token或每个决策点都运行决策器。可以每隔多个token或一个序列块做一次决策,并假设这个决策适用于接下来的一段序列。
- 硬件友好型设计:将决策逻辑设计为易于在GPU/Tensor Core上并行化的操作,避免复杂的控制流。
训练数据的获取与目标定义
- 问题:如何获得“最佳退出层”标签?强化学习中的奖励函数如何精确量化“计算节省”与“精度损失”的权衡?
- 应对:
- 自监督生成标签:在无标签数据上,用完整模型推理,监控每一层输出预测的置信度或变化幅度。当变化小于阈值时,将该层标记为“可退出点”。这是一种近似但有效的方法。
- 课程学习与渐进式训练:先从简单的、决策点少的任务开始训练决策器,再逐步增加任务复杂度和决策点。
- 多目标优化与帕累托前沿:不设定固定的权衡参数λ,而是训练一个能产生一系列策略的模型,这些策略构成了“精度-效率”的帕累托前沿,让部署者根据实际需求选择。
泛化性与稳定性
- 问题:在特定数据集上训练的决策策略,面对分布外(OOD)的输入时,可能会做出荒谬的决策(例如,对难题过早退出,或对简单题过度计算)。
- 应对:
- 数据增强与领域混合:在训练时使用极其多样化的数据,涵盖不同领域、风格和难度。
- 不确定性感知决策:让决策器除了输出决策,还输出一个不确定性估计。当不确定性高时,可以回退到保守策略(如继续计算)。
- 在线学习与自适应:结合TTL,让系统在部署后能根据实时反馈(如用户对答案的满意度)微调解决策策略。
与现有系统及硬件的集成
- 问题:动态计算图对现有的深度学习框架(如PyTorch的静态图优化、TensorFlow的图模式)和推理引擎(如TensorRT, ONNX Runtime)不友好。动态分支会阻碍算子融合和内存优化。
- 应对:
- 编译器与运行时支持:需要AI编译器的创新,例如将条件退出逻辑编译成高效的、基于谓词的指令。像Google的Pathways、微软的DeepSpeed-Inference正在探索动态模型的路由。
- 硬件定制:未来可能会有支持“条件执行”的AI加速器,能够低开销地评估跳过某些计算单元的条件。
5.2 实际应用场景与价值评估
ATLAS技术并非适用于所有场景。它的价值在以下情况最为凸显:
- 高吞吐、低延迟的在线服务:如智能客服、实时翻译。大部分请求是简单问答,ATLAS能大幅降低平均响应时间(P99延迟)和云计算成本。
- 资源受限的边缘设备:手机、IoT设备上的LLM应用。ATLAS可以让模型在资源耗尽前,尽可能好地完成关键任务。
- 大规模文档处理与信息检索:处理成千上万份文档时,大部分文档可能只需要浅层理解(分类、关键词提取),少数复杂文档才需要深度分析。ATLAS可以实现资源的按需分配。
- 多模态模型推理:处理图像、音频、视频等多模态输入时,不同模态的复杂度差异巨大。ATLAS可以动态分配视觉编码器和语言解码器之间的计算权重。
在评估是否采用ATLAS方案时,需要建立明确的评估指标:
- 效率指标:平均节省的FLOPs/时间,加速比,内存峰值降低。
- 效果指标:在目标下游任务(如GLUE, SuperGLUE, 代码生成基准)上的性能下降(通常希望<1%)。
- 综合指标:如“效率-效果曲线”下的面积,或达到相同效果时所需的计算资源。
5.3 未来研究方向与个人思考
ATLAS目前仍处于研究前沿。从我个人的观察来看,以下几个方向值得深入:
- 与MoE架构的深度结合:MoE天然具备条件计算的思想。未来的“超级模型”可能是由数万个专家组成的MoE,而ATLAS的智能体则扮演着超级调度员的角色,其决策质量将直接决定整个系统的效率天花板。
- 跨层与跨模块的稀疏化:不仅仅是跳过整层,而是更细粒度地关闭注意力头、前馈网络的中间神经元,实现极致的动态稀疏计算。
- 基于理论指导的决策:目前决策多基于启发式或数据驱动。能否从理论出发,例如根据输入序列的拓扑特征或信息论复杂度,推导出最优计算分配的边界,从而指导决策器的设计?
- 终身学习与个性化:让ATLAS智能体能够随着与特定用户或领域的长期交互,学习该用户/领域的模式,做出越来越精准的计算分配决策,实现个性化的推理效率优化。
这个领域正在快速发展,每周都有新的预印本出现。对于从业者而言,理解ATLAS及其相关思想(如早退、条件计算、MoE)的价值在于,它为我们提供了一种全新的视角来看待模型推理:从静态的、一刀切的消耗,转变为动态的、按需分配的智能服务。这不仅是优化技术,更是一种构建可持续、可扩展AI基础设施的根本思路转变。