Deepspeed JSON配置文件被忽略,配置未生效求助
解决Deepspeed配置文件不生效的问题
你的核心问题是代码未通过Deepspeed的核心初始化流程加载配置,仅调用deepspeed.init_distributed()不会读取ds_config.json中的设置,需要通过deepspeed.initialize()完成配置加载、分布式初始化、模型/优化器绑定的全流程。
修复步骤
- 移除手动调用的
deepspeed.init_distributed(),deepspeed.initialize()会自动完成分布式环境初始化 - 必须在代码中定义模型、优化器(对应你配置中的Adam优化器),并传入
deepspeed.initialize() - 确保
deepspeed.add_config_arguments(parser)正确添加参数,命令行传入的--deepspeed_config才会被解析
完整修复代码示例
import argparse import torch import torch.nn as nn import deepspeed def add_argument(): parser = argparse.ArgumentParser(description='CIFAR') parser.add_argument('--local_rank', type=int, default=-1, help='local rank passed from distributed launcher') parser = deepspeed.add_config_arguments(parser) args = parser.parse_args() return args # 定义示例模型(替换为你的实际模型) class CIFARModel(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = self.pool(torch.relu(self.conv2(x))) x = torch.flatten(x, 1) x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x args = add_argument() # 初始化模型、优化器(对应ds_config中的Adam配置) model = CIFARModel() optimizer = torch.optim.Adam(model.parameters(), lr=3e-4) # 核心:通过deepspeed.initialize加载配置并完成初始化 model, optimizer, _, _ = deepspeed.initialize(args=args, model=model, optimizer=optimizer) # 验证激活 checkpointing 是否生效 print("Activation checkpointing configured:", deepspeed.checkpointing.is_configured())
关键说明
- 配置加载逻辑:
deepspeed.initialize()会自动解析命令行传入的--deepspeed_config文件,将其中的参数(包括activation checkpointing、FP16等)应用到训练流程中,单独调用init_distributed()只会初始化分布式环境,不会处理配置。 - 手动调用configure报错原因:
deepspeed.checkpointing.configure()需要依赖Deepspeed内部初始化的MPU(模型并行单元),而initialize()会根据配置自动完成MPU的初始化,单独调用该方法会因缺少依赖报错。 - 验证方法:在
initialize()之后调用deepspeed.checkpointing.is_configured(),返回True即说明配置生效;也可以打印相关配置参数确认加载状态。
保持原执行命令不变
你的启动命令无需修改,继续使用:
deepspeed --num_nodes=2 --hostfile ./hostfile --num_gpus=2 ./rundeepspeed.py \ --deepspeed \ --deepspeed_config ./ds_config.json
内容的提问来源于stack exchange,提问作者Eliza
相关产品推荐
相关产品推荐

