256 Star 932 Fork 110

MindSpore / mindarmour

 / 详情

DPOptimizer训练速度过慢

DONE
Question
创建于  
2023-06-07 14:20

我使用DPOptimizer微调GPT,速度太慢,我使用了四条数据,batchsize设置为2,使用正常微调20epochs,花费<4min,但是使用DPOptimizer则无法微调,大概过了40分钟,被迫终止了运行。
我使用的包版本如下:

mindarmour                               1.8.0
mindformers                              0.3.0
mindinsight                              1.8.0
mindspore-ascend                         1.8.1
mindx-elastic                            0.0.1
modelarts-mindspore-model-server         1.0.4

因为每次使用DPOptimier都无法得到运行结果,所以没有具体的时间,我使用的代码如下:
因为微调的代码有数据集,不方便复现。我使用下面的代码也遇到了跑不出结果的问题,请问要如何解决?

from mindformers import GPT2LMHeadModel, GPT2Tokenizer
from mindarmour.privacy.diff_privacy import DPOptimizerClassFactory
import mindspore as ms
model = GPT2LMHeadModel.from_pretrained('gpt2')
model.set_train(False)
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

GaussianSGD = DPOptimizerClassFactory(micro_batches=2)
GaussianSGD.set_mechanisms('Gaussian', norm_bound=1.0, initial_noise_multiplier=1.5)
opt = GaussianSGD.create('Momentum')(params=model.trainable_params(),
                                         learning_rate=0.001,
                                         momentum=0.9)
# opt = ms.nn.Adam(model.trainable_params())
grad_fn = ms.ops.value_and_grad(model, None, opt.parameters, has_aux=False)

model.set_train(True)
inputs = tokenizer(["hello world"],
                   padding='max_length',
                   max_length=model.config.seq_length+1,
                   return_tensors='ms')
# output = model(input_ids=inputs["input_ids"])
# print(output)  # 计算loss
loss, grad = grad_fn(inputs['input_ids'])
res = opt(grad)
print(loss)
print(res)

评论 (7)

huanyixie 创建了缺陷

Please assign maintainer to check this issue.
请为此issue分配处理人。
@fangwenyi @chengxiaoli @wuweikang

Please add labels (comp or sig), also you can visit https://gitee.com/mindspore/community/blob/master/sigs/dx/docs/labels.md to find more.
为了让代码尽快被审核,请您为Pull Request打上 组件(comp)或兴趣组(sig) 标签,打上标签的PR可直接推送给责任人进行审核。
更多的标签可以查看https://gitee.com/mindspore/community/blob/master/sigs/dx/docs/labels.md
以组件相关代码提交为例,如果你提交的是data组件代码,你可以这样评论:
//comp/data
当然你也可以邀请data SIG组来审核代码,可以这样写:
//sig/data
另外你还可以给这个PR标记类型,例如是bugfix或者是特性需求:
//kind/bug or //kind/feature
恭喜你,你已经学会了使用命令来打标签,接下来就在下面的评论里打上标签吧!

wuweikang 负责人设置为ZhidanLiu
wuweikang 任务类型缺陷 修改为Question
wuweikang 关联项目设置为MindSpore Issue Assistant
wuweikang 计划开始日期设置为2023-06-07
wuweikang 计划截止日期设置为2023-06-14
wuweikang 添加了
 
mindspore-assistant
标签
wuweikang 添加了
 
sig/security
标签
wuweikang 任务状态TODO 修改为ACCEPTED

@ZhidanLiu @yyuse @liuluobin 老师 可以抽空看一下这个issue吗?我在做mindspore的开源实习任务,用到了mindarmour,现在卡到这里了。如果复现错误遇到什么问题可以随时提。就目前来看,我使用普通的SGD、Adam训练流程跑通都没问题,但是使用mindarmour的话会卡住不动

@ZhidanLiu @yyuse @liuluobin 请问这个issue有解决方法了嘛?

@ZhidanLiu @yyuse @liuluobin 请问这个issue还没有解决方案吗?

@ZhidanLiu @yyuse @liuluobin 老师 请问有解决方法了吗?

学生已经自己解决了,可以关闭

Shawny 任务状态ACCEPTED 修改为DONE

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(3)
Python
1
https://gitee.com/mindspore/mindarmour.git
git@gitee.com:mindspore/mindarmour.git
mindspore
mindarmour
mindarmour

搜索帮助