为更大效率利用公司GPU资源、节省成本,通过对NVIDIA的驱动库、运行库和函数库进行劫持,将公司k8s集群中GPU卡的算力和显存资源进行统计和管理,使单卡资源利用率提高13%;并引入远程共享池化的概念,使没有GPU卡的机器能通过网络使用GPU池中的资源。
为更大效率利用公司GPU资源、节省成本,通过对NVIDIA的驱动库、运行库和函数库进行劫持,将公司k8s集群中GPU卡的算力和显存资源进行统计和管理,使单卡资源利用率提高13%;并引入远程共享池化的概念,使没有GPU卡的机器能通过网络使用GPU池中的资源。
1)确定资源值统计方案:在抓取资源值的间隔中,多进程间通过IPC计数、进程内多线程间通过原子变量计数来保证正确性,并让不同资源种类和不同卡单独使用一套IPC管理,提高并发度;最终按此方案实现后顺利上线,并通过公司名义发表专利一篇。
2)使用RAII机制解决了资源频繁申请和释放引发的漏释放问题,并对IPC回收增加巡检机制,确保进程异常崩溃后机器的IPC仍能正常回收,保证系统稳定运行。
3)为减少劫持逻辑耗时,设计异步日志系统并通过recover机制保证日志完整性,利用线程变量缓存优化系统时间的获取,最终减少耗时50%+。
4)通过阅读brpc源码和demo测试验证,确定采用brpc通信;规定了通信的应用层协议和数据排列形式;将通信模块和逻辑模块解耦,完成服务端/客户端的劫持入口逻辑开发,并通过脚本生成各个劫持函数的雏形,提升开发效率。
5)按模块完成功能设计与开发,包括:i、守护进程模块,包含配置文件处理、端口号维护、请求监听和fork创建server等工作,采用无锁队列替代加锁操作优化端口号维护;ii、客户端模块,包括上下文、网络连接器的维护等,使用double check方式保证网络连接器的唯一性;iii、服务端和客户端在显存的分配、拷贝和回收等劫持逻辑映射,并适配pinned memory、有参launch kernel等特殊功能。最终顺利完成项目交付。