安装详情

开始使用 DeepSpeed 最快的方法是通过 pip,这将安装 DeepSpeed 的最新版本,该版本不与特定的 PyTorch 或 CUDA 版本绑定。DeepSpeed 包含多个 C++/CUDA 扩展,我们通常称之为“操作”(ops)。默认情况下,所有这些扩展/操作都将使用 torch 的 JIT C++ 扩展加载器(依赖 ninja)在运行时进行即时 (JIT) 构建和动态链接。

pip install deepspeed

安装后,您可以通过 DeepSpeed 环境报告验证您的安装并查看您的机器兼容哪些操作,使用 ds_reportpython -m deepspeed.env_report 命令。我们发现此报告在调试 DeepSpeed 安装或兼容性问题时很有用。

ds_report

预安装 DeepSpeed 操作

注意: PyTorch 必须在预编译任何 DeepSpeed C++/CUDA 操作之前安装。但是,如果使用操作的默认 JIT 编译模式,则不需要这样做。

有时我们发现预安装部分或全部 DeepSpeed C++/CUDA 操作而不是使用 JIT 编译路径会很有用。为了支持预安装,我们引入了构建环境标志来打开/关闭特定操作的构建。

您可以通过将 DS_BUILD_OPS 环境变量设置为 1 来指示我们的安装程序(install.shpip install)尝试安装我们所有的操作,例如:

DS_BUILD_OPS=1 pip install deepspeed

DeepSpeed 将只安装与您的机器兼容的操作。有关哪些操作与您的系统兼容的更多详细信息,请尝试使用我们上面描述的 ds_report 工具。

如果您只想安装特定操作(例如,FusedLamb),您可以在安装时使用 DS_BUILD 环境变量进行切换。例如,要仅安装包含 FusedLamb 操作的 DeepSpeed,请使用:

DS_BUILD_FUSED_LAMB=1 pip install deepspeed

可用的 DS_BUILD 选项包括:

  • DS_BUILD_OPS 切换所有操作。
  • DS_BUILD_AIO 构建异步 (NVMe) I/O 操作。
  • DS_BUILD_CCL_COMM 构建通信集合库。
  • DS_BUILD_CPU_ADAM 构建 CPUAdam 操作。
  • DS_BUILD_CPU_LION 构建 CPULion 操作。
  • DS_BUILD_EVOFORMER_ATTN 构建 EvoformerAttn 操作(来自 Alphafold)。
  • DS_BUILD_FUSED_ADAM 构建 FusedAdam 操作(来自 apex)。
  • DS_BUILD_FUSED_LION 构建 FusedLion 操作。
  • DS_BUILD_CPU_ADAGRAD 构建 CPUAdagrad 操作。
  • DS_BUILD_FUSED_LAMB 构建 FusedLamb 操作。
  • DS_BUILD_QUANTIZER 构建量化器操作。
  • DS_BUILD_RANDOM_LTD 构建随机 ltd 操作。
  • DS_BUILD_SPARSE_ATTN 构建稀疏注意力操作。
  • DS_BUILD_TRANSFORMER 构建 transformer 操作。
  • DS_BUILD_TRANSFORMER_INFERENCE 构建 transformer 推理操作。
  • DS_BUILD_STOCHASTIC_TRANSFORMER 构建随机 transformer 操作。

为了加速整体构建过程,您可以并行化编译过程,使用:

DS_BUILD_OPS=1 pip install deepspeed --global-option="build_ext" --global-option="-j8"

这应该能使完整构建速度提高 2-3 倍。您可以调整 -j 来指定在构建过程中使用多少个 CPU 核心。在示例中,它设置为 8 个核心。

您还可以构建一个二进制 wheel 并将其安装在具有相同类型 GPU 和相同软件环境(CUDA 工具包、PyTorch、Python 等)的多台机器上。

DS_BUILD_OPS=1 python -m build --wheel --no-isolation --config-setting="--build-option=build_ext" --config-setting="--build-option=-j8"

这将在 dist 目录下创建一个 pypi 二进制 wheel,例如 dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl,然后您可以直接在多台机器上安装它,例如:

pip install dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl

从源代码安装 DeepSpeed

从 GitHub 克隆 DeepSpeed 仓库后,您可以通过 pip 以 JIT 模式安装 DeepSpeed(参见下文)。此安装应能快速完成,因为它不编译任何 C++/CUDA 源文件。

