你有没有和室友合租过?一个人租一整套两居室,每月房租五千,压力不小。但如果两个人合租,房租平摊,每人只要两千五,客厅、厨房、卫生间还能共用——这就是合租省钱的核心逻辑。 今天要讲的“多模型共享 GPU 降本”,本质就是 AI 世界里的“合租”。单个 GPU 实例就像一套精装公寓,独租自然贵,但如果把多个 AI 模型当作多个租客,让它们分享同一块 GPU 的算力和显存,成本就能大幅下降。当然,合租也有麻烦——室友作息不同怎么办?厨房用不过来怎么办?谁多交了水电气怎么算?这些对应到技术上,就是资源隔离、显存分配、调度优先级和 SLA 保障等问题。 这篇文章将带你一步步了解:如何给 AI 模型“合租”GPU,如何做到既省钱又不打架,以及云厂商环境下的种种注意事项。
多模型共享 GPU 是 AI 推理降本的核心手段之一。掌握它,你就能为企业设计出既省钱又可靠的 AI 云服务方案,成为真正懂 FinOps 的 AI 工程师。
可视化演示
三步展示多模型共享GPU降本:MPS共享/MIG分区/时间片三种技术、Triton单卡多模型部署与动态批处理、以及显存80%上限与SLA的资源规划。
本节配有交互动效(进入视口后自动加载,约 3KB)。
GPU共享技术 MPS: 上下文级共享运算 MIG: 硬件级隔离分区 时间片:轮流使用 分摊算力成本 降低单位推理成本。
合租原理与价值
想象你开了一家“AI 模型公寓”。公寓里租住着好几个模型——有的负责图像识别,有的处理语音,有的做自然语言理解。过去你财大气粗,给每个模型都租了一整套 GPU“独栋别墅”。结果呢?很多模型一天大部分时间都在“睡大觉”,GPU 利用率可能只有 20%~30%。这就好比花大价钱租了别墅,结果每天都在客厅沙发上看电视,根本不需要那些房间。
多模型共享 GPU 的思路,就是把这套“独栋别墅”改成“合租公寓”。多个模型住在同一个 GPU 实例里,共享算力和显存。虽然每个模型的性能可能略有下降,但成本下降的幅度远大于性能损失。据统计,一台空闲 GPU 的资源利用率从 30% 提升到 80% 以上是常见的,这意味着同样的硬件成本,能干原来三倍的活。
1. 共享后 GPU 总成本:指多个模型共享后,实际需要购买的 GPU 实例成本总和。由于共享提高了利用率,所需实例数变少。
2. 独享时 GPU 总成本:指每个模型单独拥有一台 GPU 实例时的成本总和。
3. 计算节约率:用 1 减去共享成本与独享成本之比,得到节约比例。
总之,合租原理的核心就一句话:把闲置的算力变成钱。这不仅是技术方案,更是 FinOps(云成本优化)理念在 AI 领域的具体实践。
资源隔离方案
合租第一个要解决的问题就是:室友之间怎么不互相干扰?你不能让 A 模型半夜放“摇滚乐”(算力占满),吵得 B 模型没法工作。资源隔离,就是给每个“租客”砌一堵墙。
墙有两层:第一层是容器级隔离。每个模型跑在独立的容器(比如 Docker/Kubernetes Pod)里,文件系统、网络栈、进程空间都相互隔离。就像合租公寓里每个房间都有独立的门锁,室友进不了你的房间。第二层是显存分区隔离。GPU 显存被划分成多个区域,每个模型只能用自己分配到的显存块。这类似于公寓里每个房间的大小不同,但都是你的私人空间,别人不能占用。
1. 总显存除以模型数:在理想情况下,把 GPU 显存平均分给每个模型。
2. 乘以弹性系数:实际上不能分得那么死,要给每个模型留一点余量,应对突发流量。$\alpha$ 通常取 0.1~0.3。
除了显存隔离,还有算力限额(Compute Limit)。GPU 的 SM(流式多处理器)数量和算力也是有限的。通过 MPS(Multi-Process Service)或 CUDA 流优先级,可以限制每个容器使用的 GPU 算力百分比。这就像合租公寓里的公共水电气——每个人都有额度,超过就要限流。
显存分配策略
墙砌好了,接下来要解决“房间怎么分”的问题。显存分配策略,就是给不同租客分配房间大小的规则。
静态分配最简单:每个模型固定分配一定大小的显存,比如模型 A 分 4GB,模型 B 分 4GB,模型 C 分 4GB,谁也不能超过。优点是不会互相影响,缺点是浪费——如果模型 A 实际只用了 2GB,剩下的 2GB 就闲置了。这就像合租公寓里每个卧室固定面积,但有的租客带的东西少,房间一大半空着。
动态分配更聪明:根据模型实时的显存需求,动态调整分配。模型 A 高峰期给它 6GB,低峰期收回 2GB 给模型 C 用。这就像合租公寓里,多出来的储物间谁需要谁用。但动态分配实施难度大——频繁搬动显存数据会影响性能,而且容易产生碎片。
1. 实际显存求和:把所有模型实际占用的显存加起来。
2. 除以总显存:就能算出整体显存利用率,这是衡量共享策略好坏的核心指标。
碎片整理是另一件大事。当模型反复申请和释放显存后,显存会出现很多“小碎块”——就像仓库里堆满了大小不一的箱子,有空隙但用不上。定期做碎片整理(把连续的显存块合并),能进一步提高利用率。
调度优先级管理
合租公寓的厨房只有一个,但租客们都要做饭。谁先用?调度优先级管理解决的就是“谁先上 GPU”的问题。
通常我们给不同模型设置不同优先级。在线推理模型(比如实时语音识别、在线推荐)像上班族,早上八点必须用厨房——延迟要求高,必须优先调度。批量训练任务像在家办公的自由职业者,时间灵活,可以排在后面。离线数据分析像周末才做饭的人——优先级最低。
1. 延迟要求:Latency_SLO 表示该模型对响应时间的苛刻程度。SLO 为 10ms 的模型,优先级比 SLO 为 1s 的高很多。
2. 等待时间:为了防止低优先级模型“饿死”,随着等待时间增加,它的优先级也会逐渐提升。
抢占式调度意味着高优先级任务可以打断低优先级任务——就像紧急情况下,上班族可以把正在做饭的自由职业者挤开,先用厨房。但实现抢占需要保存和恢复上下文,开销不小。公平调度(如 Max-Min Fairness)则更“社会主义”,保证每个模型都至少获得最低限度的资源,避免有人完全没饭吃。
SLA保障方法
合租省钱可以,但服务质量不能掉链子。SLA(服务等级协议)就像合租公寓的“管理公约”,规定了公共区域(GPU 算力)必须达到的清洁标准(性能指标)。
请求级 QoS 是 SLA 的第一道防线。通过限流和排队机制,保证高优先级模型的请求能迅速得到响应。这就像合租公寓的电梯——高峰期会启用“楼层分流”,让高楼层住户(高优先级模型)先上。具体技术包括 Token Bucket 限流、请求队列分离等。
弹性伸缩是 SLA 的第二道防线。当某个模型的负载突然暴涨(比如双十一的推荐模型),就需要给它“加房间”——动态扩展它的资源配额,甚至把多余的请求转发到其他 GPU 实例上。
1. 副本数乘单模型吞吐量:看整个共享系统每秒能处理多少请求。
2. 除以平均延迟:请求处理都需要时间,平均延迟越高,系统的实际 QPS 上限越低。
故障转移与容灾是最后一道防线。如果共享 GPU 上的一个模型崩了(比如内存泄漏),不能让它拖垮其他模型。Kubernetes 的健康检查 + 自动重启,以及模型副本的多节点部署,都是常见的保障手段。
性能测试与调优
怎么知道合租方案是否真的可行?性能测试与调优,就是给合租公寓做一次全面“体检”。
基准测试是体检的第一项:跑一组标准的推理请求,看延迟、吞吐量和显存占用三个核心指标。比如 BERT-base 模型在独占 GPU 时延迟 5ms、吞吐 1000 QPS;共享后延迟变成 8ms、吞吐 600 QPS——要判断这个差距是否在接受范围内。
压力测试是体检的第二项:持续增加请求量,找到系统的“崩溃点”。性能分析则用 Profiling 工具(如 Nsight Systems、PyTorch Profiler)定位瓶颈——是显存带宽不够?还是 SM 算力饱和?还是内存分配锁竞争?
1. 计算耗时:GPU 真正执行矩阵乘法等计算的时间。
2. 访存耗时:把数据和模型参数从显存搬到计算单元的时间。共享场景下多个模型争抢显存带宽,这项开销会激增。
3. 排队与调度开销:请求在队列里等待的时间,以及调度器切换模型上下文的时间。
常见的调优手段包括:调整 Batch Size(让 GPU 算力吃饱)、开启 CUDA Graphs 减少内核启动开销、用 TensorRT 做模型优化、设置合适的显存池大小减少分配频率等。
云厂商兼容差异
合租方案在一家云厂商跑得好好的,换一家就“水土不服”?云厂商兼容差异,就是不同云平台的“公寓管理制度”不同。
实例类型差异是最显著的。AWS 的 A100 GPU 实例(如 p4d.24xlarge)和阿里云的 A100 实例(如 ecs.gn7i-c16g1.4xlarge)虽然都是 A100,但 CPU、内存、网络带宽的配置比例不一样,驱动和 CUDA 版本也可能不同。这就如同一套北京的老公房和一套深圳的电梯公寓——面积一样,户型完全不同。
迁移注意事项包括:检查 GPU 驱动的 CUDA 版本兼容性(比如 AWS 的 EFA vs 阿里云的 RDMA)、网络架构差异(VPC/安全组规则)、存储挂载方式(EBS vs 云盘 vs NAS)等。最容易被忽略的是镜像兼容层——用 Docker 镜像可以屏蔽大部分系统差异,但 GPU 驱动和 CUDA 运行时要根据云厂商版本重新构建。
1. 需要修改的组件数:迁移时,要改动的代码、配置、依赖项数量。
2. 总组件数:整个服务包含的组件总数。如果总共 20 个组件,迁移时只改了 2 个,可移植性就是 90%。
多云部署策略则是为了“不把鸡蛋放在一个篮子里”。可以把在线推理服务部署在两个云厂商上,用 DNS 流量调度按比例分发请求,这样即使一家云厂商出故障,另一家也能扛住。
降本核算与FinOps
最后一个问题:合租到底省了多少钱?降本核算与FinOps,就是给“合租”算清账。
先看成本模型。GPU 成本包含三部分:实例费用(按秒或按小时计费)、存储费用(模型文件和数据)、网络流量费用(传输数据)。多模型共享 GPU 后,实例数量减少,实例费用大幅下降,但存储和网络费用可能略增——因为多个模型要同时加载和传输。
1. 实例费用:GPU 实例的租赁费用。
2. 存储与网络费用:模型文件存储和数据传输的费用。
3. 共享节省:因为共享而省下的钱,也就是前面算的成本节约率对应的金额。
账单分析是 FinOps 的日常工作。通过云厂商的账单接口,按模型、按项目、按团队拆分成本,看看哪个模型的 GPU 消耗最多、哪个模型闲置率最高。这就好比合租公寓每月贴出水电费明细,谁用得多谁多摊。
持续优化是最后一环。GPU 型号升级(比如从 A10 升级到 A100,单卡算力提升 3 倍但价格只贵 2 倍)、用 Spot 实例跑低优先级任务、关掉闲置时段的实例——这些都是可以持续做的降本动作。FinOps 的核心是“持续”两个字:降本不是一次性的,而是像记账一样每月复盘。
AI 应用场景
场景一:在线推荐系统多模型共享 GPU
阶段:模型部署与推理优化
解决的问题:某电商平台的推荐系统包含用户画像模型、商品召回模型和排序模型三个模型。传统做法是每个模型部署在一台独立的 GPU 实例上,三台 T4 实例每月成本超过 1.2 万元,但每台实例的 GPU 利用率平均只有 25%,大量算力被浪费。通过多模型共享 GPU,三个模型部署在同一台 A10 实例上,通过容器隔离和动态显存分配,GPU 利用率提升到了 75% 以上,月度成本降至 6000 元以内,降低超过 50%。
具体案例:平台在 Kubernetes 集群中用 NVIDIA MPS 实现了算力限额,三个模型各分配约 30% 的 GPU 计算单元。在双十一大促期间,通过动态提升用户画像模型的优先级和显存配额,保证了推荐接口的 P99 延迟仍低于 200ms,满足业务 SLA 要求。后续通过账单分析进一步发现,凌晨 2:00~6:00 的流量仅为白天的 10%,于是部署了定时扩缩容策略,额外节省了 20% 的成本。
场景二:多租户 AI 云平台
阶段:云服务设计与资源管理
解决的问题:某 AI 云服务商为多家客户提供模型推理 API。过去每个客户的模型单独占用一个 GPU 实例,资源浪费严重且客户单价高。通过多模型共享 GPU 方案,云服务商可以在同一 GPU 上承载多个客户的模型,按客户隔离资源和费用,既降低了单个客户的成本,又提高了云平台的利润空间。
具体案例:平台引入共享 GPU 调度器,支持按客户设置资源配额和优先级。高价值客户的模型收到请求时,通过抢占式调度保障其响应速度;低价客户的批量任务则在空闲时段运行。通过成本归因系统,每个客户可以看到自己的模型占用了多少 GPU 资源和对应费用,实现透明计费。
场景三:企业内部多模型推理平台
阶段:模型统一纳管与成本治理
解决的问题:一家中型企业有 20 多个 AI 模型(包括 NLP、CV、语音),各部门分散使用各自的 GPU 资源,总体利用率不足 30%,且各团队自行采购造成大量浪费。通过建设统一的模型推理平台,将模型按优先级分组后共享部署在少量 GPU 实例上,实现资源池化管理和按部门核算成本。
具体案例:平台使用 KServe(Kubernetes 上的模型服务框架)统一管理模型。财务部门每月通过平台导出的成本报表,按部门(如搜索部、推荐部、风控部)拆分 GPU 费用,倒逼各部门优化自己的模型部署方式。运行半年后,公司整体 GPU 成本下降了 40%,而模型服务的平均延迟仅增加了 15%,远低于业务可接受的上限。
Python 演示
import timeimport threadingfrom dataclasses import dataclassfrom collections import dequefrom typing import List, Dict, Optional @dataclassclass Model: name: str priority: int mem_required: int mem_actual: int class GPUScheduler: """多模型共享GPU调度器模拟""" def __init__(self, total_mem: int): self.total_mem = total_mem self.models: List[Model] = [] self.queue: deque = deque() self.gc_count = 0 self.free_lists: Dict[str, int] = {} def add_model(self, model: Model, static: bool = True): """添加模型到共享GPU,static=True为静态分配""" # 为每个新的模型划分内存 if static: if sum(m.mem_required for m in self.models) + model.mem_required > self.total_mem: print("[调度器] 显存不足,拒绝部署模型", model.name) return False model.mem_actual = model.mem_required else: # 动态分配模式:先按最小需求分配 model.mem_actual = min(model.mem_required, self.total_mem // 4) self.models.append(model) self.free_lists[model.name] = model.mem_required - model.mem_actual print(f"[调度器] 部署模型 {model.name},占用显存 {model.mem_actual}G") return True def dispatch(self): """调度主循环:按优先级处理请求""" self.queue = deque(model.priority for model in self.models) for model in sorted(self.models, key=lambda m: -m.priority): if self._check_resource(model): self._allocate(model) else: print(f"[调度器] 模型 {model.name} 资源不足,请求排队") self.queue.append(model.priority); return True def _check_resource(self, model: Model) -> bool: """检查模型是否还有剩余显存配额""" return self.free_lists.get(model.name, 0) + model.mem_actual > 0 def _allocate(self, model: Model): """为模型分配一个推理请求的算力""" self.gc_count += 1 self.free_lists[model.name] = max(0, self.free_lists.get(model.name, 0) - 0.5) print(f"[调度器] 模型 {model.name} 正在推理,累计推理次数 {self.gc_count}") def compact_memory(self): """模拟碎片整理:回收所有模型空闲的显存""" reclaimed = sum(self.free_lists.values()) for name in self.free_lists: self.free_lists[name] = 0 print(f"[调度器] 碎片整理完成,回收 {reclaimed:.1f}G 闲置显存") return reclaimed if __name__ == "__main__": scheduler = GPUScheduler(total_mem=12) scheduler.add_model(Model("BERT", priority=3, mem_required=4, mem_actual=4)) scheduler.add_model(Model("GPT", priority=2, mem_required=5, mem_actual=4)) scheduler.add_model(Model("CV", priority=1, mem_required=3, mem_actual=2)) scheduler.dispatch() scheduler.compact_memory()
class GPUScheduler代表一个“合租公寓管家”,负责所有模型的资源分配和调度。add_model(model, static=True)“新租客签约”,通过显存检查决定是否允许该模型加入共享 GPU。model.priority每个租客的“VIP等级”,决定排队顺序。_check_resource(model)查看租客的“剩余水电气额度”,不足则请求排队。_allocate(model)正式执行推理任务,每次调用减少该模型的一点配额。compact_memory()“仓库整理”,统计所有租客的闲置空间并回收,腾出显存给新请求。
常见误区
误区把多个模型放到同一台 GPU 上就行,Docker 一跑就万事大吉。GPU 会自动分配资源给各个模型,不需要做特别的隔离和配额设置。
正解如果不做显存隔离,多个模型会争抢显存导致 OOM(内存溢出)。最典型的例子:PyTorch 模型默认会尽量占满所有空闲显存,两个模型同时跑一定会互相挤爆。实际生产环境必须显式配置 CUDA_VISIBLE_DEVICES 指定使用的 GPU 编号,或用 MPS 限制算力占比,用显存池设上限。就像合租公寓不划分房间,所有人挤在大通铺,不仅睡不好,还会不断打架。
为何常见:因为开发者在自己电脑上跑实验时,一个 GPU 只跑一个模型,从未遇到过资源争抢的问题,容易忽略多进程共存时的资源竞争。
误区静态分配就是给每个模型固定显存大小,稳定可靠。动态分配又要监控又要搬数据,还会影响性能,不如就静态分配。
正解静态分配确实实现简单、隔离性好,但资源利用率通常很低。比如给模型 A 固定 6G 显存,但 A 平时只用到 2G,剩下的 4G 就白白浪费了。相比之下,动态分配可以让模型 B 临时借用这部分闲置显存。合理的做法是混合策略:基础配额静态分配、弹性配额动态调整。生产中常用“显存池 + 动态配额”方案。这就像合租公寓,每个房间有固定卧室,但储物间等公共区域按需分配,谁需要谁用。
为何常见:动态分配在实现上确实复杂,很多团队因为技术门槛和管理成本望而却步。
误区多模型共享 GPU 反正能省钱,性能损失一点没关系。业务方不会在意延迟增加几毫秒。
正解性能下降会直接影响用户体验和收入。比如在线推荐系统延迟从 50ms 涨到 200ms,用户点击率可能下降几个百分点,损失的收入远超省下的 GPU 成本。多模型共享是“用性能换成本”的平衡术——必须事先通过压测确定性能退化是否在可接受范围(通常延迟增加 <50%,吞吐下降 <30%),并设置 SLA 红线。省下的钱要大于业务损失才划算,否则就是“赔本赚吆喝”。
为何常见:KPI 导向下成本敏感型公司容易只盯着资源账单,忽略了服务质量下滑带来的隐性损失。
误区Docker 镜像都是标准的,在 AWS 上能跑的容器在阿里云、Azure 上应该也能跑,不存在兼容性问题。
正解虽然容器层做了很好的封装,但 GPU 驱动版本、CUDA 库、网络架构、存储接口在不同云厂商之间差异很大。例如 AWS 的 NVIDIA 驱动版与阿里云不同,代码里硬编码的 CUDA 版本可能不匹配;AWS 的多节点通信用的是 EFA 协议,Azure 可能用 InfiniBand,代码要用统一的 NCCL/RCCL 接口层做适配。迁移前要做灰度验证,不能直接一把梭。
为何常见:很多团队只在小规模测试环境验证过,没经历过大规模生产环境迁移的坑,低估了云厂商底层差异的复杂性。
误区成本优化是运维或基础设施团队的事,开发人员只要把功能做完就行,FinOps 就是每月看一下账单有没有异常。
正解FinOps 的核心是跨团队协同的文化。开发团队需要在编码时就考虑资源效率(比如模型量化、剪枝、控制请求大小),运维团队制定资源水位和调度策略,财务团队做成本归因和预算管理。三个团队要组合好,且持续循环改进——就像合租公寓的室友要一起商量怎么省水电气费,单靠一个人盯是盯不住的。好的 FinOps 实践是“云成本像软件一样被管理和优化”。
为何常见:传统企业里成本问题一直是财务部门的事,技术团队只负责交付功能,缺乏“有成本的工程师文化”。
面试题
Q1. 多模型共享 GPU 的核心原理与下列哪种生活现象最相似?
- A.把多间办公室租给一个公司
- B.多个住户合租一套公寓分摊房租← 正确答案
- C.一个人一天打两份工赚两份工资
- D.一个公司开多个分公司扩大市场
答案:B。B 正确。多模型共享 GPU 就是将多个模型(住户)部署在同一 GPU 实例(公寓)上,共享算力资源(公共区域)和显存(房间),从而分摊成本。A 是一个公司独享多间办公室,C 是单模型高利用率,D 是业务扩展,均不符合“多个租户共享一份资源降低成本”的核心逻辑。
Q2. 在 Kubernetes 中部署多个模型共享同一 GPU 时,最适合用来做资源隔离的工具是?
- A.Virtual Kubelet
- B.NVIDIA MPS← 正确答案
- C.Terraform
- D.Prometheus
答案:B。NVIDIA MPS(Multi-Process Service)可以从架构上限制多个容器进程对 GPU SM 算力的占用比例,是实现算力限额的标准方式。Virtual Kubelet 是虚拟节点,Terraform 是 IaC 工具,Prometheus 是监控工具,都不直接解决 GPU 算力隔离问题。
Q3. 静态显存分配的主要缺点是什么?
- A.实现难度太大,代码写不出来
- B.需要频繁搬动显存数据,影响性能
- C.资源利用率低,会造成闲置浪费← 正确答案
- D.会导致模型之间互相抢占显存
答案:C。静态分配指系统启动前就固定每个模型的显存配额。它的缺点是即使模型实际用不到这么多显存,配额也无法让给其他模型,导致资源利用率低。B 是动态分配的缺点,D 是不做隔离时的现象,A 属于强干扰项(静态分配实现难度低,动态分配才难)。
Q4. 高优先级模型在共享 GPU 中“饿死”了低优先级模型,解决这个问题最合理的策略是?
- A.等待时间加权,让等待越久的任务优先级逐步提高← 正确答案
- B.直接把低优先级任务砍掉
- C.取消高优先级模型的调度
- D.买更多 GPU,避免低优先级模型饿死
答案:A。A 正确。在优先级调度中引入“等待时间加权”机制,可以让低优先级任务在队列中等待时间越长、优先级动态上升,这是一种常见的防饿死策略。B 过于粗暴,C 会影响核心业务,D 是需要额外成本的做法,都不是合理的调度策略。
Q5. 在共享 GPU 场景中,保障 SLA 的常用手段有哪些?
- A.请求级 QoS 限流与排队← 正确答案
- B.基于负载的弹性伸缩← 正确答案
- C.故障自动转移与容器自愈← 正确答案
- D.禁止所有模型使用 GPU 以外资源
答案:ABC。A(请求级 QoS)通过限额和队列控制延迟;B(弹性伸缩)在负载骤增时动态扩容副本;C(故障转移)保证单点故障不影响整体服务质量。D 属于扰动项,GPU 以外资源(如 CPU、网络)是否需要限制取决于具体场景,不是 SLA 保障的标准手段。
Q6. 在多模型共享 GPU 场景下使用 PyTorch 推理时,发现显存利用率一直很低(~30%),最可能的原因及调优方向是?
- A.GPU 型号太老,需要更换新一代 GPU
- B.Batch Size 过小且未显式分配显存池,导致内核启动开销占比大← 正确答案
- C.模型参数太大,需要降低模型精度
- D.网络带宽不足,数据加载太慢
答案:B。显存利用率低的核心原因是单次推理请求较小,GPU 算力没有填满。通过增大 Batch Size 进行批处理,或者用 CUDA Graph、TensorRT 等优化减少内核启动和调度开销,可以显著提升显存和算力利用率。A、C 是激进改动,D 聚焦网络而非 GPU 利用率,均非最优调优方向。
Q7. 以下哪些措施能有效降低多模型共享 GPU 场景下的显存碎片化?
- A.定期执行显存碎片整理← 正确答案
- B.使用显存池(Memory Pool)提前申请大块显存复用← 正确答案
- C.用 CUDA Graph 固化模型执行路径← 正确答案
- D.禁止模型动态申请显存
答案:ABC。显存碎片主要来自模型的频繁申请和释放。碎片整理合并空闲块、显存池复用避免反复 malloc、CUDA Graph 让显存分配在启动前一次性完成,三者都能减少碎片。D 选项禁止动态申请不现实,模型推理本身就需要运行时分配。
Q8. 三个模型共享一台 24G 显存的 GPU,静态分配各 8G。模型 A 实际只用 4G,模型 B 和 C 高峰期各需要 10G。此时最合理的策略是?
- A.维持静态分配,B 和 C 自行排队等待
- B.动态调整:将 A 闲置的 4G 暂时借给 B 或 C← 正确答案
- C.让 A 退出共享,B 和 C 各分 12G
- D.升级到 40G 显存的 GPU
答案:B。B 正确。动态分配让显存资源按需流动——A 空闲的 4G 可以临时调配给 B 或 C,高峰期过后再收回。这既避免了 A 的闲置浪费,又满足了 B、C 的峰值需求。A 会浪费闲置资源,C 和 D 涉及不必要的大改动,都不符合共享降本的核心目标。
Q9. FinOps 中“单位经济学(Unit Economics)”指标的正确理解是?
- A.每台 GPU 实例的总采购成本
- B.每次模型推理请求的边际成本
- C.每个模型推理一万次的平均成本← 正确答案
- D.GPU 实例电费与折旧的合计
答案:C。单位经济学关注“成本/业务量”这个比率,把 GPU 总成本分摊到每次具体的推理请求或业务单位上,以此来评估成本优化效果。比如共享前每万次推理成本 5 元,共享后降到 2 元,说明方案有效。A 是实例单价,B 是边际概念,D 是纯物理成本,均未落到业务价值维度。
Q10. 从 AWS 迁移到阿里云使用共享 GPU 方案时,需要重点检查哪些兼容性问题?
- A.NVIDIA 驱动和 CUDA 版本是否匹配← 正确答案
- B.容器镜像中是否依赖 EFA 等厂商专有通信库← 正确答案
- C.弹性伸缩组的自动扩容策略是否一致← 正确答案
- D.公司发票报销系统是否支持新平台
答案:ABC。跨云迁移必须检查底层 GPU 驱动/CUDA 兼容性(A)、容器内是否依赖源厂商专有库如 EFA(B)、以及弹性伸缩等平台级基础设施配置(C)。D 属于公司内部财务流程,与 GPU 技术兼容性无关,是明显的干扰项。