想象一下你要建造一座智慧城市:市政大厅(CPU)负责统筹规划、处理各种突发杂务;超级工厂(GPU/CDNA3)负责大规模并行生产;巨大的自动化仓库(HBM3)紧挨着工厂,货物吞吐极快;而贯穿全城的高速路网(Infinity Fabric)把市政厅、工厂、仓库连成一体。AMD MI300就是这样一座“单芯片智慧城市”——它把 CPU 和 GPU 统一封装在一起,共享同一个仓库,不用像传统方案那样在多个仓库之间来回倒腾货物。 作为 AI 编译器工程师(城市交通调度设计师),你要让计算图(货物运输路线图)在这座城市里高效运转。理解 MI300 的 APU 统一架构、CDNA3 计算单元、128GB HBM3 内存和 Infinity Fabric 互联,就掌握了为这座“城市”设计最优物流方案的全部钥匙。无论你做算子优化、内存规划还是并行策略,这些知识都会直接决定模型训练与推理是“一路畅通”还是“步步堵车”。
对 AI 从业者而言,理解 MI300 的硬件特性是做好计算图编译优化、算子调优与大模型部署的前提,能让你的模型在这颗芯片上跑出数倍性能差距。
可视化演示
通过APU统一架构(CPU+GPU同封装共享HBM3内存)、显存带宽对比(MI300X 128GB vs H100 80GB vs A100 80GB)与LLM推理性能(MI300X领先H100约30%)三个模式,展示AMD MI300的数据中心AI加速器设计。
本节配有交互动效(进入视口后自动加载,约 3KB)。
MI300A APU统一架构 CPU与GPU集成在同一封装共享HBM3统一内存消除拷贝开销 Infinity Fabric互联提供CPU-GPU间高速数据通路 CPU+GPU → Unified HBM3 (UMA) APU统一架构实现真正的统一内存寻址
APU统一架构
想象把市政大厅(CPU)和超级工厂(GPU)建在同一个园区里,共用大厅里的档案库(物理内存)。过去,市政厅和工厂分别坐落在城市两端,资料要先从市政厅复印一份快递到工厂(一次拷贝),算完再快递回去(二次拷贝),每次都要等快递时间。MI300 的 APU 设计则让 CPU 和 GPU 直接住在同一栋楼里,档案就在脚下——谁要看,转身就能拿到。
从计算图编译器的角度看,这种“同址共享”带来一个革命性变化:计算图中不再需要显式的 HostToDevice / DeviceToHost 拷贝节点。在过去,AI 编译器生成的中间表示(IR)里,每个算子的输入往往要带一个“从 CPU 内存拷到 GPU 显存”的小尾巴;在 MI300 上,这些尾巴可以直接剪掉。剪掉的不仅是指令,更是整条流水线上反复等待的时间。
统一地址空间还意味着 CPU 和 GPU 能通过同一个指针访问同一份数据。编译器只需维护一份内存布局描述,不用担心“同一份数据在两侧各有一份副本”导致的一致性同步问题。这简化了编译器的内存别名分析、依赖分析和调度决策。
编译器的“统一视图”意味着所有算子看到的都是一个平坦的大内存。这就像城市规划师只需要画一张地图,不必操心哪块地皮属于哪个部门。最终,计算图更干净、调度更简单、端到端延迟也更低——这正是 APU 设计对 AI 编译器最大的礼物。
T_transfer 常占 30%-50%;MI300 的统一内存让 T_transfer 趋向于零。- 总耗时
T_total表示从算子开始到结束的墙钟时间,是 CPU 和 GPU 双双等待后最终消耗的时间。 - 计算耗时
T_compute是 GPU 真正执行矩阵乘、卷积等运算的纯算力时间,由算子复杂度和计算单元利用率决定。 - 传输耗时
T_transfer是数据在内存层级之间搬移的时间。传统架构中它来自 PCIe 拷贝,而在 MI300 统一内存上,CPU 与 GPU 共享 HBM,这一项几乎归零。
CDNA3计算架构
走进工厂内部,你会发现它由 228 个车间(计算单元,Compute Unit)组成,每个车间里又有大量工人(线程)并行作业。CDNA3 是专为 AI 计算优化的 GPU 架构,它最重要的装备是一台“矩阵流水线机器”——WMMA(Wave Matrix Multiply-Accumulate)指令。过去做矩阵乘法要工人一个个搬砖,现在一条 WMMA 指令能让整条流水线一次性处理一块大矩阵。
对编译器而言,WMMA 指令意味着矩阵乘法算子应该尽可能被映射成 Tile 级别的指令块,而不是拆成标量循环。编译器把一个大矩阵切成 16×16、32×32 的“瓷砖”(Tile),每一块瓷砖由一次 WMMA 指令完成乘加运算。切法与瓷砖大小直接决定寄存器压力和指令发射效率,这是 CUDA/ROCm 后端代码生成的核心议题。
CDNA3 还支持 2:4 结构化稀疏加速:权重矩阵中每 4 个元素恰好有 2 个为零时,计算量可以减半。编译器需要检查模型中是否存在这类稀疏模式,并决定要不要启用稀疏指令路径。稀疏格式转换本身有开销,所以编译器要在“节省的计算量”和“转换的代价”之间做权衡。
工厂的车间排列得越整齐,参观路线(编译器的指令调度)就越顺畅。编译器做指令调度的目标,就是让每个车间(CU)在整个生产周期内一直有活干,别让任何一条流水线闲置——这就是 CDNA3 上获得高算力利用率的关键。
- 输出坐标
C_m,n表示输出矩阵第 m 行第 n 列的小块(Tile),是整个大矩阵的一个局部结果。 - 累加维度
Σ_{k=1}^{K}表示把 K 个中间乘积累加起来,K 是矩阵的内维大小(如隐藏层维度)。 - 输入矩阵块
A_{m,k}^{\text{tile}}是左侧输入矩阵的第 m 行第 k 列的 Tile,B_{k,n}^{\text{tile}}是右侧输入矩阵第 k 行第 n 列的 Tile,两者相乘后累加得到输出。
HBM3内存
工厂旁边是一座巨大的自动化仓库:128GB 的 HBM3 内存。更关键的不是它“大”,而是门口的传送带极宽——带宽高达 5.2TB/s,相当于一秒内搬完整座图书馆的藏书。传统 GDDR 显存像窄而长的通道,而 HBM3 是用高密度堆叠技术做出的“宽体传送带”,从根本上改变了数据供给速度。
HBM3 的容量和带宽对 AI 编译器有双重意义。容量大意味着可以把大模型的权重、优化器状态、激活值全部装进显存,不用频繁换入换出;带宽高意味着每个算子从内存读数据的等待时间大幅缩短。编译器在做内存规划时,可以把更多中间张量留在 GPU 侧,减少“因为放不下而要提前写回”的保守策略。
不过,带宽再高也有上限。编译器在调度算子时,仍然要计算每个算子的算术强度(每字节数据能做多少次浮点运算)。如果一个算子读一次数据只做一两次运算(如逐元素激活函数),它就是个“内存密集”算子,瓶颈在带宽而不是算力;编译器应尽量把这些算子与相邻算子融合,减少重复读写。
有了这座巨型仓库,AI 编译器终于可以“大手大脚”地把中间结果留在显存里,而不必精打细算地反复腾挪。正如城市规划师不用再为仓库位置发愁,编译器也能把注意力转向真正创造收益的优化——算子融合与并行调度。
- 数据量
D_Bytes是待搬运的数据字节数,例如一个 4096×4096 的 FP16 矩阵约 33.5MB。 - 带宽
BW_Bytes/s是内存到计算单元之间的有效带宽,HBM3 的约 5.2TB/s 就是这里的最大值。 - 时间比值整个公式给出搬运耗时。编译器通过比较不同算子或不同切分方案的
T_transfer,来决定最优的执行顺序。
Infinity Fabric互联
园区内部还有一条高速路网——Infinity Fabric。它把 CPU 小芯片、GPU 计算小芯片(Chiplet)、HBM 内存堆叠全部连接起来。如果把 MI300 拆开,你会看到多个小芯片像拼图一样拼接在一起,而 Infinity Fabric 就是这些拼图块之间的“黄金接缝”。它既负责片内数据流动,也能跨芯片连接多颗 MI300 组建更大的集群。
对 AI 编译器来说,Infinity Fabric 是调度图上的一条“隐形边”:任何一个跨小芯片的数据依赖,都会产生通信成本。编译器在切分计算图时,要尽量把频繁通信的算子放在同一个小芯片上,就像城市规划师尽量把有业务往来的部门安排在同一个街区,减少跨区通勤。
多卡扩展时,Infinity Fabric 的片间互联带宽远高于传统 PCIe 方案,但仍是有限资源。编译器生成分布式执行计划时,需要把通信算子的耗时建模进总时间。张量并行(把一个大矩阵切成多块分给不同芯片)每层都需要一次 AllReduce 通信;如果通信量太大,增加的通信时间可能抵消并行带来的算力收益。
Infinity Fabric 让“多城市协作”成为可能,但协作必然伴随沟通成本。优秀的编译器会像精明的城市规划师一样,把沟通最频繁的部门安排在同一个片区,让城市群的协作效率最大化。
- 固定开销
α是发起一次通信的固定延迟,包括协议握手、消息头解析等,与数据大小无关。 - 传输数据量
D_payload是实际要传输的激活值或梯度字节数。 - 互联带宽
B_fabric是 Infinity Fabric 的有效带宽。编译器通过这个公式评估两个算子分别放在不同片上是否划算。
大模型训练
现在城市要承接一个国家级大工程——训练 700 亿参数的大语言模型。单一的工厂无论如何也堆不下全部物资和作业,必须采用“多城市联合施工”:数据并行(每个城市处理不同批次的数据)和张量并行(把一个大矩阵切成多块分给多个工厂同时加工)。
MI300 的 128GB 大内存让每个“城市”能独立承担更大的模型分片。编译器在规划分布式训练时,要决定每个张量放在哪颗芯片上、何时触发梯度同步。分片内存的策略直接影响显存峰值:模型权重、梯度、优化器状态、激活值四类数据都要有各自的“仓库位置”。如果规划不当,即使总容量达到 128GB,也可能在某一步突然爆显存。
训练吞吐量的核心指标是“每秒处理多少 Token”。编译器通过合并通信与计算(overlap)、使用混合精度、重计算(activation recomputation)等技巧,让 MI300 的算力尽量饱和。大内存带来的额外好处是:激活重计算的频率可以降低,因为不需要为了省显存而频繁丢弃中间结果再重算。
宽敞的仓库让工程队可以一次性囤够材料,宽大的传送带让材料随取随用。编译器要做的,就是安排好几支施工队(并行策略),让他们既不互相争抢物资(带宽争用),又能及时汇总进度(梯度同步)。
- 全局批量
B_global是所有并行设备上的总批量大小(batch size × 设备数),越大则每一步处理的数据越多。 - 序列长度
S_seq是每条样本的 Token 数(序列长度),与批量相乘得到一步内处理的总 Token 数。 - 单步耗时
t_step是一次前向+反向传播的墙钟时间,它包含计算、通信、同步等全部开销。吞吐量由这两者的比值决定。
大模型推理
工程结束后,城市转入日常运营——为海量市民提供即时问答服务。推理服务的本质是“根据历史对话生成下一个词”,而每一次生成都要回顾所有历史信息。这些历史信息被压缩成 Key 和 Value 张量,存放在一个叫 KV 缓存(KV Cache)的“服务台记录本”里。记录本越大,能同时服务的用户(并发请求)就越多。
MI300 的 128GB 内存在这里展现出巨大优势。7B 模型需要约 14GB 权重,剩下 100GB+ 都可以用来存 KV 缓存;而传统 80GB 显存的 GPU 存完权重后只剩约 60GB 留给 KV。粗略估算,MI300 能承载的并发请求数是传统方案的 1.5-2 倍。编译器在推理场景下的任务,就是把 KV 缓存的申请、释放和复用规划好,避免动态分配带来的碎片化。
大 Batch 推理是另一个关键优化方向:把多个用户的请求合并成一个大矩阵一起计算,能显著提高 GPU 利用率。编译器需要动态 batching 策略——当一个请求结束后,把它的位置让给新请求,让矩阵始终保持“满员”状态。大内存让大 Batch 成为可能,而大 Batch 又让算力充分释放,二者形成正循环。
把推理服务想象成一家大型政务服务中心:128GB 的“等待区”能容纳更多人同时办事,编译器这个“叫号系统”则保证每个窗口(计算单元)都有人可办、不空转。大内存 + 大 Batch + 智能调度,共同造就了 MI300 在大模型推理上的亮眼表现。
- K和V双份
2 ×表示每层注意力需要同时存储 Key 和 Value 两组张量。 - 请求规模
B × S_seq是 batch 大小与序列长度的乘积,即所有请求的总 Token 数,决定了缓存的“行数”。 - 模型结构
L × H_dim是层数与隐藏维度的乘积,决定每 Token 需要的缓存“列数”。乘起来就是总元素个数。 - 每元素字节数
× 2 bytes表示 FP16 格式下每个元素占 2 字节,最终得到以字节为单位的总量。
编译器适配
最后,一切还要落到“交通调度中心”——AI 编译器。它拿到一张庞大的计算图(城市交通路线图),要把图中的节点映射到真实的硬件资源上。MI300 的特殊硬件特性(统一内存、WMMA、HBM3、Infinity Fabric)决定了编译器必须做一些“量身定制”的决策。
第一是算子选择。编译器要把计算图中的每个算子(如 matmul、attention、layernorm)映射到最合适的指令序列。矩阵乘法用 WMMA,卷积可以用矩阵乘展开,归一化算子要避免频繁读写内存。ROCm 的 HIP 生态和 Triton 这样的 DSL 编译器,都在为 MI300 生成高质量代码而优化指令选择策略。
第二是内存规划。编译器要计算整张图的峰值内存,决定每个中间张量什么时候分配、什么时候释放。“内存复用”技术让生命周期不重叠的张量共用一个内存块,能把峰值内存压缩到原来的几分之一。在 128GB 的 HBM3 上,好的内存规划意味着你能塞进更大的模型、更大的 Batch,或者更长的上下文。
第三是计算图优化。包括算子融合(把多个小算子合成一个大内核)、死代码消除、公共子表达式提取等。融合不仅能减少内核启动次数,还能让中间数据留在寄存器或共享内存里,避免反复经过 HBM3。对内存密集的小算子,融合的收益尤其明显。
城市规划师的责任,是让整座城市在最高效的节奏下运转。AI 编译器之于 MI300 也是如此——理解每一条高速公路(Infinity Fabric)、每一座仓库(HBM3)、每一台机器(CDNA3)的特性,才能在计算图上做出最聪明的决策,让硬件性能彻底释放。
- 权重
M_W是模型参数本身占用的内存,如 7B 模型在 FP16 下约 14GB。 - 激活
M_A是前向传播中所有中间张量的总和,这部分常因 Batch 和序列长度增大而暴涨。 - 梯度
M_G是反向传播过程中生成的梯度张量,与权重同尺寸。 - 优化器状态
M_O是 Adam 等优化器维护的动量与方差,通常比权重占用更多内存(如 FP32 的 Adam 状态是权重的 8 倍)。
AI 应用场景
大模型训练的内存规划
阶段:AI编译器后端的内存分配与模型分片
解决的问题:传统做法中,每个设备只看到自己的显存,训练大模型时常因显存不足而被迫降低 batch size 或频繁换入换出。MI300 的 128GB 大内存让编译器可以把模型权重、优化器状态、激活值、梯度全部放进共享内存,统一做峰值内存规划,减少保守的显存释放策略,从而支持更大 batch 和更高吞吐。
具体案例:某团队在 MI300 上训练 70B 参数的 Llama 类模型,通过 ROCm 的显存池化机制让多个算子的中间张量复用同一块内存区域,峰值占用从 136GB 降到 112GB,成功把 batch size 从 96 提升到 128,训练吞吐提高约 18%。
大模型推理的 KV 缓存优化
阶段:推理服务部署与计算图优化
解决的问题:推理服务的并发能力受限于 KV 缓存大小。传统 GPU 只有 80GB 显存,存完 7B 模型权重后,KV 空间有限,只能支持较少并发。MI300 的 128GB 内存让 KV 缓存的容量大幅提升,编译器可以支持更大 Batch 的动态推理,配合 PagedAttention 类技术减少碎片。
具体案例:一家 AI 服务商在 MI300 上部署 13B 对话模型,通过把 KV 缓存分配到统一内存并使用动态批处理,并发数从 32 提升到 64,单 Token 生成延迟保持稳定在 35ms 以内,总吞吐翻倍。
算子融合与内核调优
阶段:计算图优化与代码生成
解决的问题:Transformer 计算图中存在大量逐元素小算子(激活函数、归一化、残差连接),每个算子都有内核启动开销和额外内存读写。编译器把这些算子融合进矩阵乘/注意力的大内核中,减少内核启动次数和 HBM 流量。
具体案例:在 MI300 上,编译器将 RMSNorm + Residual Add + RoPE 融合进 Attention 算子的 epilogue,单个 decoder layer 的内核启动次数从 11 次降到 6 次,端到端推理速度提升约 22%。
Python 演示
"""演示 AI 编译器在 MI300 统一内存 vs 传统离散架构下的计算图规划差异""" import math class IRNode: """计算图中间表示节点""" def __init__(self, name, output_bytes): self.name = name self.output_bytes = output_bytes def build_transformer_graph(layers, batch, seq, hidden): """构造简化 Transformer 计算图,每层产生一个激活张量""" act_bytes = batch * seq * hidden * 4 # FP32 一个元素占 4 字节 nodes = [] for i in range(layers): nodes.append(IRNode("linear_%d" % i, act_bytes)) nodes.append(IRNode("norm_%d" % i, act_bytes)) return nodes def insert_copy_nodes(graph, unified_memory): """编译器后端:决定是否需要为每个算子插入拷贝节点""" ir = [] for node in graph: ir.append((node.name, "compute")) if not unified_memory: ir.append((("copy_%s" % node.name), "copy")) return ir def estimate_time(ir, compute_ms_per_node, copy_ms_per_node, unified_memory): """估算总执行时间""" compute_time = 0.0 copy_time = 0.0 for _name, kind in ir: if kind == "compute": compute_time += compute_ms_per_node elif kind == "copy": copy_time += copy_ms_per_node if unified_memory: copy_time = 0.0 return compute_time + copy_time, compute_time, copy_time def main(): layers = 32 batch = 8 seq = 1024 hidden = 4096 graph = build_transformer_graph(layers, batch, seq, hidden) discrete_ir = insert_copy_nodes(graph, unified_memory=False) unified_ir = insert_copy_nodes(graph, unified_memory=True) compute_ms = 3.2 # 每个算子平均计算耗时 copy_ms = 12.5 # 每次 PCIe 拷贝耗时(远大于计算) t_discrete, c_discrete, copy_discrete = estimate_time( discrete_ir, compute_ms, copy_ms, unified_memory=False ) t_unified, c_unified, copy_unified = estimate_time( unified_ir, compute_ms, copy_ms, unified_memory=True ) print("=== 计算图节点统计 ===") print("离散架构 IR 节点数: %d" % len(discrete_ir)) print("统一内存 IR 节点数: %d" % len(unified_ir)) print() print("=== 执行时间估算(毫秒) ===") print("离散架构总耗时: %.1f ms (计算 %.1f + 拷贝 %.1f)" % ( t_discrete, c_discrete, copy_discrete )) print("MI300 统一内存总耗时: %.1f ms (计算 %.1f + 拷贝 %.1f)" % ( t_unified, c_unified, copy_unified )) speedup = t_discrete / t_unified print("加速比: %.2fx" % speedup) if __name__ == "__main__": pass if __name__ == "__main__": main()
build_transformer_graph(layers, batch, seq, hidden)构建简化 Transformer 计算图,每层产生一个激活张量,大小为batch × seq × hidden × 4字节。insert_copy_nodes(graph, unified_memory=False)模拟编译器后端 IR 生成:传统架构下每个算子输出后都要插入一个拷贝节点,统一内存则完全跳过。estimate_time(ir, compute_ms, copy_ms, unified_memory)根据节点类型累加耗时,拷贝时间在统一内存下归零。copy_ms = 12.5模拟 PCIe 拷贝一个激活张量的耗时,这个数字远大于算子的计算耗时,是传统架构的主要瓶颈。speedup = t_discrete / t_unified计算加速比,展示消除拷贝节点带来的端到端收益。
常见误区
误区MI300 的 CPU 和 GPU 共享内存,编译器就不用关心数据在哪里了,计算图里不应当有任何搬运相关的开销。
正解统一内存消除的是 CPU 主存与 GPU 显存之间的 PCIe 拷贝,但 GPU 内部的 HBM3 → L2 缓存 → 寄存器/共享内存仍然有搬运成本。编译器依然要规划数据放哪个层级、何时预取、何时写回,否则计算单元会因等数据而空转。就像园区内共享仓库免去了跨城快递,但仓库到车间之间的传送带依然需要调度。
为何常见:厂商宣传“零拷贝”时强调统一内存的好处,人们容易把“跨设备拷贝没了”理解成“所有搬运都没了”。
误区128GB 就是变大了,带宽应该跟 GDDR 差不多,反正训练时主要看算力。
正解HBM3 的带宽(约 5.2TB/s)是 GDDR5 的数倍,远超 PCIe 的 64GB/s。高带宽直接改变了算子的“瓶颈归属”:很多访存密集算子过去卡在带宽上,现在可以跑满算力。编译器需要按新的带宽模型重新计算算术强度,判断哪些算子需要融合、哪些不需要。
为何常见:人们习惯用容量来理解显存规格,很少关注带宽对整体性能的支配作用。
误区MI300 有 228 个计算单元,比上一代多不少,训练速度肯定接近线性提升。
正解训练步时间由计算、内存访问、通信三部分共同决定。计算单元再多,如果 HBM 带宽喂不饱、或多卡通信在 AllReduce 上耗时长,实际速度远达不到线性。编译器需要合理选择并行策略和算子融合方案,才能把算力优势转化为真实性能。
为何常见:厂商发布时宣传峰值算力,而峰值算力只有在极理想条件下才能达到,实际训练中瓶颈往往是数据供给。
误区归一化、逐元素乘这些小算子执行只要几微秒,编译器没必要花力气去融合优化。
正解每个算子都有内核启动开销和内存读写成本,大模型计算图里几十上百个算子的累积开销非常可观。融合多个小算子进大内核,能减少启动次数、提升中间数据在寄存器和共享内存中的复用率,对访存密集场景的性能影响可达 20%-30%。
为何常见:单看一个算子确实微不足道,但放大到整张计算图的循环迭代中,积少成多就变成了显著开销。
面试题
Q1. 以下哪项是 MI300 中"APU"设计的核心特征?
- A.在PCIe总线上外挂独立的超大容量显存
- B.把CPU与GPU封装在同一颗芯片上共享内存← 正确答案
- C.让GPU代替CPU独立运行整个操作系统
- D.用FPGA电路替代所有专用AI加速单元
答案:B。APU 的核心是把 CPU 和 GPU 放进同一颗芯片,共享统一物理内存地址空间。A 是传统独立显卡方案,C 混淆了 GPU 的定位,D 则是完全无关的硬件实现。
Q2. CDNA3 架构中专门加速矩阵乘法的指令叫什么?
- A.标量乘加运算指令
- B.向量读写加载指令
- C.WMMA矩阵乘累加指令← 正确答案
- D.数据广播同步指令
答案:C。WMMA(Wave Matrix Multiply-Accumulate)是 CDNA3 中用于矩阵乘累加的核心指令,一次可处理一个矩阵 Tile。标量乘加(A)是 CPU 的指令,向量加载(B)不负责计算,广播同步(D)与计算无关。
Q3. 以下哪项是 MI300 配备的 HBM3 内存的典型特征?
- A.容量极小但制造工艺非常先进
- B.拥有128GB超大容量与TB级带宽← 正确答案
- C.通过PCIe接口与GPU交换数据
- D.仅用于存储模型权重文件
答案:B。MI300 的 HBM3 内存容量达 128GB,带宽约 5.2TB/s。HBM3 是堆叠式高带宽内存,不是 PCIe 外设(C 错),也远非“容量极小”(A 错),它存储所有类型的张量数据(D 错)。
Q4. 统一内存对 AI 编译器最直接的好处是什么?
- A.通信带宽获得无限提升
- B.内核启动开销直接消失
- C.所有算子自动进行融合
- D.计算图无需插入拷贝节点← 正确答案
答案:D。统一内存让 CPU 和 GPU 共享同一物理内存,编译器生成计算图 IR 时不再需要 HostToDevice/DeviceToHost 拷贝节点。通信带宽不会无限提升(A 错),内核启动和算子融合都与统一内存无直接关系(B、C 错)。
Q5. Infinity Fabric 在 MI300 中主要承担什么角色?
- A.管理HBM3的刷新策略与纠错编码
- B.连接片内Chiplet与多卡之间互连← 正确答案
- C.替代CPU自主调度所有计算算子
- D.充当GPU内部寄存器的缓存层级
答案:B。Infinity Fabric 是 MI300 的高速互连总线,负责连接片内的 CPU/GPU Chiplet 以及多颗芯片之间的通信。它不管理内存刷新(A 错)、不算子调度(C 错)、也不是寄存器缓存(D 错)。
Q6. 大模型推理时,KV 缓存主要存储什么内容?
- A.训练过程中产生的反向传播梯度
- B.注意力机制的Key与Value张量← 正确答案
- C.输入词元的词表概率分布
- D.模型优化器的动量状态值
答案:B。KV 缓存保存的是自注意力中历史 Token 的 Key 和 Value 张量,用于增量解码时避免重复计算。梯度(A)和优化器状态(D)是训练阶段的产物,词表概率分布(C)只是输出层的临时结果。
Q7. 为什么 MI300 的大容量 HBM3 特别有利于大模型推理?
- A.能缓存更多KV数据并提高Batch大小← 正确答案
- B.使每个算子的数值精度自动提升
- C.彻底消除了权重读取的带宽成本
- D.可以让模型在运行时完全不访问内存
答案:A。128GB 内存让模型权重之外有更多空间存放 KV 缓存,从而支持更大的并发 Batch 和更长上下文。内存容量不改变数值精度(B 错),也不会消除带宽成本(C、D 错),数据和权重仍然需要从 HBM 读入。
Q8. AI 编译器在 MI300 上做内存规划时,通常要考虑哪些部分?
- A.图形化界面渲染开销
- B.模型权重和优化器状态← 正确答案
- C.前向激活张量的峰值← 正确答案
- D.反向传播梯度存储← 正确答案
答案:BCD。训练内存规划需覆盖权重、优化器状态、激活值和梯度四大类。图形化界面渲染是主机侧任务,与 GPU 内存规划无关,编译期计算峰值内存时不会纳入这部分。
Q9. 关于张量并行(Tensor Parallelism),以下说法正确的是?
- A.完全消除了设备间的通信开销
- B.可切分超大规模矩阵到多设备← 正确答案
- C.需要在层间同步通信中间结果← 正确答案
- D.允许模型跨多颗芯片部署推理← 正确答案
答案:BCD。张量并行把权重矩阵按行/列切分到多设备,同时需要在每层计算后做 AllReduce 同步通信,因此 B、C、D 都是正确描述。通信开销不会消失,反而可能成为瓶颈,A 错。
Q10. 关于算子融合优化,以下说法正确的是?
- A.一定能把数值精度提升到双精度
- B.有效减少内核启动等待开销← 正确答案
- C.可将多个小算子合并执行← 正确答案
- D.提升中间数据的复用效率← 正确答案
答案:BCD。算子融合把多个小算子合成一个大内核,减少启动次数、让中间结果留在寄存器或共享内存中复用。融合关注性能而非数值精度,双精度与否取决于数据格式设置,A 错。