DeepSpeed 加速器设置指南
目录
简介
DeepSpeed 支持来自不同公司的不同加速器。在某些加速器上运行 DeepSpeed 的设置步骤可能会有所不同。本指南允许用户查找他们正在使用的加速器系列和硬件的设置说明。
Intel 架构 (IA) CPU
DeepSpeed 支持带 Intel 架构指令集的 CPU。建议 CPU 至少支持 AVX2 指令集,并推荐支持 AMX 指令集。
DeepSpeed 已在以下 CPU 处理器上验证
- 第四代 Intel® Xeon® 可扩展处理器
- 第五代 Intel® Xeon® 可扩展处理器
- 第六代 Intel® Xeon® 可扩展处理器
Intel 架构 CPU 的安装步骤
要在 Intel 架构 CPU 上安装 DeepSpeed,请使用以下步骤
-
安装 gcc 编译器 DeepSpeed 需要 gcc-9 或更高版本才能在 Intel 架构 CPU 上构建内核,请安装 gcc-9 或更高版本。
-
安装 numactl DeepSpeed 使用
numactl
进行细粒度 CPU 核心分配以实现负载均衡,请在您的系统上安装 numactl。例如,在 Ubuntu 系统上,使用以下命令:sudo apt-get install numactl
-
安装 PyTorch
pip install torch
-
安装 DeepSpeed
pip install deepspeed
如何在 Intel 架构 CPU 上启动 DeepSpeed
DeepSpeed 可以使用默认的 deepspeed 命令在 Intel 架构 CPU 上启动。然而,对于计算密集型工作负载,当每个工作进程在不同的物理 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 个工作进程,其中 worker 0 占用 0-13,worker 1 占用 14-27,worker 2 占用 32-45,worker 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 结合使用,请执行以下步骤
- 安装 Intel Extension for PyTorch。如果您希望在 CPU 上获得更好的 LLM 推理性能,建议安装此扩展。
pip install intel-extension-for-pytorch
以下步骤用于为 PyTorch 安装 oneCCL 绑定。如果您在多个 CPU 节点上运行 DeepSpeed 以获得更好的通信性能,建议执行此操作。在具有多个 CPU 插槽的单个节点上,这些步骤是不需要的。
-
为 PyTorch 安装 Intel oneCCL 绑定
python -m pip install oneccl_bind_pt -f https://developer.intel.com/ipex-whl-stable-cpu
-
安装 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
使用 Intel Extension for 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 的更多示例
有关在 Intel CPU 上使用 DeepSpeed 运行推理的更多代码示例,请参阅 LLM 示例。
Intel XPU
DeepSpeed XPU 加速器支持 Intel® Data Center GPU Max 系列。
DeepSpeed 已在以下 GPU 产品上验证
- Intel® Data Center GPU Max 1100
- Intel® Data Center GPU Max 1550
Intel XPU 的安装步骤
要在 Intel XPU 上安装 DeepSpeed,请使用以下步骤
- 安装 oneAPI 基础工具包
Intel® oneAPI Base Toolkit (基础工具包) 是一套核心工具和库,包括用于构建 DeepSpeed XPU 内核(如 fusedAdam 和 CPUAdam)的 DPC++/C++ 编译器,以及 IPEX 所需的高性能计算库等。有关轻松下载、使用和更多详细信息,请查看 Intel oneAPI 基础工具包。 -
安装 PyTorch、Intel Extension for PyTorch、Intel oneCCL Bindings for PyTorch。这些包在
xpu_accelerator
中是必需的,用于 PyTorch 功能和性能,以及 Intel 平台上的通信后端。推荐的安装参考:https://intel.github.io/intel-extension-for-pytorch/index.html#installation?platform=gpu。 - 安装 DeepSpeed
pip install deepspeed
如何在 Intel XPU 上使用 DeepSpeed
DeepSpeed 可以通过 deepspeed launch 命令在 Intel XPU 上启动。在此之前,用户需要通过以下方式激活 oneAPI 环境
source <oneAPI installed path>/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 的更多示例
有关在 Intel XPU 上使用 DeepSpeed 运行 LLM 的更多代码示例,请参阅 LLM 示例,Megatron-DeepSpeed 训练示例。
华为昇腾 NPU
DeepSpeed 已在以下华为昇腾 NPU 产品上验证
- Atlas 300T A2
华为昇腾 NPU 的安装步骤
以下步骤概述了在华为昇腾 NPU 上安装 DeepSpeed 的过程
- 安装华为昇腾 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> - 安装 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 ``` -
安装 PyTorch
pip install torch torch_npu
- 安装 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 示例中提供的示例。
Intel Gaudi
PyTorch 模型可以使用 DeepSpeed 在 Intel® Gaudi® AI 加速器上运行。请参阅以下用户指南,开始将 DeepSpeed 与 Intel Gaudi 结合使用