DeepSpeed 加速器设置指南

目录

介绍

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

英特尔架构(IA)CPU

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

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

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

英特尔架构CPU的安装步骤

要在英特尔架构CPU上安装DeepSpeed,请按照以下步骤操作:

  1. 安装gcc编译器 DeepSpeed需要gcc-9或更高版本来在Intel架构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 可以在 Intel 架构的 CPU 上使用默认的 deepspeed 命令启动。然而,对于计算密集型工作负载,当每个工作进程在不同的物理 CPU 核心集上运行时,Intel 架构的 CPU 表现最佳,这样工作进程之间不会竞争 CPU 核心。为了将核心绑定到每个工作进程(rank),使用以下命令行开关以获得更好的性能。

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>

使用Intel Extension for PyTorch和oneCCL安装

虽然不是强制性的,但Intel Extension for PyTorch和Intel oneCCL为LLM模型提供了更好的优化。Intel oneCCL在多节点上运行LLM模型时也提供了优化。要使用DeepSpeed与Intel Extension for PyTorch和oneCCL,请按照以下步骤操作:

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

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

  1. 安装适用于PyTorch的Intel oneCCL绑定 python -m pip install oneccl_bind_pt -f https://developer.intel.com/ipex-whl-stable-cpu

  2. 安装Intel oneCCL,这将用于构建直接的oneCCL内核(CCLBackend内核)

    pip install oneccl-devel
    pip install impi-devel
    

    然后为Intel 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 推理

Intel Extension for PyTorch 兼容 DeepSpeed AutoTP 张量并行推理。它允许 CPU 推理从 DeepSpeed 自动张量并行性和 Intel Extension for PyTorch 的 LLM 优化中受益。要使用 Intel Extension for PyTorch,在调用 deepspeed.init_inference 后,调用

ipex_model = ipex.llm.optimize(deepspeed_model)

获取由Intel Extension for PyTorch优化的模型。

更多在Intel CPU上使用DeepSpeed的示例

请参考LLM示例以获取更多在Intel CPU上使用DeepSpeed进行推理的代码示例。

英特尔XPU

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

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

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

Intel XPU 安装步骤

要在Intel XPU上安装DeepSpeed,请按照以下步骤操作:

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

  3. 安装 DeepSpeed
    pip install deepspeed

如何在Intel XPU上使用DeepSpeed

DeepSpeed 可以在 Intel XPU 上通过 deepspeed launch 命令启动。在此之前,用户需要通过以下方式激活 oneAPI 环境:
source /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

更多在Intel XPU上使用DeepSpeed的示例

请参考LLM示例Megatron-DeepSpeed训练示例,获取更多在Intel XPU上使用DeepSpeed运行LLM的代码示例。

华为昇腾NPU

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

  • Atlas 300T A2

华为Ascend NPU的安装步骤

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

  1. 安装华为Ascend NPU驱动和固件
    点击展开 在继续安装之前,请从[Huawei Ascend NPU Driver and Firmware](https://www.hiascend.com/en/hardware/firmware-drivers/commercial?product=4&model=11)下载必要的文件。 以下说明来自[Ascend Community](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 ```
  2. 安装CANN
    点击展开 在安装之前,请下载[CANN Toolkit](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 Toolkit。 ``` ./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

要验证华为Ascend NPU的可用性以及是否正确选择了加速器,这里有一个示例(从DeepSpeed v0.12.6开始,华为Ascend 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在多个华为Ascend NPU卡上进行模型训练,请参阅DeepSpeed Examples中提供的示例。

英特尔高迪

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

更新: