DeepSpeed 加速器设置指南

内容

介绍

DeepSpeed 支持来自不同公司的不同加速器。在某些加速器上运行 DeepSpeed 的设置步骤可能有所不同。本指南允许用户查找其正在使用的加速器系列和硬件的设置说明。

英特尔架构 (IA) CPU

DeepSpeed 支持具有英特尔架构指令集的 CPU。建议 CPU 至少支持 AVX2 指令集,并推荐使用 AMX 指令集。

DeepSpeed 已在以下 CPU 处理器上得到验证

  • 第四代英特尔® 至强® 可扩展处理器
  • 第五代英特尔® 至强® 可扩展处理器
  • 第六代英特尔® 至强® 可扩展处理器

英特尔架构 CPU 的安装步骤

要在英特尔架构 CPU 上安装 DeepSpeed,请使用以下步骤

  1. 安装 gcc 编译器 DeepSpeed 需要 gcc-9 或更高版本才能在英特尔架构 CPU 上构建内核,请安装 gcc-9 或更高版本。

  2. 安装 numactl DeepSpeed 使用 numactl 用于细粒度的 CPU 内核分配以进行负载平衡,请在您的系统上安装 numactl。例如,在 Ubuntu 系统上,使用以下命令: sudo apt-get install numactl

  3. 安装 PyTorch pip install torch

  4. 安装 DeepSpeed pip install deepspeed

如何在英特尔架构 CPU 上启动 DeepSpeed

DeepSpeed 可以使用默认的 deepspeed 命令在英特尔架构 CPU 上启动。但是,对于计算密集型工作负载,当每个工作进程在不同的物理 CPU 内核集上运行时,英特尔架构 CPU 的性能最佳,因此工作进程不会相互竞争 CPU 内核。为了将内核绑定到每个工作进程(等级),请使用以下命令行开关以获得更好的性能。

deepspeed --bind_cores_to_rank <deepspeed-model-script>

此开关将自动检测主机上的 CPU NUMA 节点数,启动相同数量的工作进程,并将每个工作进程绑定到不同 NUMA 节点的内核/内存。通过确保工作进程不会相互干扰以及所有内存分配都来自本地内存,从而提高性能。

如果用户希望对工作进程的数量和工作负载可以使用哪些特定内核进行更多控制,则可以使用以下命令行开关。

deepspeed --num_accelerators <number-of-workers> --bind_cores_to_rank --bind_core_list <comma-seperated-dash-range> <deepspeed-model-script>

例如

deepspeed --num_accelerators 4 --bind_cores_to_rank --bind_core_list <0-27,32-59> inference.py

这将为工作负载启动 4 个工作进程。内核列表范围将平均分配到 4 个工作进程之间,工作进程 0 占用 0-13,工作进程 1 占用 14-27,工作进程 2 占用 32-45,工作进程 3 占用 46-59。内核 28-31、60-63 被排除在外,因为系统上可能有一些后台进程正在运行,保留一些空闲内核将减少性能抖动和落后者效应。

在多个 CPU 节点上启动 DeepSpeed 模型类似于其他加速器。我们需要指定 impi 作为启动器并指定 --bind_cores_to_rank 以获得更好的内核绑定。还要根据主机文件中的 CPU 插座数量指定 slots 数量。

# hostfile content should follow the format
# worker-1-hostname slots=<#sockets>
# worker-2-hostname slots=<#sockets>
# ...

deepspeed --hostfile=<hostfile> --bind_cores_to_rank --launcher impi --master_addr <master-ip> <deepspeed-model-script>

使用英特尔 PyTorch 扩展和 oneCCL 进行安装

虽然不是强制性的,但英特尔 PyTorch 扩展和英特尔 oneCCL 为 LLM 模型提供了更好的优化。英特尔 oneCCL 在多节点上运行 LLM 模型时也提供优化。要将 DeepSpeed 与英特尔 PyTorch 扩展和 oneCCL 一起使用,请使用以下步骤

  1. 安装英特尔 PyTorch 扩展。如果您希望在 CPU 上获得更好的 LLM 推理性能,建议您这样做。 pip install intel-extension-for-pytorch

