安装详情
使用 pip 是开始使用 DeepSpeed 的最快方法,这将安装最新版本的 DeepSpeed,它不与特定 PyTorch 或 CUDA 版本绑定。DeepSpeed 包含几个 C++/CUDA 扩展,我们通常称之为我们的“操作”。默认情况下,所有这些扩展/操作将在运行时使用 torch 的 JIT C++ 扩展加载器,它依赖于 ninja 来构建和动态链接它们。
pip install deepspeed
安装后,您可以使用 DeepSpeed 环境报告 (通过 ds_report
或 python -m deepspeed.env_report
) 验证您的安装并查看您的机器兼容哪些操作。我们发现此报告在调试 DeepSpeed 安装或兼容性问题时很有用。
ds_report
预安装 DeepSpeed Ops
注意:必须在预编译任何 DeepSpeed C++/CUDA 操作之前安装 PyTorch。但是,如果使用默认的操作 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
构建 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 个内核。
您还可以构建一个二进制轮子并在具有相同类型 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 轮子并将其复制到您的主机文件中列出的所有节点 (通过 --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 和其计算能力的完整列表:here.
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.
与用于编译 Torch 的 CUDA 版本相比,您安装了不匹配的 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 构建
即将推出