搜索

10.7. 为 GPU 设备启用 PCI 透传

download PDF

您可以使用 PCI 透传将物理 PCI 设备(如图形卡)附加到实例。如果您将 PCI 透传用于设备,实例会保留对设备执行任务的独占访问,且设备对主机不可用。

先决条件

  • pciutils 软件包安装在具有 PCI 卡的物理服务器上。
  • GPU 设备的驱动程序必须安装在设备要传递给的实例上。因此,您需要已创建了安装了所需 GPU 驱动程序的自定义实例镜像。有关如何创建安装了 GPU 驱动程序的自定义实例镜像的更多信息,请参阅 创建自定义 GPU 实例镜像

流程

  1. 要确定每个 passthrough 设备类型的厂商 ID 和产品 ID,请在具有 PCI 卡的物理服务器上输入以下命令:

    # lspci -nn | grep -i <gpu_name>

    例如,要确定 NVIDIA GPU 的 vendor 和 product ID,请输入以下命令:

    # lspci -nn | grep -i nvidia
    3b:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1eb8] (rev a1)
    d8:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1db4] (rev a1)
  2. 要确定每个 PCI 设备是否具有单根 I/O 虚拟化(SR-IOV)功能,请在具有 PCI 卡的物理服务器上输入以下命令:

    # lspci -v -s 3b:00.0
    3b:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
              ...
              Capabilities: [bcc] Single Root I/O Virtualization (SR-IOV)
              ...
  3. 要在 overcloud 上为 PCI 透传配置 Controller 节点,请创建一个环境文件,如 pci_passthru_controller.yaml
  4. PciPassthroughFilter 添加到 pci_passthru_controller.yaml 中的 NovaSchedulerEnabledFilters 参数中:

    parameter_defaults:
      NovaSchedulerEnabledFilters:
        - AvailabilityZoneFilter
        - ComputeFilter
        - ComputeCapabilitiesFilter
        - ImagePropertiesFilter
        - ServerGroupAntiAffinityFilter
        - ServerGroupAffinityFilter
        - PciPassthroughFilter
        - NUMATopologyFilter
  5. 要为 Controller 节点上的设备指定 PCI 别名,请在 pci_passthru_controller.yaml 中添加以下配置:

    • 如果 PCI 设备具有 SR-IOV 功能:

      ControllerExtraConfig:
        nova::pci::aliases:
          - name: "t4"
            product_id: "1eb8"
            vendor_id: "10de"
            device_type: "type-PF"
          - name: "v100"
            product_id: "1db4"
            vendor_id: "10de"
            device_type: "type-PF"
    • 如果 PCI 设备没有 SR-IOV 功能:

      ControllerExtraConfig:
        nova::pci::aliases:
          - name: "t4"
            product_id: "1eb8"
            vendor_id: "10de"
          - name: "v100"
            product_id: "1db4"
            vendor_id: "10de"

      有关配置 device_type 字段的更多信息,请参阅 PCI passthrough 设备类型字段

      注意

      如果 nova-api 服务以 Controller 以外的角色运行,请将 ControllerExtraConfig 替换为用户角色,格式为 < Role>ExtraConfig

  6. 要在 overcloud 上为 PCI 透传配置 Compute 节点,请创建一个环境文件,如 pci_passthru_compute.yaml
  7. 要为 Compute 节点上的设备指定可用的 PCI,请将以下内容添加到 pci_passthru_compute.yaml 中:

    parameter_defaults:
      NovaPCIPassthrough:
        - vendor_id: "10de"
          product_id: "1eb8"
  8. 您必须在 Compute 节点上为实例迁移和调整大小操作创建 PCI 别名的副本。要为 Compute 节点上的设备指定 PCI 别名,请将以下内容添加到 pci_passthru_compute.yaml 中:

    • 如果 PCI 设备具有 SR-IOV 功能:

      ComputeExtraConfig:
        nova::pci::aliases:
          - name: "t4"
            product_id: "1eb8"
            vendor_id: "10de"
            device_type: "type-PF"
          - name: "v100"
            product_id: "1db4"
            vendor_id: "10de"
            device_type: "type-PF"
    • 如果 PCI 设备没有 SR-IOV 功能:

      ComputeExtraConfig:
        nova::pci::aliases:
          - name: "t4"
            product_id: "1eb8"
            vendor_id: "10de"
          - name: "v100"
            product_id: "1db4"
            vendor_id: "10de"
      注意

      Compute 节点别名必须与 Controller 节点上的别名相同。

  9. 要在 Compute 节点的服务器 BIOS 中启用 IOMMU 以支持 PCI 透传,请将 KernelArgs 参数添加到 pci_passthru_compute.yaml 中:

    parameter_defaults:
      ...
      ComputeParameters:
        KernelArgs: "intel_iommu=on iommu=pt"
    注意

    当您首先将 KernelArgs 参数添加到角色的配置中时,overcloud 节点会自动重启。如果需要,您可以禁用自动重新引导节点,并在每个 overcloud 部署后手动重启节点。如需更多信息,请参阅配置手动节点重新引导以定义 KernelArgs

  10. 使用其他环境文件将自定义环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/pci_passthru_controller.yaml \
      -e /home/stack/templates/pci_passthru_compute.yaml
  11. 配置类别以请求 PCI 设备。以下示例请求两个设备,每个设备的厂商 ID 为 10de,产品 ID 为 13f2

    # openstack flavor set m1.large \
     --property "pci_passthrough:alias"="t4:2"

验证

  1. 使用 PCI 透传设备创建实例:

    # openstack server create --flavor m1.large \
     --image <custom_gpu> --wait test-pci

    <custom_gpu > 替换为安装了所需 GPU 驱动程序的自定义实例镜像的名称。

  2. 以云用户身份登录实例。如需更多信息,请参阅 连接到实例
  3. 要验证 GPU 是否可从实例访问,请从实例输入以下命令:

    $ lspci -nn | grep <gpu_name>
  4. 要检查 NVIDIA System Management Interface 状态,从实例输入以下命令:

    $ nvidia-smi

    输出示例:

    -----------------------------------------------------------------------------
    | NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
    |---------------------------------------------------------------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===========================================================================|
    |   0  Tesla T4            Off  | 00000000:01:00.0 Off |                    0 |
    | N/A   43C    P0    20W /  70W |      0MiB / 15109MiB |      0%      Default |
    ---------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    -----------------------------------------------------------------------------
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.