以下步骤是安装 PyTorch 的 oneCCL 绑定。如果您在多个 CPU 节点上运行 DeepSpeed,建议您这样做,以获得更好的通信性能。在具有多个 CPU 插座的单个节点上,不需要这些步骤。

  1. 安装 PyTorch 的英特尔 oneCCL 绑定 python -m pip install oneccl_bind_pt -f https://developer.intel.com/ipex-whl-stable-cpu

  2. 安装英特尔 oneCCL,这将用于构建直接 oneCCL 内核(CCLBackend 内核)

    pip install oneccl-devel
    pip install impi-devel
    

    然后设置英特尔 oneCCL 的环境变量(假设使用 conda 环境)。

    export CPATH=${CONDA_PREFIX}/include:$CPATH
    export CCL_ROOT=${CONDA_PREFIX}
    export I_MPI_ROOT=${CONDA_PREFIX}
    export LD_LIBRARY_PATH=${CONDA_PREFIX}/lib/ccl/cpu:${CONDA_PREFIX}/lib/libfabric:${CONDA_PREFIX}/lib
    

使用英特尔 PyTorch 扩展优化 LLM 推理

英特尔 PyTorch 扩展与 DeepSpeed AutoTP 张量并行推理兼容。它允许 CPU 推理受益于 DeepSpeed 自动张量并行和英特尔 PyTorch 扩展的 LLM 优化。要使用英特尔 PyTorch 扩展,在调用 deepspeed.init_inference 后,请调用

ipex_model = ipex.llm.optimize(deepspeed_model)

以获得由英特尔 PyTorch 扩展优化的模型。

在英特尔 CPU 上使用 DeepSpeed 的更多示例

有关使用 DeepSpeed 在英特尔 CPU 上运行推理的更多代码示例,请参阅 LLM 示例

英特尔 XPU

DeepSpeed XPU 加速器支持英特尔® 数据中心 GPU Max 系列。

DeepSpeed 已在以下 GPU 产品上得到验证

  • 英特尔® 数据中心 GPU Max 1100
  • 英特尔® 数据中心 GPU Max 1550

英特尔 XPU 的安装步骤

要在英特尔 XPU 上安装 DeepSpeed,请使用以下步骤

  1. 安装 oneAPI 基本工具包
    英特尔® oneAPI 基本工具包 (Base Kit) 是一套核心工具和库,包括用于构建 Deepspeed XPU 内核(如 fusedAdam 和 CPUAdam)的 DPC++/C++ 编译器、IPEX 所需的高性能计算库等。为了方便下载、使用和了解更多详细信息,请查看 英特尔 oneAPI 基本工具包
  2. 安装 PyTorch、英特尔 PyTorch 扩展、英特尔 oneCCL PyTorch 绑定。这些软件包在 xpu_accelerator 中是必需的,用于 torch 功能和性能,以及英特尔平台上的通信后端。推荐的安装参考:https://intel.github.io/intel-extension-for-pytorch/index.html#installation?platform=gpu。

  3. 安装 DeepSpeed
    pip install deepspeed

如何在英特尔 XPU 上使用 DeepSpeed

DeepSpeed 可以使用 deepspeed launch 命令在英特尔 XPU 上启动。在此之前,用户需要通过以下方式激活 oneAPI 环境:
source <oneAPI 安装路径>/setvars.sh

要验证 XPU 的可用性和是否正确选择了 XPU 加速器,以下是一个示例

$ python
>>> import torch; print('torch:', torch.__version__)
torch: 2.3.0
>>> import intel_extension_for_pytorch; print('XPU available:', torch.xpu.is_available())
XPU available: True
>>> from deepspeed.accelerator import get_accelerator; print('accelerator:', get_accelerator()._name)
accelerator: xpu

在英特尔 XPU 上使用 DeepSpeed 的更多示例

有关使用 DeepSpeed 在英特尔 XPU 上运行 LLM 的更多代码示例,请参阅 LLM 示例Megatron-DeepSpeed 训练示例

华为昇腾 NPU

DeepSpeed 已在以下华为昇腾 NPU 产品上得到验证

  • Atlas 300T A2

华为昇腾 NPU 的安装步骤

以下步骤概述了在华为昇腾 NPU 上安装 DeepSpeed 的过程

  1. 安装华为昇腾 NPU 驱动程序和固件
    点击展开在继续安装之前,请从 [华为昇腾 NPU 驱动程序和固件](https://www.hiascend.com/en/hardware/firmware-drivers/commercial?product=4&model=11) 下载必要的文件。以下说明来自 [昇腾社区](https://www.hiascend.com/document/detail/en/canncommercial/700/quickstart/quickstart/quickstart_18_0002.html)(请参阅 [中文版本](https://www.hiascend.com/document/detail/zh/canncommercial/700/quickstart/quickstart/quickstart_18_0002.html)): - 执行以下命令以安装驱动程序: ``` ./Ascend-hdk--npu-driver_x.x.x_linux-{arch}.run --full --install-for-all ``` - 执行以下命令以安装固件: ``` ./Ascend-hdk--npu-firmware_x.x.x.x.X.run --full ``` </details>
  2. 安装 CANN
    点击展开在安装之前,请下载 [CANN 工具包](https://www.hiascend.com/en/software/cann/commercial)。 - 安装第三方依赖项。 - Ubuntu(Debian、UOS20 和 Linux 的操作相同。) ``` apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 ``` - openEuler(EulerOS、CentOS 和 BC-Linux 的操作相同。) ``` yum install -y gcc gcc-c++ make cmake unzip zlib-devel libffi-devel openssl-devel pciutils net-tools sqlite-devel lapack-devel gcc-gfortran ``` - 安装所需的 Python 依赖项: ``` pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py wheel typing_extensions ``` - 安装 CANN 工具包。 ``` ./Ascend-cann-toolkit_x.x.x_linux-{arch}.run --install ```
  3. 安装 PyTorch
    pip install torch torch_npu

  4. 安装 DeepSpeed
    pip install deepspeed

您可以使用 ds_report 命令查看安装结果,以下是一个示例

--------------------------------------------------
DeepSpeed C++/CUDA extension op report
--------------------------------------------------
NOTE: Ops not installed will be just-in-time (JIT) compiled at
    runtime if needed. Op compatibility means that your system
    meet the required dependencies to JIT install the op.
--------------------------------------------------
JIT compiled ops requires ninja
ninja .................. [OKAY]
--------------------------------------------------
op name ................ installed .. compatible
--------------------------------------------------
deepspeed_not_implemented  [NO] ....... [OKAY]
async_io ............... [NO] ....... [OKAY]
cpu_adagrad ............ [NO] ....... [OKAY]
cpu_adam ............... [NO] ....... [OKAY]
cpu_lion ............... [NO] ....... [OKAY]
fused_adam ............. [NO] ....... [OKAY]
transformer_inference .. [NO] ....... [OKAY]
--------------------------------------------------
DeepSpeed general environment info:
torch install path ............... ['/root/miniconda3/envs/ds/lib/python3.10/site-packages/torch']
torch version .................... 2.2.0
deepspeed install path ........... ['/root/miniconda3/envs/ds/lib/python3.10/site-packages/deepspeed']
deepspeed info ................... 0.14.4, unknown, unknown
deepspeed wheel compiled w. ...... torch 2.2
torch_npu install path ........... ['/root/miniconda3/envs/ds/lib/python3.10/site-packages/torch_npu']
torch_npu version ................ 2.2.0
ascend_cann version .............. 8.0.RC2.alpha002
shared memory (/dev/shm) size .... 20.00 GB

如何在华为昇腾 NPU 上启动 DeepSpeed

要验证华为昇腾 NPU 的可用性和是否正确选择了加速器,以下是一个示例(从 DeepSpeed v0.12.6 开始,华为昇腾 NPU 检测是自动的)

>>> import torch
>>> print('torch:',torch.__version__)
torch: 2.2.0
>>> import torch_npu
>>> print('torch_npu:',torch.npu.is_available(),",version:",torch_npu.__version__)
torch_npu: True ,version: 2.2.0
>>> from deepspeed.accelerator import get_accelerator
>>> print('accelerator:', get_accelerator()._name)
accelerator: npu

使用华为昇腾 NPU 进行多卡并行训练

要使用 DeepSpeed 在多个华为昇腾 NPU 卡上执行模型训练,请参阅 DeepSpeed 示例 中提供的示例。

英特尔 Gaudi

可以使用 DeepSpeed 在英特尔® Gaudi® AI 加速器上运行 PyTorch 模型。请参阅以下用户指南,以开始使用 DeepSpeed 与英特尔 Gaudi

更新: