安装详情

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

pip install deepspeed

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

ds_report

预安装 DeepSpeed 操作

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

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

您可以向我们的安装程序(无论是install.sh还是pip install)指示您希望通过将DS_BUILD_OPS环境变量设置为1来尝试安装我们所有的操作,例如:

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 构建转换器操作。
  • DS_BUILD_TRANSFORMER_INFERENCE 构建 transformer-inference 操作。
  • DS_BUILD_STOCHASTIC_TRANSFORMER 构建随机变换器操作。

为了加快构建所有过程,您可以使用以下方式并行化编译过程:

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

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

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

DS_BUILD_OPS=1 python setup.py build_ext -j8 bdist_wheel

这将在dist目录下创建一个pypi二进制轮子,例如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检查)或更新torch版本以匹配已安装的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构建

即将推出

更新: