From 230f479e66b7fc30f79e4413a9600364bf8fec9b Mon Sep 17 00:00:00 2001 From: Ramya Ramineni <62723901+rraminen@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:51:06 -0600 Subject: [PATCH 01/69] [ROCm] Enable fp_quantizer on ROCm (#7027) This change is required to successfully build fp_quantizer extension on ROCm. --------- Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- op_builder/fp_quantizer.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/op_builder/fp_quantizer.py b/op_builder/fp_quantizer.py index e42927bd065d..df4d967ea09a 100644 --- a/op_builder/fp_quantizer.py +++ b/op_builder/fp_quantizer.py @@ -94,7 +94,10 @@ def sources(self): ] def extra_ldflags(self): - return ['-lcurand'] + if not self.is_rocm_pytorch(): + return ['-lcurand'] + else: + return [] def include_paths(self): return ['csrc/fp_quantizer/includes', 'csrc/includes'] From 130c11c44b5b9489b4c2dbebdbf5b7f73c926f0f Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Thu, 13 Feb 2025 10:10:03 -0800 Subject: [PATCH 02/69] Add pyproject.toml Signed-off-by: Logan Adams --- pyproject.toml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000000..4b650033f898 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,9 @@ +[build-system] +requires = [ + "setuptools", + "wheel", + "ninja", + "typing-extensions>=4.10.0", +] +# Use legacy backend to import local packages in setup.py +build-backend = "setuptools.build_meta:__legacy__" \ No newline at end of file From b2e16cbc2f986318fb6d975c2f2e1cf939794157 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Thu, 13 Feb 2025 10:12:57 -0800 Subject: [PATCH 03/69] Formatting fix Signed-off-by: Logan Adams --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4b650033f898..3b11a224a008 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,4 +6,4 @@ requires = [ "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -build-backend = "setuptools.build_meta:__legacy__" \ No newline at end of file +build-backend = "setuptools.build_meta:__legacy__" From 72bfb7029cb945848df6bd9865f2f36b18cac7f9 Mon Sep 17 00:00:00 2001 From: Guanhua Wang Date: Thu, 13 Feb 2025 11:38:36 -0800 Subject: [PATCH 04/69] add gds chinese blog (#7034) cc @tjruwase @jomayeri --------- Co-authored-by: root Signed-off-by: Logan Adams --- blogs/deepspeed-gds/chinese/README.md | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 blogs/deepspeed-gds/chinese/README.md diff --git a/blogs/deepspeed-gds/chinese/README.md b/blogs/deepspeed-gds/chinese/README.md new file mode 100644 index 000000000000..9fa9d7150c42 --- /dev/null +++ b/blogs/deepspeed-gds/chinese/README.md @@ -0,0 +1,77 @@ +
+ +# DeepNVMe: 通过I/O优化提高深度学习应用性能 + +
+ +# 引言 + +深度学习(DL)在语言、语音、视频和多模态应用等重要人工智能领域不断推动着前所未有的进展。这些进展的关键因素是模型大小、序列长度和硬件并行性等多个维度上的显著可扩展性。从系统角度来看,深度学习的可扩展性给计算、内存、通信和存储等关键子系统带来了巨大的压力。然而,现有的深度学习优化工作大多忽略了存储子系统,使得数据加载、模型检查点和卸载等I/O操作成为大规模深度学习中的主要瓶颈。为了解决这个问题,DeepSpeed开发了一整套I/O优化技术,统称为DeepNVMe。 + +DeepNVMe通过加速I/O操作和减少硬件需求,提高了I/O受限的深度学习应用的性能和效率。它通过利用存储创新,如非易失性内存快速通道(NVMe)固态硬盘(SSD)和NVIDIA Magnum IOTM GPUDirect®存储(GDS)实现这一目标。在本文中,我们通过微基准测试和推理应用来展示DeepNVMe的优势。在对Azure NC96ads\_A100\_v4虚拟机进行的实验中,我们观察到DeepNVMe能充分利用可用的NVMe带宽进行GPU或CPU内存的数据传输,读取速度达到10GB/秒,写入速度达到5GB/秒。 + +# 背景 + +高性能访问持久存储是许多计算领域(包括深度学习)中的一个常见挑战。因此,已经提出了大量的硬件和软件解决方案。DeepNVMe基于三种解决方案: (1) NVMe SSDs,(2) NVIDIA GDS,(3) Linux异步I/O(libaio)。我们将简要介绍每项技术。 + +NVMe SSDs是基于闪存的存储设备,正在取代传统的硬盘驱动器(HDD),成为现代服务器的主要持久存储。例如,Azure NC96ads\_A100\_v4虚拟机配备了四个NVMe SSD,每个SSD可提供3.25GB/秒的读取速度,并且可以组合成RAID-0配置,理论上的总读取带宽为13GB/秒。NVIDIA GDS可以实现NVMe和GPU内存之间的直接数据传输,从而避免了传统使用中间CPU内存(缓冲区)方法的低效。NVIDIA GDS在CUDA 11.4及以上版本中可用。最后,libaio是Linux引入的异步I/O栈,它比传统的I/O栈更有效地提取NVMe SSD等高速存储设备的原始性能。 + +# DeepNVMe: 深度学习I/O优化模块 + +DeepNVMe是一个Python模块,我们开发时遵循了两个关键设计原则。首先,它利用上述存储技术,实现了强大的优化,如非阻塞I/O操作、批处理I/O操作提交、单个I/O操作的并行化以及轻量级运行时。其次,它通过一个简单的POSIX-like接口让用户使用I/O优化,便于深度学习应用集成,同时避免了底层技术的复杂性。 + +# 评估 + +我们的实验在Azure NC96ads\_A100\_v4虚拟机上进行,实验设置的详细信息见表1。对于多设备实验,SSD是以RAID-0配置组合使用的。 + + + +
+表1: 实验设置详细信息 +
+ +## 微基准性能测试 + +我们使用了三种基准测试工具进行评估。第一个是fio,这是一个用C语言编写的流行I/O基准测试工具。第二个是来自NVIDIA的gdsio,用于基准测试GDS性能。第三个是ds\_io,这是我们创建的Python工具,便于与DeepNVMe集成,并且更能代表常见的基于Python的深度学习应用。 + +## 通过NVMe扩展CPU缓冲区,从而提高I/O性能 + +我们的第一组微基准评估使用fio和ds\_io,测量1GB数据在NVMe和CPU内存之间的传输性能。我们配置fio使用libaio后端进行这些实验。结果总结在图1中,我们可以得出两个结论。首先,DeepNVMe表现出高性能,尽管它更能代表深度学习应用,但其性能与fio大致相当。其次,DeepNVMe的I/O性能几乎与可用的NVMe带宽成线性扩展,达到了10GB/秒的读取速度和5GB/秒的写入速度。 + + + +
+图1: 使用DeepNVMe扩展NVMe与CPU缓冲区之间的数据传输 +
+ +## 通过NVMe扩展GPU缓冲区,从而提高I/O性能 + +我们的第二组微基准评估使用gdsio和ds\_io,测量1GB数据在NVMe和GPU内存之间的传输性能。在此实验中,我们配置ds\_io同时使用传统的缓冲区方法和更高效的GDS方法。结果总结在图2中,我们可以得出三个结论。首先,我们看到GDS提高了DeepNVMe的性能,相比传统缓冲区方法,速度提高了最多37%。其次,DeepNVMe表现出高性能,尽管它更能代表深度学习应用,但其性能与gdsio相匹配(有时甚至超过)。第三,我们看到DeepNVMe,无论是否使用GDS,都能根据可用的NVMe带宽扩展I/O性能。使用GDS时,DeepNVMe的读取速度最高达到9.6GB/秒,写入速度为5GB/秒;不使用GDS时,读取速度为7GB/秒,写入速度为4GB/秒。 + + + +
+图2: 使用DeepNVMe扩展NVMe与GPU内存之间的数据传输 +
+ +## ZeRO-Inference: 生成式AI性能 + +ZeRO-Inference是一项AI普及技术,通过使用DeepNVMe将模型权重卸载(Offload)到CPU或NVMe内存,降低了推理大规模模型的硬件成本。ZeRO-Inference非常适合于面向吞吐量的应用,如离线推理,和硬件预算有限的场景。我们使用token生成工作负载来评估DeepNVMe在NVMe卸载下的性能。 + +## 通过NVMe扩展的高性能卸载(Offload) + +我们测量了在单个NVIDIA A100-80GB上推理LLAMA3-70B模型的生成吞吐量,使用512的提示长度、32的生成长度和96的批量大小。我们将NVMe SSD的数量从1扩展到4,并呈现了ZeRO-Inference在有GDS和没有GDS的情况下的结果,如图3所示。我们从这些结果中得出两个结论。首先,GDS始终提供比传统缓冲区方法更好的性能,token生成速度提高了10-18%。其次,DeepNVMe,无论是否使用GDS,都能根据可用的NVMe带宽扩展生成性能。在四个NVMe SSD的情况下,DeepNVMe的生成吞吐量分别为每秒7个token(使用GDS)和每秒6个token(不使用GDS)。我们的分析结果表明,DeepNVMe将在更多的NVMe带宽下继续扩展,是提升生成应用性能的经济选择。 + + + +
+图3: 使用DeepNVMe通过NVMe卸载(offload)扩展LLAMA3-70B的token生成性能 +
+ +# 总结 + +在本文中,我们介绍了DeepNVMe,一项为了解决I/O操作成为深度学习可扩展性关键瓶颈而创建的I/O优化技术。DeepNVMe通过基于流行存储技术(如NVMe SSD和NVIDIA GDS)的优化,实现了持久存储与深度学习应用内存之间的快速高效数据传输。我们展示了在Azure NC96ads\_A100\_v4虚拟机上,DeepNVMe通过NVMe卸载支持LLAMA3-70B的token生成,最高达到每秒7个token的生成吞吐量。DeepNVMe将在DeepSpeed版本>= 0.15.0中开源,并广泛发布。在未来的博客中,我们将报告DeepNVMe在其他I/O受限的深度学习应用中的改进,如模型检查点和数据加载。 + +# 致谢 + +这项工作是微软和NVIDIA之间深入合作的结果。贡献者包括微软的Joe Mayer、Martin Cai和Olatunji Ruwase;NVIDIA的Kiran Modukuri、Vahid Noormofidi、Sourab Gupta和Sandeep Joshi。 From 48c02ad4a4d650a649a87fca8f4806542589040d Mon Sep 17 00:00:00 2001 From: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:10:30 -0800 Subject: [PATCH 05/69] Add chinese blog for deepspeed windows, and fix format (#7035) Fix #7029 - Add Chinese blog for deepspeed windows - Fix format in README.md Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- README.md | 2 +- blogs/windows/08-2024/README.md | 8 +- blogs/windows/08-2024/chinese/README.md | 103 ++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 blogs/windows/08-2024/chinese/README.md diff --git a/README.md b/README.md index 9f071c3f0a65..db77d419cce7 100755 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ * [2024/12] [Ulysses-Offload: Democratizing Long Context LLM Training ](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/ulysses-offload/README.md) * [2024/12] [DeepSpeed-Domino: Communication-Free LLM Training Engine](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/deepspeed-domino/README.md) -* [2024/08] [DeepSpeed on Windows](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/README.md) [[日本語](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/japanese/README.md)] +* [2024/08] [DeepSpeed on Windows](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/README.md) [[日本語](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/japanese/README.md)] [[中文](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/chinese/README.md)] * [2024/08] [DeepNVMe: Improving DL Applications through I/O Optimizations](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-gds/README.md) [[日本語](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-gds/japanese/README.md)] * [2024/07] [DeepSpeed Universal Checkpointing: Efficient and Flexible Checkpointing for Large Scale Distributed Training](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-ucp/README.md) [[中文](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-ucp/chinese/README.md)] [[日本語](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-ucp/japanese/README.md)] * [2024/03] [DeepSpeed-FP6:The power of FP6-Centric Serving for Large Language Models](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-fp6/03-05-2024) [[English](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-fp6/03-05-2024/README.md)] [[中文](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-fp6/03-05-2024/README-Chinese.md)] diff --git a/blogs/windows/08-2024/README.md b/blogs/windows/08-2024/README.md index 335ef473504c..5148fa80d122 100644 --- a/blogs/windows/08-2024/README.md +++ b/blogs/windows/08-2024/README.md @@ -69,8 +69,8 @@ The scripts and codes for the BERT pretraining example are available in the foll # Fine Tuning Example -We demonstrate fine tuning capability by using the supervised fine tuning (SFT) step of DeepSpeed-Chat application. We conduct SFT of the HuggingFace facebook/opt-125m model while enabling LoRA and CPU offloading memory optimizations. The command line for running this example is as follows: -deepspeed training\step1_supervised_finetuning\main.py --model_name_or_path facebook/opt-125m --gradient_accumulation_steps 8 --lora_dim 128 --only_optimize_lora --print_loss --zero_stage 2 --deepspeed --dtype bf16 --offload --output_dir output +We demonstrate fine tuning capability by using the supervised fine tuning (SFT) step of DeepSpeed-Chat application. We conduct SFT of the HuggingFace facebook/opt-125m model while enabling LoRA and CPU offloading memory optimizations. The command line for running this example is as follows:\ +`deepspeed training\step1_supervised_finetuning\main.py --model_name_or_path facebook/opt-125m --gradient_accumulation_steps 8 --lora_dim 128 --only_optimize_lora --print_loss --zero_stage 2 --deepspeed --dtype bf16 --offload --output_dir output`.\ The output should look like this:
@@ -82,8 +82,8 @@ The output should look like this:
# Inference Example -We demonstrate inference capability by using ZeRO-Inference for token generation. ZeRO-Inference reduces hardware cost of inferencing by offloading to CPU or NVMe memories. We use the example scripts here to run token generation using Llama-2-7B model from HuggingFace. We offload the model weights to CPU memory since the 4GB VRAM is insufficient to host both the model and the generation working set. We use the following command line to generate 32 tokens from a prompt of 8 tokens: -deepspeed run_model.py --model meta-llama/Llama-2-7b-hf --batch-size 64 --prompt-len 8 --gen-len 32 --cpu-offload +We demonstrate inference capability by using ZeRO-Inference for token generation. ZeRO-Inference reduces hardware cost of inferencing by offloading to CPU or NVMe memories. We use the example scripts here to run token generation using Llama-2-7B model from HuggingFace. We offload the model weights to CPU memory since the 4GB VRAM is insufficient to host both the model and the generation working set. We use the following command line to generate 32 tokens from a prompt of 8 tokens:\ +`deepspeed run_model.py --model meta-llama/Llama-2-7b-hf --batch-size 64 --prompt-len 8 --gen-len 32 --cpu-offload`.\ The output will look something like this:
diff --git a/blogs/windows/08-2024/chinese/README.md b/blogs/windows/08-2024/chinese/README.md new file mode 100644 index 000000000000..5d62705df3ae --- /dev/null +++ b/blogs/windows/08-2024/chinese/README.md @@ -0,0 +1,103 @@ +
+ +# 在Windows系统上使用DeepSpeed + +
+ +# 简介 + +DeepSpeed是一个广受欢迎的开源深度学习优化库,它使得分布式训练和推理变得简单、高效且有效。凭借其众多复杂的优化技术(如ZeRO、3D并行、MoE等),DeepSpeed已被成功应用于包括Phi-3、Megatron-Turing-530B、BLOOM-176B和Arctic在内的多种前沿模型的训练。然而,由于缺乏对主流操作系统微软 Windows的原生支持,许多AI开发者与用户无法充分利用DeepSpeed的创新。为此,我们致力于让DeepSpeed在Windows上实现原生全功能运行,并保持与Linux相同的易用性。 + +在这篇博客中,我们很高兴地宣布我们开发工作中的一些早期成果:DeepSpeed 现在可以在 Windows 上安装并原生支持单 GPU 的训练、微调和推理。重要的是,安装和使用体验与 Linux 上完全相同。此外,微调和推理工作展示了 DeepSpeed 的三个关键特性:HuggingFace Transformers 的集成、LoRA 的支持和 CPU offload。DeepSpeed 在 Windows 上的支持从 DeepSpeed 0.14.5 开始。接下来,我们将通过一些例子展示这些成就。 + +# 测试环境 + +我们在一台运行 Windows 11 23H2 版本号 22631.3880 的 Surface Laptop Studio 2 上进行了测试。该笔记本配备了一块 4GB 显存的 NVIDIA RTX A2000 GPU。我们使用了 Pytorch 2.3.0 和 HuggingFace Transformers 4.41.2。测试所用的脚本来自 [DeepSpeedExamples](https://github.com/deepspeedai/DeepSpeedExamples) 代码仓库,因此在运行以下任何示例前,你需要克隆该仓库。 + +# 安装指南 +DeepSpeed可以通过两种方式在Windows系统上安装。较为简单的方式是使用pip包管理器安装,另一种方法是从源代码安装。两种安装方式的前提条件都是系统已经安装了Python 3.x 和支持CUDA的Pytorch. + +## 通过pip安装 +要安装 DeepSpeed,只需运行:`pip install deepspeed`。它将安装最新版本的 DeepSpeed(目前为 0.14.5)。与 Linux 版本不同的是,Windows 版本已经预先编译了内部的自定义算子,因此不需要安装 CUDA 或 C++ 编译器。 + +
+ +
+ +
+ 通过pip在Windows上安装Deepspeed. +
+ + +## 通过源代码安装 +克隆DeepSpeed代码仓库后,运行build_win.bat脚本进行编译安装。 + + +## 验证安装 +无论选择哪种安装方式,你都可以通过运行 ds_report 来检查安装是否成功。输出应该如下所示: + + +
+ +
+ +
+ ds_report的输出结果,用于验证安装是否成功. +
+ +# 预训练(Pretraining) +我们使用图像分类模型 CIFAR10 和语言模型 BERT 来演示在 Windows 上使用 DeepSpeed 进行预训练。 + +## CIFAR10模型预训练 +用于 CIFAR10 预训练的脚本和代码可以在以下路径找到:`DeepSpeedExamples\training\cifar`。你可以运行以下命令启动 CIFAR10 预训练实验:`deepspeed cifar10_deepspeed.py --deepspeed`。最终输出应类似于: +
+ +
+ +
+ 在 Windows 上使用 Deepspeed 进行 CIFAR10 模型预训练 +
+ +## BERT模型预训练 +用于 BERT 预训练的脚本和代码可以在以下路径找到:`DeepSpeedExamples\training\HelloDeepSpeed`。你可以使用以下命令启动 BERT 预训练实验:`deepspeed train_bert_ds.py --checkpoint_dir experiment_deepspeed`。最终输出应如下所示: + +
+ +
+ +
+ 在 Windows 上使用 Deepspeed 进行 BERT 模型预训练 +
+ +# 微调(Fine Tuning) +我们使用 DeepSpeed-Chat 应用的监督微调(SFT)步骤来演示微调能力。我们对 HuggingFace 的 facebook/opt-125m 模型进行监督微调,同时启用 LoRA 和 CPU offload进行内存优化。运行命令行如下:\ +`deepspeed training\step1_supervised_finetuning\main.py --model_name_or_path facebook/opt-125m --gradient_accumulation_steps 8 --lora_dim 128 --only_optimize_lora --print_loss --zero_stage 2 --deepspeed --dtype bf16 --offload --output_dir output`\ +输出应如下所示: + +
+ +
+ +
+ 在 Windows 上使用 DeepSpeed 对 facebook/opt-125m 监督微调 +
+ +# 推理 +我们使用 ZeRO-Inference 的token生成来演示推理能力。ZeRO-Inference 通过转移存储到 CPU 内存或 NVMe 硬盘内存来减少推理的硬件成本。我们使用以下脚本运行 HuggingFace 的 Llama-2-7B 模型来进行 token 生成。由于 4GB 显存无法容纳模型和生成所需的内存,我们将模型权重转移到 CPU 内存。我们使用以下命令行从 8个token的提示词中生成 32 个token:\ +`deepspeed run_model.py --model meta-llama/Llama-2-7b-hf --batch-size 64 --prompt-len 8 --gen-len 32 --cpu-offload`\ +输出应类似于: + +
+ +
+ +
+ 在 Windows 上使用 ZeRO-Inference 进行 LLAMA2-7B 模型的token生成 +
+ +# 总结 + +使得DeepSpeed,一个流行的深度学习框架,能够原生运行在最流行的操作系统 Windows 上,是让每个人和组织从当前的人工智能革命中受益的重要一步。在这篇博客中,我们分享了我们为实现这一目标所取得的早期成果。尽管 DeepSpeed 对 Windows 的支持仍在继续开发中,我们希望上述结果已经能够对我们的用户有实用价值,并且鼓舞他们。我们接下来的工作计划涵盖多GPU支持、权重量化以及性能优化。 + +# 致谢 +这给项目的完成得益于现任和前任 DeepSpeed 成员的大力合作,包括 Costin Eseanu、Logan Adams、Elton Zheng、Reza Yazdani Aminabadi、Martin Cai 和 Olatunji Ruwase。我们还要感谢那些及时提出此项需求、提供关键的临时解决方法、部分解决方案和建设性反馈的 DeepSpeed 用户,最重要的是,他们始终与我们同行. From 4996cae53b5c3374736f48b8909b06e3b50f872b Mon Sep 17 00:00:00 2001 From: Joe Mayer <114769929+jomayeri@users.noreply.github.com> Date: Fri, 14 Feb 2025 09:17:08 -0800 Subject: [PATCH 06/69] AIO on ROCM (#7023) Adding compile support for AIO library on AMD GPUs. --------- Co-authored-by: Olatunji Ruwase Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- op_builder/async_io.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/op_builder/async_io.py b/op_builder/async_io.py index 0f9e34106487..f29f88531a98 100644 --- a/op_builder/async_io.py +++ b/op_builder/async_io.py @@ -65,8 +65,11 @@ def extra_ldflags(self): import torch.utils.cpp_extension CUDA_HOME = torch.utils.cpp_extension.CUDA_HOME - CUDA_LIB64 = os.path.join(CUDA_HOME, "lib64") - ldflags = [f'-L{CUDA_HOME}', f'-L{CUDA_LIB64}', '-laio', '-lcuda', '-lcudart'] + if CUDA_HOME is None: + ldflags = ['-laio'] # the ROCM case + else: + CUDA_LIB64 = os.path.join(CUDA_HOME, "lib64") + ldflags = [f'-L{CUDA_HOME}', f'-L{CUDA_LIB64}', '-laio', '-lcuda', '-lcudart'] return ldflags def check_for_libaio_pkg(self): From 52709fa20de8ae7d658c802bfa843191c454d08e Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 14 Feb 2025 14:07:49 -0800 Subject: [PATCH 07/69] Update setuptools min requirement Signed-off-by: Logan Adams --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3b11a224a008..867e26859657 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,9 @@ [build-system] requires = [ - "setuptools", + "setuptools>=64", "wheel", "ninja", "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -build-backend = "setuptools.build_meta:__legacy__" +build-backend = "setuptools.build_meta" From 9eb0618b7ae5ecc0f18017e2837a0152d131b05f Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 14 Feb 2025 14:21:39 -0800 Subject: [PATCH 08/69] Switch build to legacy Signed-off-by: Logan Adams --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 867e26859657..5e5f27c52d98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,4 +6,4 @@ requires = [ "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -build-backend = "setuptools.build_meta" +build-backend = "setuptools.build_meta:__legacy__" From 36ce37371b428111bc3e04e1b6a3be3cffd40940 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 14 Feb 2025 14:32:30 -0800 Subject: [PATCH 09/69] Add no-build isolation Signed-off-by: Logan Adams --- .github/workflows/nv-pre-compile-ops.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nv-pre-compile-ops.yml b/.github/workflows/nv-pre-compile-ops.yml index fc810bc190d0..9bab68d009cb 100644 --- a/.github/workflows/nv-pre-compile-ops.yml +++ b/.github/workflows/nv-pre-compile-ops.yml @@ -36,7 +36,7 @@ jobs: #python -c "import torch; print('CUDA available:', torch.cuda.is_available())" - name: Compile DeepSpeed Ops run: | - DS_ACCELERATOR=cuda DS_ENABLE_NINJA=1 TORCH_CUDA_ARCH_LIST="7.0;7.5;8.0" DS_BUILD_OPS=1 DS_BUILD_SPARSE_ATTN=0 DS_BUILD_FP_QUANTIZER=0 DS_BUILD_CUTLASS_OPS=0 DS_BUILD_GDS=0 DS_BUILD_RAGGED_DEVICE_OPS=0 DS_BUILD_EVOFORMER_ATTN=0 pip3 install . + DS_ACCELERATOR=cuda DS_ENABLE_NINJA=1 TORCH_CUDA_ARCH_LIST="7.0;7.5;8.0" DS_BUILD_OPS=1 DS_BUILD_SPARSE_ATTN=0 DS_BUILD_FP_QUANTIZER=0 DS_BUILD_CUTLASS_OPS=0 DS_BUILD_GDS=0 DS_BUILD_RAGGED_DEVICE_OPS=0 DS_BUILD_EVOFORMER_ATTN=0 pip3 install . --no-build-isolation - name: DS Report run: | ds_report From a0ff11a4ad0872120a596ee3f051f7df1d765d9e Mon Sep 17 00:00:00 2001 From: Olatunji Ruwase Date: Tue, 18 Feb 2025 14:16:17 -0500 Subject: [PATCH 10/69] Control trace cache warnings (#7039) Make trace cache warnings configurable, and disabled by default. Fix #6985, #4081, #5033, #5006, #5662 --------- Signed-off-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/runtime/engine.py | 5 +++ deepspeed/runtime/zero/config.py | 6 ++++ deepspeed/runtime/zero/parameter_offload.py | 6 +++- .../zero/partitioned_param_coordinator.py | 32 +++++++++++-------- deepspeed/runtime/zero/stage3.py | 9 ++++-- docs/_pages/config-json.md | 17 +++++++--- 6 files changed, 54 insertions(+), 21 deletions(-) diff --git a/deepspeed/runtime/engine.py b/deepspeed/runtime/engine.py index 986b68dc1bb1..8575df9d1d5d 100755 --- a/deepspeed/runtime/engine.py +++ b/deepspeed/runtime/engine.py @@ -983,6 +983,9 @@ def zero_quantized_gradients(self): def zeropp_loco_param(self): return self._config.zero_config.zeropp_loco_param + def zero_log_trace_cache_warnings(self): + return self._config.zero_config.log_trace_cache_warnings + def dump_state(self): return self._config.dump_state @@ -1692,6 +1695,7 @@ def _configure_zero_optimizer(self, optimizer): zero_quantized_weights=self.zero_quantized_weights(), zero_quantized_nontrainable_weights=self.zero_quantized_nontrainable_weights(), zero_module_granularity_threshold=self.zero_module_granularity_threshold(), + log_trace_cache_warnings=self.zero_log_trace_cache_warnings(), ) else: log_dist( @@ -1740,6 +1744,7 @@ def _configure_zero_optimizer(self, optimizer): zero_quantized_nontrainable_weights=self.zero_quantized_nontrainable_weights(), zero_module_granularity_threshold=self.zero_module_granularity_threshold(), zeropp_loco_param=self.zeropp_loco_param(), + log_trace_cache_warnings=self.zero_log_trace_cache_warnings(), ) else: diff --git a/deepspeed/runtime/zero/config.py b/deepspeed/runtime/zero/config.py index cbc6a15c2057..19ee9b51702e 100644 --- a/deepspeed/runtime/zero/config.py +++ b/deepspeed/runtime/zero/config.py @@ -45,6 +45,7 @@ "memory_efficient_linear": [true|false], "override_module_apply": [true|false], "zeropp_loco_param": {...}, + "log_trace_cache_warnings" : [true|false], } } """ @@ -340,6 +341,11 @@ class DeepSpeedZeroConfig(DeepSpeedConfigModel): Override nn.Module apply function, for Stage 3. """ + log_trace_cache_warnings: bool = False + """ + Whether to log warnings from trace cache, such as invalidation events. + """ + # Validators @model_validator(mode="after") def overlap_comm_valid(self): diff --git a/deepspeed/runtime/zero/parameter_offload.py b/deepspeed/runtime/zero/parameter_offload.py index b5a75fce32fe..09de21502c27 100644 --- a/deepspeed/runtime/zero/parameter_offload.py +++ b/deepspeed/runtime/zero/parameter_offload.py @@ -103,6 +103,7 @@ def __init__( zero_quantized_weights=False, zero_quantized_nontrainable_weights=False, zero_module_granularity_threshold=0, + log_trace_cache_warnings=False, ): see_memory_usage("DeepSpeedZeRoOffload initialize [begin]", force=True) @@ -118,6 +119,7 @@ def __init__( self.zero_param_parallel_group = zero_param_parallel_group self.zero_quantized_weights = zero_quantized_weights self.zero_quantized_nontrainable_weights = zero_quantized_nontrainable_weights + self.log_trace_cache_warnings = log_trace_cache_warnings if offload_param_config is not None and offload_param_config.device != OffloadDeviceEnum.none: self.offload_device = offload_param_config.device @@ -165,7 +167,9 @@ def __init__( timers=self.timers, zero_quantized_weights=self.zero_quantized_weights, zero_quantized_nontrainable_weights=self.zero_quantized_nontrainable_weights, - fast_sharding_for_leaf_module=self.fast_sharding_for_leaf_module) + fast_sharding_for_leaf_module=self.fast_sharding_for_leaf_module, + log_trace_cache_warnings=self.log_trace_cache_warnings, + ) self.forward_hooks = [] self.backward_hooks = [] diff --git a/deepspeed/runtime/zero/partitioned_param_coordinator.py b/deepspeed/runtime/zero/partitioned_param_coordinator.py index 415afd8d7026..d5b5db859e31 100644 --- a/deepspeed/runtime/zero/partitioned_param_coordinator.py +++ b/deepspeed/runtime/zero/partitioned_param_coordinator.py @@ -76,17 +76,20 @@ class __ParamInTrace: param: Parameter step_id_last_used_at: int - def __init__(self, - prefetch_bucket_sz: int, - max_reuse_distance_in_numel: int, - max_available_parameters_in_numel: int, - allgather_stream: get_accelerator().Stream, - inflight_param_registry: InflightParamRegistry, - prefetch_nvme: bool = False, - timers=None, - zero_quantized_weights=False, - zero_quantized_nontrainable_weights=False, - fast_sharding_for_leaf_module=False) -> None: + def __init__( + self, + prefetch_bucket_sz: int, + max_reuse_distance_in_numel: int, + max_available_parameters_in_numel: int, + allgather_stream: get_accelerator().Stream, + inflight_param_registry: InflightParamRegistry, + prefetch_nvme: bool = False, + timers=None, + zero_quantized_weights=False, + zero_quantized_nontrainable_weights=False, + fast_sharding_for_leaf_module=False, + log_trace_cache_warnings=False, + ) -> None: # mapping of param -> handle for each param that is currently in flight self.__inflight_param_registry = inflight_param_registry # keeps track of the number of submodules invoked so far. @@ -129,6 +132,9 @@ def __init__(self, self.__max_ongoing_fetch_events: int = 2 self.__profiler = PartitionedParameterProfiler(timers if ENABLE_PROFILER else None) + # Whether to log trace cache warnings, e.g. invalidation events + self.__log_trace_cache_warnings = log_trace_cache_warnings + # whether to enable fast fetch for the z3 leaf module. # this will improve fetch speed but will not break down leaf module parameters to alleviate memory pressure. self.fast_sharding_for_leaf_module = fast_sharding_for_leaf_module @@ -177,7 +183,7 @@ def trace_prologue(self, sub_module: Module) -> None: print_rank_0( f"Invalidate trace cache @ step {self.__step_id} and module {sub_module.ds_id}: " f"cache has only {len(self.__submodule_order)} modules", - force=True) + force=self.__log_trace_cache_warnings) self._invalidate_trace() return @@ -186,7 +192,7 @@ def trace_prologue(self, sub_module: Module) -> None: print_rank_0( f"Invalidate trace cache @ step {self.__step_id}: " f"expected module {expected_module_id}, but got module {sub_module.ds_id}", - force=True) + force=self.__log_trace_cache_warnings) self._invalidate_trace() @compiler.disable diff --git a/deepspeed/runtime/zero/stage3.py b/deepspeed/runtime/zero/stage3.py index 3627d4675a71..9cc58fdbac01 100644 --- a/deepspeed/runtime/zero/stage3.py +++ b/deepspeed/runtime/zero/stage3.py @@ -160,6 +160,7 @@ def __init__( zero_quantized_nontrainable_weights=False, zero_module_granularity_threshold=0, zeropp_loco_param=None, + log_trace_cache_warnings=False, ): see_memory_usage("Stage 3 initialize beginning", force=True) @@ -231,7 +232,9 @@ def __init__( zero_param_parallel_group=zero_param_parallel_group, zero_quantized_weights=zero_quantized_weights, zero_quantized_nontrainable_weights=zero_quantized_nontrainable_weights, - zero_module_granularity_threshold=zero_module_granularity_threshold) + zero_module_granularity_threshold=zero_module_granularity_threshold, + log_trace_cache_warnings=log_trace_cache_warnings, + ) self.persistent_parameters = self.parameter_offload.persistent_parameters self._configure_offloading(offload_optimizer_config, offload_param_config) @@ -465,6 +468,7 @@ def initialize_ds_offload( zero_quantized_weights, zero_quantized_nontrainable_weights, zero_module_granularity_threshold, + log_trace_cache_warnings, ): return DeepSpeedZeRoOffload(module=module, timers=timers, @@ -481,7 +485,8 @@ def initialize_ds_offload( zero_param_parallel_group=zero_param_parallel_group, zero_quantized_weights=zero_quantized_weights, zero_quantized_nontrainable_weights=zero_quantized_nontrainable_weights, - zero_module_granularity_threshold=zero_module_granularity_threshold) + zero_module_granularity_threshold=zero_module_granularity_threshold, + log_trace_cache_warnings=log_trace_cache_warnings) def _get_trainable_parameter_groups(self): param_groups = [] diff --git a/docs/_pages/config-json.md b/docs/_pages/config-json.md index 51e3bbd6eaaa..43de95b5210b 100755 --- a/docs/_pages/config-json.md +++ b/docs/_pages/config-json.md @@ -371,11 +371,12 @@ Enabling and configuring ZeRO memory optimizations "sub_group_size" : 1e12, "elastic_checkpoint" : [true|false], "stage3_gather_16bit_weights_on_model_save": [true|false], - "ignore_unused_parameters": [true|false] - "round_robin_gradients": [true|false] - "zero_hpz_partition_size": 1 - "zero_quantized_weights": [true|false] - "zero_quantized_gradients": [true|false] + "ignore_unused_parameters": [true|false], + "round_robin_gradients": [true|false], + "zero_hpz_partition_size": 1, + "zero_quantized_weights": [true|false], + "zero_quantized_gradients": [true|false], + "log_trace_cache_warnings": [true|false], } ``` @@ -512,6 +513,12 @@ Enabling and configuring ZeRO memory optimizations | ----------------------------------------------------------------------------------------------------------------------------------- | ------- | |Boolean indicating whether to enable communication efficient quantized gradients of ZeRO++. | `False` | +**log_trace_cache_warnings**: [boolean] + +| Description | Default | +| ------------------------------------------------------------------------------------------------------------------- | ------- | +| Log warnings from trace cache optimization of parameter sharding, such as cache invalidation events. | `False` | + ***cpu_offload***: [boolean] **Deprecated:** **cpu_offload** is deprecated and will be removed in future, please use `offload_optimizer` instead. From c574b454b3bc52505744029d034b6a0c37aff40d Mon Sep 17 00:00:00 2001 From: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Date: Tue, 18 Feb 2025 12:13:58 -0800 Subject: [PATCH 11/69] Update CUDA compute capability to support Blackwell (#7047) Update CUDA compute capability for cross compile according to wiki page. https://en.wikipedia.org/wiki/CUDA#GPUs_supported --------- Signed-off-by: Hongwei Signed-off-by: Logan Adams --- op_builder/builder.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/op_builder/builder.py b/op_builder/builder.py index ac850775cb11..41c0a154186f 100644 --- a/op_builder/builder.py +++ b/op_builder/builder.py @@ -61,13 +61,20 @@ def installed_cuda_version(name=""): def get_default_compute_capabilities(): compute_caps = DEFAULT_COMPUTE_CAPABILITIES + # Update compute capability according to: https://en.wikipedia.org/wiki/CUDA#GPUs_supported import torch.utils.cpp_extension - if torch.utils.cpp_extension.CUDA_HOME is not None and installed_cuda_version()[0] >= 11: - if installed_cuda_version()[0] == 11 and installed_cuda_version()[1] == 0: - # Special treatment of CUDA 11.0 because compute_86 is not supported. - compute_caps += ";8.0" - else: + if torch.utils.cpp_extension.CUDA_HOME is not None: + if installed_cuda_version()[0] == 11: + if installed_cuda_version()[1] >= 0: + compute_caps += ";8.0" + if installed_cuda_version()[1] >= 1: + compute_caps += ";8.6" + if installed_cuda_version()[1] >= 8: + compute_caps += ";9.0" + elif installed_cuda_version()[0] == 12: compute_caps += ";8.0;8.6;9.0" + if installed_cuda_version()[1] >= 8: + compute_caps += ";10.0;12.0" return compute_caps From 5326873fb36e58aa6a133d31aa90ed454ee405f5 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Tue, 18 Feb 2025 16:51:34 -0800 Subject: [PATCH 12/69] Update setup.py handling of ROCm cupy (#7051) Signed-off-by: Logan Adams --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 20afc651a142..6dc9afb8fbc2 100755 --- a/setup.py +++ b/setup.py @@ -102,8 +102,8 @@ def get_env_if_set(key, default: typing.Any = ""): cupy = None if is_rocm_pytorch: rocm_major, rocm_minor = rocm_version - # XXX cupy support for rocm 5 is not available yet. - if rocm_major <= 4: + # cupy support for rocm>5.0 is not available yet. + if (rocm_major == 5 and rocm_minor == 0) or rocm_major <= 4: cupy = f"cupy-rocm-{rocm_major}-{rocm_minor}" else: cuda_major_ver, cuda_minor_ver = installed_cuda_version() From c22be1ab62f9a6c2d8ba07caf1cfd51d656d1fb6 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Wed, 19 Feb 2025 07:48:41 -0800 Subject: [PATCH 13/69] nv-ds-chat breaks with latest transformers (#7052) Signed-off-by: Logan Adams --- .github/workflows/nv-ds-chat.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nv-ds-chat.yml b/.github/workflows/nv-ds-chat.yml index 10fcb9911899..faef9f180c77 100644 --- a/.github/workflows/nv-ds-chat.yml +++ b/.github/workflows/nv-ds-chat.yml @@ -43,7 +43,7 @@ jobs: - name: Install deepspeed run: | - pip install transformers + pip install transformers==4.48.3 pip install .[dev] ds_report From 2873a11ff6103c249c841da837347f6fc0679675 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Wed, 19 Feb 2025 09:55:56 -0800 Subject: [PATCH 14/69] Test with non legacy backend Signed-off-by: Logan Adams --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5e5f27c52d98..145c4ab3e069 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,4 +6,5 @@ requires = [ "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -build-backend = "setuptools.build_meta:__legacy__" +#build-backend = "setuptools.build_meta:__legacy__" +build-backend = "setuptools.build_meta" From 4e88463440dbfc205d5e5b5c638bcfb31a2835c7 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Wed, 19 Feb 2025 10:05:33 -0800 Subject: [PATCH 15/69] Need legacy backend to execute setup.py, though it executes it differently, so we aren't seeing cupy installed. Signed-off-by: Logan Adams --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 145c4ab3e069..867e26859657 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,5 +6,4 @@ requires = [ "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -#build-backend = "setuptools.build_meta:__legacy__" build-backend = "setuptools.build_meta" From 6d837ca1bf9af23139e655dd5c975a5c3fbdc05c Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Wed, 19 Feb 2025 10:17:15 -0800 Subject: [PATCH 16/69] Update to actually use legacy backend Signed-off-by: Logan Adams --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 867e26859657..5e5f27c52d98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,4 +6,4 @@ requires = [ "typing-extensions>=4.10.0", ] # Use legacy backend to import local packages in setup.py -build-backend = "setuptools.build_meta" +build-backend = "setuptools.build_meta:__legacy__" From 5b2f71357beaf16c7337bb15060e4209ae4f049a Mon Sep 17 00:00:00 2001 From: Olatunji Ruwase Date: Wed, 19 Feb 2025 16:38:54 -0500 Subject: [PATCH 17/69] Rename aio_thread_count to intra_op_parallelism (#7056) Propagate API change. Signed-off-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/runtime/swap_tensor/aio_config.py | 20 ++++++++++++------- deepspeed/runtime/swap_tensor/constants.py | 6 +++--- .../runtime/swap_tensor/optimizer_utils.py | 2 +- .../partitioned_optimizer_swapper.py | 8 +++++--- .../swap_tensor/partitioned_param_swapper.py | 20 +++++++++++-------- .../pipelined_optimizer_swapper.py | 18 ++++++++++------- 6 files changed, 45 insertions(+), 29 deletions(-) diff --git a/deepspeed/runtime/swap_tensor/aio_config.py b/deepspeed/runtime/swap_tensor/aio_config.py index 46c3f2a0c954..be6c7d93c86a 100644 --- a/deepspeed/runtime/swap_tensor/aio_config.py +++ b/deepspeed/runtime/swap_tensor/aio_config.py @@ -10,7 +10,7 @@ AIO_DEFAULT_DICT = { AIO_BLOCK_SIZE: AIO_BLOCK_SIZE_DEFAULT, AIO_QUEUE_DEPTH: AIO_QUEUE_DEPTH_DEFAULT, - AIO_THREAD_COUNT: AIO_THREAD_COUNT_DEFAULT, + AIO_INTRA_OP_PARALLELISM: AIO_INTRA_OP_PARALLELISM_DEFAULT, AIO_SINGLE_SUBMIT: AIO_SINGLE_SUBMIT_DEFAULT, AIO_OVERLAP_EVENTS: AIO_OVERLAP_EVENTS_DEFAULT, AIO_USE_GDS: AIO_USE_GDS_DEFAULT @@ -21,12 +21,18 @@ def get_aio_config(param_dict): if AIO in param_dict.keys() and param_dict[AIO] is not None: aio_dict = param_dict[AIO] aio_config = { - AIO_BLOCK_SIZE: get_scalar_param(aio_dict, AIO_BLOCK_SIZE, AIO_BLOCK_SIZE_DEFAULT), - AIO_QUEUE_DEPTH: get_scalar_param(aio_dict, AIO_QUEUE_DEPTH, AIO_QUEUE_DEPTH_DEFAULT), - AIO_THREAD_COUNT: get_scalar_param(aio_dict, AIO_THREAD_COUNT, AIO_THREAD_COUNT_DEFAULT), - AIO_SINGLE_SUBMIT: get_scalar_param(aio_dict, AIO_SINGLE_SUBMIT, AIO_SINGLE_SUBMIT_DEFAULT), - AIO_OVERLAP_EVENTS: get_scalar_param(aio_dict, AIO_OVERLAP_EVENTS, AIO_OVERLAP_EVENTS_DEFAULT), - AIO_USE_GDS: get_scalar_param(aio_dict, AIO_USE_GDS, AIO_USE_GDS_DEFAULT) + AIO_BLOCK_SIZE: + get_scalar_param(aio_dict, AIO_BLOCK_SIZE, AIO_BLOCK_SIZE_DEFAULT), + AIO_QUEUE_DEPTH: + get_scalar_param(aio_dict, AIO_QUEUE_DEPTH, AIO_QUEUE_DEPTH_DEFAULT), + AIO_INTRA_OP_PARALLELISM: + get_scalar_param(aio_dict, AIO_INTRA_OP_PARALLELISM, AIO_INTRA_OP_PARALLELISM_DEFAULT), + AIO_SINGLE_SUBMIT: + get_scalar_param(aio_dict, AIO_SINGLE_SUBMIT, AIO_SINGLE_SUBMIT_DEFAULT), + AIO_OVERLAP_EVENTS: + get_scalar_param(aio_dict, AIO_OVERLAP_EVENTS, AIO_OVERLAP_EVENTS_DEFAULT), + AIO_USE_GDS: + get_scalar_param(aio_dict, AIO_USE_GDS, AIO_USE_GDS_DEFAULT) } if aio_config[AIO_USE_GDS]: diff --git a/deepspeed/runtime/swap_tensor/constants.py b/deepspeed/runtime/swap_tensor/constants.py index cee20ac7b78c..c1207749eac6 100644 --- a/deepspeed/runtime/swap_tensor/constants.py +++ b/deepspeed/runtime/swap_tensor/constants.py @@ -9,7 +9,7 @@ "aio": { "block_size": 1048576, "queue_depth": 8, - "thread_count": 1, + "intra_op_parallelism": 1, "single_submit": false, "overlap_events": true, "use_gds": false @@ -20,8 +20,8 @@ AIO_BLOCK_SIZE_DEFAULT = 1048576 AIO_QUEUE_DEPTH = "queue_depth" AIO_QUEUE_DEPTH_DEFAULT = 8 -AIO_THREAD_COUNT = "thread_count" -AIO_THREAD_COUNT_DEFAULT = 1 +AIO_INTRA_OP_PARALLELISM = "intra_op_parallelism" +AIO_INTRA_OP_PARALLELISM_DEFAULT = 1 AIO_SINGLE_SUBMIT = "single_submit" AIO_SINGLE_SUBMIT_DEFAULT = False AIO_OVERLAP_EVENTS = "overlap_events" diff --git a/deepspeed/runtime/swap_tensor/optimizer_utils.py b/deepspeed/runtime/swap_tensor/optimizer_utils.py index 5d837e386a95..d7b0ea9634b2 100644 --- a/deepspeed/runtime/swap_tensor/optimizer_utils.py +++ b/deepspeed/runtime/swap_tensor/optimizer_utils.py @@ -130,7 +130,7 @@ def __init__(self, swap_config, aio_config, base_folder, optimizer, largest_nume # Read/Write alignment for each thread during Intra-request parallelism self.min_aio_bytes = max(MIN_AIO_BYTES, aio_config[AIO_BLOCK_SIZE]) - self.aligned_bytes = AIO_ALIGNED_BYTES * aio_config[AIO_THREAD_COUNT] + self.aligned_bytes = AIO_ALIGNED_BYTES * aio_config[AIO_INTRA_OP_PARALLELISM] self.numel_alignment = self.aligned_bytes // self.swap_element_size # Swap buffer management diff --git a/deepspeed/runtime/swap_tensor/partitioned_optimizer_swapper.py b/deepspeed/runtime/swap_tensor/partitioned_optimizer_swapper.py index e53a280befe4..8b6cbe8fbb51 100644 --- a/deepspeed/runtime/swap_tensor/partitioned_optimizer_swapper.py +++ b/deepspeed/runtime/swap_tensor/partitioned_optimizer_swapper.py @@ -33,9 +33,11 @@ def __init__(self, swap_config, aio_config, base_folder, optimizer, largest_nume largest_numel, device, dtype, timers) aio_op = AsyncIOBuilder().load() - self.aio_handle = aio_op.aio_handle(aio_config[AIO_BLOCK_SIZE], aio_config[AIO_QUEUE_DEPTH], - aio_config[AIO_SINGLE_SUBMIT], aio_config[AIO_OVERLAP_EVENTS], - aio_config[AIO_THREAD_COUNT]) + self.aio_handle = aio_op.aio_handle(block_size=aio_config[AIO_BLOCK_SIZE], + queue_depth=aio_config[AIO_QUEUE_DEPTH], + single_submit=aio_config[AIO_SINGLE_SUBMIT], + overlap_events=aio_config[AIO_OVERLAP_EVENTS], + intra_op_parallelism=aio_config[AIO_INTRA_OP_PARALLELISM]) # Overlap swapping out self.gradient_swapper = AsyncTensorSwapper(aio_handle=self.aio_handle, diff --git a/deepspeed/runtime/swap_tensor/partitioned_param_swapper.py b/deepspeed/runtime/swap_tensor/partitioned_param_swapper.py index 26fbf6164d54..f80fe1501c00 100644 --- a/deepspeed/runtime/swap_tensor/partitioned_param_swapper.py +++ b/deepspeed/runtime/swap_tensor/partitioned_param_swapper.py @@ -98,7 +98,7 @@ def _configure_aio(self, ds_config): # Read/Write alignment for each thread during Intra-request parallelism self.min_aio_bytes = max(MIN_AIO_BYTES, self.aio_config[AIO_BLOCK_SIZE]) - self.aligned_bytes = AIO_ALIGNED_BYTES * self.aio_config[AIO_THREAD_COUNT] + self.aligned_bytes = AIO_ALIGNED_BYTES * self.aio_config[AIO_INTRA_OP_PARALLELISM] self.numel_alignment = self.aligned_bytes // self.swap_element_size self.elements_per_buffer = self.swap_config.buffer_size @@ -108,13 +108,17 @@ def _configure_aio(self, ds_config): self.available_buffer_ids = [i for i in range(self.param_buffer_count)] self.reserved_buffer_ids = [] - self.aio_read_handle = self.aio_handle(self.aio_config[AIO_BLOCK_SIZE], self.aio_config[AIO_QUEUE_DEPTH], - self.aio_config[AIO_SINGLE_SUBMIT], self.aio_config[AIO_OVERLAP_EVENTS], - self.aio_config[AIO_THREAD_COUNT]) - - self.aio_write_handle = self.aio_handle(self.aio_config[AIO_BLOCK_SIZE], self.aio_config[AIO_QUEUE_DEPTH], - self.aio_config[AIO_SINGLE_SUBMIT], - self.aio_config[AIO_OVERLAP_EVENTS], self.aio_config[AIO_THREAD_COUNT]) + self.aio_read_handle = self.aio_handle(block_size=self.aio_config[AIO_BLOCK_SIZE], + queue_depth=self.aio_config[AIO_QUEUE_DEPTH], + single_submit=self.aio_config[AIO_SINGLE_SUBMIT], + overlap_events=self.aio_config[AIO_OVERLAP_EVENTS], + intra_op_parallelism=self.aio_config[AIO_INTRA_OP_PARALLELISM]) + + self.aio_write_handle = self.aio_handle(block_size=self.aio_config[AIO_BLOCK_SIZE], + queue_depth=self.aio_config[AIO_QUEUE_DEPTH], + single_submit=self.aio_config[AIO_SINGLE_SUBMIT], + overlap_events=self.aio_config[AIO_OVERLAP_EVENTS], + intra_op_parallelism=self.aio_config[AIO_INTRA_OP_PARALLELISM]) if self.use_gds: self.buffers = torch.empty(int(self.aligned_elements_per_buffer * self.param_buffer_count), diff --git a/deepspeed/runtime/swap_tensor/pipelined_optimizer_swapper.py b/deepspeed/runtime/swap_tensor/pipelined_optimizer_swapper.py index 66a372877d38..8f6d72e35f63 100644 --- a/deepspeed/runtime/swap_tensor/pipelined_optimizer_swapper.py +++ b/deepspeed/runtime/swap_tensor/pipelined_optimizer_swapper.py @@ -56,13 +56,17 @@ def __init__(self, swap_config, aio_config, base_folder, optimizer, largest_nume device, dtype, timers) aio_op = AsyncIOBuilder().load() - self.write_aio_handle = aio_op.aio_handle(aio_config[AIO_BLOCK_SIZE], aio_config[AIO_QUEUE_DEPTH], - aio_config[AIO_SINGLE_SUBMIT], aio_config[AIO_OVERLAP_EVENTS], - aio_config[AIO_THREAD_COUNT]) - - self.read_aio_handle = aio_op.aio_handle(aio_config[AIO_BLOCK_SIZE], aio_config[AIO_QUEUE_DEPTH], - aio_config[AIO_SINGLE_SUBMIT], aio_config[AIO_OVERLAP_EVENTS], - aio_config[AIO_THREAD_COUNT]) + self.write_aio_handle = aio_op.aio_handle(block_size=aio_config[AIO_BLOCK_SIZE], + queue_depth=aio_config[AIO_QUEUE_DEPTH], + single_submit=aio_config[AIO_SINGLE_SUBMIT], + overlap_events=aio_config[AIO_OVERLAP_EVENTS], + intra_op_parallelism=aio_config[AIO_INTRA_OP_PARALLELISM]) + + self.read_aio_handle = aio_op.aio_handle(block_size=aio_config[AIO_BLOCK_SIZE], + queue_depth=aio_config[AIO_QUEUE_DEPTH], + single_submit=aio_config[AIO_SINGLE_SUBMIT], + overlap_events=aio_config[AIO_OVERLAP_EVENTS], + intra_op_parallelism=aio_config[AIO_INTRA_OP_PARALLELISM]) # Overlap gradient swap out self.gradient_swapper = AsyncTensorSwapper(aio_handle=self.write_aio_handle, From c0f4235deda04b05a9481ec50f47d56050f1712e Mon Sep 17 00:00:00 2001 From: inkcherry Date: Thu, 20 Feb 2025 06:15:03 +0800 Subject: [PATCH 18/69] add autoTP training zero2 tests (#7049) - add zero2 test - minor fix with transformer version update & ds master merge. Signed-off-by: inkcherry Co-authored-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/module_inject/replace_module.py | 4 ++++ deepspeed/runtime/engine.py | 2 +- deepspeed/runtime/utils.py | 5 +++-- tests/unit/model_parallelism/test_autotp_training.py | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/deepspeed/module_inject/replace_module.py b/deepspeed/module_inject/replace_module.py index 9510f96b89c6..ed94a5021fee 100644 --- a/deepspeed/module_inject/replace_module.py +++ b/deepspeed/module_inject/replace_module.py @@ -335,6 +335,10 @@ def replace_fn(child, _policy, layer_id=0, prefix="", state_dict=None): return new_module def set_lm_head(module): + if is_autotp_training_mode(): + # we need to handle autoTP training mode separately. + return + embedding_weight = None for n, p in module.named_parameters(): if "word_embeddings." in n or "embed_tokens." in n or "wte." in n: diff --git a/deepspeed/runtime/engine.py b/deepspeed/runtime/engine.py index 8575df9d1d5d..4d932f8d5046 100755 --- a/deepspeed/runtime/engine.py +++ b/deepspeed/runtime/engine.py @@ -424,7 +424,7 @@ def _configure_tensor_parallel_states(self, model): # sanity check # currently, the compatibility between 'autotp' and 'zero > 1' has not been validated assert self.zero_optimization_stage( - ) <= 1, "Currently, the compatibility between 'autotp' and 'zero_stage > 1' has not been validated" + ) <= 2, "Currently, the compatibility between 'autotp' and 'zero_stage = 3' has not been validated" self.mpu = groups self.mpu._init_tp_mesh_device(tensor_model_parallel_size=self.autotp_size()) diff --git a/deepspeed/runtime/utils.py b/deepspeed/runtime/utils.py index 91fe7cbdcc96..9fd7a65a53ba 100755 --- a/deepspeed/runtime/utils.py +++ b/deepspeed/runtime/utils.py @@ -1134,9 +1134,10 @@ def compare_tensors_in_structures(inputs1: Union[List, Dict], inputs2: Union[Lis if inputs1.keys() != inputs2.keys(): return False for key in inputs1: - val1 = inputs1[key].to(get_accelerator().current_device()) - val2 = inputs2[key].to(get_accelerator().current_device()) + val1, val2 = inputs1[key], inputs2[key] if isinstance(val1, torch.Tensor) and isinstance(val2, torch.Tensor): + val1 = val1.to(get_accelerator().current_device()) + val2 = val2.to(get_accelerator().current_device()) if not torch.equal(val1, val2): return False elif val1 != val2: diff --git a/tests/unit/model_parallelism/test_autotp_training.py b/tests/unit/model_parallelism/test_autotp_training.py index 73e61b1d3398..7680b28ce6b5 100644 --- a/tests/unit/model_parallelism/test_autotp_training.py +++ b/tests/unit/model_parallelism/test_autotp_training.py @@ -360,7 +360,7 @@ def prepare_tp_model(hidden_dim, nlayers, linear_indices, allreduce_indices, gro return model, base_model -@pytest.mark.parametrize("zero_stage", [0, 1]) +@pytest.mark.parametrize("zero_stage", [0, 1, 2]) @pytest.mark.parametrize("tp_size", [2, 4]) class TestSave(DistributedTest): @@ -492,7 +492,7 @@ def test_ckpt_save(self, tmpdir, tp_size: int, zero_stage: int): compare_lr_scheduler_states(trained_model, loaded_model) -@pytest.mark.parametrize("zero_stage", [0, 1]) +@pytest.mark.parametrize("zero_stage", [0, 1, 2]) @pytest.mark.parametrize("tp_size", [2, 4]) class TestTpGradNorm(DistributedTest): From 01dd31879ba51fa2aab28a116f822b9cfdc80ed1 Mon Sep 17 00:00:00 2001 From: wukong1992 Date: Thu, 20 Feb 2025 21:36:17 +0800 Subject: [PATCH 19/69] Fix, bf16 optimizer remove dup loop (#7054) bf16 with moe refresh optimizer state from bf16 ckpt will raise IndexError: list index out of range Signed-off-by: shaomin Co-authored-by: shaomin Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/runtime/bf16_optimizer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deepspeed/runtime/bf16_optimizer.py b/deepspeed/runtime/bf16_optimizer.py index 6b63efbb23f7..78895e70df03 100644 --- a/deepspeed/runtime/bf16_optimizer.py +++ b/deepspeed/runtime/bf16_optimizer.py @@ -472,10 +472,10 @@ def state_dict(self): # Restore base optimizer fp32 weights bfloat16 weights def _restore_from_bit16_weights(self): - for i, group in enumerate(self.bf16_groups): + for i, (bf16_partitions, + fp32_partition) in enumerate(zip(self.bf16_partitioned_groups, self.fp32_groups_flat_partition)): partition_id = dist.get_rank(group=self.real_dp_process_group[i]) - for bf16_partitions, fp32_partition in zip(self.bf16_partitioned_groups, self.fp32_groups_flat_partition): - fp32_partition.data.copy_(bf16_partitions[partition_id].data) + fp32_partition.data.copy_(bf16_partitions[partition_id].data) def refresh_fp32_params(self): self._restore_from_bit16_weights() From 41718adaf42966ec759de43c5468f2d055b2a904 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Thu, 20 Feb 2025 07:27:28 -0800 Subject: [PATCH 20/69] Update version.txt after 0.16.4 release (#7063) **Auto-generated PR to update version.txt after a DeepSpeed release** Released version - 0.16.4 Author - @loadams Co-authored-by: loadams Signed-off-by: Logan Adams --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 5f2491c5adca..19270385eaf7 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.16.4 +0.16.5 From c83ade6f60095f6559ad05315c305fc45b963fbd Mon Sep 17 00:00:00 2001 From: Stas Bekman Date: Thu, 20 Feb 2025 07:27:54 -0800 Subject: [PATCH 21/69] fix an outdated doc wrt CUDA_VISIBLE_DEVICES (#7058) @jeffra and I fixed this many years ago, so bringing this doc to a correct state. --------- Signed-off-by: Stas Bekman Signed-off-by: Logan Adams --- docs/_tutorials/getting-started.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/_tutorials/getting-started.md b/docs/_tutorials/getting-started.md index 36dcdf41d9d0..2c6e27d1319d 100644 --- a/docs/_tutorials/getting-started.md +++ b/docs/_tutorials/getting-started.md @@ -316,10 +316,14 @@ local machine to discover the number of slots available. The `--include` and `--exclude` arguments work as normal, but the user should specify 'localhost' as the hostname. -Also note that `CUDA_VISIBLE_DEVICES` can't be used with DeepSpeed to control -which devices should be used. For example, to use only gpu1 of the current -node, do: +Also note that `CUDA_VISIBLE_DEVICES` can be used with `deepspeed` to control +which devices should be used on a single node. So either of these would work +to launch just on devices 0 and 1 of the current node: ```bash -deepspeed --include localhost:1 ... +deepspeed --include localhost:0,1 ... +``` + +```bash +CUDA_VISIBLE_DEVICES=0,1 deepspeed ... ``` From cc79d173476a1eca455b6f34671cde6596c1b8c7 Mon Sep 17 00:00:00 2001 From: siqi654321 Date: Fri, 21 Feb 2025 04:46:21 +0800 Subject: [PATCH 22/69] Tecorigin sdaa accelerator (#6903) Description This PR includes Tecorigin SDAA accelerator support. With this PR, DeepSpeed supports SDAA as backend for training tasks. --------- Signed-off-by: siqi Co-authored-by: siqi Co-authored-by: Olatunji Ruwase Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- accelerator/real_accelerator.py | 19 +- accelerator/sdaa_accelerator.py | 328 ++++++++++++++++++++++++++++++++ op_builder/sdaa/__init__.py | 36 ++++ op_builder/sdaa/builder.py | 60 ++++++ op_builder/sdaa/cpu_adam.py | 53 ++++++ op_builder/sdaa/fused_adam.py | 67 +++++++ op_builder/sdaa/no_impl.py | 59 ++++++ 7 files changed, 621 insertions(+), 1 deletion(-) create mode 100755 accelerator/sdaa_accelerator.py create mode 100755 op_builder/sdaa/__init__.py create mode 100755 op_builder/sdaa/builder.py create mode 100755 op_builder/sdaa/cpu_adam.py create mode 100755 op_builder/sdaa/fused_adam.py create mode 100755 op_builder/sdaa/no_impl.py diff --git a/accelerator/real_accelerator.py b/accelerator/real_accelerator.py index ac17fe2c67e5..9c1713ca4c6c 100644 --- a/accelerator/real_accelerator.py +++ b/accelerator/real_accelerator.py @@ -20,7 +20,7 @@ except ImportError as e: dsa2 = None -SUPPORTED_ACCELERATOR_LIST = ['cuda', 'cpu', 'xpu', 'xpu.external', 'npu', 'mps', 'hpu', 'mlu'] +SUPPORTED_ACCELERATOR_LIST = ['cuda', 'cpu', 'xpu', 'xpu.external', 'npu', 'mps', 'hpu', 'mlu', 'sdaa'] ds_accelerator = None @@ -80,6 +80,12 @@ def get_accelerator(): except ImportError as e: raise ValueError(f"NPU_Accelerator requires torch_npu, which is not installed on this system.") pass + elif accelerator_name == "sdaa": + try: + import torch_sdaa # noqa: F401 # type: ignore + except ImportError as e: + raise ValueError(f"SDAA_Accelerator requires torch_sdaa, which is not installed on this system.") + pass elif accelerator_name == "mps": try: import torch.mps @@ -137,6 +143,13 @@ def get_accelerator(): accelerator_name = "npu" except ImportError as e: pass + if accelerator_name is None: + try: + import torch_sdaa # noqa: F401,F811 # type: ignore + + accelerator_name = "sdaa" + except ImportError as e: + pass if accelerator_name is None: try: import torch.mps @@ -205,6 +218,10 @@ def get_accelerator(): from .npu_accelerator import NPU_Accelerator ds_accelerator = NPU_Accelerator() + elif accelerator_name == "sdaa": + from .sdaa_accelerator import SDAA_Accelerator + + ds_accelerator = SDAA_Accelerator() elif accelerator_name == "mps": from .mps_accelerator import MPS_Accelerator diff --git a/accelerator/sdaa_accelerator.py b/accelerator/sdaa_accelerator.py new file mode 100755 index 000000000000..26113d38dd15 --- /dev/null +++ b/accelerator/sdaa_accelerator.py @@ -0,0 +1,328 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team + +import importlib +import inspect +import functools + +from .abstract_accelerator import DeepSpeedAccelerator +# During setup stage torch may not be installed, pass on no torch will +# allow op builder related API to be executed. +try: + import torch.sdaa +except ImportError: + pass + + +class SDAA_Accelerator(DeepSpeedAccelerator): + + def __init__(self): + self._name = 'sdaa' + self._communication_backend_name = 'tccl' + self._compile_backend = "inductor" + self.class_dict = None + + def is_synchronized_device(self): + return False + + def use_host_timers(self): + return self.is_synchronized_device() + + def resolves_data_dependency(self): + return self.is_synchronized_device() + + def handles_memory_backpressure(self): + return self.is_synchronized_device() + + # Device APIs + def device_name(self, device_index=None): + if device_index is None: + return 'sdaa' + return 'sdaa:{}'.format(device_index) + + def device(self, device_index=None): + return torch.sdaa.device(device_index) + + def set_device(self, device_index): + torch.sdaa.set_device(device_index) + + def current_device(self): + return torch.sdaa.current_device() + + def current_device_name(self): + return 'sdaa:{}'.format(torch.sdaa.current_device()) + + def device_count(self): + return torch.sdaa.device_count() + + def synchronize(self, device_index=None): + return torch.sdaa.synchronize(device_index) + + # RNG APIs + def random(self): + return torch.random + + def set_rng_state(self, new_state, device_index=None): + if device_index is None: + return torch.sdaa.set_rng_state(new_state) + + return torch.sdaa.set_rng_state(new_state, device_index) + + def get_rng_state(self, device_index=None): + if device_index is None: + return torch.sdaa.get_rng_state() + + return torch.sdaa.get_rng_state(device_index) + + def manual_seed(self, seed): + return torch.sdaa.manual_seed(seed) + + def manual_seed_all(self, seed): + return torch.sdaa.manual_seed_all(seed) + + def initial_seed(self): + return torch.sdaa.initial_seed() + + def default_generator(self, device_index): + return torch.sdaa.default_generators[device_index] + + # Streams/Events + @property + def Stream(self): + return torch.sdaa.Stream + + def stream(self, stream): + return torch.sdaa.stream(stream) + + def current_stream(self, device_index=None): + return torch.sdaa.current_stream(device_index) + + def default_stream(self, device_index=None): + return torch.sdaa.default_stream(device_index) + + @property + def Event(self): + return torch.sdaa.Event + + # Memory management + def empty_cache(self): + return torch.sdaa.empty_cache() + + def memory_allocated(self, device_index=None): + return torch.sdaa.memory_allocated(device_index) + + def max_memory_allocated(self, device_index=None): + return torch.sdaa.max_memory_allocated(device_index) + + def reset_max_memory_allocated(self, device_index=None): + return torch.sdaa.reset_max_memory_allocated(device_index) + + def memory_cached(self, device_index=None): + return torch.sdaa.memory_cached(device_index) + + def max_memory_cached(self, device_index=None): + return torch.sdaa.max_memory_cached(device_index) + + def reset_max_memory_cached(self, device_index=None): + return torch.sdaa.reset_max_memory_cached(device_index) + + def memory_stats(self, device_index=None): + if hasattr(torch.sdaa, 'memory_stats'): + return torch.sdaa.memory_stats(device_index) + + def reset_peak_memory_stats(self, device_index=None): + if hasattr(torch.sdaa, 'reset_peak_memory_stats'): + return torch.sdaa.reset_peak_memory_stats(device_index) + + def memory_reserved(self, device_index=None): + if hasattr(torch.sdaa, 'memory_reserved'): + return torch.sdaa.memory_reserved(device_index) + + def max_memory_reserved(self, device_index=None): + if hasattr(torch.sdaa, 'max_memory_reserved'): + return torch.sdaa.max_memory_reserved(device_index) + + def total_memory(self, device_index=None): + return torch.sdaa.get_device_properties(device_index).total_memory + + def available_memory(self, device_index=None): + return self.total_memory(device_index) - self.memory_allocated(device_index) + + # Data types + def is_bf16_supported(self): + return torch.sdaa.is_bf16_supported() + + def is_fp16_supported(self): + return True + + def supported_dtypes(self): + supported_dtypes = [torch.float] + if self.is_fp16_supported(): + supported_dtypes.append(torch.half) + if self.is_bf16_supported(): + supported_dtypes.append(torch.bfloat16) + return supported_dtypes + + # Misc + def amp(self): + if hasattr(torch.sdaa, 'amp'): + return torch.sdaa.amp + return None + + def is_available(self): + return torch.sdaa.is_available() + + def range_push(self, msg): + return + + def range_pop(self): + return + + def lazy_call(self, callback): + return torch.sdaa._lazy_call(callback) + + def communication_backend_name(self): + return self._communication_backend_name + + def is_triton_supported(self): + return False + + # Graph operations + def create_graph(self): + return None + + def capture_to_graph(self, graph, pool=None, stream=None): + from deepspeed.runtime.utils import noop_context + return noop_context() + + def replay_graph(self, graph): + return + + # Tensor operations + + @property + def BFloat16Tensor(self): + return functools.partial(torch.tensor, dtype=torch.bfloat16, device='sdaa') + + @property + def ByteTensor(self): + return functools.partial(torch.tensor, dtype=torch.uint8, device='sdaa') + + @property + def DoubleTensor(self): + return functools.partial(torch.tensor, dtype=torch.double, device='sdaa') + + @property + def FloatTensor(self): + return functools.partial(torch.tensor, dtype=torch.float, device='sdaa') + + @property + def HalfTensor(self): + return functools.partial(torch.tensor, dtype=torch.half, device='sdaa') + + @property + def IntTensor(self): + return functools.partial(torch.tensor, dtype=torch.int, device='sdaa') + + @property + def LongTensor(self): + return functools.partial(torch.tensor, dtype=torch.long, device='sdaa') + + def pin_memory(self, tensor, align_bytes=1): + return tensor.pin_memory() + + def is_pinned(self, tensor): + return tensor.is_pinned() + + def on_accelerator(self, tensor): + device_str = str(tensor.device) + if device_str.startswith('sdaa:'): + return True + else: + return False + + def op_builder_dir(self): + try: + # is op_builder from deepspeed or a 3p version? this should only succeed if it's deepspeed + # if successful this also means we're doing a local install and not JIT compile path + from op_builder import __deepspeed__ # noqa: F401 # type: ignore + return "op_builder.sdaa" + except ImportError: + return "deepspeed.ops.op_builder.sdaa" + + def _lazy_init_class_dict(self): + if self.class_dict: + return + + op_builder_module = importlib.import_module(self.op_builder_dir()) + + # get op builder class from op_builder/sdaa/__init__.py + self.class_dict = {} + for class_name, class_obj in inspect.getmembers(op_builder_module, inspect.isclass): + self.class_dict[class_name] = class_obj + + # create an instance of op builder and return, name specified by class_name + def create_op_builder(self, class_name): + builder_class = self.get_op_builder(class_name) + return builder_class() + + # return an op builder class, name specified by class_name + def get_op_builder(self, class_name): + self._lazy_init_class_dict() + if class_name in self.class_dict: + return self.class_dict[class_name] + else: + return self.class_dict['NotImplementedBuilder'] + + def build_extension(self): + from torch.utils.cpp_extension import BuildExtension + return BuildExtension + + def export_envs(self): + return ['NCCL', 'LD_LIBRARY', 'PATH'] + + def visible_devices_envs(self): + return ['SDAA_VISIBLE_DEVICES'] + + def set_visible_devices_envs(self, current_env, local_accelerator_ids): + for env in self.visible_devices_envs(): + current_env[env] = ",".join(map(str, local_accelerator_ids)) + + def get_compile_backend(self): + return self._compile_backend + + def set_compile_backend(self, backend): + supported_backends = torch._dynamo.list_backends(exclude_tags=()) + if backend in supported_backends: + self._compile_backend = backend + else: + raise ValueError( + f"{backend} not supported by {self.device_name()}. Supported Backends are {supported_backends}") diff --git a/op_builder/sdaa/__init__.py b/op_builder/sdaa/__init__.py new file mode 100755 index 000000000000..2a6eb8bbfa2c --- /dev/null +++ b/op_builder/sdaa/__init__.py @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. + +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team +'''Copyright The Microsoft DeepSpeed Team''' + +from .no_impl import NotImplementedBuilder +from .cpu_adam import CPUAdamBuilder +from .fused_adam import FusedAdamBuilder diff --git a/op_builder/sdaa/builder.py b/op_builder/sdaa/builder.py new file mode 100755 index 000000000000..81f0e98c0768 --- /dev/null +++ b/op_builder/sdaa/builder.py @@ -0,0 +1,60 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team + +try: + # is op_builder from deepspeed or a 3p version? this should only succeed if it's deepspeed + # if successful this also means we're doing a local install and not JIT compile path + from op_builder import __deepspeed__ # noqa: F401 # type: ignore + from op_builder.builder import OpBuilder +except ImportError: + from deepspeed.ops.op_builder.builder import OpBuilder + + +class SDAAOpBuilder(OpBuilder): + + def builder(self): + from torch.utils.cpp_extension import CppExtension as ExtensionBuilder + + compile_args = {'cxx': self.strip_empty_entries(self.cxx_args())} + + cpp_ext = ExtensionBuilder(name=self.absolute_name(), + sources=self.strip_empty_entries(self.sources()), + include_dirs=self.strip_empty_entries(self.include_paths()), + libraries=self.strip_empty_entries(self.libraries_args()), + extra_compile_args=compile_args) + + return cpp_ext + + def cxx_args(self): + return ['-O3', '-g', '-Wno-reorder'] + + def libraries_args(self): + return [] diff --git a/op_builder/sdaa/cpu_adam.py b/op_builder/sdaa/cpu_adam.py new file mode 100755 index 000000000000..b38a71a6275d --- /dev/null +++ b/op_builder/sdaa/cpu_adam.py @@ -0,0 +1,53 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team + +from .builder import SDAAOpBuilder + + +class CPUAdamBuilder(SDAAOpBuilder): + BUILD_VAR = "DS_BUILD_CPU_ADAM" + NAME = "cpu_adam" + + def __init__(self): + super().__init__(name=self.NAME) + + def absolute_name(self): + return f'deepspeed.ops.adam.{self.NAME}_op' + + def sources(self): + return ['csrc/adam/cpu_adam.cpp', 'csrc/adam/cpu_adam_impl.cpp'] + + def libraries_args(self): + args = super().libraries_args() + return args + + def include_paths(self): + return ['csrc/includes'] diff --git a/op_builder/sdaa/fused_adam.py b/op_builder/sdaa/fused_adam.py new file mode 100755 index 000000000000..73a2dff41459 --- /dev/null +++ b/op_builder/sdaa/fused_adam.py @@ -0,0 +1,67 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team + +from .builder import SDAAOpBuilder + +try: + import torch +except ImportError as e: + pass + + +class SDAAFusedAdam: + + @staticmethod + def multi_tensor_adam(chunk_size, noop_flag_buffer, tensor_lists, lr, beta1, beta2, epsilon, step, adam_w_mode, + bias_correction, weight_decay, *args): + g_tensor_lis, p_tensor_lis, m_tensor_lis, v_tensor_lis = tensor_lists + torch.ops.sdaa.fused_adam(g_tensor_lis, p_tensor_lis, m_tensor_lis, v_tensor_lis, [], beta1, beta2, epsilon, + lr, weight_decay, adam_w_mode, step, bias_correction) + + +class FusedAdamBuilder(SDAAOpBuilder): + BUILD_VAR = "DS_BUILD_FUSED_ADAM" + NAME = "fused_adam" + + def __init__(self): + super().__init__(name=self.NAME) + + def absolute_name(self): + return f'deepspeed.ops.adam.{self.NAME}_op' + + def sources(self): + return [] + + def include_paths(self): + return [] + + def load(self, verbose=True): + return SDAAFusedAdam diff --git a/op_builder/sdaa/no_impl.py b/op_builder/sdaa/no_impl.py new file mode 100755 index 000000000000..10a8b8f48652 --- /dev/null +++ b/op_builder/sdaa/no_impl.py @@ -0,0 +1,59 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# BSD 3- Clause License Copyright (c) 2023, Tecorigin Co., Ltd. All rights +# reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. + +# DeepSpeed Team + +from .builder import SDAAOpBuilder + + +class NotImplementedBuilder(SDAAOpBuilder): + BUILD_VAR = "DS_BUILD_NOT_IMPLEMENTED" + NAME = "deepspeed_not_implemented" + + def __init__(self, name=None): + name = self.NAME if name is None else name + super().__init__(name=name) + + def absolute_name(self): + return f'deepspeed.ops.comm.{self.NAME}_op' + + def load(self, verbose=True): + raise ValueError("This op had not been implemented on SDAA backend.") + + def sources(self): + return [] + + def cxx_args(self): + return [] + + def extra_ldflags(self): + return [] + + def include_paths(self): + return [] From aa63ba4fdc224546b19d97bd1840c4be4737d127 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:33:18 -0800 Subject: [PATCH 23/69] Handle special case of libuv for Windows (#7064) More information on libuv in pytorch: https://pytorch.org/tutorials/intermediate/TCPStore_libuv_backend.html Issue tracking the prevalence of the error on Windows (unresolved at the time of this PR): https://github.com/pytorch/pytorch/issues/139990 LibUV github: https://github.com/libuv/libuv Windows error: ``` File "C:\hostedtoolcache\windows\Python\3.12.7\x64\Lib\site-packages\torch\distributed\rendezvous.py", line 189, in _create_c10d_store return TCPStore( ^^^^^^^^^ RuntimeError: use_libuv was requested but PyTorch was build without libuv support ``` use_libuv isn't well supported on Windows in pytorch <2.4, so we need to guard around this case. --------- Signed-off-by: Logan Adams --- deepspeed/comm/torch.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/deepspeed/comm/torch.py b/deepspeed/comm/torch.py index efa0640fb87b..1146832d7655 100755 --- a/deepspeed/comm/torch.py +++ b/deepspeed/comm/torch.py @@ -145,11 +145,22 @@ def has_reduce_scatter_tensor(self): def init_process_group(self, backend, timeout, init_method, rank, world_size): if not torch.distributed.is_initialized(): - torch.distributed.init_process_group(backend, - timeout=timeout, - init_method=init_method, - rank=rank, - world_size=world_size) + if not required_torch_version(min_version=2.4): + # Windows torch builds do not come with lib_uv by default. + # More information here: https://pytorch.org/tutorials/intermediate/TCPStore_libuv_backend.html + use_libuv = False if os.name == "nt" else True + torch.distributed.init_process_group(backend, + timeout=timeout, + init_method=init_method, + rank=rank, + world_size=world_size, + use_libuv=use_libuv) + else: + torch.distributed.init_process_group(backend, + timeout=timeout, + init_method=init_method, + rank=rank, + world_size=world_size) self.using_mpi = torch.distributed.get_backend() == 'mpi' @disable_compiler_collective From aaf86d689da6e7121c6dbae8fb05ad49582d50cb Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Fri, 21 Feb 2025 04:05:29 -0800 Subject: [PATCH 24/69] Update README with info on newest accelerator (#7065) Signed-off-by: Logan Adams --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index db77d419cce7..7cd3f4088abf 100755 --- a/README.md +++ b/README.md @@ -172,6 +172,7 @@ dynamically link them at runtime. | Intel | Intel(R) Gaudi(R) 2 AI accelerator | hpu | Yes | Yes | | Intel | Intel(R) Xeon(R) Processors | cpu | Yes | Yes | | Intel | Intel(R) Data Center GPU Max series | xpu | Yes | Yes | +| Tecorigin | Scalable Data Analytics Accelerator | sdaa | Yes | No | ## PyPI We regularly push releases to [PyPI](https://pypi.org/project/deepspeed/) and encourage users to install from there in most cases. From 630864d3be77695419290c85b46c3e29aaee50c1 Mon Sep 17 00:00:00 2001 From: Wei Wu <45323446+U-rara@users.noreply.github.com> Date: Fri, 21 Feb 2025 20:05:41 +0800 Subject: [PATCH 25/69] Bug Fix for offload_states API (#7050) @fukun07 and I discovered a bug when using the `offload_states` and `reload_states` APIs of the Zero3 optimizer. When using grouped parameters (for example, in weight decay or grouped lr scenarios), the order of the parameters mapping in `reload_states` ([here](https://github.com/deepspeedai/DeepSpeed/blob/14b3cce4aaedac69120d386953e2b4cae8c2cf2c/deepspeed/runtime/zero/stage3.py#L2953)) does not correspond with the initialization of `self.lp_param_buffer` ([here](https://github.com/deepspeedai/DeepSpeed/blob/14b3cce4aaedac69120d386953e2b4cae8c2cf2c/deepspeed/runtime/zero/stage3.py#L731)), which leads to misaligned parameter loading. This issue was overlooked by the corresponding unit tests ([here](https://github.com/deepspeedai/DeepSpeed/blob/master/tests/unit/runtime/zero/test_offload_states.py)), so we fixed the bug in our PR and added the corresponding unit tests. --------- Signed-off-by: Wei Wu Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/runtime/zero/stage3.py | 12 ++++++------ tests/unit/runtime/zero/test_offload_states.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/deepspeed/runtime/zero/stage3.py b/deepspeed/runtime/zero/stage3.py index 9cc58fdbac01..ee97b6278d9e 100644 --- a/deepspeed/runtime/zero/stage3.py +++ b/deepspeed/runtime/zero/stage3.py @@ -732,10 +732,7 @@ def _create_fp16_partitions_with_defragmentation(self, fp16_param_groups): # move parameters to flattened buffer if not self.offload_param: # partitioned params remain in GPU during training # move parameter partitions into a single contiguous flat buffer - parameter_partitions: List[Tensor] = [] - for sub_group in self.fp16_groups: - for param in sub_group: - parameter_partitions.append(param.ds_tensor) + parameter_partitions = self._get_parameter_partitions() # We need to keep the reference to this buffer to make sure you can free it in `offload_states` self.lp_param_buffer = __class__.defragment(parameter_partitions) @@ -786,6 +783,9 @@ def _create_fp16_partitions_with_defragmentation(self, fp16_param_groups): assert len(largest_partition_numel) > 0, f'Unexpected that largest partition is empty' self.fp16_groups[0][0].nvme_swapper.reserve_partitioned_swap_space(largest_partition_numel) + def _get_parameter_partitions(self) -> List[Tensor]: + return [param.ds_tensor for sub_group in self.fp16_groups for param in sub_group] + def _swap_in_sub_group_to_flat_buffer(self, flat_buffer, sub_group_id): offset = 0 elements_in_sub_group = sum([t.ds_numel for t in self.fp16_partitioned_groups[sub_group_id]]) @@ -2954,8 +2954,8 @@ def reload_states(self, non_blocking: bool = False): self.lp_param_buffer.data = cpu_buffer.data.to(device, non_blocking=non_blocking) self._set_fp16_partitioned_groups_flat() - for tensor, offset, tensor_numel in get_mapping_to_flat_buffer( - [p.ds_tensor for p in self.module.parameters()]): + parameter_partitions = self._get_parameter_partitions() + for tensor, offset, tensor_numel in get_mapping_to_flat_buffer(parameter_partitions): tensor.data = self.lp_param_buffer.narrow(0, offset, tensor_numel) self.offloaded_states.remove(OffloadStateTypeEnum.lp_params) diff --git a/tests/unit/runtime/zero/test_offload_states.py b/tests/unit/runtime/zero/test_offload_states.py index 9105a54661fa..44bff480e27b 100644 --- a/tests/unit/runtime/zero/test_offload_states.py +++ b/tests/unit/runtime/zero/test_offload_states.py @@ -33,11 +33,11 @@ def compare_device(state) -> bool: assert compare_device(state), f"State {state} is not on device {device}" -def run_model(model, config_dict, hidden_dim, dtype, include, pin_memory, non_blocking): +def run_model(model, param_groups, config_dict, hidden_dim, dtype, include, pin_memory, non_blocking): # Currently we only support OffloadDeviceEnum.cpu offload_device = OffloadDeviceEnum.cpu - model, _, _, _ = deepspeed.initialize(model=model, model_parameters=model.parameters(), config=config_dict) + model, _, _, _ = deepspeed.initialize(model=model, model_parameters=param_groups, config=config_dict) data_loader = random_dataloader(model=model, total_samples=10, hidden_dim=hidden_dim, @@ -124,5 +124,12 @@ def test_offload_states(self, included_state, pin_memory, non_blocking): with deepspeed.zero.Init(config_dict_or_path=config_dict): model = SimpleModel(hidden_dim, nlayers=4) + param_groups = [{ + "params": [p for n, p in model.named_parameters() if not 'bias' in n], + "weight_decay": 0.1 + }, { + "params": [p for n, p in model.named_parameters() if 'bias' in n], + "weight_decay": 0.0 + }] include = None if included_state is None else [included_state] - run_model(model, config_dict, hidden_dim, torch.bfloat16, include, pin_memory, non_blocking) + run_model(model, param_groups, config_dict, hidden_dim, torch.bfloat16, include, pin_memory, non_blocking) From 5a2eceaedab89cd04315ca4b31b4ea0c52ea17f0 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 21 Feb 2025 15:06:42 -0800 Subject: [PATCH 26/69] Add all imports from setup.py to pyproject.toml Signed-off-by: Logan Adams --- pyproject.toml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 5e5f27c52d98..dd314eeb347f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,15 @@ requires = [ "wheel", "ninja", "typing-extensions>=4.10.0", + "pathlib", + "os", + "shutil", + "subprocess", + "shutil", + "time", + "typing", + "shlex", + "torch" ] # Use legacy backend to import local packages in setup.py build-backend = "setuptools.build_meta:__legacy__" From ac52baec1a163ed4981c4319ae58b6140906cc07 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:01:06 -0800 Subject: [PATCH 27/69] Fix TOCTOU issues, switch to fstat (#7067) Signed-off-by: Logan Adams --- csrc/aio/common/deepspeed_aio_common.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/csrc/aio/common/deepspeed_aio_common.cpp b/csrc/aio/common/deepspeed_aio_common.cpp index 81c315e9a558..9d7ff5093017 100644 --- a/csrc/aio/common/deepspeed_aio_common.cpp +++ b/csrc/aio/common/deepspeed_aio_common.cpp @@ -284,12 +284,13 @@ int open_file(const char* filename, const bool read_op) int regular_read(const char* filename, std::vector& buffer) { - int64_t num_bytes; - const auto f_size = get_file_size(filename, num_bytes); - assert(f_size != -1); - buffer.resize(num_bytes); const auto fd = open(filename, O_RDONLY, 0600); assert(fd != -1); + struct stat fs; + const auto result = fstat(fd, &fs); + assert(result != -1); + int64_t num_bytes = fs.st_size; + buffer.resize(num_bytes); int64_t read_bytes = 0; auto r = 0; do { From fd5273f3ae8c99bd9eb717507f91bc8a963452fd Mon Sep 17 00:00:00 2001 From: Shelly Nahir <73890534+ShellyNR@users.noreply.github.com> Date: Mon, 24 Feb 2025 16:50:09 +0200 Subject: [PATCH 28/69] config torch to avoid graph breaks caused by logger (#6999) Following changes in Pytorch trace rules , my previous PR to avoid graph breaks caused by logger is no longer relevant. So instead I've added this functionality to torch dynamo - https://github.com/pytorch/pytorch/commit/16ea0ddcdbe49f5560bfbbc6ab331c3422e27b2e This commit allows the user to config torch to ignore logger methods and avoid associated graph breaks. To enable ignore logger methods - os.environ["DISABLE_LOGS_WHILE_COMPILING"] = "1" To ignore logger methods except for a specific method / methods (for example, info and isEnabledFor) - os.environ["DISABLE_LOGS_WHILE_COMPILING"] = "1" and os.environ["LOGGER_METHODS_TO_EXCLUDE_FROM_DISABLE"] = "info, isEnabledFor" Signed-off-by: ShellyNR Co-authored-by: snahir Signed-off-by: Logan Adams --- deepspeed/utils/logging.py | 41 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/deepspeed/utils/logging.py b/deepspeed/utils/logging.py index d5db29485db3..77173f2839ca 100644 --- a/deepspeed/utils/logging.py +++ b/deepspeed/utils/logging.py @@ -7,7 +7,8 @@ import logging import sys import os -from deepspeed.runtime.compiler import is_compile_supported, is_compiling +import torch +from deepspeed.utils.torch import required_torch_version log_levels = { "debug": logging.DEBUG, @@ -20,31 +21,6 @@ class LoggerFactory: - def create_warning_filter(logger): - warn = False - - def warn_once(record): - nonlocal warn - if is_compile_supported() and is_compiling() and not warn: - warn = True - logger.warning("To avoid graph breaks caused by logger in compile-mode, it is recommended to" - " disable logging by setting env var DISABLE_LOGS_WHILE_COMPILING=1") - return True - - return warn_once - - @staticmethod - def logging_decorator(func): - - @functools.wraps(func) - def wrapper(*args, **kwargs): - if is_compiling(): - return - else: - return func(*args, **kwargs) - - return wrapper - @staticmethod def create_logger(name=None, level=logging.INFO): """create a logger @@ -70,12 +46,15 @@ def create_logger(name=None, level=logging.INFO): ch.setLevel(level) ch.setFormatter(formatter) logger_.addHandler(ch) - if os.getenv("DISABLE_LOGS_WHILE_COMPILING", "0") == "1": - for method in ['info', 'debug', 'error', 'warning', 'critical', 'exception']: + if required_torch_version(min_version=2.6) and os.getenv("DISABLE_LOGS_WHILE_COMPILING", "0") == "1": + excluded_set = { + item.strip() + for item in os.getenv("LOGGER_METHODS_TO_EXCLUDE_FROM_DISABLE", "").split(",") + } + ignore_set = {'info', 'debug', 'error', 'warning', 'critical', 'exception', 'isEnabledFor'} - excluded_set + for method in ignore_set: original_logger = getattr(logger_, method) - setattr(logger_, method, LoggerFactory.logging_decorator(original_logger)) - else: - logger_.addFilter(LoggerFactory.create_warning_filter(logger_)) + torch._dynamo.config.ignore_logger_methods.add(original_logger) return logger_ From c91d225686408c3431023c672a67291ee6547c58 Mon Sep 17 00:00:00 2001 From: Yejing-Lai Date: Tue, 25 Feb 2025 00:57:26 +0800 Subject: [PATCH 29/69] Fix meta load tensor imcompatible issue (#7073) The partition tensor doesn't need to move to the current device when meta load is used. Signed-off-by: Lai, Yejing Co-authored-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/module_inject/layers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deepspeed/module_inject/layers.py b/deepspeed/module_inject/layers.py index 2a24c2920466..5087d71a3d62 100644 --- a/deepspeed/module_inject/layers.py +++ b/deepspeed/module_inject/layers.py @@ -48,7 +48,8 @@ def move(tensor, device): # to save host resources when DP > 1。 if tensor.is_meta: - return torch.empty_like(tensor, device=device) + # Keep tensor in meta device if tensor is meta. + return tensor else: # Using new tensors help in freeing memory (after split for example) was done before by calling clone(). # Using copy=True instead of clone() will help in case of cpu --> cpu. From 80ff4201514404b4da0a0e6fd9ada1898f1a7168 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:40:24 -0800 Subject: [PATCH 30/69] Replace calls to `python setup.py sdist` with `python -m build --sdist` (#7069) With future changes coming to pip/python/etc, we need to modify to no longer call `python setup.py ...` and replace it instead: https://packaging.python.org/en/latest/guides/modernize-setup-py-project/#should-setup-py-be-deleted ![image](https://github.com/user-attachments/assets/ea39ef7b-3cbe-4916-86f0-bc46a5fce96d) This means we need to install the build package which is added here as well. Additionally, we pass the `--sdist` flag to only build the sdist rather than the wheel as well here. --------- Signed-off-by: Logan Adams --- .github/workflows/no-torch.yml | 3 ++- .github/workflows/release.yml | 3 ++- build_win.bat | 2 +- docs/_tutorials/advanced-install.md | 2 +- docs/_tutorials/ds-sequence.md | 2 +- install.sh | 2 +- release/release.sh | 2 +- setup.py | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/no-torch.yml b/.github/workflows/no-torch.yml index 5b89a6f36787..75c4ecb850c9 100644 --- a/.github/workflows/no-torch.yml +++ b/.github/workflows/no-torch.yml @@ -32,11 +32,12 @@ jobs: run: | pip uninstall torch --yes pip install setuptools + pip install build pip list - name: Build deepspeed run: | - DS_BUILD_STRING=" " python setup.py sdist + DS_BUILD_STRING=" " python -m build --sdist - name: Open GitHub issue if nightly CI fails if: ${{ failure() && (github.event_name == 'schedule') }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b2ccca69dfda..4bddbc26be4a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,8 @@ jobs: - name: Build DeepSpeed run: | pip install setuptools - DS_BUILD_STRING=" " python setup.py sdist + pip install build + DS_BUILD_STRING=" " python -m build --sdist - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: diff --git a/build_win.bat b/build_win.bat index 81387471983a..627694dbe8a0 100644 --- a/build_win.bat +++ b/build_win.bat @@ -11,6 +11,6 @@ set DS_BUILD_GDS=0 set DS_BUILD_RAGGED_DEVICE_OPS=0 set DS_BUILD_SPARSE_ATTN=0 -python setup.py bdist_wheel +python -m build --wheel --no-isolation :end diff --git a/docs/_tutorials/advanced-install.md b/docs/_tutorials/advanced-install.md index d01378484172..b251485f8988 100755 --- a/docs/_tutorials/advanced-install.md +++ b/docs/_tutorials/advanced-install.md @@ -84,7 +84,7 @@ This should complete the full build 2-3 times faster. You can adjust `-j` to spe You can also build a binary wheel and install it on multiple machines that have the same type of GPUs and the same software environment (CUDA toolkit, PyTorch, Python, etc.) ```bash -DS_BUILD_OPS=1 python setup.py build_ext -j8 bdist_wheel +DS_BUILD_OPS=1 python -m build --wheel --no-isolation --config-setting="--build-option=build_ext" --config-setting="--build-option=-j8" ``` This will create a pypi binary wheel under `dist`, e.g., ``dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl`` and then you can install it directly on multiple machines, in our example: diff --git a/docs/_tutorials/ds-sequence.md b/docs/_tutorials/ds-sequence.md index 7a6041f393f9..41a76b784782 100755 --- a/docs/_tutorials/ds-sequence.md +++ b/docs/_tutorials/ds-sequence.md @@ -111,7 +111,7 @@ pip install . cd ${WORK_DIR} git clone -b v1.0.4 https://github.com/HazyResearch/flash-attention cd flash-attention -python setup.py install +python -m pip install . ``` You may also want to ensure your model configuration is compliant with FlashAttention's requirements. For instance, to achieve optimal performance, the head size should be divisible by 8. Refer to the FlashAttention documentation for more details. diff --git a/install.sh b/install.sh index 8d56afe40493..8be574c6ec1f 100755 --- a/install.sh +++ b/install.sh @@ -152,7 +152,7 @@ if [ ! -f $hostfile ]; then fi echo "Building deepspeed wheel" -python setup.py $VERBOSE bdist_wheel +python -m build $VERBOSE --wheel --no-isolation if [ "$local_only" == "1" ]; then echo "Installing deepspeed" diff --git a/release/release.sh b/release/release.sh index a83fafcb9b1f..cc3ee2feae62 100644 --- a/release/release.sh +++ b/release/release.sh @@ -38,7 +38,7 @@ if [ $? != 0 ]; then exit 1 fi -DS_BUILD_STRING="" python setup.py sdist +DS_BUILD_STRING="" python -m build --sdist if [ ! -f dist/deepspeed-${version}.tar.gz ]; then echo "prepared version does not match version given ($version), bump version first?" diff --git a/setup.py b/setup.py index 6dc9afb8fbc2..0ad54bb99403 100755 --- a/setup.py +++ b/setup.py @@ -233,7 +233,7 @@ def op_enabled(op_name): version_str = open('version.txt', 'r').read().strip() # Build specifiers like .devX can be added at install time. Otherwise, add the git hash. -# Example: DS_BUILD_STRING=".dev20201022" python setup.py sdist bdist_wheel. +# Example: `DS_BUILD_STRING=".dev20201022" python -m build --no-isolation`. # Building wheel for distribution, update version file. if is_env_set('DS_BUILD_STRING'): From 355e9c5e77b5e45ae99232fbd46efb47158a0859 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Mon, 24 Feb 2025 16:22:59 -0800 Subject: [PATCH 31/69] Update workflow to not do build isolation Signed-off-by: Logan Adams --- .github/workflows/nv-torch-latest-v100.yml | 2 +- .github/workflows/nv-torch-nightly-v100.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nv-torch-latest-v100.yml b/.github/workflows/nv-torch-latest-v100.yml index 3884663d9e55..2b92da8845b7 100644 --- a/.github/workflows/nv-torch-latest-v100.yml +++ b/.github/workflows/nv-torch-latest-v100.yml @@ -44,7 +44,7 @@ jobs: - name: Install deepspeed run: | - pip install .[dev,1bit,autotuning] + pip install .[dev,1bit,autotuning] --no-build-isolation ds_report - name: Python environment diff --git a/.github/workflows/nv-torch-nightly-v100.yml b/.github/workflows/nv-torch-nightly-v100.yml index cb8c15f0d709..db11fefe8a79 100644 --- a/.github/workflows/nv-torch-nightly-v100.yml +++ b/.github/workflows/nv-torch-nightly-v100.yml @@ -43,7 +43,7 @@ jobs: - name: Install deepspeed run: | - pip install .[dev,1bit,autotuning] + pip install .[dev,1bit,autotuning] --no-build-isolation ds_report - name: Python environment From 00addaa720728d9b9bf7001bf0c65e315fa350b7 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Mon, 24 Feb 2025 16:27:27 -0800 Subject: [PATCH 32/69] Add more requirements Signed-off-by: Logan Adams --- pyproject.toml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dd314eeb347f..86031c759fea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,14 +4,6 @@ requires = [ "wheel", "ninja", "typing-extensions>=4.10.0", - "pathlib", - "os", - "shutil", - "subprocess", - "shutil", - "time", - "typing", - "shlex", "torch" ] # Use legacy backend to import local packages in setup.py From 432e71dc8c83d199129f0e38fc2adfd27d56243a Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:45:11 -0800 Subject: [PATCH 33/69] Revert "Handle special case of libuv for Windows (#7064)" (#7076) This reverts commit 8577bd244903f454e319953a6ae1c3838558ac69. Fixes: #7072 Signed-off-by: Logan Adams --- deepspeed/comm/torch.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/deepspeed/comm/torch.py b/deepspeed/comm/torch.py index 1146832d7655..efa0640fb87b 100755 --- a/deepspeed/comm/torch.py +++ b/deepspeed/comm/torch.py @@ -145,22 +145,11 @@ def has_reduce_scatter_tensor(self): def init_process_group(self, backend, timeout, init_method, rank, world_size): if not torch.distributed.is_initialized(): - if not required_torch_version(min_version=2.4): - # Windows torch builds do not come with lib_uv by default. - # More information here: https://pytorch.org/tutorials/intermediate/TCPStore_libuv_backend.html - use_libuv = False if os.name == "nt" else True - torch.distributed.init_process_group(backend, - timeout=timeout, - init_method=init_method, - rank=rank, - world_size=world_size, - use_libuv=use_libuv) - else: - torch.distributed.init_process_group(backend, - timeout=timeout, - init_method=init_method, - rank=rank, - world_size=world_size) + torch.distributed.init_process_group(backend, + timeout=timeout, + init_method=init_method, + rank=rank, + world_size=world_size) self.using_mpi = torch.distributed.get_backend() == 'mpi' @disable_compiler_collective From 5ab85893239995bbae2ae36f6ed9cc1109a26df6 Mon Sep 17 00:00:00 2001 From: Yejing-Lai Date: Wed, 26 Feb 2025 22:03:46 +0800 Subject: [PATCH 34/69] Add DeepseekV3 AutoTP. (#7045) Add deepseekv3 autotp. Signed-off-by: Lai, Yejing Signed-off-by: Logan Adams --- deepspeed/module_inject/auto_tp.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deepspeed/module_inject/auto_tp.py b/deepspeed/module_inject/auto_tp.py index d148c26968b3..b089ec420d47 100755 --- a/deepspeed/module_inject/auto_tp.py +++ b/deepspeed/module_inject/auto_tp.py @@ -137,7 +137,8 @@ def is_load_module(module): "LPLayerNorm", "SharedEmbedding", "OPTLearnedPositionalEmbedding", "LlamaRMSNorm", "FalconLinear", "MistralRMSNorm", "T5LayerNorm", "MixtralRMSNorm", "Phi3RotaryEmbedding", "Phi3SuScaledRotaryEmbedding", "Phi3RMSNorm", "YuanRMSNorm", "YuanRotaryEmbedding", "Phi3LongRoPEScaledRotaryEmbedding", "Qwen2RMSNorm", - "DeepseekV2RMSNorm", "DeepseekV2YarnRotaryEmbedding", "MoEGate" + "DeepseekV2RMSNorm", "DeepseekV3RMSNorm", "DeepseekV2YarnRotaryEmbedding", "DeepseekV3YarnRotaryEmbedding", + "MoEGate" ] return module.__class__ in load_layers or module._get_name() in load_layer_names From f325c92ab3bce953e46c4b8160710dad6e9f789d Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Wed, 26 Feb 2025 08:39:46 -0800 Subject: [PATCH 35/69] Add pyproject.toml into comments Signed-off-by: Logan Adams --- .github/workflows/nv-mii.yml | 1 + deepspeed/git_version_info.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nv-mii.yml b/.github/workflows/nv-mii.yml index aff0c8a548c1..ac527d1fcb80 100644 --- a/.github/workflows/nv-mii.yml +++ b/.github/workflows/nv-mii.yml @@ -13,6 +13,7 @@ on: - '.github/workflows/nv-mii.yml' - 'requirements/**' - 'setup.py' + - 'pyproject.toml' - 'deepspeed/__init__.py' - 'deepspeed/inference/**' - '!deepspeed/inference/v2/**' # exclude v2 dir diff --git a/deepspeed/git_version_info.py b/deepspeed/git_version_info.py index 70c536d2f78e..2ca8f802d62a 100644 --- a/deepspeed/git_version_info.py +++ b/deepspeed/git_version_info.py @@ -4,7 +4,7 @@ # DeepSpeed Team try: - # This is populated by setup.py + # This is populated by setup.py/pyproject.toml from .git_version_info_installed import * # noqa: F401 # type: ignore except ModuleNotFoundError: import os From 9c4c4447a4df972a4212ba89c48df0db7fd6477d Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Wed, 26 Feb 2025 15:56:05 -0800 Subject: [PATCH 36/69] Improve inference tutorial docs (#7083) Fixes: #7082 --------- Signed-off-by: Logan Adams --- docs/_tutorials/inference-tutorial.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/_tutorials/inference-tutorial.md b/docs/_tutorials/inference-tutorial.md index 1d5899204f53..ddf287f24b96 100644 --- a/docs/_tutorials/inference-tutorial.md +++ b/docs/_tutorials/inference-tutorial.md @@ -21,18 +21,22 @@ if args.pre_load_checkpoint: model = model_class.from_pretrained(args.model_name_or_path) else: model = model_class() + +# create the tokenizer +tokenizer = model_class.from_pretrained(args.model_name_or_path) ... import deepspeed # Initialize the DeepSpeed-Inference engine ds_engine = deepspeed.init_inference(model, - tensor_parallel={"tp_size": 2}, - dtype=torch.half, - checkpoint=None if args.pre_load_checkpoint else args.checkpoint_json, - replace_with_kernel_inject=True) + tensor_parallel={"tp_size": world_size}, + dtype=torch.half, + checkpoint=None if args.pre_load_checkpoint else args.checkpoint_json, + replace_with_kernel_inject=True) model = ds_engine.module -output = model('Input String') +pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) +output = pipe('Input String') ``` To run inference with only model-parallelism for the models that we don't support kernels, you can pass an injection policy that shows the two specific linear layers on a Transformer Encoder/Decoder layer: 1) the attention output GeMM and 2) layer output GeMM. We need these part of the layer to add the required all-reduce communication between GPUs to merge the partial results across model-parallel ranks. Below, we bring an example that shows how you can use deepspeed-inference with a T5 model: From 5ebe9bdc8faa3bdd84b55fd3ac84d8e27d57681b Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Thu, 27 Feb 2025 08:15:11 -0800 Subject: [PATCH 37/69] Pin transformers version on tests that use latest. (#7085) Latest transformers causes failures when cpu-torch-latest test, so we pin it for now to unblock other PRs. --------- Signed-off-by: Logan Adams --- .github/workflows/cpu-torch-latest.yml | 2 +- .github/workflows/hpu-gaudi2.yml | 2 +- .github/workflows/nv-a6000.yml | 2 +- .github/workflows/nv-torch-latest-v100.yml | 2 +- .github/workflows/nv-torch-nightly-v100.yml | 8 ++++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cpu-torch-latest.yml b/.github/workflows/cpu-torch-latest.yml index 43ac3d1c30e2..6496d7e35065 100644 --- a/.github/workflows/cpu-torch-latest.yml +++ b/.github/workflows/cpu-torch-latest.yml @@ -42,7 +42,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - # git checkout 6c3f168b3 + git checkout 981c276 git rev-parse --short HEAD pip install . diff --git a/.github/workflows/hpu-gaudi2.yml b/.github/workflows/hpu-gaudi2.yml index b8b6f3cb5502..48730442686c 100644 --- a/.github/workflows/hpu-gaudi2.yml +++ b/.github/workflows/hpu-gaudi2.yml @@ -112,7 +112,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - git checkout 6c3f168b3 + git checkout 981c276 git rev-parse --short HEAD pip install . diff --git a/.github/workflows/nv-a6000.yml b/.github/workflows/nv-a6000.yml index 502b29b44c13..77a2661d08a6 100644 --- a/.github/workflows/nv-a6000.yml +++ b/.github/workflows/nv-a6000.yml @@ -43,7 +43,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if you need to use an older transformers version temporarily in case of breakage - # git checkout v4.47.1 + git checkout 981c276 git rev-parse --short HEAD python -m pip install . - name: Install deepspeed diff --git a/.github/workflows/nv-torch-latest-v100.yml b/.github/workflows/nv-torch-latest-v100.yml index 2b92da8845b7..e87d770a9349 100644 --- a/.github/workflows/nv-torch-latest-v100.yml +++ b/.github/workflows/nv-torch-latest-v100.yml @@ -38,7 +38,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - # git checkout 6c3f168b3 + git checkout 981c276 git rev-parse --short HEAD pip install . diff --git a/.github/workflows/nv-torch-nightly-v100.yml b/.github/workflows/nv-torch-nightly-v100.yml index db11fefe8a79..fd9617992215 100644 --- a/.github/workflows/nv-torch-nightly-v100.yml +++ b/.github/workflows/nv-torch-nightly-v100.yml @@ -2,11 +2,11 @@ name: nv-torch-nightly-v100 on: workflow_dispatch: - pull_request: - paths: - - '.github/workflows/nv-torch-nightly-v100.yml' schedule: - cron: "0 0 * * *" + pull_request: + paths: + - '.github/workflows/nv-torch-nightly-v100.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -37,7 +37,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - # git checkout 6c3f168b3 + git checkout 981c276 git rev-parse --short HEAD pip install . From 9da1b3365488b468ddc6fda72fe9b97cd6538032 Mon Sep 17 00:00:00 2001 From: Siddharth Singh Date: Thu, 27 Feb 2025 12:47:38 -0500 Subject: [PATCH 38/69] Update README.md with ICS '23 MoE paper link (#7087) Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7cd3f4088abf..a812779f0fcc 100755 --- a/README.md +++ b/README.md @@ -265,7 +265,7 @@ Conduct](https://opensource.microsoft.com/codeofconduct/). For more information 18. Syed Zawad, Cheng Li, Zhewei Yao, Elton Zheng, Yuxiong He, Feng Yan. (2023) DySR: Adaptive Super-Resolution via Algorithm and System Co-design. [ICLR:2023](https://openreview.net/forum?id=Pgtn4l6eKjv). 19. Sheng Shen, Zhewei Yao, Chunyuan Li, Trevor Darrell, Kurt Keutzer, Yuxiong He. (2023) Scaling Vision-Language Models with Sparse Mixture of Experts. [arXiv:2303.07226](https://arxiv.org/abs/2303.07226) and [Finding at EMNLP2023](https://2023.emnlp.org/). 20. Quentin Anthony, Ammar Ahmad Awan, Jeff Rasley, Yuxiong He, Aamir Shafi, Mustafa Abduljabbar, Hari Subramoni, Dhabaleswar Panda. (2023) MCR-DL: Mix-and-Match Communication Runtime for Deep Learning [arXiv:2303.08374](https://arxiv.org/abs/2303.08374) and will appear at IPDPS 2023. -21. Siddharth Singh, Olatunji Ruwase, Ammar Ahmad Awan, Samyam Rajbhandari, Yuxiong He, Abhinav Bhatele. (2023) A Hybrid Tensor-Expert-Data Parallelism Approach to Optimize Mixture-of-Experts Training [arXiv:2303.06318](https://arxiv.org/abs/2303.06318) and will appear at ICS 2023. +21. Siddharth Singh, Olatunji Ruwase, Ammar Ahmad Awan, Samyam Rajbhandari, Yuxiong He, Abhinav Bhatele. (2023) A Hybrid Tensor-Expert-Data Parallelism Approach to Optimize Mixture-of-Experts Training [arXiv:2303.06318](https://arxiv.org/abs/2303.06318) and [ICS 2023](https://dl.acm.org/doi/10.1145/3577193.3593704). 22. Guanhua Wang, Heyang Qin, Sam Ade Jacobs, Xiaoxia Wu, Connor Holmes, Zhewei Yao, Samyam Rajbhandari, Olatunji Ruwase, Feng Yan, Lei Yang, Yuxiong He. (2023) ZeRO++: Extremely Efficient Collective Communication for Giant Model Training [arXiv:2306.10209](https://arxiv.org/abs/2306.10209) and [ML for Sys Workshop at NeurIPS2023](http://mlforsystems.org/) [[blog]](https://www.microsoft.com/en-us/research/blog/deepspeed-zero-a-leap-in-speed-for-llm-and-chat-model-training-with-4x-less-communication/) 23. Zhewei Yao, Xiaoxia Wu, Cheng Li, Stephen Youn, Yuxiong He. (2023) ZeroQuant-V2: Exploring Post-training Quantization in LLMs from Comprehensive Study to Low Rank Compensation [arXiv:2303.08302](https://arxiv.org/abs/2303.08302) and [ENLSP2023 Workshop at NeurIPS2023](https://neurips2023-enlsp.github.io/) [[slides]](docs/assets/files/zeroquant_series.pdf) 24. Pareesa Ameneh Golnari, Zhewei Yao, Yuxiong He. (2023) Selective Guidance: Are All the Denoising Steps of Guided Diffusion Important? [arXiv:2305.09847](https://arxiv.org/abs/2305.09847) From f963248497b1f51744ebd07e93cc11ace5565695 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:47:49 -0800 Subject: [PATCH 39/69] Update parallelism for nv-torch-latest/nightly tests due to more GPUs/runner (#7086) Signed-off-by: Logan Adams Co-authored-by: Olatunji Ruwase Signed-off-by: Logan Adams --- .github/workflows/nv-torch-latest-v100.yml | 2 +- .github/workflows/nv-torch-nightly-v100.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nv-torch-latest-v100.yml b/.github/workflows/nv-torch-latest-v100.yml index e87d770a9349..d0e717eac21b 100644 --- a/.github/workflows/nv-torch-latest-v100.yml +++ b/.github/workflows/nv-torch-latest-v100.yml @@ -55,5 +55,5 @@ jobs: run: | unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch cd tests - pytest $PYTEST_OPTS --forked -n 4 unit/ --torch_ver="2.6" --cuda_ver="12.4" + pytest $PYTEST_OPTS --forked -n 8 unit/ --torch_ver="2.6" --cuda_ver="12.4" pytest $PYTEST_OPTS --forked -m 'sequential' unit/ --torch_ver="2.6" --cuda_ver="12.4" diff --git a/.github/workflows/nv-torch-nightly-v100.yml b/.github/workflows/nv-torch-nightly-v100.yml index fd9617992215..ce4b7f316881 100644 --- a/.github/workflows/nv-torch-nightly-v100.yml +++ b/.github/workflows/nv-torch-nightly-v100.yml @@ -54,7 +54,7 @@ jobs: run: | unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch cd tests - pytest $PYTEST_OPTS --forked -n 4 unit/ + pytest $PYTEST_OPTS --forked -n 8 unit/ pytest $PYTEST_OPTS --forked -m 'sequential' unit/ - name: Open GitHub issue if nightly CI fails From 8254e1b3707706ed727e735eabc29f1068115dce Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:33:01 -0800 Subject: [PATCH 40/69] Remove workflows for very old torch versions (#7090) These jobs haven't been run in a long time and were originally used when compatibility with torch <2 was more important. Signed-off-by: Logan Adams --- .github/workflows/nv-torch110-p40.yml | 65 ------------------------- .github/workflows/nv-torch110-v100.yml | 66 -------------------------- 2 files changed, 131 deletions(-) delete mode 100644 .github/workflows/nv-torch110-p40.yml delete mode 100644 .github/workflows/nv-torch110-v100.yml diff --git a/.github/workflows/nv-torch110-p40.yml b/.github/workflows/nv-torch110-p40.yml deleted file mode 100644 index 31d7805db7bb..000000000000 --- a/.github/workflows/nv-torch110-p40.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: nv-torch110-p40 - -on: - workflow_dispatch: - schedule: - - cron: "0 0 * * *" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - issues: write - -jobs: - unit-tests: - runs-on: [self-hosted, nvidia, cu111, p40] - - env: {ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true} # Allow using Node16 actions - - steps: - - uses: actions/checkout@v4 - - - id: setup-venv - uses: ./.github/workflows/setup-venv - - - name: Install pytorch - run: | - pip install -U --cache-dir $TORCH_CACHE torch==1.10.0+cu111 torchvision==0.11.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html - python -c "import torch; print('torch:', torch.__version__, torch)" - python -c "import torch; print('CUDA available:', torch.cuda.is_available())" - - - name: Install transformers - run: | - git clone https://github.com/huggingface/transformers - cd transformers - # if needed switch to the last known good SHA until transformers@master is fixed - # git checkout 1cc453d33 - git rev-parse --short HEAD - pip install . - - - name: Install deepspeed - run: | - pip install .[dev,1bit,autotuning] --no-build-isolation - ds_report - - - name: Python environment - run: | - pip list - - - name: Unit tests - run: | - unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch - cd tests - DS_ALLOW_DEPRECATED_FP16=1 pytest $PYTEST_OPTS --forked -n 4 unit/ --torch_ver="1.10" --cuda_ver="11.1" - - - name: Open GitHub issue if nightly CI fails - if: ${{ failure() && (github.event_name == 'schedule') }} - uses: JasonEtco/create-an-issue@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - filename: .github/ISSUE_TEMPLATE/ci_failure_report.md - update_existing: true diff --git a/.github/workflows/nv-torch110-v100.yml b/.github/workflows/nv-torch110-v100.yml deleted file mode 100644 index bb1bc987379c..000000000000 --- a/.github/workflows/nv-torch110-v100.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: nv-torch110-v100 - -on: - workflow_dispatch: - schedule: - - cron: "0 0 * * *" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - issues: write - -jobs: - unit-tests: - runs-on: [self-hosted, nvidia, cu111, v100] - - env: {ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true} # Allow using Node16 actions - - steps: - - uses: actions/checkout@v4 - - - id: setup-venv - uses: ./.github/workflows/setup-venv - - - name: Install pytorch - run: | - pip install -U --cache-dir $TORCH_CACHE torch==1.10.0+cu111 torchvision==0.11.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html - python -c "import torch; print('torch:', torch.__version__, torch)" - python -c "import torch; print('CUDA available:', torch.cuda.is_available())" - - - name: Install transformers - run: | - git clone https://github.com/huggingface/transformers - cd transformers - # if needed switch to the last known good SHA until transformers@master is fixed - # git checkout 1cc453d33 - git rev-parse --short HEAD - pip install . - - - name: Install deepspeed - run: | - pip install .[dev,1bit,autotuning] --no-build-isolation - ds_report - - - name: Python environment - run: | - pip list - - - name: Unit tests - run: | - unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch - cd tests - pytest $PYTEST_OPTS --forked -n 4 unit/ --torch_ver="1.10" --cuda_ver="11" - pytest $PYTEST_OPTS --forked -m 'sequential' unit/ --torch_ver="1.10" --cuda_ver="11" - - - name: Open GitHub issue if nightly CI fails - if: ${{ failure() && (github.event_name == 'schedule') }} - uses: JasonEtco/create-an-issue@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - filename: .github/ISSUE_TEMPLATE/ci_failure_report.md - update_existing: true From a7ab4ab7a90a6fe1bdc77818b31eb9f4eb6f3fff Mon Sep 17 00:00:00 2001 From: Olatunji Ruwase Date: Mon, 3 Mar 2025 12:50:24 -0500 Subject: [PATCH 41/69] Use new dlpack api; Formatting fixes (#7101) Fix CI issues by using new dlpack [api](https://pytorch.org/docs/stable/_modules/torch/utils/dlpack.html#from_dlpack) Minor pre-commit fixes. Signed-off-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/autotuning/autotuner.py | 4 ++-- deepspeed/inference/engine.py | 2 +- deepspeed/launcher/runner.py | 2 +- deepspeed/runtime/compression/cupy.py | 4 ++-- deepspeed/runtime/engine.py | 2 +- deepspeed/runtime/zero/partition_parameters.py | 3 +-- deepspeed/utils/logging.py | 2 +- op_builder/builder.py | 10 +++++----- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/deepspeed/autotuning/autotuner.py b/deepspeed/autotuning/autotuner.py index a72b3c951e97..419e92bd44ae 100755 --- a/deepspeed/autotuning/autotuner.py +++ b/deepspeed/autotuning/autotuner.py @@ -71,7 +71,7 @@ def __init__(self, args, active_resources): logger.info(f"Created autotuning experiments directory: {self.exps_dir}") except: logger.error( - f"Failed to create {self.exps_dir}, please check `exps_dir` in the autotuning config file is accessible by all the nodes in the job." + f"Failed to create {self.exps_dir}, please check exps_dir in the autotuning config file is accessible by all the nodes in the job." ) exit(-1) @@ -84,7 +84,7 @@ def __init__(self, args, active_resources): logger.info(f"Created autotuning results directory: {self.exps_dir}") except: logger.error( - f"Failed to create {self.results_dir}, please check `results_dir` in the autotuning config file is accessible by all the nodes in the job." + f"Failed to create {self.results_dir}, please check results_dir in the autotuning config file is accessible by all the nodes in the job." ) exit(-1) diff --git a/deepspeed/inference/engine.py b/deepspeed/inference/engine.py index a529d9343228..0a74d19e91f5 100755 --- a/deepspeed/inference/engine.py +++ b/deepspeed/inference/engine.py @@ -600,7 +600,7 @@ def _generate(self, *inputs, **kwargs): tensor_length = input_tensor.shape[-1] if tensor_length > self._config.max_out_tokens: raise RuntimeError( - f"Input with size {tensor_length} exceeds maximum length of {self._config.max_out_tokens}. Please increase `max_tokens` in the DeepSpeed Inference Config." + f"Input with size {tensor_length} exceeds maximum length of {self._config.max_out_tokens}. Please increase max_tokens in the DeepSpeed Inference Config." ) return self.module.generate(*inputs, **kwargs) diff --git a/deepspeed/launcher/runner.py b/deepspeed/launcher/runner.py index 5f926834dda2..bea1e14fa51f 100755 --- a/deepspeed/launcher/runner.py +++ b/deepspeed/launcher/runner.py @@ -491,7 +491,7 @@ def main(args=None): args.master_addr = result.decode('utf-8').split()[0] if not args.master_addr: raise RuntimeError( - f"Unable to detect suitable master address via `hostname -I`, please manually specify one via --master_addr" + "Unable to detect suitable master address via `hostname -I`, please manually specify one via --master_addr" ) logger.info(f"Using IP address of {args.master_addr} for node {first_host}") diff --git a/deepspeed/runtime/compression/cupy.py b/deepspeed/runtime/compression/cupy.py index b959a9c20372..7133ac04ed2b 100644 --- a/deepspeed/runtime/compression/cupy.py +++ b/deepspeed/runtime/compression/cupy.py @@ -14,10 +14,10 @@ def __init__(self): pass def torch2cupy(self, tensor): - return cupy.fromDlpack(to_dlpack(tensor)) + return cupy.from_dlpack(to_dlpack(tensor)) def cupy2torch(self, cupy_tensor): - return from_dlpack(cupy_tensor.toDlpack()) + return from_dlpack(cupy_tensor) def compress_by_chunk(self, cupy_bool_tensor, num_chunks): packed_sign = cupy.packbits(cupy_bool_tensor) diff --git a/deepspeed/runtime/engine.py b/deepspeed/runtime/engine.py index 4d932f8d5046..df6d286494de 100755 --- a/deepspeed/runtime/engine.py +++ b/deepspeed/runtime/engine.py @@ -3790,7 +3790,7 @@ def save_16bit_model(self, save_dir, save_filename="pytorch_model.bin", exclude_ else: # the model will be bogus if not consolidated so don't confuse the user by saving it logger.info( - f"Did not save the model {path} because `stage3_gather_16bit_weights_on_model_save` is False") + f"Did not save the model {path} because stage3_gather_16bit_weights_on_model_save is False") return False else: state_dict = self.module_state_dict(exclude_frozen_parameters=exclude_frozen_parameters) diff --git a/deepspeed/runtime/zero/partition_parameters.py b/deepspeed/runtime/zero/partition_parameters.py index e8cb797b8a5b..db03a4b86134 100755 --- a/deepspeed/runtime/zero/partition_parameters.py +++ b/deepspeed/runtime/zero/partition_parameters.py @@ -944,8 +944,7 @@ def __init__(self, """ if config is not None: config_dict_or_path = config - logger.warning( - f'zero.Init: the `config` argument is deprecated. Please use `config_dict_or_path` instead.') + logger.warning('zero.Init: the `config` argument is deprecated. Please use `config_dict_or_path` instead.') _ds_config = deepspeed.runtime.config.DeepSpeedConfig(config_dict_or_path, mpu) if config_dict_or_path is not None else None if _ds_config is not None: diff --git a/deepspeed/utils/logging.py b/deepspeed/utils/logging.py index 77173f2839ca..ed691e3985e1 100644 --- a/deepspeed/utils/logging.py +++ b/deepspeed/utils/logging.py @@ -158,6 +158,6 @@ def should_log_le(max_log_level_str): max_log_level_str = max_log_level_str.lower() if max_log_level_str not in log_levels: - raise ValueError(f"{max_log_level_str} is not one of the `logging` levels") + raise ValueError(f"{max_log_level_str} is not one of the logging levels") return get_current_level() <= log_levels[max_log_level_str] diff --git a/op_builder/builder.py b/op_builder/builder.py index 41c0a154186f..9b721e110fcc 100644 --- a/op_builder/builder.py +++ b/op_builder/builder.py @@ -412,8 +412,8 @@ def cpu_arch(self): try: cpu_info = get_cpu_info() except Exception as e: - self.warning(f"{self.name} attempted to use `py-cpuinfo` but failed (exception type: {type(e)}, {e}), " - "falling back to `lscpu` to get this information.") + self.warning(f"{self.name} attempted to use py-cpuinfo but failed (exception type: {type(e)}, {e}), " + "falling back to lscpu to get this information.") cpu_info = self._backup_cpuinfo() if cpu_info is None: return "-march=native" @@ -471,8 +471,8 @@ def simd_width(self): try: cpu_info = get_cpu_info() except Exception as e: - self.warning(f"{self.name} attempted to use `py-cpuinfo` but failed (exception type: {type(e)}, {e}), " - "falling back to `lscpu` to get this information.") + self.warning(f"{self.name} attempted to use py-cpuinfo but failed (exception type: {type(e)}, {e}), " + "falling back to lscpu to get this information.") cpu_info = self._backup_cpuinfo() if cpu_info is None: return '-D__SCALAR__' @@ -642,7 +642,7 @@ def compute_capability_args(self, cross_compile_archs=None): if cross_compile_archs_env is not None: if cross_compile_archs is not None: print( - f"{WARNING} env var `TORCH_CUDA_ARCH_LIST={cross_compile_archs_env}` overrides `cross_compile_archs={cross_compile_archs}`" + f"{WARNING} env var TORCH_CUDA_ARCH_LIST={cross_compile_archs_env} overrides cross_compile_archs={cross_compile_archs}" ) cross_compile_archs = cross_compile_archs_env.replace(' ', ';') else: From 6eb5baa7e0a83cfba44ed465c2825edda6b5a4dd Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Tue, 4 Mar 2025 00:54:08 +0200 Subject: [PATCH 42/69] Avoid graph breaks by disabling sourceless calls in instrument_w_nvtx (#7081) This PR is a continuation of the efforts to improve Deepspeed performance when using PyTorch compile. The `instrument_w_nvtx` decorator is used to instrument code with NVIDIA Tools Extension (NVTX) markers for profiling and visualizing code execution on GPUs. Along with executing the function itself, `instrument_w_nvtx` makes calls to `nvtx.range_push` and `nvtx.range_pop` which can't be traced by Dynamo. That's why this decorator causes a graph break. The impact on performance can be significant due to numerous uses of the decorator throughout the code. We propose a simple solution: Don't invoke the sourceless functions when torch is compiling. --------- Signed-off-by: Max Kovalenko Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/utils/nvtx.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/deepspeed/utils/nvtx.py b/deepspeed/utils/nvtx.py index 7c566480a86a..72d7c863a33f 100644 --- a/deepspeed/utils/nvtx.py +++ b/deepspeed/utils/nvtx.py @@ -4,19 +4,21 @@ # DeepSpeed Team from deepspeed.accelerator import get_accelerator +from deepspeed.runtime.compiler import is_compiling enable_nvtx = True def instrument_w_nvtx(func): - """decorator that causes an NVTX range to be recorded for the duration of the - function call.""" + """Decorator that records an NVTX range for the duration of the function call. + Skips NVTX instrumentation when torch.compile is active to avoid graph breaks. + """ def wrapped_fn(*args, **kwargs): - if enable_nvtx: + if enable_nvtx and not is_compiling(): get_accelerator().range_push(func.__qualname__) ret_val = func(*args, **kwargs) - if enable_nvtx: + if enable_nvtx and not is_compiling(): get_accelerator().range_pop() return ret_val From feeaa2e411d29376e97600fad0ced8b3fb613332 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Tue, 4 Mar 2025 02:41:51 +0200 Subject: [PATCH 43/69] Avoid graph breaks in torch.compile caused by inner classes in the backward hooks (#7062) This PR is part of the effort to improve Deepspeed performance when using PyTorch compile. There is a known [bug](https://github.com/pytorch/pytorch/issues/128942) in torch.compile which causes a graph break when an inner class is defined within a method that is being compiled. The following would then appear in the log: `[__graph_breaks] torch._dynamo.exc.Unsupported: missing: LOAD_BUILD_CLASS` This is the case with the inner classes `PreBackwardFunctionForModule` and `PostBackwardFunctionModule`. While there is an open PyTorch [PR#133805 ](https://github.com/pytorch/pytorch/pull/133805) for this, we can solve the issue by moving the inner classes into the initialization code. No graph breaks and the corresponding logs are produced anymore. --------- Signed-off-by: Max Kovalenko Signed-off-by: Olatunji Ruwase Signed-off-by: inkcherry Signed-off-by: shaomin Signed-off-by: Stas Bekman Signed-off-by: siqi Signed-off-by: Logan Adams Signed-off-by: Wei Wu Signed-off-by: ShellyNR Signed-off-by: Lai, Yejing Co-authored-by: Olatunji Ruwase Co-authored-by: inkcherry Co-authored-by: wukong1992 Co-authored-by: shaomin Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: loadams Co-authored-by: Stas Bekman Co-authored-by: siqi654321 Co-authored-by: siqi Co-authored-by: Wei Wu <45323446+U-rara@users.noreply.github.com> Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Co-authored-by: Shelly Nahir <73890534+ShellyNR@users.noreply.github.com> Co-authored-by: snahir Co-authored-by: Yejing-Lai Signed-off-by: Logan Adams --- deepspeed/runtime/zero/parameter_offload.py | 136 ++++++++++---------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/deepspeed/runtime/zero/parameter_offload.py b/deepspeed/runtime/zero/parameter_offload.py index 09de21502c27..2706d4474515 100644 --- a/deepspeed/runtime/zero/parameter_offload.py +++ b/deepspeed/runtime/zero/parameter_offload.py @@ -341,39 +341,6 @@ def _bwd_hook_unexpected_inputs_msg(value): def _pre_backward_module_hook(module, inputs, output): - if not hasattr(module, "pre_bwd_fn"): - - @instrument_w_nvtx - def _run_before_backward_function(sub_module): - # some models (e.g. Albert) may run multiple forwards on the same layer in a loop - # before doing backwards, so each backward will need a pre-fetch - using reference - # counting to support this scenario - #print(f"COUNTER before: {sub_module.applied_pre_backward_ref_cnt}") - if sub_module.applied_pre_backward_ref_cnt > 0: - self.pre_sub_module_backward_function(sub_module) - sub_module.applied_pre_backward_ref_cnt -= 1 - #print(f"COUNTER after: {sub_module.applied_pre_backward_ref_cnt}") - - class PreBackwardFunctionForModule(torch.autograd.Function): - - @staticmethod - def forward(ctx, outputs): - # Capture `module` and _run_before_backward_function - ctx.module = module - ctx.pre_backward_function = _run_before_backward_function - if not hasattr(ctx.module, "applied_pre_backward_ref_cnt"): - ctx.module.applied_pre_backward_ref_cnt = 0 - ctx.module.applied_pre_backward_ref_cnt += 1 - outputs = outputs.detach() - return outputs - - @staticmethod - def backward(ctx, *args): - ctx.pre_backward_function(ctx.module) - return args - - module.pre_bwd_fn = PreBackwardFunctionForModule - return apply_to_tensors_only(module.pre_bwd_fn.apply, output, warning_msg_fn=_bwd_hook_unexpected_inputs_msg) @@ -402,41 +369,6 @@ def _post_backward_module_hook(module, inputs): if not hasattr(module, "ds_grads_remaining"): module.ds_grads_remaining = 0 - if not hasattr(module, "post_bwd_fn"): - - @instrument_w_nvtx - def _run_after_backward_function(sub_module): - if sub_module.ds_grads_remaining == 0: - self.post_sub_module_backward_function(sub_module) - - class PostBackwardFunctionModule(torch.autograd.Function): - - @staticmethod - def forward(ctx, output): - ctx.module = module - if output.requires_grad: - #TODO SOME TIMES post backward does not seem to be triggered debug in detail - #Should only cause increase in memory not correctness issue - #if output.grad_fn.__class__.__name__ == 'ViewBackward': - # ctx.view=True - # print(f"Warning view tensor for input to module : {module.__class__.__name__}. Backward hooks may not trigger properly") - #assert len(module.parameters(recurse=False)), "The input tensor to the module is a view, and autograd Function or register_hook is not triggered with view tensors." - #if module.ds_grads_remaining == 0: - # print(f"Before Forward: {ctx.module.__class__.__name__}") - module.ds_grads_remaining += 1 - ctx.post_backward_function = _run_after_backward_function - output = output.detach() - return output - - @staticmethod - def backward(ctx, *args): - ctx.module.ds_grads_remaining = ctx.module.ds_grads_remaining - 1 - if ctx.module.ds_grads_remaining == 0: - ctx.post_backward_function(ctx.module) - return args - - module.post_bwd_fn = PostBackwardFunctionModule - return apply_to_tensors_only(module.post_bwd_fn.apply, inputs, warning_msg_fn=_bwd_hook_unexpected_inputs_msg) @@ -448,9 +380,77 @@ def backward(ctx, *args): self.forward_hooks.append(module.register_forward_hook(_post_forward_module_hook)) # Pre backward hook + if not hasattr(module, "pre_bwd_fn"): + + @instrument_w_nvtx + def _run_before_backward_function(sub_module): + # some models (e.g. Albert) may run multiple forwards on the same layer in a loop + # before doing backwards, so each backward will need a pre-fetch - using reference + # counting to support this scenario + #print(f"COUNTER before: {sub_module.applied_pre_backward_ref_cnt}") + if sub_module.applied_pre_backward_ref_cnt > 0: + self.pre_sub_module_backward_function(sub_module) + sub_module.applied_pre_backward_ref_cnt -= 1 + #print(f"COUNTER after: {sub_module.applied_pre_backward_ref_cnt}") + + class PreBackwardFunctionForModule(torch.autograd.Function): + + @staticmethod + def forward(ctx, outputs): + # Capture `module` and _run_before_backward_function + ctx.module = module + ctx.pre_backward_function = _run_before_backward_function + if not hasattr(ctx.module, "applied_pre_backward_ref_cnt"): + ctx.module.applied_pre_backward_ref_cnt = 0 + ctx.module.applied_pre_backward_ref_cnt += 1 + outputs = outputs.detach() + return outputs + + @staticmethod + def backward(ctx, *args): + ctx.pre_backward_function(ctx.module) + return args + + module.pre_bwd_fn = PreBackwardFunctionForModule + self.backward_hooks.append(module.register_forward_hook(_pre_backward_module_hook)) # post backward hook + if not hasattr(module, "post_bwd_fn"): + + @instrument_w_nvtx + def _run_after_backward_function(sub_module): + if sub_module.ds_grads_remaining == 0: + self.post_sub_module_backward_function(sub_module) + + class PostBackwardFunctionModule(torch.autograd.Function): + + @staticmethod + def forward(ctx, output): + ctx.module = module + if output.requires_grad: + #TODO SOME TIMES post backward does not seem to be triggered debug in detail + #Should only cause increase in memory not correctness issue + #if output.grad_fn.__class__.__name__ == 'ViewBackward': + # ctx.view=True + # print(f"Warning view tensor for input to module : {module.__class__.__name__}. Backward hooks may not trigger properly") + #assert len(module.parameters(recurse=False)), "The input tensor to the module is a view, and autograd Function or register_hook is not triggered with view tensors." + #if module.ds_grads_remaining == 0: + # print(f"Before Forward: {ctx.module.__class__.__name__}") + module.ds_grads_remaining += 1 + ctx.post_backward_function = _run_after_backward_function + output = output.detach() + return output + + @staticmethod + def backward(ctx, *args): + ctx.module.ds_grads_remaining = ctx.module.ds_grads_remaining - 1 + if ctx.module.ds_grads_remaining == 0: + ctx.post_backward_function(ctx.module) + return args + + module.post_bwd_fn = PostBackwardFunctionModule + self.backward_hooks.append(module.register_forward_pre_hook(_post_backward_module_hook)) @torch.no_grad() From 7b7e1122dc77ed232b9c078ab8eace993cc64831 Mon Sep 17 00:00:00 2001 From: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Date: Tue, 4 Mar 2025 08:15:03 -0800 Subject: [PATCH 44/69] Only run pre-commit on the changes (#7106) Run pre-commit on all files may change files that are not part of the current branch. The updated script will only run pre-commit on the files that have been changed in the current branch. Signed-off-by: Hongwei Signed-off-by: Logan Adams --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e8e160269695..bfc22afb5359 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,7 +13,7 @@ pre-commit install Afterwards, our suite of formatting tests run automatically before each `git commit`. You can also run these manually: ```bash -pre-commit run --all-files +pre-commit run --files $(git diff --name-only master) ``` If a formatting test fails, it will fix the modified code in place and abort the `git commit`. After looking over the changes, you can `git add ` From 674f9bd5bcc3d7a5aed460f06abda9bd907fb071 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Tue, 4 Mar 2025 19:16:21 +0200 Subject: [PATCH 45/69] Avoid graph break due to unsupported frozenset (#7105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR is a continuation of the efforts to improve Deepspeed performance when using PyTorch compile. The `fetch_sub_module()` routine makes use of the `frozenset` which is problematic because: 1. `iter_params` returns an iterable over model parameters 2. `frozenset` wraps this iterable, making it unmodifiable 3. PyTorch’s compilation process cannot infer how `frozenset` interacts with tensors, leading to a graph break. If we replace the `frozenset` with a modifiable `set`, then there is no longer such graph break. Signed-off-by: Max Kovalenko Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Co-authored-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/runtime/zero/partitioned_param_coordinator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepspeed/runtime/zero/partitioned_param_coordinator.py b/deepspeed/runtime/zero/partitioned_param_coordinator.py index d5b5db859e31..3417080b1bea 100644 --- a/deepspeed/runtime/zero/partitioned_param_coordinator.py +++ b/deepspeed/runtime/zero/partitioned_param_coordinator.py @@ -297,7 +297,7 @@ def fetch_sub_module(self, current_submodule: Module, forward: bool) -> None: "inflight": [p.ds_id for p in self.__inflight_param_registry], })) - params_to_fetch = frozenset(iter_params(current_submodule, recurse=z3_leaf_module(current_submodule))) + params_to_fetch = set(iter_params(current_submodule, recurse=z3_leaf_module(current_submodule))) fetch_numel = sum( [p.partition_numel() for p in params_to_fetch if p.ds_status == ZeroParamStatus.NOT_AVAILABLE]) From 240c2a7b243c884b9fce845686c44a6e69082797 Mon Sep 17 00:00:00 2001 From: Yejing-Lai Date: Wed, 5 Mar 2025 05:17:12 +0800 Subject: [PATCH 46/69] Fix fused_qkv print model ValueError (#7109) Suppose qkv_linear_weight_shape = [in_features, out_features]. The qkv linear weight shape is [3, in_features, out_features] if using fued_qkv gemm optimization. It will cause "ValueError: too many values to unpack (expected 2)" issue when printing the model. Solution: Take the last two weight dimensions shapes as in_features and out_features. Signed-off-by: Lai, Yejing Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/module_inject/layers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepspeed/module_inject/layers.py b/deepspeed/module_inject/layers.py index 5087d71a3d62..0c673225a732 100644 --- a/deepspeed/module_inject/layers.py +++ b/deepspeed/module_inject/layers.py @@ -229,7 +229,7 @@ def __deepcopy__(self, memo): def extra_repr(self): if self.weight is not None: - out_features, in_features = self.weight.shape if self.weight is not None else (None, None) + out_features, in_features = self.weight.shape[-2:] if self.weight is not None else (None, None) dtype = self.weight.dtype if self.weight is not None else None extra_repr_str = "in_features={}, out_features={}, bias={}, dtype={}".format( in_features, out_features, self.bias is not None, dtype) From 1c35241b67d4527a219ea306b7a41886758df6df Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Tue, 4 Mar 2025 15:22:38 -0800 Subject: [PATCH 47/69] Update references to new X/Twitter handle (#7110) As a part of joining the Linux Foundation AI&Data it makes sense to rename the X/Twitter accounts associated with DeepSpeed. --------- Signed-off-by: Logan Adams --- README.md | 4 ++-- blogs/deepspeed-chat/README.md | 2 +- blogs/deepspeed-chat/chinese/README.md | 2 +- blogs/deepspeed-chat/ds-chat-release-8-31/README.md | 2 +- blogs/deepspeed-chat/japanese/README.md | 2 +- blogs/deepspeed-fastgen/2024-01-19/README.md | 2 +- blogs/deepspeed-fastgen/README.md | 2 +- blogs/deepspeed-fastgen/chinese/README.md | 2 +- blogs/deepspeed-fastgen/japanese/README.md | 2 +- blogs/deepspeed-fp6/03-05-2024/README-Chinese.md | 2 +- blogs/deepspeed-fp6/03-05-2024/README.md | 2 +- blogs/deepspeed-ucp/README.md | 4 ++-- blogs/deepspeed-ucp/chinese/README.md | 2 +- blogs/deepspeed-ucp/japanese/README.md | 2 +- blogs/deepspeed-ulysses/README.md | 2 +- blogs/deepspeed-ulysses/chinese/README.md | 2 +- blogs/deepspeed-ulysses/japanese/README.md | 2 +- blogs/deepspeed-visualchat/10-03-2023/README-Chinese.md | 2 +- blogs/deepspeed-visualchat/10-03-2023/README-Japanese.md | 2 +- blogs/deepspeed-visualchat/10-03-2023/README.md | 2 +- blogs/ulysses-offload/README.md | 4 ++-- blogs/zeropp/chinese/README.md | 2 +- blogs/zeropp/japanese/README.md | 2 +- 23 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a812779f0fcc..6922e55b4144 100755 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ [![Downloads](https://static.pepy.tech/badge/deepspeed)](https://pepy.tech/project/deepspeed) [![Build](https://badgen.net/badge/build/check-status/blue)](#build-pipeline-status) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9530/badge)](https://www.bestpractices.dev/projects/9530) -[![Twitter](https://img.shields.io/twitter/follow/MSFTDeepSpeed)](https://twitter.com/intent/follow?screen_name=MSFTDeepSpeed) -[![Japanese Twitter](https://img.shields.io/badge/%E6%97%A5%E6%9C%AC%E8%AA%9ETwitter-%40MSFTDeepSpeedJP-blue)](https://twitter.com/MSFTDeepSpeedJP) +[![Twitter](https://img.shields.io/twitter/follow/DeepSpeedAI)](https://twitter.com/intent/follow?screen_name=DeepSpeedAI) +[![Japanese Twitter](https://img.shields.io/badge/%E6%97%A5%E6%9C%AC%E8%AA%9ETwitter-%40DeepSpeedAI_JP-blue)](https://twitter.com/DeepSpeedAI_JP) [![Chinese Zhihu](https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-%E5%BE%AE%E8%BD%AFDeepSpeed-blue)](https://www.zhihu.com/people/deepspeed) diff --git a/blogs/deepspeed-chat/README.md b/blogs/deepspeed-chat/README.md index 3ed8b284940a..66fa9930b299 100644 --- a/blogs/deepspeed-chat/README.md +++ b/blogs/deepspeed-chat/README.md @@ -327,6 +327,6 @@ We are very excited to share that DeepSpeed-Chat is now open-sourced and availab DeepSpeed-Chat is part of the bigger DeepSpeed ecosystem comprising a multitude of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* You can also follow us on our [English Twitter](https://twitter.com/MSFTDeepSpeed), [Japanese Twitter](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* You can also follow us on our [English Twitter](https://twitter.com/DeepSpeedAI), [Japanese Twitter](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. DeepSpeed welcomes your contributions! We encourage you to report issues, contribute PRs, and join discussions on the [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) page. Please see our [contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) for more details. We are open to collaborations with universities, research labs, companies, such as those working together on deep learning research, applying DeepSpeed to empower real-world AI models and applications, and so on. For such requests (and other requests unsuitable for GitHub), please directly email to deepspeed-info@microsoft.com. diff --git a/blogs/deepspeed-chat/chinese/README.md b/blogs/deepspeed-chat/chinese/README.md index 4ec29c6811e5..64c7822e021d 100644 --- a/blogs/deepspeed-chat/chinese/README.md +++ b/blogs/deepspeed-chat/chinese/README.md @@ -319,7 +319,7 @@ DeepSpeed-HE 的核心技术基于 ZeRO,用于训练过程中将模型状态 DeepSpeed-Chat 是更大的DeepSpeed生态系统的一部分,包括众多深度学习系统和建模技术。要了解更多信息, * 请访问我们的[网站](https://www.deepspeed.ai/),了解详细的博客文章、教程和有用的文档。 -* 我们会在[知乎](https://www.zhihu.com/people/deepspeed)上发布最新中文博客及动态。你还可以关注我们的[英文 Twitter](https://twitter.com/MSFTDeepSpeed) 和[日文 Twitter](https://twitter.com/MSFTDeepSpeedJP)。 +* 我们会在[知乎](https://www.zhihu.com/people/deepspeed)上发布最新中文博客及动态。你还可以关注我们的[英文 Twitter](https://twitter.com/DeepSpeedAI) 和[日文 Twitter](https://twitter.com/DeepSpeedAI_JP)。 DeepSpeed 欢迎你的贡献!我们鼓励你在 [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) 页面报告问题、贡献 PR 并参与讨论。请参阅我们的[贡献指南](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)了解更多详情。我们愿意与大学、研究实验室、公司等进行合作,共同开展深度学习研究,将 DeepSpeed 应用于赋能现实世界的 AI 模型和应用等。对于此类需求(以及其他不适合在 GitHub 上提出的需求),请直接发送电子邮件至 deepspeed-info@microsoft.com。 diff --git a/blogs/deepspeed-chat/ds-chat-release-8-31/README.md b/blogs/deepspeed-chat/ds-chat-release-8-31/README.md index 828a77aa8431..2b1ffbe73ae3 100644 --- a/blogs/deepspeed-chat/ds-chat-release-8-31/README.md +++ b/blogs/deepspeed-chat/ds-chat-release-8-31/README.md @@ -345,7 +345,7 @@ We are very excited to share this DeepSpeed-Chat feature and stability release. DeepSpeed-Chat is part of the bigger DeepSpeed ecosystem comprising of a multitude of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* You can also follow us on our [English Twitter](https://twitter.com/MSFTDeepSpeed), [Japanese Twitter](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* You can also follow us on our [English Twitter](https://twitter.com/DeepSpeedAI), [Japanese Twitter](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. DeepSpeed welcomes your contributions! We encourage you to report issues, contribute PRs, and join discussions on the [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) page. Please see our [contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) for more details. We are open to collaborations with universities, research labs, companies, such as those working together on deep learning research, applying DeepSpeed to empower real-world AI models and applications, and so on. For such requests (and other requests unsuitable for GitHub), please directly email to deepspeed-info@microsoft.com. diff --git a/blogs/deepspeed-chat/japanese/README.md b/blogs/deepspeed-chat/japanese/README.md index 7bcbb61d630c..daa9b387de28 100644 --- a/blogs/deepspeed-chat/japanese/README.md +++ b/blogs/deepspeed-chat/japanese/README.md @@ -337,7 +337,7 @@ DeepSpeedは、Microsoftの[AI at Scale initiative](https://www.microsoft.com/en DeepSpeedについてのより詳しい情報は、以下をご覧ください。 * [DeepSpeedのWebサイト](https://www.deepspeed.ai/) には、DeepSpeedの技術に関する詳細なブログ記事、チュートリアル、ドキュメントなどが掲載されています。 -* [DeepSpeedのTwitterアカウント (英語)](https://twitter.com/MSFTDeepSpeed) では、DeepSpeedの最新情報を発信していますので、ぜひフォローください。[日本語版のTwitterアカウント](https://twitter.com/MSFTDeepSpeedJP)もあり、最新の情報を日本語で発信しています。 +* [DeepSpeedのTwitterアカウント (英語)](https://twitter.com/DeepSpeedAI) では、DeepSpeedの最新情報を発信していますので、ぜひフォローください。[日本語版のTwitterアカウント](https://twitter.com/DeepSpeedAI_JP)もあり、最新の情報を日本語で発信しています。 DeepSpeedチームは、ユーザの方々からのフィードバックやご連絡を受け付けています。 diff --git a/blogs/deepspeed-fastgen/2024-01-19/README.md b/blogs/deepspeed-fastgen/2024-01-19/README.md index 108f3af23d45..06650d8473a1 100644 --- a/blogs/deepspeed-fastgen/2024-01-19/README.md +++ b/blogs/deepspeed-fastgen/2024-01-19/README.md @@ -176,7 +176,7 @@ We are very excited to share this DeepSpeed-FastGen release. DeepSpeed-FastGen is part of the bigger DeepSpeed ecosystem comprising a multitude of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* You can also follow us on our [English Twitter](https://twitter.com/MSFTDeepSpeed), [Japanese Twitter](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* You can also follow us on our [English Twitter](https://twitter.com/DeepSpeedAI), [Japanese Twitter](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. The following items are on our roadmap and we plan to engage with our community on these through our GitHub issues and PRs: diff --git a/blogs/deepspeed-fastgen/README.md b/blogs/deepspeed-fastgen/README.md index 2a5f547fb6bd..4217e5d4a996 100644 --- a/blogs/deepspeed-fastgen/README.md +++ b/blogs/deepspeed-fastgen/README.md @@ -291,7 +291,7 @@ We are very excited to share this DeepSpeed-FastGen alpha release. DeepSpeed-FastGen is part of the bigger DeepSpeed ecosystem comprising a multitude of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* You can also follow us on our [English Twitter](https://twitter.com/MSFTDeepSpeed), [Japanese Twitter](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* You can also follow us on our [English Twitter](https://twitter.com/DeepSpeedAI), [Japanese Twitter](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. DeepSpeed welcomes your contributions! We encourage you to report issues, contribute PRs, and join discussions on the [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) page. Please see our [contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) for more details. We are open to collaborations with universities, research labs, and companies, such as those working together on deep learning research, applying DeepSpeed to empower real-world AI models and applications, and so on. For such requests (and other requests unsuitable for GitHub), please directly email to deepspeed-info@microsoft.com. diff --git a/blogs/deepspeed-fastgen/chinese/README.md b/blogs/deepspeed-fastgen/chinese/README.md index 357c70ca39eb..2885799912ae 100644 --- a/blogs/deepspeed-fastgen/chinese/README.md +++ b/blogs/deepspeed-fastgen/chinese/README.md @@ -285,7 +285,7 @@ client.terminate_server() DeepSpeed-FastGen 是更大的 DeepSpeed 生态系统的一部分,该生态系统包含了多种深度学习系统和建模技术。要了解更多, * 请访问我们的[网站](https://www.deepspeed.ai/),详细查看博客文章、教程和有用的文档。 -* 您也可以通过我们的[英文 Twitter](https://twitter.com/MSFTDeepSpeed)、[日本 Twitter](https://twitter.com/MSFTDeepSpeedJP) 和[中文知乎](https://www.zhihu.com/people/deepspeed) 关注我们,以获取 DeepSpeed 的最新消息。 +* 您也可以通过我们的[英文 Twitter](https://twitter.com/DeepSpeedAI)、[日本 Twitter](https://twitter.com/DeepSpeedAI_JP) 和[中文知乎](https://www.zhihu.com/people/deepspeed) 关注我们,以获取 DeepSpeed 的最新消息。 DeepSpeed 欢迎您的贡献!我们鼓励您在 [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) 页面上报告问题、贡献 PR,并参与讨论。有关更多详细信息,请参见我们的[贡献指南](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)。我们愿意与大学、研究实验室和公司合作,比如那些在深度学习研究上共同工作,应用 DeepSpeed 来赋能真实世界的 AI 模型和应用等。对于那些不适合在 GitHub 上提出的请求(以及其他请求),请直接发送电子邮件至 deepspeed-info@microsoft.com。 diff --git a/blogs/deepspeed-fastgen/japanese/README.md b/blogs/deepspeed-fastgen/japanese/README.md index 5e7c59893d84..2ce25e62c551 100644 --- a/blogs/deepspeed-fastgen/japanese/README.md +++ b/blogs/deepspeed-fastgen/japanese/README.md @@ -296,7 +296,7 @@ DeepSpeed-FastGenでは、このコンパイル時間を大幅に短縮し、利 DeepSpeed-FastGenは、Deep Learningシステムやモデリングテクノロジーを数多く含む、より大きなDeepSpeedエコシステムの一部です。さらに詳しい情報が必要な方は、 [詳細なブログ記事]、チュートリアル、役立つドキュメントがある私たちの [ウェブサイト](https://www.deepspeed.ai/) をご覧ください。 -DeepSpeedの最新情報については、[英語のTwitter](https://twitter.com/MSFTDeepSpeed)、[日本語のTwitter](https://twitter.com/MSFTDeepSpeedJP)、[中国語の知乎](https://www.zhihu.com/people/deepspeed)をフォローしてください。 +DeepSpeedの最新情報については、[英語のTwitter](https://twitter.com/DeepSpeedAI)、[日本語のTwitter](https://twitter.com/DeepSpeedAI_JP)、[中国語の知乎](https://www.zhihu.com/people/deepspeed)をフォローしてください。 DeepSpeedは、皆様の開発への参加を歓迎しています。DeepSpeedのGitHubページで、バグ報告、Pull Request、ディスカッションへの参加が可能です。詳細は[ガイドライン](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)をご覧ください。[contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) にはより詳細な情報があります。 また、深層学習の研究や、実世界のAIモデルやアプリケーションへのDeepSpeedの適用に取り組む大学、研究所、企業とのコラボレーションも行っています。こうしたコラボレーションについてのご要望(およびGitHubには適さないその他の話題)については まで直接メールをお送りください。 diff --git a/blogs/deepspeed-fp6/03-05-2024/README-Chinese.md b/blogs/deepspeed-fp6/03-05-2024/README-Chinese.md index 017e7c9ab4d8..a880836ea2e2 100644 --- a/blogs/deepspeed-fp6/03-05-2024/README-Chinese.md +++ b/blogs/deepspeed-fp6/03-05-2024/README-Chinese.md @@ -119,7 +119,7 @@ https://github.com/deepspeedai/DeepSpeedExamples/blob/master/benchmarks/inferenc 我们的DeepSpeed-FP6目前仅支持线性GEMM。我们期待未来能够支持MoE GEMM。我们将继续根据您的反馈和支持改进DeepSpeed-FP6。DeepSpeed-FP6是更大DeepSpeed生态系统的一部分,包括一系列深度学习系统和建模技术。要了解更多, * 请访问我们的 [网站](https://www.deepspeed.ai/) 了解详细的博客文章、教程和文档。 -* 在我们的 [英文 X(Twitter)](https://twitter.com/MSFTDeepSpeed)、[日语 X(Twitter)](https://twitter.com/MSFTDeepSpeedJP) 和 [中文知乎](https://www.zhihu.com/people/deepspeed) 上关注我们,以获取 DeepSpeed 的最新消息。 +* 在我们的 [英文 X(Twitter)](https://twitter.com/DeepSpeedAI)、[日语 X(Twitter)](https://twitter.com/DeepSpeedAI_JP) 和 [中文知乎](https://www.zhihu.com/people/deepspeed) 上关注我们,以获取 DeepSpeed 的最新消息。 我们欢迎您为 DeepSpeed 做出贡献!我们鼓励您报告问题、贡献 PRs、并在 [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) 页面上参加讨论。有关更多详细信息,请查看我们的 [贡献指南](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)。我们对与大学、研究实验室、公司等进行合作持开放态度,例如共同进行深度学习研究、应用 DeepSpeed 为现实世界的 AI 模型和应用提供支持等等。对于此类请求(以及其他不适合 GitHub 的请求),请直接发送电子邮件至 deepspeed-info@microsoft.com。 diff --git a/blogs/deepspeed-fp6/03-05-2024/README.md b/blogs/deepspeed-fp6/03-05-2024/README.md index 5f5b4700e403..9455938d38fc 100755 --- a/blogs/deepspeed-fp6/03-05-2024/README.md +++ b/blogs/deepspeed-fp6/03-05-2024/README.md @@ -120,7 +120,7 @@ Please also visit the [FP6-LLM github](https://github.com/usyd-fsalab/fp6_llm) f Currently, DeepSpeed-FP6 supports only dense models with MoE models support upcoming. We will continue to improve DeepSpeed-FP6 with your feedback and support. DeepSpeed-FP6 is a component of the larger DeepSpeed ecosystem, which includes a range of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* Follow us on our [English X(Twitter)](https://twitter.com/MSFTDeepSpeed), [Japanese X(Twitter)](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* Follow us on our [English X(Twitter)](https://twitter.com/DeepSpeedAI), [Japanese X(Twitter)](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. We welcome your contributions to DeepSpeed! We encourage you to report issues, contribute PRs, and join discussions on the [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) page. Please see our [contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) for more details. We are open to collaborations with universities, research labs, companies, such as those working together on deep learning research, applying DeepSpeed to empower real-world AI models and applications, and so on. For such requests (and other requests unsuitable for GitHub), please directly email to deepspeed-info@microsoft.com. diff --git a/blogs/deepspeed-ucp/README.md b/blogs/deepspeed-ucp/README.md index f8b5c6fb87e7..3420e72c238e 100644 --- a/blogs/deepspeed-ucp/README.md +++ b/blogs/deepspeed-ucp/README.md @@ -255,8 +255,8 @@ community. DeepSpeed Universal Checkpoint is part of the bigger DeepSpeed ecosystem of large-scale AI training and inference. For more details on all DeepSpeed technologies and innovations, please visit our [website]((https://www.deepspeed.ai/)) and follow us -on X, formerly Twitter, ([English](https://twitter.com/MSFTDeepSpeed), -[Japanese](https://twitter.com/MSFTDeepSpeedJP)) +on X, formerly Twitter, ([English](https://twitter.com/DeepSpeedAI), +[Japanese](https://twitter.com/DeepSpeedAI_JP)) and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed). # Acknowledgements and Contributions diff --git a/blogs/deepspeed-ucp/chinese/README.md b/blogs/deepspeed-ucp/chinese/README.md index 062063de92df..4260595671dc 100644 --- a/blogs/deepspeed-ucp/chinese/README.md +++ b/blogs/deepspeed-ucp/chinese/README.md @@ -109,7 +109,7 @@ alt="A graph of training step Description automatically generated" /> 我们很高兴发布DeepSpeed通用检查点。DeepSpeed通用检查点已与Megatron-DeepSpeed的重构版本完全集成,并可通过DeepSpeed和Megatron-DeepSpeed的GitHub仓库访问。详细的使用教程可在[DeepSpeed教程页面](https://www.deepspeed.ai/tutorials/universal-checkpointing/)上找到。 -我们欢迎来自更广泛开源社区的贡献和合作。DeepSpeed通用检查点是大规模AI训练和推理DeepSpeed生态系统的一部分。有关所有DeepSpeed技术和创新的更多详细信息,请访问我们的[网站](https://www.deepspeed.ai/)并在X(前Twitter)([英文](https://twitter.com/MSFTDeepSpeed),[日文](https://twitter.com/MSFTDeepSpeedJP))和[中文知乎](https://www.zhihu.com/people/deepspeed)上关注我们。 +我们欢迎来自更广泛开源社区的贡献和合作。DeepSpeed通用检查点是大规模AI训练和推理DeepSpeed生态系统的一部分。有关所有DeepSpeed技术和创新的更多详细信息,请访问我们的[网站](https://www.deepspeed.ai/)并在X(前Twitter)([英文](https://twitter.com/DeepSpeedAI),[日文](https://twitter.com/DeepSpeedAI_JP))和[中文知乎](https://www.zhihu.com/people/deepspeed)上关注我们。 # 致谢和贡献 我们感谢伊利诺伊大学厄巴纳-香槟分校、Statosphere和英特尔Habana的合作。 diff --git a/blogs/deepspeed-ucp/japanese/README.md b/blogs/deepspeed-ucp/japanese/README.md index 7e3c3161a1b5..24da72298dd8 100644 --- a/blogs/deepspeed-ucp/japanese/README.md +++ b/blogs/deepspeed-ucp/japanese/README.md @@ -100,7 +100,7 @@ DeepSpeed *UCP*における中心的な考え方は、チェックポイント DeepSpeed Universal Checkpointは、リベースされたMegatron-DeepSpeedバージョンに完全に統合されており、DeepSpeedおよびMegatron-DeepSpeedのGitHubリポジトリを通じてアクセスできます。使用に関する詳細なチュートリアルは、[DeepSpeedチュートリアルページ](https://www.deepspeed.ai/tutorials/universal-checkpointing/)にあります。 -DeepSpeedでは、広範なオープンソースコミュニティからの貢献とコラボレーションを受け入れています。DeepSpeed Universal Checkpointは、大規模AIトレーニングおよび推論のためのDeepSpeedエコシステムの一部です。すべてのDeepSpeed技術とイノベーションについての詳細は、[ウェブサイト](https://www.deepspeed.ai/)をご覧いただき、X(旧Twitter)での[英語](https://twitter.com/MSFTDeepSpeed)、[日本語](https://twitter.com/MSFTDeepSpeedJP)、および[中国のZhihu](https://www.zhihu.com/people/deepspeed)をフォローしてください。 +DeepSpeedでは、広範なオープンソースコミュニティからの貢献とコラボレーションを受け入れています。DeepSpeed Universal Checkpointは、大規模AIトレーニングおよび推論のためのDeepSpeedエコシステムの一部です。すべてのDeepSpeed技術とイノベーションについての詳細は、[ウェブサイト](https://www.deepspeed.ai/)をご覧いただき、X(旧Twitter)での[英語](https://twitter.com/DeepSpeedAI)、[日本語](https://twitter.com/DeepSpeedAI_JP)、および[中国のZhihu](https://www.zhihu.com/people/deepspeed)をフォローしてください。 # 謝辞と貢献 diff --git a/blogs/deepspeed-ulysses/README.md b/blogs/deepspeed-ulysses/README.md index 8ed573916ff4..ed377fec1039 100644 --- a/blogs/deepspeed-ulysses/README.md +++ b/blogs/deepspeed-ulysses/README.md @@ -362,7 +362,7 @@ on what is possible when long context window is no longer a limitation. DeepSpeed-Ulysses is part of the bigger DeepSpeed ecosystem of large-scale AI training and inference. For more details on all DeepSpeed technologies and innovations, please visit our [website]((https://www.deepspeed.ai/)) and follow us -on X, formerly Twitter, ([English](https://twitter.com/MSFTDeepSpeed), [Japanese](https://twitter.com/MSFTDeepSpeedJP)) and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed). +on X, formerly Twitter, ([English](https://twitter.com/DeepSpeedAI), [Japanese](https://twitter.com/DeepSpeedAI_JP)) and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed). We are open to collaborations with universities, research labs, and companies. For such requests (and other requests unsuitable for GitHub), diff --git a/blogs/deepspeed-ulysses/chinese/README.md b/blogs/deepspeed-ulysses/chinese/README.md index 20af8b91fbea..7ba941214cf4 100644 --- a/blogs/deepspeed-ulysses/chinese/README.md +++ b/blogs/deepspeed-ulysses/chinese/README.md @@ -150,6 +150,6 @@ DeepSpeed-Ulysses已经完全与Megatron-DeepSpeed代码库集成并经过测试 我们很高兴宣布推出DeepSpeed-Ulysses,您可以通过DeepSpeed GitHub获取代码。详细的使用教程在[DeepSpeed教程页面](https://www.deepspeed.ai/tutorials/ds-sequence/)上提供。 -我们欢迎各种形式的贡献和合作,以共同推动当长上下文窗口不再是限制时的各种创新。DeepSpeed-Ulysses是大规模AI训练和推理的更大DeepSpeed生态系统的一部分。有关所有DeepSpeed技术和创新的更多细节,请访问我们的[网站]((https://www.deepspeed.ai/)),并关注我们在X(Twitter)上的帐号([英文](https://twitter.com/MSFTDeepSpeed),[日文](https://twitter.com/MSFTDeepSpeedJP))和[中文知乎](https://www.zhihu.com/people/deepspeed)。 +我们欢迎各种形式的贡献和合作,以共同推动当长上下文窗口不再是限制时的各种创新。DeepSpeed-Ulysses是大规模AI训练和推理的更大DeepSpeed生态系统的一部分。有关所有DeepSpeed技术和创新的更多细节,请访问我们的[网站]((https://www.deepspeed.ai/)),并关注我们在X(Twitter)上的帐号([英文](https://twitter.com/DeepSpeedAI),[日文](https://twitter.com/DeepSpeedAI_JP))和[中文知乎](https://www.zhihu.com/people/deepspeed)。 我们愿意与大学、研究实验室和公司合作。有关此类请求(以及不适合在GitHub上提出的其他请求),请直接发送电子邮件至。 diff --git a/blogs/deepspeed-ulysses/japanese/README.md b/blogs/deepspeed-ulysses/japanese/README.md index 1d9ed1e3a1d2..ca847cd07ada 100644 --- a/blogs/deepspeed-ulysses/japanese/README.md +++ b/blogs/deepspeed-ulysses/japanese/README.md @@ -153,6 +153,6 @@ dist_attn = DistributedAttention(attn, get_sequence_parallel_group()) DeepSpeed-Ulyssesは、DeepSpeedのGitHubを通じてアクセス可能です。使用方法に関する詳しいチュートリアルは、[DeepSpeedのチュートリアルページ ](https://www.deepspeed.ai/tutorials/ds-sequence/)にあります。 -長いコンテキストを扱う際の制約を取り除くことによって何が可能になるのか、ユーザの皆様と共に様々な可能性を探求するため、幅広い協力やコラボレーションを歓迎します。DeepSpeed-Ulyssesは、大規模なAIの訓練と推論のためのより大きなDeepSpeedエコシステムの一部です。DeepSpeedの多くの技術や革新的な機能の詳細については、[ウェブサイト](https://www.deepspeed.ai/)をご覧いただくか、X(以前のTwitter。[英語版](https://twitter.com/MSFTDeepSpeed)、[日本語版](https://twitter.com/MSFTDeepSpeedJP))や、中国の[Zhihu](https://www.zhihu.com/people/deepspeed)でフォローしてください。 +長いコンテキストを扱う際の制約を取り除くことによって何が可能になるのか、ユーザの皆様と共に様々な可能性を探求するため、幅広い協力やコラボレーションを歓迎します。DeepSpeed-Ulyssesは、大規模なAIの訓練と推論のためのより大きなDeepSpeedエコシステムの一部です。DeepSpeedの多くの技術や革新的な機能の詳細については、[ウェブサイト](https://www.deepspeed.ai/)をご覧いただくか、X(以前のTwitter。[英語版](https://twitter.com/DeepSpeedAI)、[日本語版](https://twitter.com/DeepSpeedAI_JP))や、中国の[Zhihu](https://www.zhihu.com/people/deepspeed)でフォローしてください。 DeepSpeedは、皆様の開発への参加を歓迎しています。DeepSpeedのGitHubページで、バグ報告、Pull Request、ディスカッションへの参加が可能です。詳細は[ガイドライン](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)をご覧ください。また、大学、研究所、企業とのコラボレーションも行っています。こうしたコラボレーションについてのご要望(およびGitHubには適さないその他の話題)については まで直接メールをお送りください。 diff --git a/blogs/deepspeed-visualchat/10-03-2023/README-Chinese.md b/blogs/deepspeed-visualchat/10-03-2023/README-Chinese.md index d4cba8b46560..d4cc268fbe89 100644 --- a/blogs/deepspeed-visualchat/10-03-2023/README-Chinese.md +++ b/blogs/deepspeed-visualchat/10-03-2023/README-Chinese.md @@ -174,7 +174,7 @@ bash chat_scripts/run.sh # You need to change necessary variables, e.g, ckpt pat DeepSpeed-VisualChat 是更大的 DeepSpeed 生态系统的一部分,其中包括一系列深度学习系统和建模技术。要了解更多信息, * 请访问我们的 [网站](https://www.deepspeed.ai/) 了解详细的博客文章、教程和文档。 -* 在我们的 [英文 X(Twitter)](https://twitter.com/MSFTDeepSpeed)、[日语 X(Twitter)](https://twitter.com/MSFTDeepSpeedJP) 和 [中文知乎](https://www.zhihu.com/people/deepspeed) 上关注我们,以获取 DeepSpeed 的最新消息。 +* 在我们的 [英文 X(Twitter)](https://twitter.com/DeepSpeedAI)、[日语 X(Twitter)](https://twitter.com/DeepSpeedAI_JP) 和 [中文知乎](https://www.zhihu.com/people/deepspeed) 上关注我们,以获取 DeepSpeed 的最新消息。 我们欢迎您为 DeepSpeed 做出贡献!我们鼓励您报告问题、贡献 PRs、并在 [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) 页面上参加讨论。有关更多详细信息,请查看我们的 [贡献指南](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)。我们对与大学、研究实验室、公司等进行合作持开放态度,例如共同进行深度学习研究、应用 DeepSpeed 为现实世界的 AI 模型和应用提供支持等等。对于此类请求(以及其他不适合 GitHub 的请求),请直接发送电子邮件至 deepspeed-info@microsoft.com。 diff --git a/blogs/deepspeed-visualchat/10-03-2023/README-Japanese.md b/blogs/deepspeed-visualchat/10-03-2023/README-Japanese.md index b6c12787778c..4697c15f2bb3 100755 --- a/blogs/deepspeed-visualchat/10-03-2023/README-Japanese.md +++ b/blogs/deepspeed-visualchat/10-03-2023/README-Japanese.md @@ -181,7 +181,7 @@ DeepSpeed-VisualChatがオープンソース化され、AIコミュニティで DeepSpeed-VisualChatは、さまざまなDeep Learningシステムやモデリング技術を含む、より大きなDeepSpeedエコシステムの一部です。詳細については、以下をご覧ください。 * 私たちの[ウェブサイト](https://www.deepspeed.ai/)で、詳細なブログ記事、チュートリアル、役立つドキュメントを提供しています。 -* DeepSpeedの最新ニュースは、[English X(Twitter)](https://twitter.com/MSFTDeepSpeed)、[Japanese X(Twitter)](https://twitter.com/MSFTDeepSpeedJP)、[Chinese Zhihu](https://www.zhihu.com/people/deepspeed)をフォローしてください。 +* DeepSpeedの最新ニュースは、[English X(Twitter)](https://twitter.com/DeepSpeedAI)、[Japanese X(Twitter)](https://twitter.com/DeepSpeedAI_JP)、[Chinese Zhihu](https://www.zhihu.com/people/deepspeed)をフォローしてください。 DeepSpeedは、皆様の開発への参加を歓迎しています。DeepSpeedのGitHubページで、バグ報告、Pull Request、ディスカッションへの参加が可能です。詳細は[ガイドライン](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)をご覧ください。また、大学、研究所、企業とのコラボレーションも行っています。こうしたコラボレーションについてのご要望(およびGitHubには適さないその他の話題)については まで直接メールをお送りください。 diff --git a/blogs/deepspeed-visualchat/10-03-2023/README.md b/blogs/deepspeed-visualchat/10-03-2023/README.md index b2bbb08de50e..ce354fd10812 100755 --- a/blogs/deepspeed-visualchat/10-03-2023/README.md +++ b/blogs/deepspeed-visualchat/10-03-2023/README.md @@ -181,7 +181,7 @@ We are very excited to share that DeepSpeed-VisualChat is now open-sourced and a DeepSpeed-VisualChat is a component of the larger DeepSpeed ecosystem, which includes a range of Deep Learning systems and modeling technologies. To learn more, * Please visit our [website](https://www.deepspeed.ai/) for detailed blog posts, tutorials, and helpful documentation. -* Follow us on our [English X(Twitter)](https://twitter.com/MSFTDeepSpeed), [Japanese X(Twitter)](https://twitter.com/MSFTDeepSpeedJP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. +* Follow us on our [English X(Twitter)](https://twitter.com/DeepSpeedAI), [Japanese X(Twitter)](https://twitter.com/DeepSpeedAI_JP), and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed) for latest news on DeepSpeed. We welcome your contributions to DeepSpeed! We encourage you to report issues, contribute PRs, and join discussions on the [DeepSpeed GitHub](https://github.com/deepspeedai/DeepSpeed/) page. Please see our [contributing guide](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md) for more details. We are open to collaborations with universities, research labs, companies, such as those working together on deep learning research, applying DeepSpeed to empower real-world AI models and applications, and so on. For such requests (and other requests unsuitable for GitHub), please directly email to deepspeed-info@microsoft.com. diff --git a/blogs/ulysses-offload/README.md b/blogs/ulysses-offload/README.md index 283b5142e274..5dfd63ccdc32 100644 --- a/blogs/ulysses-offload/README.md +++ b/blogs/ulysses-offload/README.md @@ -258,6 +258,6 @@ possible in LLM and AI. This release is part of the bigger DeepSpeed ecosystem of large-scale AI training, finetuning and inference. For more details on all DeepSpeed technologies and innovations, please visit our [website]((https://www.deepspeed.ai/)) and follow us -on X, formerly Twitter, ([English](https://twitter.com/MSFTDeepSpeed), -[Japanese](https://twitter.com/MSFTDeepSpeedJP)) and +on X, formerly Twitter, ([English](https://twitter.com/DeepSpeedAI), +[Japanese](https://twitter.com/DeepSpeedAI_JP)) and [Chinese Zhihu](https://www.zhihu.com/people/deepspeed). diff --git a/blogs/zeropp/chinese/README.md b/blogs/zeropp/chinese/README.md index e4a6b5279de5..09aac2cef948 100644 --- a/blogs/zeropp/chinese/README.md +++ b/blogs/zeropp/chinese/README.md @@ -174,7 +174,7 @@ ZeRO++ 已集成到 DeepSpeed-Chat 中,以支持 ChatGPT 类模型的 RLHF 训 DeepSpeed-ZeRO++ 是 DeepSpeed 生态系统的一部分。 要了解更多信息,请访问我们的网站,在那里您可以找到详细的博客文章、教程和有用的文档。 -您还可以在我们的[英文 Twitter](https://twitter.com/MSFTDeepSpeed)、[日文 Twitter](https://twitter.com/MSFTDeepSpeedJP) 和[中文知乎](https://www.zhihu.com/people/deepspeed) 上获取最新的 DeepSpeed 新闻。 +您还可以在我们的[英文 Twitter](https://twitter.com/DeepSpeedAI)、[日文 Twitter](https://twitter.com/DeepSpeedAI_JP) 和[中文知乎](https://www.zhihu.com/people/deepspeed) 上获取最新的 DeepSpeed 新闻。 DeepSpeed 欢迎您的贡献! 我们鼓励您在 DeepSpeed GitHub 页面上报告问题、贡献 PR 并加入讨论。 有关更多详细信息,请参阅我们的贡献指南。 我们对与大学、研究实验室和公司的合作持开放态度。 对于此类请求(以及其他不适合 GitHub 的请求),请直接发送电子邮件至 。 diff --git a/blogs/zeropp/japanese/README.md b/blogs/zeropp/japanese/README.md index 1e5ef91a035f..5a76930e3f96 100644 --- a/blogs/zeropp/japanese/README.md +++ b/blogs/zeropp/japanese/README.md @@ -174,7 +174,7 @@ ZeRO++の技術的な詳細については、arXivにアップロードされた DeepSpeed-ZeRO++は、DeepSpeedエコシステムの一部です。詳細については、我々の[Webサイト](https://www.deepspeed.ai/)をご覧ください。詳細なブログ記事、チュートリアル、ドキュメントが掲載されています。 -また、[英語版Twitter](https://twitter.com/MSFTDeepSpeed)、[日本語版Twitter](https://twitter.com/MSFTDeepSpeedJP)、[中国語版Zhihuアカウント](https://www.zhihu.com/people/deepspeed)でも最新のDeepSpeedニュースを発信しています。 +また、[英語版Twitter](https://twitter.com/DeepSpeedAI)、[日本語版Twitter](https://twitter.com/DeepSpeedAI_JP)、[中国語版Zhihuアカウント](https://www.zhihu.com/people/deepspeed)でも最新のDeepSpeedニュースを発信しています。 DeepSpeedは、皆様の開発への参加を歓迎しています。DeepSpeedのGitHubページで、バグ報告、Pull Request、ディスカッションへの参加が可能です。詳細は[ガイドライン](https://github.com/deepspeedai/DeepSpeed/blob/master/CONTRIBUTING.md)をご覧ください。また、大学、研究所、企業とのコラボレーションも行っています。こうしたコラボレーションについてのご要望(およびGitHubには適さないその他の話題)については まで直接メールをお送りください。 From ec2e93e3091dc2c2e0940cbfd1a4526372e8ebc7 Mon Sep 17 00:00:00 2001 From: Raza Sikander Date: Sat, 8 Mar 2025 04:16:47 +0530 Subject: [PATCH 48/69] Update gaudi2 nightly,ci to latest 1.20.0 build (#7093) Signed-off-by: Shaik Raza Sikander Signed-off-by: Olatunji Ruwase Signed-off-by: Max Kovalenko Signed-off-by: inkcherry Signed-off-by: shaomin Signed-off-by: Stas Bekman Signed-off-by: siqi Signed-off-by: Logan Adams Signed-off-by: Wei Wu Signed-off-by: ShellyNR Signed-off-by: Lai, Yejing Signed-off-by: Hongwei Co-authored-by: Olatunji Ruwase Co-authored-by: Max Kovalenko Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: inkcherry Co-authored-by: wukong1992 Co-authored-by: shaomin Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Co-authored-by: loadams Co-authored-by: Stas Bekman Co-authored-by: siqi654321 Co-authored-by: siqi Co-authored-by: Wei Wu <45323446+U-rara@users.noreply.github.com> Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Co-authored-by: Shelly Nahir <73890534+ShellyNR@users.noreply.github.com> Co-authored-by: snahir Co-authored-by: Yejing-Lai Signed-off-by: Logan Adams --- .github/workflows/hpu-gaudi2-nightly.yml | 2 +- .github/workflows/hpu-gaudi2.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/hpu-gaudi2-nightly.yml b/.github/workflows/hpu-gaudi2-nightly.yml index c0576360cd61..edf7f75dc219 100644 --- a/.github/workflows/hpu-gaudi2-nightly.yml +++ b/.github/workflows/hpu-gaudi2-nightly.yml @@ -21,7 +21,7 @@ jobs: # The type of runner that the job will run on runs-on: [self-hosted, intel, gaudi2] container: - image: vault.habana.ai/gaudi-docker/1.19.0/ubuntu22.04/habanalabs/pytorch-installer-2.5.1:latest + image: vault.habana.ai/gaudi-docker/1.20.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest ports: - 80 options: --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none --cap-add=sys_nice diff --git a/.github/workflows/hpu-gaudi2.yml b/.github/workflows/hpu-gaudi2.yml index 48730442686c..12d9e89fe0ab 100644 --- a/.github/workflows/hpu-gaudi2.yml +++ b/.github/workflows/hpu-gaudi2.yml @@ -39,7 +39,7 @@ jobs: # The type of runner that the job will run on runs-on: [self-hosted, intel, gaudi2] container: - image: vault.habana.ai/gaudi-docker/1.19.0/ubuntu22.04/habanalabs/pytorch-installer-2.5.1:latest + image: vault.habana.ai/gaudi-docker/1.20.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest ports: - 80 options: --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none --cap-add=sys_nice From c7934014bb6301128f8d48df4f1e69ef76a2e76f Mon Sep 17 00:00:00 2001 From: inkcherry Date: Tue, 11 Mar 2025 00:57:34 +0800 Subject: [PATCH 49/69] fix keep_module_on_host (#7112) Reapply https://github.com/deepspeedai/DeepSpeed/pull/6846. FYI @oelayan7 --------- Signed-off-by: inkcherry Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/module_inject/auto_tp.py | 9 +-- deepspeed/module_inject/layers.py | 88 +++++++++++++++++++----------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/deepspeed/module_inject/auto_tp.py b/deepspeed/module_inject/auto_tp.py index b089ec420d47..8d8381ed0428 100755 --- a/deepspeed/module_inject/auto_tp.py +++ b/deepspeed/module_inject/auto_tp.py @@ -11,7 +11,7 @@ from typing import Optional import torch from deepspeed import comm as dist -from .layers import LinearAllreduce, LinearLayer, LmHeadLinearAllreduce, Yuan_LinearAllreduce, Yuan_LinearLayer, GateUpPack_LinearLayer, Conv_LinearALlreduce, fused_LinearLayer, conv_LinearLayer +from .layers import * from deepspeed.accelerator import get_accelerator from .fusedqkv_utils import require_tp_fused_qkvw from deepspeed.module_inject.tp_shard import get_shard_size, get_shard_size_list @@ -211,7 +211,7 @@ def __init__(self, self.orig_layer_impl = orig_layer_impl self.linear_policies = None self.conv_linear_layer = False - self.keep_module_on_host = keep_module_on_host + TensorParallel_Layer.set_keep_module_on_host(keep_module_on_host) def in_module_list(module, module_list): for item in module_list: @@ -350,10 +350,7 @@ def _replace(self, child, name, conv_linear_layer): # and avoid any complex shard-related logic. if getattr(child, "replaced", False) == True: return - device_name = 'cpu' if self.keep_module_on_host else get_accelerator().current_device_name() - # keep_module_on_host is used to keep the module on the host. Checkpoints are loaded to the host first (in some - # cases it can be done from the disk even to prevent filling host's memory), thus no need to create a new copy. - return_new_copy = not self.keep_module_on_host + weight_shape = child.weight.shape mp_replace = ReplaceWithTensorSlicing(mp_group=self.mp_group) # For TP layer skip, e.g., MoE gate, deepseek low rank layer skip diff --git a/deepspeed/module_inject/layers.py b/deepspeed/module_inject/layers.py index 0c673225a732..3c7491e99999 100644 --- a/deepspeed/module_inject/layers.py +++ b/deepspeed/module_inject/layers.py @@ -17,6 +17,11 @@ from copy import deepcopy from typing import Union +__all__ = [ + "TensorParallel_Layer", "LinearAllreduce", "LinearLayer", "LmHeadLinearAllreduce", "Yuan_LinearAllreduce", + "Yuan_LinearLayer", "GateUpPack_LinearLayer", "Conv_LinearALlreduce", "fused_LinearLayer", "conv_LinearLayer" +] + DEEPSPEED_AUTOTP_MODE = AUTOTP_MODE.INFERENCE DS_IS_REPLACED_MODULE = 'ds_is_replaced_module' DS_TENSOR_MODEL_PARALLEL = 'tensor_model_parallel' @@ -43,26 +48,6 @@ def set_autotp_mode(training=False): DEEPSPEED_AUTOTP_MODE = AUTOTP_MODE.INFERENCE -def move(tensor, device): - # TODO: consider the timing of deletion - # to save host resources when DP > 1。 - - if tensor.is_meta: - # Keep tensor in meta device if tensor is meta. - return tensor - else: - # Using new tensors help in freeing memory (after split for example) was done before by calling clone(). - # Using copy=True instead of clone() will help in case of cpu --> cpu. - # Otherwise to() will not create a new copy for the view of the full tensor, and it will not be de-referenced. - cloned_tensor = tensor.to(device, copy=True) - - # free the memory of the original tensor to reduce memory peak - # Equivalent to directly deleting the tensor reference outside the function. - # see https://github.com/microsoft/DeepSpeed/pull/4353 - tensor.data = torch.empty(0, device=tensor.device) - return cloned_tensor - - class RowParallel(torch.autograd.Function): """ A custom autograd function for performing row-wise parallelism. @@ -140,6 +125,10 @@ class TensorParallel_Layer(nn.Module, ABC): name (Optional[str]): The name of the layer, if provided. """ + # keep_module_on_host is used to keep the module on the host. Checkpoints are loaded to the host first (in some + # cases it can be done from the disk even to prevent filling host's memory), thus no need to create a new copy. + keep_module_on_host: bool = False + def __init__(self, mp_group: Optional[dist.ProcessGroup], **kwargs: Any): """ Initializes the TensorParallel_Layer with optional model parallelism group and layer name. @@ -163,6 +152,16 @@ def __init__(self, mp_group: Optional[dist.ProcessGroup], **kwargs: Any): if kwargs.get('name') is not None: self.name = kwargs.get('name') # Set the layer name if provided. + @classmethod + def set_keep_module_on_host(cls, value: bool): + """ + Set the static variable keep_module_on_host. + + Args: + value (bool): The new value for keep_module_on_host. + """ + cls.keep_module_on_host = value + @abstractmethod def forward(self, input): """ @@ -235,6 +234,31 @@ def extra_repr(self): in_features, out_features, self.bias is not None, dtype) return extra_repr_str + def move(self, tensor): + # TODO: consider the timing of deletion + # to save host resources when DP > 1。 + + # keep_module_on_host is used to keep the module on the host. Checkpoints are loaded to the host first (in some + # cases it can be done from the disk even to prevent filling host's memory), thus no need to create a new copy. + if tensor.is_meta: + # Keep tensor in meta device if tensor is meta. + return tensor + else: + device = 'cpu' if self.__class__.keep_module_on_host else get_accelerator().current_device_name() + return_new_copy = not self.__class__.keep_module_on_host + + # Using new tensors help in freeing memory (after split for example) was done before by calling clone(). + # Using copy=True instead of clone() will help in case of cpu --> cpu. + # Otherwise to() will not create a new copy for the view of the full tensor, and it will not be de-referenced. + cloned_tensor = tensor.to(device, copy=return_new_copy) + + if return_new_copy: + # free the memory of the original tensor to reduce memory peak + # Equivalent to directly deleting the tensor reference outside the function. + # see https://github.com/microsoft/DeepSpeed/pull/4353 + tensor.data = torch.empty(0, device=tensor.device) + return cloned_tensor + class GatherReplacedLayerParams: """ @@ -349,7 +373,7 @@ def _tp_partition(self, params_list): return _partition = torch.chunk(param, self.tp_world_size, dim=-1)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition @@ -363,7 +387,7 @@ def uneven_partition(self, params_list): self.name), dim=1)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition @@ -414,7 +438,7 @@ def _tp_partition(self, params_list): #split bias if provide _partition = torch.chunk(param, self.tp_world_size, dim=0)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition @@ -429,7 +453,7 @@ def uneven_partition(self, params_list): self.name), dim=0)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition @@ -475,7 +499,7 @@ def _tp_partition(self, params_list): _partition = prepare_tp_fused_qkvw(self.fused_module.module, param, self.tp_world_size, self.tp_index) - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition @@ -492,13 +516,13 @@ def _tp_partition(self, params_list): weight, bias = params_list[0], params_list[1] _partition = weight.data.split(get_shard_size_list(weight.shape[0], self.tp_world_size, self.name), dim=1)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() weight.data = _partition if bias is not None: _partition = bias.data.split(get_shard_size_list(weight.shape[1], self.tp_world_size, self.name), dim=0)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() bias.data = _partition @@ -522,9 +546,9 @@ class Yuan_LinearLayer(LinearLayer): def _tp_partition(self, params_list): weight, bias = shard_value_with_share_qk(params_list[0].data, params_list[1], self.tp_index, self.tp_world_size, True) - params_list[0].data = move(weight, get_accelerator().current_device_name()).detach() + params_list[0].data = self.move(weight).detach() if bias is not None: - params_list[1].data = move(bias, get_accelerator().current_device_name()).detach() + params_list[1].data = self.move(bias).detach() class GateUpPack_LinearLayer(LinearLayer): @@ -532,9 +556,9 @@ class GateUpPack_LinearLayer(LinearLayer): @torch.no_grad() def _tp_partition(self, params_list): weight, bias = shard_chunk_mlp(params_list[0].data, params_list[1], self.tp_index, self.tp_world_size) - params_list[0].data = move(weight, device=get_accelerator().current_device_name()).detach() + params_list[0].data = self.move(weight).detach() if bias is not None: - params_list[1].data = move(bias, device=get_accelerator().current_device_name()).detach() + params_list[1].data = self.move(bias).detach() class Conv_LinearALlreduce(LinearAllreduce): @@ -549,7 +573,7 @@ def _tp_partition(self, params_list): _partition = param.split(get_shard_size_list(param.shape[0], self.tp_world_size, self.name), dim=1)[self.tp_index] - _partition = move(_partition, get_accelerator().current_device_name()).detach() + _partition = self.move(_partition).detach() params_list[idx].data = _partition From 62abd88eceda6ce233ca9ffed2c01d700ddc9594 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Tue, 11 Mar 2025 10:20:32 -0700 Subject: [PATCH 50/69] Add sequential pytest mark to TestNVMeCheckpointing to resolve pytest forked hangs (#7131) Signed-off-by: Logan Adams --- tests/unit/runtime/zero/test_nvme_checkpointing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/runtime/zero/test_nvme_checkpointing.py b/tests/unit/runtime/zero/test_nvme_checkpointing.py index 01a75aa64b4e..5b0c9d2a0d34 100644 --- a/tests/unit/runtime/zero/test_nvme_checkpointing.py +++ b/tests/unit/runtime/zero/test_nvme_checkpointing.py @@ -18,6 +18,7 @@ from deepspeed.accelerator import get_accelerator +@pytest.mark.sequential class TestNVMeCheckpointing(DistributedTest): world_size = 1 From 065084be0eaae0a379cc20a06062e17e95b6a415 Mon Sep 17 00:00:00 2001 From: Olatunji Ruwase Date: Tue, 11 Mar 2025 16:59:23 -0400 Subject: [PATCH 51/69] Training multiple models (#7018) Support training multiple models, such as in [HF](https://huggingface.co/docs/accelerate/en/usage_guides/deepspeed_multiple_model) Here is some update on supporting multiple DS engines with single loss.backward(). The main message is that I think we can support this. First, some context. Backward pass in ZeRO is complicated because the optimizations/features require special handling of gradients, such as: 1. Gradient partitioning 2. Overlapping backward and reduction 3. Upcasting for fp32 grad accumulation So, we created engine.backward(loss) as a wrapper function to provide us fine-grained control over backward as below ```python def backward(loss): backward_prologue() # setup logic for special gradient handling loss.backward() backward_epilogue() # cleanup/teardown logic ``` As demonstrated by @muellerzr, this approach breaks down when loss originates from multiple DS engines. Our proposed solution is to use backward hooks on the module to launch backward_prologue() and backward_epilogue() . Specifically, 1. backward pre hook on engine.module to launch backward_prologue() before any module gradient is created. 2. backward post hook on engine.module to launch backward_epilogue() after all module gradients are created. We plan for this solution to preserve BC, i.e., engine.backward() will remain correct for single engine scenarios. The current status is that (1) is completed, while (2) is in progress. To unblock e2e testing for multi-engine scenarios, since there are probably other issues, we have a temporarily added engine._backward_prologue() . You can try this out via the following artifacts. 1. Simple multi-engine test code: https://gist.github.com/tjruwase/f1adccf087b8fa269ffce2ab91c4f1c6#file-multi_engine-py 2. DS branch: https://github.com/microsoft/DeepSpeed/tree/olruwase/zero_multi_models --------- Signed-off-by: Olatunji Ruwase Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: Stas Bekman Signed-off-by: Logan Adams --- deepspeed/runtime/bf16_optimizer.py | 19 ++- deepspeed/runtime/constants.py | 2 +- deepspeed/runtime/engine.py | 183 ++++++++++++--------- deepspeed/runtime/zero/stage_1_and_2.py | 99 ++++++----- docs/code-docs/source/training.rst | 54 +++++- tests/unit/runtime/test_data_efficiency.py | 52 ++++-- tests/unit/runtime/test_multiple_models.py | 125 ++++++++++++++ 7 files changed, 390 insertions(+), 144 deletions(-) create mode 100644 tests/unit/runtime/test_multiple_models.py diff --git a/deepspeed/runtime/bf16_optimizer.py b/deepspeed/runtime/bf16_optimizer.py index 78895e70df03..e43ad5c5d4f2 100644 --- a/deepspeed/runtime/bf16_optimizer.py +++ b/deepspeed/runtime/bf16_optimizer.py @@ -44,7 +44,7 @@ def __init__(self, timers=None, grad_acc_dtype=None, graph_harvesting=False, - immediate_grad_update=False, + immediate_grad_update=True, has_moe_layers=False): super().__init__() see_memory_usage('begin bf16_optimizer', force=True) @@ -313,7 +313,7 @@ def step(self, closure=None): self.clear_hp_grads() - def backward(self, loss, update_hp_grads=True, clear_lp_grads=False, **bwd_kwargs): + def backward(self, loss, retain_graph=False, update_hp_grads=True, clear_lp_grads=False, **bwd_kwargs): """Perform a backward pass and copy the low-precision gradients to the high-precision copy. @@ -323,7 +323,7 @@ def backward(self, loss, update_hp_grads=True, clear_lp_grads=False, **bwd_kwarg The low-precision grads are deallocated during this procedure. """ self.clear_lp_grads() - loss.backward(**bwd_kwargs) + loss.backward(retain_graph=retain_graph, **bwd_kwargs) if update_hp_grads: self.update_hp_grads(clear_lp_grads=clear_lp_grads) @@ -425,9 +425,6 @@ def update_lp_params(self): fp32_partition) in enumerate(zip(self.bf16_partitioned_groups, self.fp32_groups_flat_partition)): partition_id = dist.get_rank(group=self.real_dp_process_group[i]) bf16_partitions[partition_id].data.copy_(fp32_partition.data) - # print_rank_0(f'update_lp_params {i=} {partition_id=}', force=True) - # if i == 0: - # print_rank_0(f'{fp32_partition[:10]=}', force=True) all_gather_dp_groups(groups_flat=self.bf16_groups_flat, partitioned_param_groups=self.bf16_partitioned_groups, @@ -442,10 +439,12 @@ def clear_hp_grads(self): for i, group in enumerate(self.fp32_groups_gradients): self.fp32_groups_has_gradients[i] = [False] * len(group) - def clear_lp_grads(self): + def clear_lp_grads(self, set_to_none=False): # using zero_() fixed memory address for graph replay - set_to_none = False if self.graph_harvesting else True + if self.graph_harvesting: + assert not set_to_none, "graph harvesting is incompatible with setting lp grads to None" + zero_grads_list = [] for group in self.bf16_groups: for param in group: @@ -458,6 +457,10 @@ def clear_lp_grads(self): if not set_to_none and len(zero_grads_list) > 0: torch._foreach_zero_(zero_grads_list) + def zero_grad(self, set_to_none=True): + self.clear_lp_grads(set_to_none) + self.clear_hp_grads() + def state_dict(self): state_dict = {} state_dict[CLIP_GRAD] = self.clip_grad diff --git a/deepspeed/runtime/constants.py b/deepspeed/runtime/constants.py index 55cfa8f59c91..2878bb11f872 100755 --- a/deepspeed/runtime/constants.py +++ b/deepspeed/runtime/constants.py @@ -128,7 +128,7 @@ # BFLOAT16 optimizer immediate gradient update BFLOAT16_IMMEDIATE_GRAD_UPDATE = "immediate_grad_update" -BFLOAT16_IMMEDIATE_GRAD_UPDATE_DEFAULT = False +BFLOAT16_IMMEDIATE_GRAD_UPDATE_DEFAULT = True ######################################### # FP16 support diff --git a/deepspeed/runtime/engine.py b/deepspeed/runtime/engine.py index df6d286494de..e7db1ea3e762 100755 --- a/deepspeed/runtime/engine.py +++ b/deepspeed/runtime/engine.py @@ -272,6 +272,9 @@ def __init__(self, # Configure distributed model self._configure_distributed_model(model) + self.module_forward_pre_hook = self._create_module_forward_pre_hook() + self.module_forward_post_hook = self._create_module_forward_post_hook() + # needed for zero_to_fp32 weights reconstruction to remap nameless data to state_dict self.param_names = {param: name for name, param in model.named_parameters()} @@ -1875,7 +1878,6 @@ def deepspeed_io(self, GLOBAL_RANK: self.global_rank, DATA_SAMPLING_NUM_WORKERS: self.data_sampling_config()[DATA_SAMPLING_NUM_WORKERS] } - return DeepSpeedDataLoader(dataset=dataset, batch_size=batch_size, pin_memory=pin_memory, @@ -1922,17 +1924,24 @@ def _scale_loss_by_gas(self, prescaled_loss, eval_micro_batches=None): return scaled_loss - @instrument_w_nvtx - def forward(self, *inputs, **kwargs): - r"""Execute forward propagation - Arguments: - *inputs: Variable length input list - **kwargs: variable length keyword arguments - """ + def _create_module_forward_pre_hook(self): - if self.autotuning_profile_model_info(): - ma = get_ma_status() - else: + def _module_forward_pre_hook(module, inputs, kwargs): + return self._forward_prologue(inputs, kwargs) + + return self.module.register_forward_pre_hook(_module_forward_pre_hook, prepend=False, with_kwargs=True) + + def _create_module_forward_post_hook(self): + + def _module_forward_post_hook(module, input, output): + self._forward_epilogue() + + return self.module.register_forward_hook(_module_forward_post_hook) + + def _forward_prologue(self, inputs, kwargs): + return_modified = False + + if not self.autotuning_profile_model_info(): see_memory_usage("Engine before forward", force=self.memory_breakdown()) flops_profiler_active = (self.flops_profiler_enabled() @@ -1951,41 +1960,47 @@ def forward(self, *inputs, **kwargs): self.eigenvalue_enabled(), None, ) + return_modified = True if flops_profiler_active: self.flops_profiler.start_profile(ignore_list=None) - if self.module.training: - if self.progressive_layer_drop: - kwargs.update(self.progressive_layer_drop.get_state()) + if kwargs is not None: + if self.module.training: + if self.progressive_layer_drop: + kwargs.update(self.progressive_layer_drop.get_state()) - if self.__class__.__name__ != "PipelineEngine": - # TODO: The above if condition is a HACK since for PipelineEngine - # it's difficult to inject argument in forward pass. - if self.module.training and self.curriculum_enabled_legacy(): - self.curriculum_scheduler_legacy.update_difficulty(self.global_steps + 1) - if self.curriculum_params_legacy()["curriculum_type"] == "seqlen": - kwargs.update({"curriculum_seqlen": self.curriculum_scheduler_legacy.get_current_difficulty()}) + if self.__class__.__name__ != "PipelineEngine": + # TODO: The above if condition is a HACK since for PipelineEngine + # it's difficult to inject argument in forward pass. + if self.module.training and self.curriculum_enabled_legacy(): + self.curriculum_scheduler_legacy.update_difficulty(self.global_steps + 1) + if self.curriculum_params_legacy()["curriculum_type"] == "seqlen": + kwargs.update({"curriculum_seqlen": self.curriculum_scheduler_legacy.get_current_difficulty()}) + return_modified = True if self.module.training and self.random_ltd_enabled(): self.random_ltd_scheduler.update_seq(self.global_steps) + if self.training_dataloader is None: + self.tput_timer.start() + + self._start_timers(self.engine_timers.forward_timers) + if self.zero_optimization_partition_weights(): # Enable automated discovery of external parameters by indicating that # we are in a forward pass. for module in self.module.modules(): module._parameters._in_forward = True - self._start_timers(self.engine_timers.forward_timers) - - if self.training_dataloader is None: - self.tput_timer.start() - if self.fp16_auto_cast(): inputs = self._cast_inputs_half(inputs) + return_modified = True - loss = self.module(*inputs, **kwargs) + if return_modified: + return inputs, kwargs + def _forward_epilogue(self): if self.zero_optimization_partition_weights(): # Disable automated discovery of external parameters for module in self.module.modules(): @@ -1993,16 +2008,33 @@ def forward(self, *inputs, **kwargs): self._stop_timers(self.engine_timers.forward_timers) + flops_profiler_active = (self.flops_profiler_enabled() + and self.global_steps == self.flops_profiler_profile_step() and self.global_rank == 0) + if flops_profiler_active: self.flops_profiler.stop_profile() + if not self.autotuning_profile_model_info(): + see_memory_usage("Engine after forward", force=self.memory_breakdown()) + + @instrument_w_nvtx + def forward(self, *inputs, **kwargs): + r"""Execute forward propagation + Arguments: + *inputs: Variable length input list + **kwargs: variable length keyword arguments + """ + if self.autotuning_profile_model_info(): + ma = get_ma_status() + + loss = self.module(*inputs, **kwargs) + if self.autotuning_profile_model_info(): activation_mem = get_ma_status() - ma self.autotuning_model_info["activation_mem_per_gpu"] = activation_mem print_json_dist(self.autotuning_model_info, [0], path=self.autotuning_model_info_path()) exit() - else: - see_memory_usage("Engine after forward", force=self.memory_breakdown()) + return loss def _cast_inputs_half(self, inputs): @@ -2061,43 +2093,13 @@ def allreduce_gradients(self, bucket_size=MEMORY_OPT_ALLREDUCE_SIZE): grads = None self.buffered_allreduce_fallback(grads=grads, elements_per_buffer=bucket_size) - @contextmanager - def no_sync(self): - r""" - Context manager to disable gradient reduction during backward pass. - This context manager has the following effects on other DeepSpeed features. - 1. Incompatible with ZeRO stage 2/3 which rely on reduction for gradient partitioning. - 2. It is illegal to call engine.step() within the context manager. - 3. Tracking of gradient accumulation steps is disabled. - """ - assert not self.zero_optimization_partition_gradients(), \ - f"no_sync context manager is incompatible with gradient partitioning logic of ZeRO stage {self.zero_optimization_stage()}" - - assert not self.inside_no_sync_ctxt, f"no_sync context manager reentry is unsupported" - - self.inside_no_sync_ctxt = True - try: - yield - finally: - self.inside_no_sync_ctxt = False - - @instrument_w_nvtx - def backward(self, loss, release_loss=False, retain_graph=False, scale_wrt_gas=True): - r"""Execute backward pass on the loss - Arguments: - loss: Torch tensor on which to execute backward propagation - retain_graph: bool, default: false - forward on user defined choice of retain_graph - """ - + def _backward_prologue(self, loss, scale_wrt_gas=True): see_memory_usage("Engine before backward", force=self.memory_breakdown()) - if self.scale_wrt_gas is not None: scale_wrt_gas = self.scale_wrt_gas - do_gradient_reduction = self.enable_backward_allreduce and not self.inside_no_sync_ctxt - # scale loss w.r.t. gradient accumulation if reduction is not disabled + do_gradient_reduction = self.enable_backward_allreduce and not self.inside_no_sync_ctxt if do_gradient_reduction and self.gradient_accumulation_steps() > 1 and scale_wrt_gas: loss = self._scale_loss_by_gas(loss.float()) @@ -2114,13 +2116,18 @@ def backward(self, loss, release_loss=False, retain_graph=False, scale_wrt_gas=T )] self.monitor.write_events(self.summary_events) - self._start_timers(self.engine_timers.backward_timers) + return loss - assert self.optimizer is not None and not isinstance(self.optimizer, DummyOptim), \ - "must provide optimizer during init in order to use backward" + def _backward_epilogue(self): + self._start_timers(self.engine_timers.backward_reduce_timers) + if self.enable_backward_allreduce and not self.inside_no_sync_ctxt: + # Traditional code path that allreduces the module parameter grads + self.allreduce_gradients() + self._stop_timers(self.engine_timers.backward_reduce_timers) + see_memory_usage("Engine after backward", force=self.memory_breakdown()) + def _do_optimizer_backward(self, loss, retain_graph): self._start_timers(self.engine_timers.backward_inner_timers) - if self.zero_optimization(): self.optimizer.is_gradient_accumulation_boundary = self.is_gradient_accumulation_boundary() self.optimizer.backward(loss, retain_graph=retain_graph) @@ -2136,30 +2143,50 @@ def backward(self, loss, release_loss=False, retain_graph=False, scale_wrt_gas=T else: self.optimizer.backward(loss, retain_graph=retain_graph) elif self.bfloat16_enabled(): - self.optimizer.backward(loss) + self.optimizer.backward(loss, retain_graph=retain_graph) else: if self.eigenvalue_enabled(): loss.backward(create_graph=True, retain_graph=True) else: loss.backward(retain_graph=retain_graph) - self._stop_timers(self.engine_timers.backward_inner_timers) - self._start_timers(self.engine_timers.backward_reduce_timers) - - if do_gradient_reduction: - # Traditional code path that allreduces the module parameter grads - self.allreduce_gradients() + @contextmanager + def no_sync(self): + r""" + Context manager to disable gradient reduction during backward pass. + This context manager has the following effects on other DeepSpeed features: + 1. Incompatible with ZeRO stage 2/3 which rely on reduction for gradient partitioning. + 2. It is illegal to call engine.step() within the context manager. + 3. Tracking of gradient accumulation steps is disabled. + """ + assert not self.zero_optimization_partition_gradients(), \ + f"no_sync context manager is incompatible with gradient partitioning logic of ZeRO stage {self.zero_optimization_stage()}" - self._stop_timers(self.engine_timers.backward_reduce_timers) + assert not self.inside_no_sync_ctxt, f"no_sync context manager reentry is unsupported" - self._stop_timers(self.engine_timers.backward_timers) + self.inside_no_sync_ctxt = True + try: + yield + finally: + self.inside_no_sync_ctxt = False - if release_loss: - # loss.data = None - pass + @instrument_w_nvtx + def backward(self, loss, retain_graph=False, scale_wrt_gas=True): + r"""Execute backward pass on the loss + Arguments: + loss: Torch tensor on which to execute backward propagation + retain_graph: bool, default: false + forward on user defined choice of retain_graph + """ + assert self.optimizer is not None and not isinstance(self.optimizer, DummyOptim), \ + "must provide optimizer during init in order to use backward" - see_memory_usage("Engine after backward", force=self.memory_breakdown()) + self._start_timers(self.engine_timers.backward_timers) + loss = self._backward_prologue(loss, scale_wrt_gas) + self._do_optimizer_backward(loss, retain_graph) + self._backward_epilogue() + self._stop_timers(self.engine_timers.backward_timers) return loss diff --git a/deepspeed/runtime/zero/stage_1_and_2.py b/deepspeed/runtime/zero/stage_1_and_2.py index 2bece09bffc4..435754f25591 100755 --- a/deepspeed/runtime/zero/stage_1_and_2.py +++ b/deepspeed/runtime/zero/stage_1_and_2.py @@ -522,11 +522,17 @@ def __init__(self, # resets the data structure value for the next backward propagation self.reset_partition_gradient_structures() - # creates backward hooks for gradient partitioning + # creates backward hooks for the following special handling of gradients + # 1. upcasting for fp32 gradient accumulation + # 2. gradient partitioning + # 3. overlapping backward and reduction self._grad_acc_hooks = [] - if self.partition_gradients or self.overlap_comm: - self.create_reduce_and_remove_grad_hooks() + if (self.partition_gradients or self.overlap_comm or self.use_grad_accum_attribute + or self.contiguous_gradients): + self.create_gradient_handling_hooks() + + self.ready_for_gradients = False self.custom_loss_scaler = False self.external_loss_scale = None @@ -678,6 +684,7 @@ def _release_ipg_buffers(self): self.ipg_buffer = None self.grads_in_partition = None self.grads_in_partition_offset = 0 + self.ready_for_gradients = False def initialize_optimizer_states(self): @@ -874,16 +881,18 @@ def increment_value(dictionary, key): def overlapping_partition_gradients_reduce_epilogue(self): self.independent_gradient_partition_epilogue() + def _fill_param_grad_accum_attribute(self, param): + if param.grad is not None: + if param.grad_accum is None: + param.grad_accum = param.grad.to(self.gradient_accumulation_dtype) + else: + param.grad_accum.add_(param.grad.to(self.gradient_accumulation_dtype).view(param.grad_accum.shape)) + param.grad = None + def fill_grad_accum_attribute(self): for group in self.bit16_groups: for param in group: - if param.grad is not None: - if param.grad_accum is None: - param.grad_accum = param.grad.to(self.gradient_accumulation_dtype) - else: - param.grad_accum.add_( - param.grad.to(self.gradient_accumulation_dtype).view(param.grad_accum.shape)) - param.grad = None + self._fill_param_grad_accum_attribute(param) def get_gradient_for_reduction(self, param): if self.use_grad_accum_attribute: @@ -901,7 +910,7 @@ def clear_grad_attribute(self, param): else: param.grad = None - def create_reduce_and_remove_grad_hooks(self): + def create_gradient_handling_hooks(self): self.grad_accs = [] for i, param_group in enumerate(self.bit16_groups): for param in param_group: @@ -911,10 +920,10 @@ def wrapper(param, i): param_tmp = param.expand_as(param) grad_acc = param_tmp.grad_fn.next_functions[0][0] - def reduce_partition_and_remove_grads(*notneeded): - self.reduce_ready_partitions_and_remove_grads(param, i) + def grad_handling_hook(*notneeded): + self.process_gradients(param, i) - self._grad_acc_hooks.append(grad_acc.register_hook(reduce_partition_and_remove_grads)) + self._grad_acc_hooks.append(grad_acc.register_hook(grad_handling_hook)) self.grad_accs.append(grad_acc) wrapper(param, i) @@ -1294,7 +1303,7 @@ def complete_grad_norm_calculation_for_cpu_offload(self, params): if is_model_parallel_parameter(p) or (self.model_parallel_rank == 0): param_id = self.get_param_id(p) # as some model have trainable parameters but skipped in training, - # their backward hooks in self.create_reduce_and_remove_grad_hooks() will not run, + # their backward hooks in self.create_gradient_handling_hooks() will not run, # so they have no norm_for_param_grads if param_id in self.norm_for_param_grads: param_norm = self.norm_for_param_grads[param_id] @@ -1421,6 +1430,13 @@ def reduce_ipg_grads(self): self.elements_in_ipg_bucket = 0 ##################################################################### + def process_gradients(self, param, i): + self.backward_prologue() + if self.use_grad_accum_attribute: + self._fill_param_grad_accum_attribute(param) + if self.partition_gradients or self.overlap_comm: + self.reduce_ready_partitions_and_remove_grads(param, i) + def reduce_ready_partitions_and_remove_grads(self, param, i): if self.partition_gradients or self.is_gradient_accumulation_boundary: self.reduce_independent_p_g_buckets_and_remove_grads(param, i) @@ -1949,9 +1965,7 @@ def update_lp_params(self): zip(self.parallel_partitioned_bit16_groups, self.single_partition_of_fp32_groups)): partition_id = dist.get_rank(group=self.real_dp_process_group[i]) bit16_partitions[partition_id].data.copy_(fp32_partition.data) - # print_rank_0(f'update_lp_params {i=} {partition_id=}', force=True) - # if i == 0: - # print_rank_0(f'{fp32_partition[:10]=}', force=True) + all_gather_dp_groups(groups_flat=self.bit16_groups_flat, partitioned_param_groups=self.parallel_partitioned_bit16_groups, dp_process_group=self.real_dp_process_group, @@ -2035,6 +2049,30 @@ def _has_inf_or_nan(x, j=None): inf_or_nan = nan.logical_or(inf) return inf_or_nan.float().max() + def backward_prologue(self): + if not self.ready_for_gradients: + self.micro_step_id += 1 + if self.contiguous_gradients and self.ipg_buffer is None: + self.ipg_buffer = [] + buf_0 = torch.empty(int(self.reduce_bucket_size), + dtype=self.dtype, + device=get_accelerator().current_device_name()) + self.ipg_buffer.append(buf_0) + + # Use double buffers to avoid data access conflict when overlap_comm is enabled. + if self.overlap_comm: + buf_1 = torch.empty(int(self.reduce_bucket_size), + dtype=self.dtype, + device=get_accelerator().current_device_name()) + self.ipg_buffer.append(buf_1) + self.ipg_index = 0 + self.ready_for_gradients = True + + def backward_epilogue(self): + # Only for Stage 1, Mode 2 + if self.use_grad_accum_attribute: + self.fill_grad_accum_attribute() + def backward(self, loss, retain_graph=False): """ :attr:`backward` performs the following steps: @@ -2043,32 +2081,13 @@ def backward(self, loss, retain_graph=False): 2. scaled_loss = fp32_loss*loss_scale 3. scaled_loss.backward(), which accumulates scaled gradients into the ``.grad`` attributes of the model's fp16 leaves """ - self.micro_step_id += 1 - - if self.contiguous_gradients: - self.ipg_buffer = [] - buf_0 = torch.empty(int(self.reduce_bucket_size), - dtype=self.dtype, - device=get_accelerator().current_device_name()) - self.ipg_buffer.append(buf_0) - - # Use double buffers to avoid data access conflict when overlap_comm is enabled. - if self.overlap_comm: - buf_1 = torch.empty(int(self.reduce_bucket_size), - dtype=self.dtype, - device=get_accelerator().current_device_name()) - self.ipg_buffer.append(buf_1) - self.ipg_index = 0 - + self.backward_prologue() if self.custom_loss_scaler: scaled_loss = self.external_loss_scale * loss - scaled_loss.backward() + scaled_loss.backward(retain_graph=retain_graph) else: self.loss_scaler.backward(loss.float(), retain_graph=retain_graph) - - # Only for Stage 1, Mode 2 - if self.use_grad_accum_attribute: - self.fill_grad_accum_attribute() + self.backward_epilogue() def check_overflow(self, partition_gradients=True): self._check_overflow(partition_gradients) diff --git a/docs/code-docs/source/training.rst b/docs/code-docs/source/training.rst index e3a7029aae50..b721f7619d9d 100644 --- a/docs/code-docs/source/training.rst +++ b/docs/code-docs/source/training.rst @@ -1,5 +1,5 @@ Training API -============ +############ :func:`deepspeed.initialize` returns a *training engine* in its first argument of type :class:`DeepSpeedEngine`. This engine is used to progress training: @@ -39,3 +39,55 @@ Model Saving Additionally when a DeepSpeed checkpoint is created, a script ``zero_to_fp32.py`` is added there which can be used to reconstruct fp32 master weights into a single pytorch ``state_dict`` file. + + +Training Multiple Models +------------------------ +DeepSpeed supports training multiple models, which is a useful feature in `scenarios `_ such as knowledge distillation and post-training RLHF. +The core approach is to create individual DeepSpeedEngines for each model. + + +Training Independent Models +=========================== + +The following code snippet illustrates independently training multiple models on the same dataset. + +.. code-block:: python + + model_engines = [engine for engine, _, _, _ in [deepspeed.initialize(m, ...,) for m in models]] + for batch in data_loader: + losses = [engine(batch) for engine in model_engines] + for engine, loss in zip(model_engines, losses): + engine.backward(loss) + + +The above is similar to typical DeepSpeed usage except for the creation of multiple DeepSpeedEngines (one for each model). + + +Jointly Training Models With Shared Loss +======================================== + +The following code snippet illustrates jointly training multiple models on a shared loss value. + +.. code-block:: python + + model_engines = [engine for engine, _, _, _ in [deepspeed.initialize(m, ...,) for m in models]] + for batch in data_loader: + losses = [engine(batch[0], batch[1]) for engine in model_engines] + loss = sum(l / (i + 1) for i, l in enumerate(losses)) + loss.backward() + + for engine in model_engines: + engine._backward_epilogue() + + for engine in model_engines: + engine.step() + + for engine in model_engines: + engine.optimizer.zero_grad() + +Besides the use of multiple DeepSpeedEngines, the above differs from typical usage in two key ways: + +#. The **backward** call is made using the common loss value rather on individual model engines. + +#. **_backward_epilogue** is called on model engine, after the **loss.backward()**. diff --git a/tests/unit/runtime/test_data_efficiency.py b/tests/unit/runtime/test_data_efficiency.py index 87fb49aad830..a52ca2982b9a 100644 --- a/tests/unit/runtime/test_data_efficiency.py +++ b/tests/unit/runtime/test_data_efficiency.py @@ -50,12 +50,16 @@ def get_model_parallel_group(self): return self.tp_group +@pytest.mark.parametrize('dtype', [torch.bfloat16, torch.float16]) class TestDataEfficiency(DistributedTest): world_size = 2 - def test_curriculum_learning(self): + def test_curriculum_learning(self, dtype): if get_accelerator().device_name() == "cpu": pytest.skip("CPU accelerator does not support this test yet") + if not dtype in get_accelerator().supported_dtypes(): + pytest.skip(f"This test does not support {dtype=}.") + config_dict = { "train_batch_size": 2, "steps_per_print": 1, @@ -96,9 +100,10 @@ def test_curriculum_learning(self): } } } - if get_accelerator().is_fp16_supported(): - config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 16} - elif get_accelerator().is_bf16_supported(): + + if dtype == torch.float16: + config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 8} + else: config_dict["bf16"] = {"enabled": True} def data_post_process(data, data_sampler_state_dict): @@ -107,7 +112,7 @@ def data_post_process(data, data_sampler_state_dict): hidden_dim = 10 model = SimpleModel(hidden_dim) - dataset = random_dataset(20, hidden_dim, torch.device('cpu')) + dataset = random_dataset(20, hidden_dim, torch.device('cpu'), dtype=dtype) model, _, data_loader, _ = deepspeed.initialize(config=config_dict, model=model, training_data=dataset, @@ -126,12 +131,16 @@ def data_post_process(data, data_sampler_state_dict): break +@pytest.mark.parametrize('dtype', [torch.bfloat16, torch.float16]) class TestLegacyCurriculumScheduler(DistributedTest): world_size = 2 - def test_fixed_discrete(self): + def test_fixed_discrete(self, dtype): if get_accelerator().device_name() == "cpu": pytest.skip("CPU accelerator does not support this test yet") + if not dtype in get_accelerator().supported_dtypes(): + pytest.skip(f"This test does not support {dtype=}.") + config_dict = { "train_batch_size": 2, "steps_per_print": 1, @@ -155,16 +164,20 @@ def test_fixed_discrete(self): } } } - if get_accelerator().is_fp16_supported(): - config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 16} - elif get_accelerator().is_bf16_supported(): + if dtype == torch.float16: + config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 8} + else: config_dict["bf16"] = {"enabled": True} hidden_dim = 10 ground_truths = {1: 1, 2: 1, 3: 2, 4: 2, 5: 3, 6: 3, 7: 4, 8: 4} model = Curriculum_SimpleModel(hidden_dim) model, _, _, _ = deepspeed.initialize(config=config_dict, model=model, model_parameters=model.parameters()) - data_loader = random_dataloader(model=model, total_samples=20, hidden_dim=hidden_dim, device=model.device) + data_loader = random_dataloader(model=model, + total_samples=20, + hidden_dim=hidden_dim, + device=model.device, + dtype=dtype) for n, batch in enumerate(data_loader): loss, seqlen = model(batch[0], batch[1]) model.backward(loss) @@ -172,11 +185,14 @@ def test_fixed_discrete(self): true_seqlen = 5 if n + 1 in ground_truths: true_seqlen = ground_truths[n + 1] - assert seqlen == true_seqlen, f"Incorrect curriculum schedule" + assert seqlen == true_seqlen, f"Incorrect curriculum schedule {n=}, {seqlen=}, {true_seqlen=}" - def test_fixed_linear(self): + def test_fixed_linear(self, dtype): if get_accelerator().device_name() == "cpu": pytest.skip("CPU accelerator does not support this test yet") + if not dtype in get_accelerator().supported_dtypes(): + pytest.skip(f"This test does not support {dtype=}.") + config_dict = { "train_batch_size": 2, "steps_per_print": 1, @@ -200,16 +216,20 @@ def test_fixed_linear(self): } } } - if get_accelerator().is_fp16_supported(): - config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 16} - elif get_accelerator().is_bf16_supported(): + if dtype == torch.float16: + config_dict["fp16"] = {"enabled": True, "loss_scale": 0, "initial_scale_power": 8} + else: config_dict["bf16"] = {"enabled": True} hidden_dim = 10 ground_truths = {1: 2, 2: 4, 3: 4, 4: 6, 5: 6, 6: 8, 7: 8, 8: 10, 9: 10, 10: 10} model = Curriculum_SimpleModel(hidden_dim) model, _, _, _ = deepspeed.initialize(config=config_dict, model=model, model_parameters=model.parameters()) - data_loader = random_dataloader(model=model, total_samples=20, hidden_dim=hidden_dim, device=model.device) + data_loader = random_dataloader(model=model, + total_samples=20, + hidden_dim=hidden_dim, + device=model.device, + dtype=dtype) for n, batch in enumerate(data_loader): loss, seqlen = model(batch[0], batch[1]) model.backward(loss) diff --git a/tests/unit/runtime/test_multiple_models.py b/tests/unit/runtime/test_multiple_models.py new file mode 100644 index 000000000000..7f4de0f055f4 --- /dev/null +++ b/tests/unit/runtime/test_multiple_models.py @@ -0,0 +1,125 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# DeepSpeed Team + +import pytest +import deepspeed +import deepspeed.comm as dist +import torch +from unit.common import DistributedTest +from unit.simple_model import SimpleModel, random_dataloader + + +def create_model(config_dict): + hidden_dim = 64 + model = SimpleModel(hidden_dim) + model, _, _, _ = deepspeed.initialize(model=model, model_parameters=model.parameters(), config=config_dict) + return model + + +def train_shared_loss(num_models, config_dict, dtype): + hidden_dim = 64 + + models = [create_model(config_dict) for _ in range(num_models)] + data_loader = random_dataloader(model=models[0], + total_samples=4, + hidden_dim=hidden_dim, + device=models[0].device, + dtype=dtype) + dist.barrier() + for _, batch in enumerate(data_loader): + losses = [m.module(batch[0], batch[1]) for m in models] + loss = sum(l / (i + 1) for i, l in enumerate(losses)) + loss.backward() + + for m in models: + m._backward_epilogue() + + for m in models: + m.step() + + for m in models: + m.optimizer.zero_grad() + + +def train_independent_loss(num_models, config_dict, dtype): + hidden_dim = 64 + + models = [create_model(config_dict) for _ in range(num_models)] + data_loader = random_dataloader(model=models[0], + total_samples=4, + hidden_dim=hidden_dim, + device=models[0].device, + dtype=dtype) + dist.barrier() + for _, batch in enumerate(data_loader): + losses = [m.module(batch[0], batch[1]) for m in models] + for m, loss in zip(models, losses): + m.backward(loss) + m.step() + + +@pytest.mark.parametrize('num_models', [1, 2, 3]) +class TestMultipleModels(DistributedTest): + world_size = 2 + reuse_dist_env = True + + @pytest.mark.parametrize('shared_loss', [False, True]) + @pytest.mark.parametrize('zero_stage', [1, 2, 3]) + @pytest.mark.parametrize('fp32_grad_accum', [False, True]) + @pytest.mark.parametrize('contiguous_gradients', [False, True]) + @pytest.mark.parametrize('overlap_comm', [False, True]) + def test_zero_optimizer(self, num_models, shared_loss, zero_stage, fp32_grad_accum, contiguous_gradients, + overlap_comm): + config_dict = { + "train_micro_batch_size_per_gpu": 1, + "optimizer": { + "type": "Adam", + "params": { + "lr": 1e-4 + } + }, + "zero_optimization": { + "stage": zero_stage, + "contiguous_gradients": contiguous_gradients, + "overlap_comm": overlap_comm, + }, + "fp16": { + "initial_scale_power": 8, + "enabled": True + }, + } + if fp32_grad_accum: + config_dict["data_types"] = {"grad_accum_dtype": "fp32"} + + if shared_loss: + train_shared_loss(num_models=num_models, config_dict=config_dict, dtype=torch.float16) + else: + train_independent_loss(num_models=num_models, config_dict=config_dict, dtype=torch.float16) + + @pytest.mark.parametrize('shared_loss', [False, True]) + def test_bf16_optimizer(self, num_models, shared_loss): + config_dict = { + "train_micro_batch_size_per_gpu": 1, + "optimizer": { + "type": "Adam", + "params": { + "lr": 1e-4 + } + }, + "zero_optimization": { + "stage": 1, + }, + "bf16": { + "enabled": True + }, + "data_types": { + "grad_accum_dtype": "fp32" + } + } + + if shared_loss: + train_shared_loss(num_models=num_models, config_dict=config_dict, dtype=torch.bfloat16) + else: + train_independent_loss(num_models=num_models, config_dict=config_dict, dtype=torch.bfloat16) From e93f0d16f479523f1bbc6dbc9840e3584e643fc0 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Fri, 14 Mar 2025 08:06:30 -0700 Subject: [PATCH 52/69] Update CONTRIBUTING.md to reflect changes from CLA to DCO (#7135) Copy changes from https://github.com/deepspeedai/DeepSpeed-MII/pull/558. Fixes issue where docs still referenced CLA. --------- Signed-off-by: Logan Adams --- CONTRIBUTING.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bfc22afb5359..3e042d362d13 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,16 +48,15 @@ pytest run_sanity_check.py ``` Note that the `--forked` flag is not necessary for the model tests. -## Contributor License Agreement -This project welcomes contributions and suggestions. Most contributions require you to -agree to a Contributor License Agreement (CLA) declaring that you have the right to, and -actually do, grant us the rights to use your contribution. For details, visit -https://cla.opensource.microsoft.com. - -When you submit a pull request, a CLA bot will automatically determine whether you need -to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply -follow the instructions provided by the bot. You will only need to do this once across -all repos using our CLA. +## Developer Certificate of Origin +This project welcomes contributions and suggestions. All contributions to deepspeedai projects +require commits to be signed off with a [Developer Certificate of Origin](https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin) +(DCO) declaring that you have the right to, and actually do, grant us the rights to use your contribution. + +When you submit a pull request, the DCO app will check for the presence of signed commits. +Information about how this check works is here: https://github.com/dcoapp/app?tab=readme-ov-file#how-it-works + +To sign commits, you will need to include `-s` when running `git commit`. For example, `git commit -s -m "Commit message"`. One note, creating PRs via the GitHub interface do not appear to include this option. If you forget this, clicking on the failing check in your PR will point you to commands you can run to rebase and sign previous commits. ## Code of Conduct This project has adopted the [Microsoft Open Source Code of From eaeae790319ec71aefac5f4abf4b6ca815877560 Mon Sep 17 00:00:00 2001 From: Olatunji Ruwase Date: Fri, 14 Mar 2025 12:40:32 -0400 Subject: [PATCH 53/69] Avoid missing attr error (#7133) Fix #7132 Signed-off-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/runtime/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepspeed/runtime/engine.py b/deepspeed/runtime/engine.py index e7db1ea3e762..ef21499256c8 100755 --- a/deepspeed/runtime/engine.py +++ b/deepspeed/runtime/engine.py @@ -3041,7 +3041,7 @@ def _load_checkpoint(self, optim_checkpoint = None if load_module_only: deepspeed_states = ['module'] - if self.optimizer is not None: + if self.optimizer is not None and hasattr(self.optimizer, 'refresh_fp32_params'): self.optimizer.refresh_fp32_params() else: has_zero_optimizer_state = self.zero_optimization() or self.bfloat16_enabled() From 8df6245e74900f760a7c92cd99954bbe2018e8dc Mon Sep 17 00:00:00 2001 From: A-transformer Date: Fri, 14 Mar 2025 21:47:47 +0400 Subject: [PATCH 54/69] Add conditional expression (#7119) Keeps lines within PEP 8 length limits. Enhances readability with a single, concise expression. Preserves original functionality. --------- Signed-off-by: Shaik Raza Sikander Signed-off-by: Olatunji Ruwase Signed-off-by: Max Kovalenko Signed-off-by: inkcherry Signed-off-by: shaomin Signed-off-by: Stas Bekman Signed-off-by: siqi Signed-off-by: Logan Adams Signed-off-by: Wei Wu Signed-off-by: ShellyNR Signed-off-by: Lai, Yejing Signed-off-by: Hongwei Signed-off-by: Liang Cheng Signed-off-by: A-transformer Co-authored-by: Raza Sikander Co-authored-by: Olatunji Ruwase Co-authored-by: Max Kovalenko Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: inkcherry Co-authored-by: wukong1992 Co-authored-by: shaomin Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Co-authored-by: loadams Co-authored-by: Stas Bekman Co-authored-by: siqi654321 Co-authored-by: siqi Co-authored-by: Wei Wu <45323446+U-rara@users.noreply.github.com> Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Co-authored-by: Shelly Nahir <73890534+ShellyNR@users.noreply.github.com> Co-authored-by: snahir Co-authored-by: Yejing-Lai Co-authored-by: A-transformer Signed-off-by: Logan Adams --- deepspeed/launcher/runner.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/deepspeed/launcher/runner.py b/deepspeed/launcher/runner.py index bea1e14fa51f..2bbf8afe5775 100755 --- a/deepspeed/launcher/runner.py +++ b/deepspeed/launcher/runner.py @@ -462,10 +462,8 @@ def main(args=None): if multi_node_exec and not args.no_ssh_check and not args.no_ssh: first_host = list(active_resources.keys())[0] try: - ssh_check_cmd = "ssh -o PasswordAuthentication=no " - if args.ssh_port is not None: - ssh_check_cmd += f"-p {args.ssh_port} " - ssh_check_cmd += f"{first_host} hostname" + ssh_check_cmd = ("ssh -o PasswordAuthentication=no " + + (f"-p {args.ssh_port} " if args.ssh_port is not None else "") + f"{first_host} hostname") safe_ssh_cmd = shlex.split(ssh_check_cmd) subprocess.check_call(safe_ssh_cmd, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL) except subprocess.CalledProcessError: From 6de20f651b0d14b709f6e2d232468fb649235ba7 Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:52:44 -0700 Subject: [PATCH 55/69] Unpin transformers version for most workflows (#7139) Unpin transformers version for all workflows except `nv-torch-latest-v100` as this still has a tolerance issue with some quantization tests. Signed-off-by: Logan Adams --- .github/workflows/cpu-torch-latest.yml | 2 +- .github/workflows/hpu-gaudi2.yml | 2 +- .github/workflows/nv-a6000.yml | 2 +- .github/workflows/nv-torch-nightly-v100.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cpu-torch-latest.yml b/.github/workflows/cpu-torch-latest.yml index 6496d7e35065..0e21a52f2d11 100644 --- a/.github/workflows/cpu-torch-latest.yml +++ b/.github/workflows/cpu-torch-latest.yml @@ -42,7 +42,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - git checkout 981c276 + # git checkout 981c276 git rev-parse --short HEAD pip install . diff --git a/.github/workflows/hpu-gaudi2.yml b/.github/workflows/hpu-gaudi2.yml index 12d9e89fe0ab..7ee6dbf6f44d 100644 --- a/.github/workflows/hpu-gaudi2.yml +++ b/.github/workflows/hpu-gaudi2.yml @@ -112,7 +112,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - git checkout 981c276 + # git checkout 981c276 git rev-parse --short HEAD pip install . diff --git a/.github/workflows/nv-a6000.yml b/.github/workflows/nv-a6000.yml index 77a2661d08a6..64259e4f97ef 100644 --- a/.github/workflows/nv-a6000.yml +++ b/.github/workflows/nv-a6000.yml @@ -43,7 +43,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if you need to use an older transformers version temporarily in case of breakage - git checkout 981c276 + # git checkout 981c276 git rev-parse --short HEAD python -m pip install . - name: Install deepspeed diff --git a/.github/workflows/nv-torch-nightly-v100.yml b/.github/workflows/nv-torch-nightly-v100.yml index ce4b7f316881..9d4f202e75ea 100644 --- a/.github/workflows/nv-torch-nightly-v100.yml +++ b/.github/workflows/nv-torch-nightly-v100.yml @@ -37,7 +37,7 @@ jobs: git clone https://github.com/huggingface/transformers cd transformers # if needed switch to the last known good SHA until transformers@master is fixed - git checkout 981c276 + # git checkout 981c276 git rev-parse --short HEAD pip install . From e0188ac33c4c44e11bbab5cd4082f0f00a781d26 Mon Sep 17 00:00:00 2001 From: saurabhkoshatwar <35650601+saurabhkoshatwar@users.noreply.github.com> Date: Mon, 17 Mar 2025 07:51:27 -0700 Subject: [PATCH 56/69] Conditionally quote env vars (#7071) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves #6997 This PR conditionally quotes environment variable values—only wrapping those containing special characters (like parentheses) that could trigger bash errors. Safe values remain unquoted. --------- Signed-off-by: Saurabh Signed-off-by: Saurabh Koshatwar Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/launcher/multinode_runner.py | 6 ++++- tests/unit/launcher/test_user_args.py | 36 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/deepspeed/launcher/multinode_runner.py b/deepspeed/launcher/multinode_runner.py index 3e0c9d8a1652..218fb02be766 100644 --- a/deepspeed/launcher/multinode_runner.py +++ b/deepspeed/launcher/multinode_runner.py @@ -8,6 +8,7 @@ import shutil import subprocess import warnings +import re from shlex import split from abc import ABC, abstractmethod from deepspeed.accelerator import get_accelerator @@ -34,7 +35,10 @@ def get_cmd(self, environment, active_resources): """Return the command to execute on node""" def add_export(self, key, var): - self.exports[key.strip()] = f"\"{var.strip()}\"" + var = var.strip() + if re.search(r'[^\w@%+=:,./-]', var): + var = f"\"{var}\"" + self.exports[key.strip()] = var def parse_user_args(self): return self.args.user_args diff --git a/tests/unit/launcher/test_user_args.py b/tests/unit/launcher/test_user_args.py index b86be4dfe74c..fd1489803812 100644 --- a/tests/unit/launcher/test_user_args.py +++ b/tests/unit/launcher/test_user_args.py @@ -6,7 +6,20 @@ import pytest import subprocess +from types import SimpleNamespace + from deepspeed.accelerator import get_accelerator +from deepspeed.launcher.multinode_runner import MultiNodeRunner + + +class DummyRunner(MultiNodeRunner): + + def backend_exists(self): + return True + + def get_cmd(self, environment, active_resources): + return [] + if not get_accelerator().is_available(): pytest.skip("only supported in accelerator environments.", allow_module_level=True) @@ -38,6 +51,12 @@ def cmd(user_script_fp, prompt, multi_node): return cmd +@pytest.fixture +def dummy_runner(): + args = SimpleNamespace(user_args=[], user_script="dummy_script.py") + return DummyRunner(args, "dummy_world_info") + + @pytest.mark.parametrize("prompt", [ '''"I am 6' tall"''', """'I am 72" tall'""", """'"translate English to Romanian: "'""", '''I'm going to tell them "DeepSpeed is the best"''' @@ -64,3 +83,20 @@ def test_bash_string_args(tmpdir, user_script_fp): p = subprocess.Popen(["bash", bash_fp], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() assert "ARG PARSE SUCCESS" in out.decode("utf-8"), f"User args not parsed correctly: {err.decode('utf-8')}" + + +def test_add_export_with_special_characters(dummy_runner): + """ + Values with special characters (e.g., 64(x2)) must be quoted to avoid bash syntax errors. + """ + dummy_runner.add_export("SLURM_JOB_CPUS_PER_NODE", "64(x2)") + assert dummy_runner.exports["SLURM_JOB_CPUS_PER_NODE"] == "\"64(x2)\"" + + +def test_add_export_no_special_characters(dummy_runner): + """ + Values without special characters should remain unquoted (e.g., PYTHONPATH). + This avoids issues where unnecessary quotes break module imports. + """ + dummy_runner.add_export("PYTHONPATH", "/usr/local/lib/python3.9/site-packages") + assert dummy_runner.exports["PYTHONPATH"] == "/usr/local/lib/python3.9/site-packages" From ea61c6ca55b28d8d927993ba89b183263adf66f8 Mon Sep 17 00:00:00 2001 From: A-transformer Date: Mon, 17 Mar 2025 22:05:37 +0400 Subject: [PATCH 57/69] Correct the BACKWARD_PREFETCH_SUBMIT mismatch (#7120) Correct the BACKWARD_PREFETCH_SUBMIT mismatch FORWARD_PREFETCH_SUBMIT = 'forward_prefetch_submit' --------- Signed-off-by: Shaik Raza Sikander Signed-off-by: Olatunji Ruwase Signed-off-by: Max Kovalenko Signed-off-by: inkcherry Signed-off-by: shaomin Signed-off-by: Stas Bekman Signed-off-by: siqi Signed-off-by: Logan Adams Signed-off-by: Wei Wu Signed-off-by: ShellyNR Signed-off-by: Lai, Yejing Signed-off-by: Hongwei Signed-off-by: A-transformer Co-authored-by: Raza Sikander Co-authored-by: Olatunji Ruwase Co-authored-by: Max Kovalenko Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: inkcherry Co-authored-by: wukong1992 Co-authored-by: shaomin Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Co-authored-by: loadams Co-authored-by: Stas Bekman Co-authored-by: siqi654321 Co-authored-by: siqi Co-authored-by: Wei Wu <45323446+U-rara@users.noreply.github.com> Co-authored-by: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Co-authored-by: Shelly Nahir <73890534+ShellyNR@users.noreply.github.com> Co-authored-by: snahir Co-authored-by: Yejing-Lai Signed-off-by: Logan Adams --- deepspeed/runtime/zero/partitioned_param_coordinator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepspeed/runtime/zero/partitioned_param_coordinator.py b/deepspeed/runtime/zero/partitioned_param_coordinator.py index 3417080b1bea..5ab1d5f1e84e 100644 --- a/deepspeed/runtime/zero/partitioned_param_coordinator.py +++ b/deepspeed/runtime/zero/partitioned_param_coordinator.py @@ -66,7 +66,7 @@ class PartitionedParameterCoordinator: FORWARD_PREFETCH_SUBMIT = 'forward_prefetch_submit' BACKWARD_FETCH_SUBMIT = 'backward_fetch_submit' BACKWARD_FETCH_WAIT = 'backward_fetch_wait' - BACKWARD_PREFETCH_SUBMIT = 'backward_prefetch_wait' + BACKWARD_PREFETCH_SUBMIT = 'backward_prefetch_submit' FORWARD_ALL_GATHER = 'forward_all_gather' BACKWARD_ALL_GATHER = 'backward_all_gather' """Handles partitioning and gathering of parameters.""" From 9d753116c91a8abc02d0f5671c6991220d583f38 Mon Sep 17 00:00:00 2001 From: Raza Sikander Date: Wed, 19 Mar 2025 05:19:01 +0530 Subject: [PATCH 58/69] Enhance Gaudi2 CI/Nightly Coverage with Model Parallelism and Linear Tests (#7146) Enhancing ci/nightly coverage for gaudi2 device Tests added : test_autotp_training.py test_ulysses.py test_linear::TestLoRALinear and test_linear::TestBasicLinear test_ctx::TestEngine these provide coverage for model_parallesim and linear feature. The tests are stable. 10/10 runs pass. New tests addition is expected to increase ci time by 3-4 mins and nightly job time by 15 min. Signed-off-by: Shaik Raza Sikander Signed-off-by: Logan Adams --- .github/workflows/hpu-gaudi2-nightly.yml | 2 ++ .github/workflows/hpu-gaudi2.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/hpu-gaudi2-nightly.yml b/.github/workflows/hpu-gaudi2-nightly.yml index edf7f75dc219..3490567f95b8 100644 --- a/.github/workflows/hpu-gaudi2-nightly.yml +++ b/.github/workflows/hpu-gaudi2-nightly.yml @@ -45,6 +45,8 @@ jobs: test_zero_leaf_module.py test_zero_offloadpp.py test_zero_tiled.py + test_autotp_training.py + test_ulysses.py # Steps represent a sequence of tasks that will be executed as part of the job steps: diff --git a/.github/workflows/hpu-gaudi2.yml b/.github/workflows/hpu-gaudi2.yml index 7ee6dbf6f44d..441b254b4762 100644 --- a/.github/workflows/hpu-gaudi2.yml +++ b/.github/workflows/hpu-gaudi2.yml @@ -94,6 +94,8 @@ jobs: test_zero_nesting_init.py test_zeropp.py (test_zero.py and (TestZero3ParamPartitioningLargeParam or TestZero3ParamPartitioningLargeParam)) + (test_linear.py and (TestLoRALinear or TestBasicLinear)) + (test_ctx.py and TestEngine) # Steps represent a sequence of tasks that will be executed as part of the job steps: From 4ca7ba5772c5fce04c7c21c019a941e128caca5a Mon Sep 17 00:00:00 2001 From: Logan Adams <114770087+loadams@users.noreply.github.com> Date: Wed, 19 Mar 2025 16:42:38 -0700 Subject: [PATCH 59/69] Update container version that runs on A6000 tests. (#7153) Changes from https://github.com/huggingface/transformers/pull/36654 in transformers cause issues with the torch 2.5 version we were using. This just updated us to use a newer version. --------- Signed-off-by: Logan Adams --- .github/workflows/nv-a6000.yml | 6 +++--- .github/workflows/nv-flash-attn.yml | 4 ++-- .github/workflows/nv-human-eval.yml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/nv-a6000.yml b/.github/workflows/nv-a6000.yml index 64259e4f97ef..fa21785ae188 100644 --- a/.github/workflows/nv-a6000.yml +++ b/.github/workflows/nv-a6000.yml @@ -23,7 +23,7 @@ jobs: unit-tests: runs-on: [self-hosted, nvidia, a6000] container: - image: nvcr.io/nvidia/pytorch:24.09-py3 + image: nvcr.io/nvidia/pytorch:24.12-py3 ports: - 80 options: --gpus all --shm-size "8G" @@ -58,8 +58,8 @@ jobs: run: | unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch cd tests - python -m pytest --color=yes --durations=0 --verbose -rF -m 'inference_v2' unit/ --torch_ver="2.5" --cuda_ver="12" - python -m pytest --color=yes --durations=0 --verbose -rF -m 'inference_v2_ops' unit/ --torch_ver="2.5" --cuda_ver="12" + python -m pytest --color=yes --durations=0 --verbose -rF -m 'inference_v2' unit/ --torch_ver="2.6" --cuda_ver="12" + python -m pytest --color=yes --durations=0 --verbose -rF -m 'inference_v2_ops' unit/ --torch_ver="2.6" --cuda_ver="12" - name: MII unit tests run: | BRANCH="main" diff --git a/.github/workflows/nv-flash-attn.yml b/.github/workflows/nv-flash-attn.yml index 591969fbd986..8b3d46dfa4a8 100644 --- a/.github/workflows/nv-flash-attn.yml +++ b/.github/workflows/nv-flash-attn.yml @@ -18,7 +18,7 @@ jobs: unit-tests: runs-on: [self-hosted, nvidia, a6000] container: - image: nvcr.io/nvidia/pytorch:24.09-py3 + image: nvcr.io/nvidia/pytorch:24.12-py3 ports: - 80 options: --gpus all --shm-size "8G" @@ -53,7 +53,7 @@ jobs: run: | unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch cd tests - python -m pytest --color=yes --durations=0 --verbose -rF unit/sequence_parallelism/test_ulysses.py --torch_ver="2.5" --cuda_ver="12" + python -m pytest --color=yes --durations=0 --verbose -rF unit/sequence_parallelism/test_ulysses.py --torch_ver="2.6" --cuda_ver="12" - name: Open GitHub issue if nightly CI fails if: ${{ failure() && (github.event_name == 'schedule') }} uses: JasonEtco/create-an-issue@v2 diff --git a/.github/workflows/nv-human-eval.yml b/.github/workflows/nv-human-eval.yml index 3f59c42f697e..56cbfa767126 100644 --- a/.github/workflows/nv-human-eval.yml +++ b/.github/workflows/nv-human-eval.yml @@ -11,7 +11,7 @@ jobs: unit-tests: runs-on: [self-hosted, nvidia, a6000] container: - image: nvcr.io/nvidia/pytorch:24.09-py3 + image: nvcr.io/nvidia/pytorch:24.12-py3 ports: - 80 options: --gpus all --shm-size "8G" @@ -50,4 +50,4 @@ jobs: run: | unset TORCH_CUDA_ARCH_LIST # only jit compile for current arch cd tests - python -m pytest --color=yes --durations=0 --verbose -rF -m 'evaluation' -k "test_human_eval" unit/ --torch_ver="2.5" --cuda_ver="12" + python -m pytest --color=yes --durations=0 --verbose -rF -m 'evaluation' -k "test_human_eval" unit/ --torch_ver="2.6" --cuda_ver="12" From 2db922fe9327b10d3d46f6d68169fd55fa3bd45a Mon Sep 17 00:00:00 2001 From: Masahiro Tanaka Date: Thu, 20 Mar 2025 18:58:15 +0000 Subject: [PATCH 60/69] fix leak of z3 buffer Signed-off-by: Masahiro Tanaka Signed-off-by: Logan Adams --- deepspeed/runtime/zero/stage3.py | 4 ++-- tests/unit/runtime/half_precision/test_fp16.py | 12 ++++++++++++ tests/unit/runtime/test_multiple_models.py | 6 ++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/deepspeed/runtime/zero/stage3.py b/deepspeed/runtime/zero/stage3.py index ee97b6278d9e..34cf151cc247 100644 --- a/deepspeed/runtime/zero/stage3.py +++ b/deepspeed/runtime/zero/stage3.py @@ -448,7 +448,7 @@ def destroy(self): for hook in self._leaf_module_hooks: hook.remove() print_rank_0("Removed grad acc hooks", force=False) - del self.__ipg_bucket_flat_buffer + self._release_ipg_buffers() def initialize_ds_offload( self, @@ -967,7 +967,7 @@ def _create_fp16_sub_groups(self, params_group): def _release_ipg_buffers(self): if self.contiguous_gradients: - self.ipg_buffer = None + self.__ipg_bucket_flat_buffer = None def _optimizer_step(self, sub_group_id): param_group_id = self.sub_group_to_group_id[sub_group_id] diff --git a/tests/unit/runtime/half_precision/test_fp16.py b/tests/unit/runtime/half_precision/test_fp16.py index dba15a969459..d19cdf146294 100644 --- a/tests/unit/runtime/half_precision/test_fp16.py +++ b/tests/unit/runtime/half_precision/test_fp16.py @@ -357,6 +357,8 @@ def test(self, zero_stage, use_cpu_offload): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize("zero_stage", [1, 2, 3]) @pytest.mark.parametrize("use_cpu_offload", [True, False]) @@ -402,6 +404,8 @@ def test(self, zero_stage, use_cpu_offload, hidden_dim=4): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize("zero_stage", [1, 2, 3]) @pytest.mark.parametrize("use_cpu_offload", [True, False]) @@ -436,6 +440,7 @@ def test(self, zero_stage, use_cpu_offload): model=model, optimizer=optimizer, model_parameters=model.parameters()) + model.destroy() @pytest.mark.parametrize("zero_stage", [1, 2, 3]) @@ -486,6 +491,8 @@ def test(self, zero_stage, use_cpu_offload): model.backward(loss) model.step() + model.destroy() + @amp_available class TestAmp(DistributedTest): @@ -615,6 +622,7 @@ def test(self, zero_stage, optimizer_constructor): model = SimpleModel(hidden_dim) client_optimizer = optimizer_constructor(params=model.parameters()) model, _, _, _ = deepspeed.initialize(config=config_dict, model=model, optimizer=client_optimizer) + model.destroy() class TestZero2ReduceScatterOff(DistributedTest): @@ -727,6 +735,8 @@ def test(self): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize('stage', [1, 2, 3]) class TestZeroEmptyGrad(DistributedTest): @@ -755,3 +765,5 @@ def test(self, stage): loss = model(batch[0], batch[1]) model.backward(loss) model.step() + + model.destroy() diff --git a/tests/unit/runtime/test_multiple_models.py b/tests/unit/runtime/test_multiple_models.py index 7f4de0f055f4..ba9aab69700e 100644 --- a/tests/unit/runtime/test_multiple_models.py +++ b/tests/unit/runtime/test_multiple_models.py @@ -42,6 +42,9 @@ def train_shared_loss(num_models, config_dict, dtype): for m in models: m.optimizer.zero_grad() + for m in models: + m.destroy() + def train_independent_loss(num_models, config_dict, dtype): hidden_dim = 64 @@ -59,6 +62,9 @@ def train_independent_loss(num_models, config_dict, dtype): m.backward(loss) m.step() + for m in models: + m.destroy() + @pytest.mark.parametrize('num_models', [1, 2, 3]) class TestMultipleModels(DistributedTest): From 78ec0254cbc36fde1f60d1c074b80e015baca54f Mon Sep 17 00:00:00 2001 From: inkcherry Date: Fri, 21 Mar 2025 07:23:43 +0800 Subject: [PATCH 61/69] hf tp+zero training doc. (#7151) @tjruwase Don't merge yet, I will leave a comment when it is ready for merge. Thank you. --------- Signed-off-by: Olatunji Ruwase Signed-off-by: inkcherry Signed-off-by: Logan Adams Co-authored-by: Olatunji Ruwase Co-authored-by: Logan Adams Signed-off-by: Logan Adams --- blogs/huggingface-tp/README.md | 238 +++++++++++++++++++++ blogs/huggingface-tp/media/batchscale.png | Bin 0 -> 88949 bytes blogs/huggingface-tp/media/flowchart.png | Bin 0 -> 119592 bytes blogs/huggingface-tp/media/tp8.png | Bin 0 -> 96751 bytes blogs/huggingface-tp/media/tpzero1.png | Bin 0 -> 138113 bytes blogs/huggingface-tp/media/tpzero2.png | Bin 0 -> 129517 bytes blogs/huggingface-tp/media/zero1tpload.png | Bin 0 -> 52584 bytes blogs/huggingface-tp/media/zero2tpload.png | Bin 0 -> 50523 bytes blogs/huggingface-tp/media/zero3.png | Bin 0 -> 102847 bytes 9 files changed, 238 insertions(+) create mode 100644 blogs/huggingface-tp/README.md create mode 100644 blogs/huggingface-tp/media/batchscale.png create mode 100644 blogs/huggingface-tp/media/flowchart.png create mode 100644 blogs/huggingface-tp/media/tp8.png create mode 100644 blogs/huggingface-tp/media/tpzero1.png create mode 100644 blogs/huggingface-tp/media/tpzero2.png create mode 100644 blogs/huggingface-tp/media/zero1tpload.png create mode 100644 blogs/huggingface-tp/media/zero2tpload.png create mode 100644 blogs/huggingface-tp/media/zero3.png diff --git a/blogs/huggingface-tp/README.md b/blogs/huggingface-tp/README.md new file mode 100644 index 000000000000..609f690cd802 --- /dev/null +++ b/blogs/huggingface-tp/README.md @@ -0,0 +1,238 @@ +
+ +# Automatic Tensor Parallel (AutoTP) Training of Hugging Face models + +
+ + +# Introduction + +Tensor parallelism (TP) is an important memory optimization for training large-scale deep learning models. Despite the popularity of training Hugging Face (HF) [models](https://huggingface.co/models), the model scaling options for **[HF trainer](https://huggingface.co/docs/transformers/main_classes/trainer)** was previously limited to sharded data parallelism through [ZeRO](https://huggingface.co/docs/accelerate/usage_guides/deepspeed)/[FSDP](https://huggingface.co/docs/accelerate/usage_guides/fsdp). While ZeRO3 offers superior memory efficiency, it incurs significant communication costs. ZeRO (1/2) has lower communication overhead, but in the case of very large models, it cannot be used directly due to memory limitations. Therefore, combining TP with ZeRO (1/2) offers more balanced options for memory and performance. Moreover, through TP, we can alleviate the batch scaling limitations imposed by ZeRO/FSDP. + +We are pleased to announce that DeepSpeed now provides native automatic tensor parallel training for Hugging Face (HF) transformers. This new feature builds on DeepSpeed's [AutoTP](https://www.deepspeed.ai/tutorials/automatic-tensor-parallelism/) mechanism, which was previously restricted to inference. AutoTP training can be combined with ZeRO to unlock unprecented efficiency benefits for HF model post-training, including: + +**1**. Model scaling with lower communication costs than FSDP/ZeRO3 (e.g., use AutoTP + ZeRO1 to achieve ZeRO3 memory savings). + +**2**. Batch size scaling for faster training and increased throughput. + +**3**. Context length scaling to enable new application scenarios. + +We have integrated AutoTP training with ZeRO1 & ZeRO2, with ZeRO3 integration on the way. AutoTP training is available in DeepSpeed versions >= 0.16.4 + +# Batch Scaling with AutoTP Training + ZeRO +The following is a batch scaling experiment of Llama3 8B training conducted on [Gaudi2 Accelerator](https://www.intel.com/content/www/us/en/products/details/processors/ai-accelerators/gaudi.html). + + +
+ + + + +*Figure 1. Batch scaling experiment on Gaudi2, showing throughput performance improvements from 2 to 4 cards by combining AutoTP and ZeRO. The used mbs is the max possible value with the given config. A higher speedup indicates better performance.* + +
+ + + +
+ + + + +*Figure 2. Model training with AutoTP + ZeRO* + +
+ + +Figure 2 illustrates the basic flowchart, The division of TP and ZeRO is implemented through the AutoTP parser and ZeRO Wrapper in [Accelerate](https://github.com/huggingface/accelerate.git). Besides, The TP-based dataloader and save mechanism are both supported in DeepSpeed and Accelerate. + +# Usage + +Although we evaluated AutoTP training with Llama2 & Llama3 models in this blog, we expect compatibility with other Hugging Face models, especially [those](https://www.deepspeed.ai/tutorials/automatic-tensor-parallelism/) previously validated with AutoTP inference. Please upgrade accelerate and transformers to the master branch. We will add their minimum version once they have release tag. + + + **Enable TP training** + +Similar to ZeRO, AutoTP training is enabled using the [deepspeed configuration file](https://www.deepspeed.ai/docs/config-json/) by specifying ```[tensor_parallel][autotp_size]```. +``` + "ZeRO_optimization": { + "stage": 1, + "gather_16bit_weights_on_model_save": true, + ... + }, + "tensor_parallel":{ + "autotp_size": 4 + }, +``` + +The parallel configuration follows this logic: + + +``` +tp_size = auto_tp_size +dp_size = num_gpus / tp_size +``` + +Note that the global_batch_size (gbs) changes with different TP settings: +``` +gbs (only dp) = per_device_batch_size * n_gpus * gradient_accumulation_steps + +gbs (dp with tp) = per_device_batch_size * n_gpus / tp_size * gradient_accumulation_steps +``` + + + + + + + + **Save Model** + + + + +Saving checkpoints and model files is fully compatible with HF transformers. The [trainer.save_model()](https://huggingface.co/docs/transformers/v4.49.0/en/main_classes/trainer#transformers.Trainer.save_model) method saves the original model. Ensure ```gather_16bit_weights_on_model_save``` is set to ```true```in the [deepspeed configuration file](https://www.deepspeed.ai/docs/config-json/). +```gather_16bit_weights_on_model_save=true in config. + "ZeRO_optimization": { + ... + "gather_16bit_weights_on_model_save": true, + }, +``` + +``` +trainer.save_model(your_saved_path) +``` +Models saved this way can be directly used for HF format inference without intermediate transformations. + + + + **Saving Checkpoints and Resuming** + + + +Saving Checkpoints remains compatible with HF transformers. Use [trainer.save_state()](https://huggingface.co/docs/transformers/v4.49.0/en/main_classes/trainer#transformers.Trainer.save_state) or set the save interval for automatic saving, which can be used to resume training. +``` +trainer.train(resume_from_checkpoint="your_saved_path/checkpoint-1200") +) +``` + +# Example +We validated AutoTP training using supervised finetune training (SFT) task: [stanford_alpaca](https://github.com/tatsu-lab/stanford_alpaca). The original benchmark model used in this project is Llama2-7B. + + + +**Training Loss curve** + + + +The following loss curves depict SFT training, where gbs is uniformly set to 32, and other configurations match the default experiment settings from ([stanford_alpaca](https://github.com/tatsu-lab/stanford_alpaca)). The loss curves are largely consistent across the following setups: + + - ZeRO3 + - TP + disable ZeRO + - ZeRO1 and ZeRO1 + AutoTP + - ZeRO2 and ZeRO2 + AutoTP + + + + + +
+ + + + +*Figure 3. Loss curve of ZeRO3 stage training (gbs=32, dp=8)* + +
+
+ + + +*Figure 4. Loss curve of AutoTP training (gbs=32, tp=8)* +
+ +
+ + + +*Figure 5. Loss curve of AutoTP + ZeRO1 training (gbs=32, dp=2, tp=4)* +
+ + +
+ + + +*Figure 6. Loss curve of AutoTP + ZeRO2 training (gbs=32, dp=2, tp=4)* + + +
+ + + **Resuming Training** + + + We tested recovery training curves from step 1200 in AutoTP + ZeRO1 and AutoTP + ZeRO2, which align with the original training curves. + +
+ + + +*Figure 7. AutoTP + ZeRO1 resuming training* + + + +*Figure 8. AutoTP + ZeRO2 resuming training* + +
+ + + + **Model Evaluation** + + + We conducted inference evaluations for the [MMLU task](https://github.com/EleutherAI/lm-evaluation-harness). + In MMLU, the scores for AutoTP + ZeRO1 and ZeRO1, as well as AutoTP + ZeRO2 and ZeRO2, are consistent, showing a fixed improvement over the pre-training model before SFT. + + +
+ + +| Groups | Version | Filter | n-shot | Metric | Model before SFT | ZeRO1 DP8 training | ZeRO1 TP4 DP2 training | ZeRO2 DP8 training | ZeRO2 TP4DP2 training | +|--------|---------|--------|--------|--------|-----------------------|--------------------|------------------------|--------------------|------------------------| +| mmlu | 2 | none | | acc | 0.4185 ± 0.0041 | 0.4472 ± 0.0041 | 0.4444 ± 0.0041 | 0.4543 ± 0.0041 | 0.4529 ± 0.0041 | +| - humanities | 2 | none | | acc | 0.3979 ± 0.0069 | 0.4185 ± 0.0070 | 0.4145 ± 0.0069 | 0.4274 ± 0.0070 | 0.4272 ± 0.0070 | +| - other | 2 | none | | acc | 0.4712 ± 0.0089 | 0.5249 ± 0.0087 | 0.5182 ± 0.0088 | 0.5282 ± 0.0087 | 0.5269 ± 0.0087 | +| - social sciences | 2 | none | | acc | 0.4742 ± 0.0089 | 0.5070 ± 0.0089 | 0.5083 ± 0.0088 | 0.5151 ± 0.0088 | 0.5115 ± 0.0089 | +| - stem | 2 | none | | acc | 0.3428 ± 0.0084 | 0.3549 ± 0.0084 | 0.3539 ± 0.0084 | 0.3622 ± 0.0084 | 0.3609 ± 0.0084 | + +*Table 1. MMLU score with Llama2-7B inference* + +
+ + + + + +# Miscellaneous + +If users define their own dataloader, please ensure data consistency within ```deepspeed.utils.get_tensor_model_parallel_group()```. DeepSpeed provides basic validation functions to assist with this. + +Furthermore, if users are not using transformers library, you can replace the ```TensorParallel_Layer``` layer and its subclasses as needed. See ```prepare_tp_model``` function in ```unit/model_parallelism/test_autotp_training.py```. Users can also define different shard and gather for subclasses of ```TensorParallel_Layer.``` + + + + + +# Ongoing Work +- **Optimization**: Communication/Activation optimization. +- **Usability**: Support [Transformers TP plan](https://github.com/huggingface/transformers/blob/336dc69d63d56f232a183a3e7f52790429b871ef/src/transformers/models/llama/configuration_llama.py#L145), decouple AutoTP parser and more model testing, + + +Theoretically, features supported by ZeRO should also be supported, though extensive testing is pending. + +Welcome bug reports, enhancement, and additional model training examples. + + +# Contributors +This work was made possible through a deep collaboration between Intel and Microsoft. The contributors include Mingzhi Liu, Guokai Ma, Kiefer Kuah, Yejing Lai, Kurt Chen, Yejun Guo, Guangxin Xu, Xiaofei Feng, and Yang Wang from Intel; Guanhua Wang and Olatunji Ruwase from Microsoft. diff --git a/blogs/huggingface-tp/media/batchscale.png b/blogs/huggingface-tp/media/batchscale.png new file mode 100644 index 0000000000000000000000000000000000000000..37a6eeeade9ee2564b9e63a9f7ab6908b991654c GIT binary patch literal 88949 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

-{wuOg)nVG82Gwtwiw7g%4y2RE8aTF!gtQ8k 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⩔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 OlH%=aMOXiR{C@x&L&bUk literal 0 HcmV?d00001 diff --git a/blogs/huggingface-tp/media/zero2tpload.png b/blogs/huggingface-tp/media/zero2tpload.png new file mode 100644 index 0000000000000000000000000000000000000000..69f002abf4746d7d287cabb26412373147a1e615 GIT binary patch literal 50523 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

o1&!n& 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 Date: Mon, 24 Mar 2025 21:50:30 +0200 Subject: [PATCH 62/69] Avoid graph break by removing redundant requires_grad attr change (#7158) This PR is a continuation of the efforts to improve DeepSpeed performance when using PyTorch compile. Dynamo breaks the graph because `flat_tensor.requires_grad = False`: * Is a side-effecting operation on tensor metadata * Occurs in a context where Dynamo expects static tensor properties for tracing `flat_tensor.requires_grad` is redundant and can be safely removed because: * `_allgather_params()` function is already decorated with `@torch.no_grad()` which ensures the desired property * `flat_tensor` is created using the `torch.empty()` which sets the `requires_grad=False` by default. --------- Signed-off-by: Max Kovalenko Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Signed-off-by: Logan Adams --- deepspeed/runtime/zero/partition_parameters.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deepspeed/runtime/zero/partition_parameters.py b/deepspeed/runtime/zero/partition_parameters.py index db03a4b86134..b7c624934b29 100755 --- a/deepspeed/runtime/zero/partition_parameters.py +++ b/deepspeed/runtime/zero/partition_parameters.py @@ -1899,7 +1899,6 @@ def _allgather_params(self, param_list, hierarchy=0): tensor_size = partition_size * self.num_partitions flat_tensor = torch.empty(tensor_size, dtype=param_list[0].ds_tensor.dtype, device=self.local_device) - flat_tensor.requires_grad = False partitions = [] for i in range(self.num_partitions): start = partition_size * i From 6adcf2e31f168794e98e60f684c6fc9c7e07b9a3 Mon Sep 17 00:00:00 2001 From: Masahiro Tanaka <81312776+tohtana@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:49:09 -0700 Subject: [PATCH 63/69] Add destroy to tests to free memory (#7160) ZeRO3 requires explicit cleaning in tests when reusing the environment. This PR adds `destroy` calls to the tests to free memory and avoid potential errors due to memory leaks. Signed-off-by: Masahiro Tanaka Signed-off-by: Logan Adams --- tests/unit/runtime/zero/test_zero.py | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/unit/runtime/zero/test_zero.py b/tests/unit/runtime/zero/test_zero.py index 2ae2755086f8..73580a01c514 100644 --- a/tests/unit/runtime/zero/test_zero.py +++ b/tests/unit/runtime/zero/test_zero.py @@ -83,6 +83,7 @@ def test(self, zero_stage): data_loader = random_dataloader(model=model, total_samples=16, hidden_dim=hidden_dim, device=model.device) run_unbalanced_gradients(model, data_loader) + model.destroy() # testing the fix https://github.com/deepspeedai/DeepSpeed/pull/1227 @@ -143,6 +144,8 @@ def forward(self, x, y): model.backward(loss) model.step() + model.destroy() + # testing the fix https://github.com/deepspeedai/DeepSpeed/pull/1227 # also reproduces the https://github.com/deepspeedai/DeepSpeed/pull/1372 @@ -243,6 +246,8 @@ def forward(self, x, y): # float() workaround for torch<1.6 assert torch.allclose(orig_state_dict[name].float(), fp32_state_dict[name].float()) + model.destroy() + def test_2_param_groups(self, tmpdir, zero_stage, freeze_params): # TODO: # - need to test with multiple param groups @@ -348,6 +353,8 @@ def forward(self, x, y): # float() workaround for torch<1.6 assert torch.allclose(orig_state_dict[name].float(), fp32_state_dict[name].float()) + model.destroy() + @pytest.mark.parametrize("allgather_bucket_size", [1000, 1001]) class TestIncorectAllgatherBucketSize(DistributedTest): @@ -821,6 +828,8 @@ def create_tensor(vals, dtype: torch.dtype = None) -> Tensor: _assert_partition_status(ds_engine, {ZeroParamStatus.NOT_AVAILABLE}) assert not math.isclose(ds_engine.optimizer._global_grad_norm, 0.0) + ds_engine.destroy() + @pytest.mark.parametrize("init_context_manager", [True, False]) @pytest.mark.parametrize("reduce_scatter", [True, False]) @@ -893,6 +902,8 @@ def forward(self, x: Tensor) -> Tensor: assert torch.allclose(weight_gradient, expected_weight_gradient) + ds_engine.destroy() + @pytest.mark.parametrize("init_context_manager", [True, False]) class TestZero3ParamPartitioningManyParams(DistributedTest): @@ -977,6 +988,8 @@ def forward(self, x: Tensor) -> Tensor: for layer_num, activation in enumerate(weight_gradients): pass + ds_engine.destroy() + class TestZero3InitForParentWeightInitialization(DistributedTest): world_size = 4 @@ -1197,6 +1210,8 @@ def create_tensor(vals): ds_engine.optimizer.step() _assert_partition_status(ds_engine, {ZeroParamStatus.NOT_AVAILABLE}) + ds_engine.destroy() + class TestParamPartitioningSkipInit(DistributedTest): world_size = 2 @@ -1274,6 +1289,8 @@ def forward(self, x, y): model.backward(loss) model.step() + model.destroy() + class TestZeroOffloadStage1(DistributedTest): world_size = 2 @@ -1311,6 +1328,8 @@ def test(self): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize("return_type", [tuple, list, dict]) class TestZero3DictFwd(DistributedTest): @@ -1373,6 +1392,8 @@ def forward(self, x, y): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize("zero_stage", [1, 2, 3]) class TestZeroAdamOptimizerStepCount(DistributedTest): @@ -1439,6 +1460,8 @@ def test(self, zero_stage): assert all(step == step_counts[0] for step in step_counts) assert model.global_steps == step_counts[0] + model.destroy() + @pytest.mark.parametrize("zero_stage", [1, 2, 3]) class TestZeroFrozenWeights(DistributedTest): @@ -1497,6 +1520,8 @@ def forward(self, x, y): model.backward(loss) model.step() + model.destroy() + @pytest.mark.parametrize("force_ds_optim", [True, False]) class TestZeroOffloadOptim(DistributedTest): @@ -1577,6 +1602,8 @@ def test_training_partition_cache(self, training): model.empty_partition_cache() assert sum([p.numel() for p in model.parameters()]) == 0 + model.destroy() + @pytest.mark.parametrize("use_client_optimizer", [True, False]) @pytest.mark.parametrize("empty_weight_group", [True, False]) @@ -1629,6 +1656,8 @@ def test_empty_param_groups(self, dtype, use_client_optimizer, empty_weight_grou config=config_dict, ) + model.destroy() + class TestZero3SwitchModes(DistributedTest): world_size = 2 @@ -1674,6 +1703,8 @@ def test(self, prefetch_ratio, zero_stage=3): for batch in data_loader: loss = model(batch[0], batch[1]) + model.destroy() + # Avoid overwriting client module id # https://github.com/deepspeedai/DeepSpeed/issues/6772 @@ -1707,3 +1738,4 @@ def forward(self, x): model, _, _, _ = deepspeed.initialize(model=model, model_parameters=model.parameters(), config=config_dict) post_init_m_id = model.id assert pre_init_m_id == post_init_m_id + model.destroy() From 7b7ac9e31fd92a8eeadd7c5245663d97f9c2ac5d Mon Sep 17 00:00:00 2001 From: Connector Switch Date: Tue, 25 Mar 2025 06:30:33 +0800 Subject: [PATCH 64/69] [NFC] Typo fix in SP layer. (#7152) Signed-off-by: c8ef Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Co-authored-by: Olatunji Ruwase Signed-off-by: Logan Adams --- deepspeed/sequence/layer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deepspeed/sequence/layer.py b/deepspeed/sequence/layer.py index ba5e596e0d6d..dc47da072e5c 100644 --- a/deepspeed/sequence/layer.py +++ b/deepspeed/sequence/layer.py @@ -338,11 +338,11 @@ def __init__( if sp_stream is not None: self.overlap_handles = {} self.sp_overlap_comm = True - self.dafult_stream = get_accelerator().default_stream() + self.default_stream = get_accelerator().default_stream() def layer_sync(self, layer): if self.sp_overlap_comm and hasattr(layer, 'done_event'): - self.dafult_stream.wait_event(layer.done_event) + self.default_stream.wait_event(layer.done_event) def forward(self, query: Tensor, @@ -374,7 +374,7 @@ def bwd_hook(layer_type): def pre_hook_fun(grad): type = 'd' + layer_type self.overlap_handles[type + '_work'].wait() - self.sp_stream.wait_stream(self.dafult_stream) + self.sp_stream.wait_stream(self.default_stream) all2all_output = self.overlap_handles[type + '_grad'] grad = list(grad) grad[0] = self.overlap_handles[type + '_post_all2all_func'](all2all_output) @@ -389,7 +389,7 @@ def pre_hook_fun(grad): key_layer = _SeqAllToAll.apply(self.spg, key, self.scatter_idx, self.gather_idx, batch_dim_idx, None, self.overlap_handles, 'k') if self.sp_overlap_comm: - self.dafult_stream.wait_stream(self.sp_stream) + self.default_stream.wait_stream(self.sp_stream) value_layer = _SeqAllToAll.apply(self.spg, value, self.scatter_idx, self.gather_idx, batch_dim_idx, None, self.overlap_handles, 'v') From 31ec2b77f1f365ace41bdc641f131bf828b2c7cb Mon Sep 17 00:00:00 2001 From: Hongwei Chen <33092912+hwchen2017@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:52:42 -0700 Subject: [PATCH 65/69] Link AutoTP blog in the front page (#7167) Signed-off-by: Hongwei Co-authored-by: Logan Adams <114770087+loadams@users.noreply.github.com> Signed-off-by: Logan Adams --- README.md | 2 +- docs/index.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6922e55b4144..836047520390 100755 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ## Latest News DeepSpeed empowers ChatGPT-like model training with a single click, offering 15x speedup over SOTA RLHF systems with unprecedented cost reduction at all scales; [learn how](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-chat). - +* [2025/03] [DeepSpeed-AutoTP: Automatic Tensor Parallel Training of Hugging Face models](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/huggingface-tp/README.md) * [2024/12] [Ulysses-Offload: Democratizing Long Context LLM Training ](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/ulysses-offload/README.md) * [2024/12] [DeepSpeed-Domino: Communication-Free LLM Training Engine](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/deepspeed-domino/README.md) * [2024/08] [DeepSpeed on Windows](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/README.md) [[日本語](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/japanese/README.md)] [[中文](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/windows/08-2024/chinese/README.md)] diff --git a/docs/index.md b/docs/index.md index 6ce7e6251cbf..22447070223e 100755 --- a/docs/index.md +++ b/docs/index.md @@ -7,6 +7,8 @@ title: "Latest News" --- DeepSpeed empowers ChatGPT-like model training with a single click, offering 15x speedup over SOTA RLHF systems with unprecedented cost reduction at all scales; [learn how](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-chat). +* [2025/03] [DeepSpeed AutoTP: Automatic Tensor Parallel Training of Hugging Face models](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/huggingface-tp/README.md) + * [2024/12] [DeepSpeed Domino: Communication-Free LLM Training Engine](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/deepspeed-domino/README.md) * [2024/08] [DeepSpeed on Windows](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/windows/08-2024/README.md)[[日本語](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/windows/08-2024/japanese/README.md)] [[中文](https://github.com/deepspeedai/DeepSpeed/blob/master/blogs/windows/08-2024/chinese/README.md)] From 4c32a9d067df2d8a715e12b16d119c7ed8ab0361 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Tue, 25 Mar 2025 09:43:50 -0700 Subject: [PATCH 66/69] Remove unneeded requires in build system declaration Signed-off-by: Logan Adams --- pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 86031c759fea..e11b9b330f6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,7 @@ [build-system] requires = [ "setuptools>=64", - "wheel", - "ninja", - "typing-extensions>=4.10.0", - "torch" + "wheel" ] # Use legacy backend to import local packages in setup.py build-backend = "setuptools.build_meta:__legacy__" From c4b24fd3795fd48c1f08c7f24e05bbf4d48ab59b Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Tue, 25 Mar 2025 13:14:09 -0700 Subject: [PATCH 67/69] Add build to the pyproject --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index e11b9b330f6f..d7ac0a3f5232 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [build-system] requires = [ + "build", "setuptools>=64", "wheel" ] From b330b4e5ddf5e16e9c0b90881318cb726fe34164 Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 28 Mar 2025 10:54:26 -0700 Subject: [PATCH 68/69] Add no torch build triggers Signed-off-by: Logan Adams --- .github/workflows/no-torch.yml | 2 ++ pyproject.toml | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/no-torch.yml b/.github/workflows/no-torch.yml index 75c4ecb850c9..46769fd2d82b 100644 --- a/.github/workflows/no-torch.yml +++ b/.github/workflows/no-torch.yml @@ -7,6 +7,8 @@ on: - 'accelerator/**' - '.github/workflows/no-torch.yml' - 'op_builder/**' + - 'setup.py' + - 'pyproject.toml' schedule: - cron: "0 0 * * *" diff --git a/pyproject.toml b/pyproject.toml index d7ac0a3f5232..a50504bf6964 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,7 @@ requires = [ "build", "setuptools>=64", + "torch", "wheel" ] # Use legacy backend to import local packages in setup.py From 3601c293ddbc9dd1c3f71d310ba88c88d5fe42ca Mon Sep 17 00:00:00 2001 From: Logan Adams Date: Fri, 28 Mar 2025 10:55:04 -0700 Subject: [PATCH 69/69] Remove no build isolation from nv-torch-latest --- .github/workflows/nv-torch-latest-v100.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nv-torch-latest-v100.yml b/.github/workflows/nv-torch-latest-v100.yml index d0e717eac21b..eba35ba7210a 100644 --- a/.github/workflows/nv-torch-latest-v100.yml +++ b/.github/workflows/nv-torch-latest-v100.yml @@ -44,7 +44,7 @@ jobs: - name: Install deepspeed run: | - pip install .[dev,1bit,autotuning] --no-build-isolation + pip install .[dev,1bit,autotuning] ds_report - name: Python environment

;?pOFPl|JjjxQ^2OZ3{zDSn^u70j{8CqEzMYU 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 I#Eb&}4i_@% literal 0 HcmV?d00001 diff --git a/blogs/huggingface-tp/media/flowchart.png b/blogs/huggingface-tp/media/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..b7115df8c213e48f19a72bb79cc1604bc0e59b1a GIT binary patch literal 119592 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 C!ueYO literal 0 HcmV?d00001 diff --git a/blogs/huggingface-tp/media/tp8.png b/blogs/huggingface-tp/media/tp8.png new file mode 100644 index 0000000000000000000000000000000000000000..0ae6e925eef13e57e89989481e974d243e32a873 GIT binary patch literal 96751 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 E0l=jLDF6Tf literal 0 HcmV?d00001 diff --git a/blogs/huggingface-tp/media/tpzero1.png b/blogs/huggingface-tp/media/tpzero1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f21a9e2a5f5ecc1384689872f1797803ed043c GIT binary patch literal 138113 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 literal 0 HcmV?d00001 diff --git a/blogs/huggingface-tp/media/tpzero2.png b/blogs/huggingface-tp/media/tpzero2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3333990835bffff1c21ce4cef7899139a191c8 GIT binary patch literal 129517 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