gpu.yaml#

配置文件#

gpu.yaml

概述#

定义NVIDIA以外GPU的适配参数。

描述#

对于除了NVIDIA外的GPU,包括国产GPU的支持,AIP使用这个文件来定义GPU适配的各种参数

gpu.yaml列出了所有支持的GPU。AIP的cbls在启动时按照gpu.yaml里的配置顺序寻找本机安装的GPU。

例子:

gpuconf:
- vendor: ILUVATAR
  discovery_file: /usr/local/corex/bin/ixsmi
  metrics_cmd: LD_LIBRARY_PATH=/usr/local/corex/lib64 /usr/local/corex/bin/ixsmi --query-gpu=uuid,name,memory.total,temperature.gpu,memory.free,utilization.gpu,utilization.memory,power.draw --format=csv,nounits,noheader
  first_device: /dev/iluvatar0
- vendor: MUXI
  discovery_file: /usr/bin/mx-smi
  metrics_cmd: /opt/skyformai/sbin/mx-smi.py
  fixed_devices:
  - /dev/mxcd
  first_device: /dev/dri/renderD128
  second_device: /dev/dri/card1

cbls先查discovery_file,如果发现该文件存在,则认为本机安装了相应的GPU,而不再继续查看gpu.yaml其他GPU的信息。 cbls定期运行metrics_cmd里定义的命令,返回GPU的信息。命令返回的信息必须是多行的CSV,每个GPU一行,格式如下: Id, 型号, GPU总显存MB, 温度, 可用显存MB, GPU利用率(0-100), GPU显存利用率(0-100), 功耗(W) metrics_cmd运行返回的例子:

GPU-06bb47c4-da16-6f49-9569-175db9c6a5b4, NVIDIA A800 80GB PCIe, 81920, 51, 65491, 0, 0, 43
GPU-4dd97756-eedd-4b67-6838-6e31d9be140a, NVIDIA A800 80GB PCIe, 81920, 57, 65497, 100, 0, 32
GPU-d22802be-6518-f889-e60a-50ae36b3cf9d, NVIDIA A800 80GB PCIe, 81920, 57, 65497, 100, 0, 33
GPU-7578cd1c-0319-6ca5-418d-e5b7b45c6860, NVIDIA A800 80GB PCIe, 81920, 54, 65497, 100, 0, 23

许多国产GPU,设备命令返回不了上面格式的csv,就需要开发一个格式转换脚本,一般用Python来开发。 如上面例子中MUXI的GPU的命令/usr/bin/mx-smi返回的值需要通过脚本/opt/skyformai/sbin/mx-smi.py 经过转换成cbls认识的CSV格式。

小技巧

适配的一个关键点就是开发这个格式转换脚本。这个脚本调用原厂的设备信息命令行, 把返回转换成cbls需要的格式。

在启动容器作业时,我们利用docker run –device参数指定容器可以访问的GPU设备。 gpu.yaml里的以下几个参数配置这些设备名。这些设备名也被cgroup使用来控制作业只能用被 AIP分配的GPU:

  • fixed_devices 对于很多种GPU,有一些所有卡都共用的设备名,这些设备列在这个参数下面。如NVIDIA的GPU有以下公用的设备:/dev/nvidiactl, /dev/nvidia-uvm, /dev/nvidia-uvm-tools, /dev/nvidia-modeset, /dev/nvidia-caps

  • first-device 每卡相应的设备名的第一个。如4卡NVIDIA GPU 有/dev/nvidia0 /dev/nvidia1 /dev/nvidia2 /dev/nvidia3。在这里只需配置第一个就可以了,其他的AIP会顺序发现。一些GPU品牌的设备名较怪,如MUXI的第一个GPU设备是/dev/dri/renderD128,第二个是/dev/dri/renderD129等等。还有一些每个卡需要两个设备名,则第二个配置在second_device里(见上面MUXI的例子)

参数#

vendor: 名字

任意的字串,定义GPU厂商名字。这个字段只用于标识,AIP内部不使用该字段。

discovery_file: 文件路径

GPU独特的文件路径,以便AIP判断GPU厂商。AIP扫描到该文件存在,便会认为主机上安装了这个厂商的GPU。

metrics_cmd: GPU参数命令路径

运行这个命令可以动态获取GPU的各项参数。这个命令的输出格式必须是多行的无头CSV,每个GPU一行, 格式如下:Id, 型号, GPU总显存MB, 温度, 可用显存MB, GPU利用率(0-100), GPU显存利用率(0-100), 功耗(W)。例子见上面的“描述”部分。

fixed_devices: YAML设备列表

所有GPU公用的设备名列表。很多厂商的GPU公用设备有多个,每一个都必须列出,否则作业将无法 访问GPU。

first_device: 第一个GPU对应的设备名

第一个GPU对应的设备名。AIP利用这个名字通过对设备名最后一个数字加一的方法自动计算第二、第三等 GPU的设备名。

second_device第一个GPU对应的额外设备名

一些厂商每个GPU多于一个的设备,这个参数用于提供第一个GPU的相应的第二个设备名。

诊断#

如果命令chinfo -g ( chinfo )没有显示某台主机上的GPU,登录到这台GPU主机。

  1. 运行gpu.yaml中相应GPU配置中metrics_cmd里的命令,查看输出。输出必须符合“描述”中例子的格式。

  2. 运行/opt/skyformai/sbin/cblt -t。这个命令会显示AIP探测到的硬件配置。

小技巧

  • CBLS按照gpu.yaml中配置的循序来判断主机上安装的GPU。如果其他类型GPU中的discover_file在主机 上出现,会影响CBLS的判断。

  • 很多GPU的参数获取命令需要一定的环境变量,如LD_LIBRARY_PATH。这个值必须在metrics_cmd里设置。 操作系统中设的缺省环境变量不会被使用。