FlexGV系统工作原理

First Post:

Last Update:

FlexGV系统工作原理

FlexGV系统架构

各部分功能详解:

租户侧:

1.GPU API Wrapper (GPU API 封装器)+ Training Job(训练任务):

 GPU API wrapper和Training job为一个模块,并且向GPU Proxy发送Resorce request (资源请求)。
 GPU API wrapper将拦截用户的API(比如PyTorch这些训练框架,而这些框架要使用GPU来训练的话,会调用CUDA API)把API打包成网络请求,发送给GPU Service让它执行。

2.GPU Proxy

 拦截一开始程序运行的资源申请,并向集群那边申请资源。即将资源请求发送给Resource Dispatcher。后台挂着就行。为什么不直接让用户侧发送资源请求到资源调度器而是设计一个Proxy,是为了缓解Resource Dispatcher的压力,因为一个作业有可能需要多块GPU。
 通俗来讲:就是首先用户侧首先向GPU Proxy问哪些是可用的GPU,然后GPU Proxy就帮忙找Resource Dispatcher问哪些可用的GPU,然后拿到了再返回给租户这边的应用程序

服务商侧:

3.Resource Dispatcher(资源调度器)

 负责在多个任务或用户之间分配和调度 GPU 资源。其下属还有一个redis界面,查看各个数据库的GPU情况,并且将所有GPU资源整合到一起,形成资源池。也可以理解为将多个GPU融合成为一个GPU。后台挂着就行。

4.GPU Service

 首先将GPU的资源信息注册进Resource Dispatcher的数据库中。并且和租户侧的API Wrapper进行API交互。

左右两侧组件的关系和作用

 左侧是针对 API请求,右侧是针对资源申请请求。资源申请是拿GPU,发生在作业运行前期的过程;API请求是发生在训练过程当中,作业与GPU交互。只是作用的时间点不同但是都是协同才能完成整个操作。
相当于右侧是先获取宏观的GPU资源,左侧是获取微观的训练作业交互。