一、背景概述

创建容器时,为了容器内部能够正常使用昇腾AI处理器,需要引入昇腾驱动相关的脚本和命令。这些脚本和命令分布在不同的文件中,且存在变更的可能性。为了避免容器创建时冗长的文件挂载,MindCluster提供了部署在计算节点上的Ascend Docker Runtime组件。通过输入需要挂载的昇腾AI处理器编号,即可完成昇腾AI处理器及相关驱动的文件挂载。

二、Ascend Docker Runtime组件上下游依赖

Ascend Docker Runtime逻辑接口如下图所示:

在这里插入图片描述

1、Ascend Docker Runtime与下游接口NPU对接

代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/ascend-docker-runtime/runtime/dcmi/dcmi.go

1)初始化

在这里插入图片描述

这段代码实现的功能包括:分配C字符串缓冲区(91、92);加载DCMI动态库(93~95);安全检查,确保库文件路径合法(97~99);初始化DCMI接口(101~103)

2)获取卡列表

在这里插入图片描述

这段代码实现的功能包括:调用C函数获取卡信息(119~121);数据验证(124~126);转换C数组为Go切片(128~135);

3)创建虚拟设备(关键方法)

在这里插入图片描述

这段代码实现的功能包括:初始化C结构体(172、173);配置虚拟设备参数(175~178);将Go字符串转换为C字符数组(179~186);调用C函数创建虚拟设备(187~191);验证返回的虚拟设备ID(192~195)

4)设备查找逻辑

在这里插入图片描述

这段代码实现的功能包括:物理ID转逻辑ID(212~215);验证逻辑ID范围(219~223);遍历所有卡和设备进行匹配查找(220~240)

2、Ascend Docker Runtime与上游接口容器对接

代码链接如下:

https://gitcode.com/Ascend/mind-cluster/blob/master/component/ascend-docker-runtime/runtime/process/process.go

1)主入口函数

在这里插入图片描述

这段代码实现的功能包括:解析命令行参数(726~729);处理bundle目录路径(735~741);修改OCI规范文件(745~747)

2)核心函数

在这里插入图片描述

这段代码实现的功能包括:

① 路经检查(635~638)

调用工具函数mindxcheckutils.CheckPath进行检查。如果检查返回错误 (err != nil),说明路径有问题(如不存在、无权限等),立即使用日志系统hwlog.RunLog记录这个错误,然后函数直接返回该错误。这一步的快速失败避免了后续不必要的操作

② 读取规格文件(639~643)

调用readSpecFile(path)函数,该函数负责具体的文件读取和解析(例如JSON或 YAML解析)。如果读取或解析失败(如文件损坏、格式错误),记录一条更详细的错误日志并返回错误;如果成功,spec变量就包含了文件内容的内存表示,供后续修改

③ 处理设备和钩子(645~648)

调用processDevicesAndHooks(spec)函数。从函数名可知,它专门处理规格中的 设备(Devices)​和钩子(Hooks)​配置。这个函数会直接修改传入的spec对象(以指针方式传递)。如果处理过程中发生任何错误(例如,设备配置冲突、钩子脚本无效等),记录错误并返回

④ 写回文件(650)

调用writeSpecFile(path, spec)函数,它接收文件路径和修改后的spec对象。这个函数会完成数据序列化和文件写入的操作。modifySpecFile函数直接将 writeSpecFile的返回值作为自己的返回值。如果写入成功,则返回nil,表示整个函数执行成功;如果写入失败,则返回相应的错误(如磁盘空间不足)

3)设备处理核心逻辑

在这里插入图片描述

这段代码实现的功能包括:检查可见设备环境变量(682~685);当检测到有 Ascend设备需要挂载到容器时,添加预启动钩子,添加设备到OCI规范​(687~694)

4)设备检测和解析

在这里插入图片描述

这段代码实现的功能包括:从环境变量获取设备列表(547~550);解析设备字符串(552~559);

5)添加设备到OCI规范

在这里插入图片描述

这段代码实现的功能包括:确定设备名称(569~572);添加主要设备(573~582);添加管理设备(584~587)

6)添加钩子函数

在这里插入图片描述

在这里插入图片描述

这段代码实现的功能包括:获取钩子脚本路径(209、214);安全检查(215~217);初始化钩子结构(222~224);添加预启动钩子(226、230~241);如果是虚拟设备模式,创建虚拟设备并更新环境(247~261)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