pip install .

对于跨多个节点的安装,我们发现使用仓库中的 install.sh 脚本安装 DeepSpeed 会很有用。这将本地构建一个 Python wheel 并将其复制到您主机文件中列出的所有节点(可以通过 --hostfile 提供,或默认为 /job/hostfile)。

当第一次使用 DeepSpeed 代码时,它将自动构建运行所需的 CUDA 扩展,并且默认情况下会将它们放置在 ~/.cache/torch_extensions/ 下。下次执行同一程序时,这些现在预编译的扩展将从该目录加载。

如果您使用多个虚拟环境,这可能会成为一个问题,因为默认情况下只有一个 torch_extensions 目录,但不同的虚拟环境可能使用不同的设置(例如,不同的 Python 或 CUDA 版本),然后由另一个环境构建的 CUDA 扩展的加载将失败。因此,如果需要,您可以在 TORCH_EXTENSIONS_DIR 环境变量的帮助下覆盖默认位置。这样,在每个虚拟环境中,您都可以将其指向一个唯一的目录,DeepSpeed 将使用它来保存和加载 CUDA 扩展。

您也可以仅针对特定运行进行更改,使用:

 TORCH_EXTENSIONS_DIR=./torch-extensions deepspeed ...

用于从源代码构建的 Conda 环境

如果您在使用默认系统环境进行编译时遇到困难,可以尝试提供的 conda 环境,它包含了必要的编译工具链和 PyTorch。

conda env create -n deepspeed -f environment.yml --force

并在激活它之后尝试上述安装命令。

为正确的架构构建

如果您收到以下错误:

RuntimeError: CUDA error: no kernel image is available for execution on the device

在运行 deepspeed 时,这意味着 CUDA 扩展不是为您尝试使用的显卡构建的。

从源代码构建时,DeepSpeed 将尝试支持广泛的架构,但在 JIT 模式下,它将仅支持构建时可见的架构。

您可以通过设置 TORCH_CUDA_ARCH_LIST 环境变量来专门为所需的架构范围进行构建:

TORCH_CUDA_ARCH_LIST="6.1;7.5;8.6" pip install ...

当您只为少数架构构建时,这也会加快构建速度。

这也建议用于确保使用您的精确架构。由于各种技术原因,分布式 PyTorch 二进制文件未构建为完全支持所有架构,会跳过二进制兼容的架构,这可能会以未能充分利用显卡全部计算能力为代价。要查看 DeepSpeed 从源代码构建期间包含了哪些架构,请保存日志并搜索 -gencode 参数。

Nvidia GPU 及其计算能力的完整列表可以在此处找到。

CUDA 版本不匹配

如果您收到以下错误:

Exception: >- DeepSpeed Op Builder: Installed CUDA version {VERSION} does not match the version torch was compiled with {VERSION}, unable to compile cuda/cpp extensions without a matching cuda version.

您安装的 CUDA 版本与用于编译 Torch 的 CUDA 版本不一致。主版本不匹配很可能导致错误或意外行为。

解决此错误最简单的方法是更改已安装的 CUDA 版本(使用 nvcc --version 检查)或更新 PyTorch 版本以匹配已安装的 CUDA 版本(使用 python3 -c "import torch; print(torch.__version__)" 检查)。

我们只要求主版本匹配(例如,11.1 和 11.8)。但是,请注意,即使是次版本不匹配仍可能导致意外行为和错误,因此建议主版本和次版本都匹配。当次版本不匹配时,DeepSpeed 将记录一个警告。

如果您想跳过此检查并继续使用不匹配的 CUDA 版本,请使用以下环境变量,但请注意可能出现意外行为:

DS_SKIP_CUDA_CHECK=1

特定功能依赖项

某些 DeepSpeed 功能需要 DeepSpeed 一般依赖项之外的特定依赖项。

  • 每个功能/操作的 Python 包依赖项,请参见我们的requirements 目录

  • 我们尽量将系统级依赖项保持在最低限度,但某些功能确实需要特殊的系统级软件包。请查看我们的 ds_report 工具输出,以了解您是否缺少给定功能的任何系统级软件包。

从 PyPI 预编译的 DeepSpeed 构建

即将推出

更新: