如何使用 DS_BUILD_OPS 预编译 DeepSpeed ops 并构建 wheel 分发到多台机器?
如何使用 DS_BUILD_OPS 预编译 DeepSpeed ops 并构建 wheel 分发到多台机器【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeedDeepSpeed 包含一组 C/CUDA 扩展官方称之为 ops。默认情况下这些 ops 走 JITjust-in-time编译代码首次运行时由 torch 的 JIT C extension loader基于 ninja按需编译并动态链接。也就是说每个节点第一次跑 DeepSpeed 程序时都会编译一遍所需扩展默认放在~/.cache/torch_extensions/之后才从该目录加载。在多节点集群上你通常希望在构建节点上一次性预编译好全部或指定的ops打成一个 wheel再分发到各台机器安装。本文介绍这条路径用DS_BUILD_OPS触发预编译、用python -m build产出二进制 wheel、在各机器上安装并用ds_report验证最后给出官方install.sh自动分发脚本这一可选路径。内容主要依据 安装进阶文档分发脚本行为依据 install.shDS_BUILD_OPS的默认值逻辑可对照 setup.py。前置条件必须先安装 PyTorch。文档明确标注预编译任何 DeepSpeed C/CUDA ops 之前PyTorch 必须已安装JIT 模式则不要求。setup.py 在DS_BUILD_OPS打开但没有 torch 时会直接断言失败报错信息为Unable to pre-compile ops without torch installed. Please install torch before attempting to pre-compile ops.需要 CUDA 或 ROCm 编译器如nvcc或hipcc用于编译 C/CUDA/HIP 扩展。目标机器要求GPU 类型相同且软件环境相同CUDA toolkit、PyTorch、Python 等。这是文档对“构建一个 wheel 装到多台机器”给出的前提条件。注意默认值Linux 上DS_BUILD_OPS默认为 0走 JITWindows 上默认为 1见 setup.py 的BUILD_OP_PLATFORM。因此在 Linux 构建节点上必须显式设置DS_BUILD_OPS1。如果只希望构建部分 ops用对应的DS_BUILD_*变量见下文“只构建指定 op”。主路径构建 wheel 并逐台安装1. 在构建节点上打 wheel从 GitHub 克隆 DeepSpeed 源码后在仓库根目录执行DS_BUILD_OPS1 python -m build --wheel --no-isolation该命令让安装器尝试预编译全部 ops并在dist目录下产出一个 PyPI 二进制 wheel。文档给出的示例文件名为dist/deepspeed-0.3.138cd046f-cp38-cp38-linux_x86_64.whl——这是文档示例实际文件名取决于你构建时的源码版本、commit 和 Python 版本构建结束后在dist/下确认实际生成的文件名。如果只想为特定 GPU 架构编译同时加快构建速度可加TORCH_CUDA_ARCH_LISTTORCH_CUDA_ARCH_LIST6.1;7.5;8.6 DS_BUILD_OPS1 python -m build --wheel --no-isolation6.1;7.5;8.6是文档中的示例取值按你的 GPU 实际计算能力填写。文档说明显式指定架构还能确保你的架构被包含在构建里想确认构建实际包含哪些架构可以保存构建日志并 grep-gencode参数。2. 在各台目标机器上安装把 wheel 拷贝到每台机器后在每台机器上执行文件名为文档示例替换为你实际构建出的 wheel 名pip install dist/deepspeed-0.3.138cd046f-cp38-cp38-linux_x86_64.whlinstall.sh中使用的写法是通配符dist/deepspeed*.whl本地目录只有一个 wheel 时同样适用。两点边界说明DS_BUILD_OPS1不会安装所有 op只会安装与本机兼容的 ops某台机器兼容哪些 op用ds_report查看。wheel 只在“相同 GPU 类型 相同软件环境CUDA toolkit、PyTorch、Python 等”的机器之间通用环境不同的机器不能共用同一个 wheel。3. 验证在每台机器上运行环境报告确认安装状态和 ops 兼容性ds_report等价写法是python -m deepspeed.env_report。文档将ds_report用于验证安装并查看本机兼容哪些 ops也用于排查安装或兼容性问题。可选路径用 install.sh 自动构建并分发到全部节点跨节点安装时官方推荐仓库中的 install.sh 脚本它在本地构建 wheel并把 wheel 拷贝到 hostfile 中列出的所有节点安装。脚本用法摘自脚本内 usageUsage: install.sh [options...] By default will install deepspeed and all third party dependencies across all machines listed in hostfile (hostfile: /job/hostfile). If no hostfile exists, will only install locally [optional] -l, --local_only Install only on local machine -s, --pip_sudo Run pip install with sudo (default: no sudo) -r, --allow_sudo Allow script to be run by root (probably dont want this, instead use --pip_sudo) -n, --no_clean Do not clean prior build state, by default prior build files are removed before building wheels -m, --pip_mirror Use the specified pip mirror (default: the default pip mirror) -H, --hostfile Path to MPI-style hostfile (default: /job/hostfile) -e, --examples Checkout deepspeed example submodule (no install) -v, --verbose Verbose logging -h, --help This help text执行前需要了解脚本的副作用以下均来自脚本实际行为清理构建状态默认会先删除deepspeed/git_version_info_installed.py、dist、build、deepspeed.egg-info加-n/--no_clean可跳过。远端环境会被修改多节点模式下脚本对每个节点执行pip uninstall -y deepspeed再安装新 wheel所以目标节点上已有的 deepspeed 会被卸载替换。依赖pdsh/pdcp脚本通过pdsh/pdcp并设置PDSH_RCMD_TYPEssh驱动远端节点构建节点环境里需要可用。权限脚本以 root 直接运行会被拒绝除非加-r/--allow_sudo如需用 sudo 装 pip 包用-s/--pip_sudo。hostfile 格式MPI 风格每行第一列为主机名脚本取每行第一个字段作为目标主机hostfile 不存在时未用-H指定且默认/job/hostfile不存在脚本自动退化为仅本地安装。带全部 ops 预编译地执行多节点分发DS_BUILD_OPS1 bash install.sh -H /path/to/hostfile其中 hostfile 路径由你提供文档只给出-H参数与默认值/job/hostfile未给出示例路径。脚本完成后的动作顺序为构建 wheel → 在各节点/tmp/deepspeed_wheels下分发 wheel 和requirements/requirements.txt→ 卸载旧 deepspeed → 安装 wheel → 在每个节点运行ds_report→ 清理各节点/tmp/deepspeed_wheels下的临时文件。也就是说脚本自身已包含逐节点的ds_report验证步骤无需再逐台手动执行。只构建指定 op可选分支如果不需要全部 ops可用单独的DS_BUILD_*变量精确控制例如只装FusedLambDS_BUILD_FUSED_LAMB1 pip install deepspeed文档列出的可用选项见 安装进阶文档变量构建的 opDS_BUILD_OPS全部 opsDS_BUILD_AIO异步NVMeI/O opDS_BUILD_CCL_COMM通信集合库DS_BUILD_CPU_ADAMCPUAdam opDS_BUILD_CPU_LIONCPULion opDS_BUILD_EVOFORMER_ATTNEvoformerAttn opAlphaFold 相关DS_BUILD_FUSED_ADAMFusedAdam opDS_BUILD_FUSED_LIONFusedLion opDS_BUILD_CPU_ADAGRADCPUAdagrad opDS_BUILD_FUSED_LAMBFusedLamb opDS_BUILD_QUANTIZERquantizer opDS_BUILD_RANDOM_LTDrandom ltd opDS_BUILD_SPARSE_ATTNsparse attention opDS_BUILD_TRANSFORMERtransformer opDS_BUILD_TRANSFORMER_INFERENCEtransformer-inference opDS_BUILD_STOCHASTIC_TRANSFORMERstochastic transformer op单台机器上如果不想打 wheel也可以直接预装全部兼容 opsDS_BUILD_OPS1 pip install deepspeed常见问题运行时报RuntimeError: CUDA error: no kernel image is available for execution on the device说明 CUDA 扩展没有针对当前显卡构建。从源码构建时 DeepSpeed 会尝试支持很宽的架构范围而 JIT 模式只支持构建时可见的架构。解决方式是构建时显式指定目标架构TORCH_CUDA_ARCH_LIST6.1;7.5;8.6 pip install ...这同时会加快只针对少数架构的构建。构建时提示 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 会打 warning。如需跳过检查强行继续可设置DS_SKIP_CUDA_CHECK1文档明确提示这样做可能出现意外行为。多个虚拟环境之间的 JIT 缓存冲突JIT 模式下扩展默认只放在一个~/.cache/torch_extensions/目录里不同虚拟环境不同 Python/CUDA 版本会互相干扰导致加载其他环境编译的扩展失败。可用TORCH_EXTENSIONS_DIR为每个环境指定独立目录或仅对单次运行生效TORCH_EXTENSIONS_DIR./torch-extensions deepspeed ...限制与边界预编译路径要求 PyTorch 先装好JIT 默认路径pip install deepspeed或源码pip install .不要求首次运行时才编译所需扩展。分发 wheel 的前提是目标机器 GPU 类型与软件环境CUDA toolkit、PyTorch、Python 等一致不满足时不能跨环境共用 wheel。部分 DeepSpeed 功能还有独立依赖Python 包依赖按功能/ops 拆分在 requirements 目录系统级依赖以ds_report输出为准文档提示用它检查某个功能是否缺少系统级包。文档中“从 PyPI 直接获取预编译 DeepSpeed builds”一节目前标注为 Coming soon因此当前文档化的预编译路径就是本文的本地构建方式。【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考