ascend-docker-plugin插件编译
驱动安装完成后,使用相关路径下的插件源代码,完成插件编译。
背景信息
Atlas 300I 推理卡(型号 3000)标卡安装驱动后,ascend-docker-plugin源代码压缩包存放路径:
前提条件
在编译前,您需要安装如下编译依赖:
- 安装GO语言编译器(版本号指定选择1.12.4)。
从GO语言官网下载1.12.4版本安装包,按照官网说明进行安装。
host操作系统为ARM架构,建议下载go1.12.4.linux-arm64.tar.gz安装包。
- 安装pkg-config工具。
- Ubuntu:执行apt-get install pkg-config命令进行安装。
- CentOS/EulerOS:执行yum install pkgconfig命令进行安装。
编译方法
本示例以Ubuntu/CentOS环境下使用驱动默认路径进行说明。
- 登录Atlas 300I 推理卡(型号 3000)所在服务器,并在root用户下执行以下操作。
- 进入源代码压缩包存放路径“/usr/local/HiAI/source/”,将source.tar.gz解压到指定路径,例如/home/test。
tar -xzvf source.tar.gz -C /home/test
解压完成后,源代码位于路径“/home/test/source”下。ascend-docker-plugin源代码位于路径“/home/test/source/drivers/dev_plugin/go/”下。
- 进入ascend-docker-plugin执行文件源代码路径,创建ascend_docker_plugin.pc。
cd /home/test/source/drivers/dev_plugin/go/src/plugin/cmd/ascend-docker-plugin
touch ascend_docker_plugin.pc
文件内容如下:(请注意如下文件中Libs复制时内容为一行)
#Package Information for pkg-config libdriver=/usr/local/HiAI/driver/lib64/ libruntime=/usr/local/HiAI/runtime/lib64/ includedir=/home/test/source/inc/driver/ includeexternaldir=/home/test/source/inc/external/driver/ Name: ascend_docker_plugin Description: HiAI device plugin Version: 0.0.1 Libs: -L${libdriver}/ -L${libruntime}/ -ldrvdevdrv -lc_sec -lmmpa -lslog -ldrvhdc_host -ldrvdsmi_host #复制时请注意:该内容为一行 Cflags: -I${includedir}/ -I${includeexternaldir}
其中:includedir=/home/test/source/inc/driver/即为source.tar.gz解压路径。
如果驱动安装过程中指定了路径,例如背景信息,则ascend_docker_plugin.pc的内容如下:(请注意如下文件中Libs复制时内容为一行)
#Package Information for pkg-config libdriver=/test/HiAI/(版本号)/driver/lib64/ libruntime=/test/HiAI/(版本号)/runtime/lib64/ includedir=/home/test/source/inc/driver/ includeexternaldir=/home/test/source/inc/external/driver/ Name: ascend_docker_plugin Description: HiAI device plugin Version: 0.0.1 Libs: -L${libdriver}/ -L${libruntime}/ -ldrvdevdrv -lc_sec -lmmpa -lslog -ldrvhdc_host -ldrvdsmi_host #复制时请注意:该内容为一行 Cflags: -I${includedir}/ -I${includeexternaldir}
- includedir=/home/test/source/inc/driver/:需要根据source.tar.gz解压路径确定。
- /test/HiAI/(版本号)/:需要在安装驱动(指定安装路径情况下)后确定。
- 配置PKG_CONFIG_PATH,使pkg-config工具可以找到ascend_docker_plugin.pc配置文件(如下为一条命令,由于PDF文档格式的限制,超过单行的命令会自动换行,请将如下命令手动合成一行后再复制到服务器中执行):
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/test/source/drivers/dev_plugin/go/src/plugin/cmd/ascend-docker-plugin
- 执行如下命令删除相关文件:
rm -rf /home/test/source/third_party/go/src/k8s.io/kubernetes/vendor
- 设置软链接:
删除“/home/test/source/third_party/go/src/golang.org/x/sys”已存在的软链接,然后将其软链接到host侧服务器golang1.12.4安装路径中的“golang.org/x/sys”中,命令为:
rm -f /home/test/source/third_party/go/src/golang.org/x/sys
ln -s ../../golang.org/x/sys /home/test/source/third_party/go/src/golang.org/x/sys
- ln-s后面为一条命令,由于PDF文档格式的限制,超过单行的命令会自动换行,请将如下命令手动合成一行后再复制到服务器中执行。
- ../../golang.org/x/sys只是样例,请替换为实际路径。
- 进入“/home/test/source/drivers/dev_plugin/go/src/plugin/cmd/ascend-docker-plugin”目录,执行如下命令(注:只有一条命令,go build前面有空格;由于PDF文档格式的限制,超过单行的命令会自动换行,请将如下命令手动合成一行后再复制到服务器中执行)。命令执行情况请参见图7-5中的1:
GOPATH=/home/test/source/drivers/dev_plugin/go/:/home/test/source/third_party/go/go build .
编译完成后,会生成ascend-docker-plugin插件。
插件的路径为:“/home/test/source/drivers/dev_plugin/go/src/plugin/cmd/ascend-docker-plugin”
该插件为可执行程序,您可以将其复制到任何目录下执行。
上面描述中的/home/test为source.tar.gz解压的目标目录(示例),您可以自行修改。
插件运行示例
该部分内容只是ascend-docker-plugin插件的运行样例,插件的具体使用请参见启动插件。
将7生成的ascend-docker-plugin插件复制到用户指定目录(可以是任意目录),执行如下命令,命令通用格式为:
./ascend-docker-plugin Options... &
命令执行后,将启动一个后台进程,该进程与Kubernetes(简称K8S)的Kubelet交互,用于将插件注册到Kubernetes上,实现NPU设备容器虚拟化功能。
进程查询命令为:
ps -ef | grep kubelet
- Kubelet为K8S的组件,用于发现ascend-docker-plugin上报的设备,并将发现的设备上报给K8S。
- ascend-docker-plugin也可以在容器中运行,但是运行ascend-docker-plugin的容器不能再执行其他业务。
- ascend-docker-plugin会配合K8S完成Device资源的分配,但是在物理机复位后容器分配的Device资源信息会丢失,因此已分配Device资源的容器在物理机复位后无法继续使用Device资源。
- 使用ascend-docker-plugin为容器分配设备后,后续新创建的容器如果需要使用Ascend 310设备都需要由ascend-docker-plugin分配,不使用ascend-docker-plugin分配Ascend 310设备的容器将不能使用Ascend 310设备。
- 制作配套容器镜像时,HiAI软件框架(包括各种SO和APP二进制文件)要和容器内部的运行环境配套。
参数说明
Options |
描述 |
---|---|
-mode |
ascend-docker-plugin控制插件运行模式,插件支持四种运行模式:ascend310、ascend910、vnpu、pci,默认值:ascend310。
|
-dlog-path |
宿主机上创建的目录,用于保存容器中HiAI软件产生的dlog日志,默认值为“/tmp/dlog”。 |
-plugin-directory |
插件创建的socket文件的保存路径,默认值为“/var/lib/kubelet/device-plugins/”。 |
命令示例
由于PDF文档格式的限制,超过单行的命令会自动换行,请将如下命令手动合成一行后再复制到服务器中执行:
./ascend-docker-plugin -mode=ascend310 -plugin-directory=/tmp/hiai_plugin_test -dlog-path=/var/dlog &
命令以后台进程形式启动ascend-docker-plugin插件,以NPU模式(指定为ascend310芯片类型)启动,插件socket位于路径“/tmp/hiai_plugin_test”,dlog位于路径“/var/dlog”。