说明
详细说明请参考:mGPU 概述。
mGPU 是火山引擎基于内核虚拟化隔离 GPU 并结合自研调度框架提供的容器共享 GPU 方案,通过内核虚拟化技术,实现单张 GPU 显卡的共享,灵活分配算力核心与现存资源并严格隔离。
开启 mGPU 后,队列中的作业可直接指定调用单张 GPU 的部分核心与显存容量,在小模型场景能显著降低使用成本,提升资源利用率。
在EMR Serverless GPU队列上,支持Spark/Ray/CustomJob 三个引擎使用mGPU,您可以在不改动引擎业务代码的情况下使用mGPU,在多个作业/Pod 间共享GPU资源。
在EMR Serverless队列开通界面,选择GPU队列后,您可以选择开启mGPU,创建后队列则使用mGPU进行GPU资源分配。
注:
- mGPU与GPU 互斥,单个队列只能使用GPU或使用mGPU。
- mGPU虚拟化本身会占用小部分显存,实际可用显存略低于整卡原生显存。
各类引擎提交作业时,使用 mGPU 资源是可在原有GPU参数上额外加上以下两个参数。
参数key | 参数示例 | 参数含义 |
|---|---|---|
emr.serverless.mgpu.core | 30 | 设置单Pod使用的算力,范围为5~99,此时代表使用30%的算力。 |
emr.serverless.mgpu.memory | 4096 | 设置单Pod使用的显存,单位为 MiB,此处表示 GPU 显存为4 GiB。 |
对于引擎来说,引擎感知的GPU还是一整张卡,只是这张“卡”的显存和算力受到了限制。因此,上层引擎业务代码还是可以按照1张卡进行使用。
Spark可在任务中设置如下GPU参数。
# driver相关参数 'spark.driver.resource.gpu.discoveryScript': '/opt/emr/current/spark/examples/src/main/scripts/getGpusResources.sh', 'spark.driver.resource.gpu.vendor': 'nvidia.com', #GPU vendor 'spark.driver.resource.gpu.amount': '1', #GPU 卡数量 #executor相关参数 'spark.executor.resource.gpu.discoveryScript': '/opt/emr/current/spark/examples/src/main/scripts/getGpusResources.sh', 'spark.executor.resource.gpu.vendor': 'nvidia.com', #GPU vendor 'spark.executor.resource.gpu.amount': '1', #GPU 卡数量 #task相关参数,代表一个张gpu可以跑10个task 'spark.task.resource.gpu.discoveryScript': '/opt/emr/current/spark/examples/src/main/scripts/getGpusResources.sh', 'spark.task.resource.gpu.vendor': 'nvidia.com', 'spark.task.resource.gpu.amount': '0.1' #mgpu相关参数 'emr.serverless.mgpu.core': '30', 'emr.serverless.mgpu.memory': '4096'
设置后,每个Executor/Driver都会挂载一张GPU卡,但每个Executor/Driver 只会各使用30%的算力和4096mb的显存。同时一个Executor上能并发跑10个task。
在default计算组,可以设置如下参数:
# gpu相关参数 serverless.ray.worker.gpu.vendor=nvidia.com; serverless.ray.worker.gpu.amount=1; #mgpu相关参数 emr.serverless.mgpu.core=30; emr.serverless.mgpu.memory=4096;
设置后,每个Ray Worker都会挂载一张GPU卡,但每个Worker 只会各使用30%的算力和4096mb的显存。同时能在ray dashborad里看到worker有1张gpu卡的资源:
在Ray Cluster中,可以通过界面设置Worker所需的mGpu core 和memory
在default计算组,可以额外设置如下参数.
-- 设置gpu相关参数 set serverless.custom.job.gpu.enabled = true; set serverless.custom.job.task.gpus=1; -- 设置mgu相关参数 set emr.serverless.mgpu.core=30; set emr.serverless.mgpu.memory=1000;
设置后,每个CustomJob的Task会挂载一张gpu卡,并仅使用其30%的算力和1000mb的显存
GPU计费参考:GPU 加速计算资源
在使用按量GPU资源时,如果使用了mGPU,则会按照使用的比例计算GPU时,具体规则如下:Pod GPU时 = 1 * (对应显卡的GPU时单位) * (pod申请mGPU所占整张卡的比例)Pod申请mGPU所占整张卡的比例 = Max(mgpu-core / 100, mgpu-memory / 整卡显存)
例如,客户作业跑了1h,使用一张卡,卡类型为A10,其中mgpu-core = 30,mgpu-memory = 4096,A10 卡对应10gpu时,A10 卡总共可用mGPU显存为:22731mbPod GPU时 = 1 * 10 * Max(30 / 100, 4069 / 22731) = 3 GPU时