CBLUEbenchmark / CBLUE

中文医疗信息处理基准CBLUE: A Chinese Biomedical Language Understanding Evaluation Benchmark
https://tianchi.aliyun.com/dataset/dataDetail?dataId=95414&lang=en-us
Apache License 2.0
727 stars 128 forks source link

cdn 和ie 数据集 predict 报错 #8

Closed xxllp closed 1 year ago

xxllp commented 1 year ago

这块我看这两个数据集的训练的时候只有一个模型文件 但是预测代码却要求两个模型 这个是哪里参数有不对的地方嘛

flow3rdown commented 1 year ago

您好,ie任务是采用的pipeline,包括一个实体识别模型和一个关系分类模型,cdn任务包括了一个分类模型和数量预测模型。可以方便贴一下您具体的报错信息吗?

xxllp commented 1 year ago

执行命令sh examples/run_ie.sh predict

Start running Traceback (most recent call last): File "baselines/run_ie.py", line 218, in <module> main() File "baselines/run_ie.py", line 177, in main tokenizer = tokenizer_class.from_pretrained(os.path.join(args.output_dir, 'er')) File "/root/anaconda3/envs/anon-kit/lib/python3.7/site-packages/transformers/tokenization_utils_base.py", line 1768, in from_pretrained f"Can't load tokenizer for '{pretrained_model_name_or_path}'. If you were trying to load it from " OSError: Can't load tokenizer for 'data/output/ie/pretrain5/er'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwise, make sure 'data/output/ie/pretrain5/er' is the correct path to a directory containing all relevant files for a BertTokenizer tokenizer.

这个代码我看是两个模型 报错是找不到文件 实际目录下没有这个

xxllp commented 1 year ago

还有个cdn的报错也基本一样的

xxllp commented 1 year ago

报错的地方改好了 有些代码不太对

xxllp commented 1 year ago

就是训练太慢了 是否能支持多卡同时训练

zxlzr commented 1 year ago

您好目前不支持多卡,您可以直接用deepspeed来实现多卡。

zxlzr commented 1 year ago

感谢您的关注,如果您方便的话可以提交pr

xxllp commented 1 year ago

这个ie 预测加载的模型应该还是不对 基本得到的实体位置 概率都是0.5

flow3rdown commented 1 year ago

这个ie 预测加载的模型应该还是不对 基本得到的实体位置 概率都是0.5

请问您用的还是自己的模型吗,还是公开的预训练模型?

xxllp commented 1 year ago

我知道为啥了 这个很奇怪啊 best step保存的pt参数文件 在ie.py里面重新保存了就不对了 但是我把文件转移过去是正确的~~~

xxllp commented 1 year ago

model = REModel(tokenizer, model_class, encoder_path=os.path.join(args.output_dir, f'checkpoint-{best_step}'), num_labels=data_processor.num_labels, config=config) model.load_state_dict(torch.load(os.path.join(args.output_dir, f'checkpoint-{best_step}', 'pytorch_model.pt'))) tokenizer = tokenizer_class.from_pretrained(os.path.join(args.output_dir, f'checkpoint-{best_step}')) torch.save(model.state_dict(), os.path.join(args.output_dir, 'pytorch_model_re.pt')) 这个里面最后一步保存文件是不对的?

lichuanxiang commented 1 year ago

@xxllp hello,请教下ER、RE的_save_best_checkpoint 函数怎么写的?看源码是直接pass了,没保存。用self.model_class.from_pretrained load checkpoint,提示 ERModel 没有from_pretrained

xxllp commented 1 year ago

torch 版本太高了 我用的torch 1.7才解决了这些个问题

flow3rdown commented 1 year ago

@xxllp hello,请教下ER、RE的_save_best_checkpoint 函数怎么写的?看源码是直接pass了,没保存。用self.model_class.from_pretrained load checkpoint,提示 ERModel 没有from_pretrained

您好,ER和RE是在run_ie.py中保存的best_checkpoint,如下: https://github.com/CBLUEbenchmark/CBLUE/blob/7febcfe7f65094bcbc2bf74c5bfccb870682360a/baselines/run_ie.py#L120-L124 另外ERModel是没有from_pretrained函数的,可以使用load_state_dict进行加载。

xxllp commented 1 year ago

我很奇怪为啥这个里面ERModel 等模型 要 encoder 还要保存下参数 这个不能一起保存吗

flow3rdown commented 1 year ago

我很奇怪为啥这个里面ERModel 等模型 要 encoder 还要保存下参数 这个不能一起保存吗

请问“要 encoder 还要保存下参数 ”指的是什么?没太明白您的意思。

xxllp commented 1 year ago

我现在需要升级下这个transformers的版本 代码这块需要改动啥 pt文件没有了 只有bin文件

xxllp commented 1 year ago

代码如下 这里面就是encoder 保存

        if args.model_type == 'zen':
            save_zen_model(os.path.join(args.output_dir, 'er'), model.encoder, tokenizer, ngram_dict, args)
        else:
            model.encoder.save_pretrained(os.path.join(args.output_dir, 'er'))
            tokenizer.save_vocabulary(save_directory=os.path.join(args.output_dir, 'er'))

但是之上 已经有 torch.save(model.state_dict(), os.path.join(args.output_dir, 'pytorch_model_er.pt'))

flow3rdown commented 1 year ago

代码如下 这里面就是encoder 保存

        if args.model_type == 'zen':
            save_zen_model(os.path.join(args.output_dir, 'er'), model.encoder, tokenizer, ngram_dict, args)
        else:
            model.encoder.save_pretrained(os.path.join(args.output_dir, 'er'))
            tokenizer.save_vocabulary(save_directory=os.path.join(args.output_dir, 'er'))

但是之上 已经有 torch.save(model.state_dict(), os.path.join(args.output_dir, 'pytorch_model_er.pt'))

保存的encoder实际是预训练语言模型,也可以不保存的哈。

hu1116 commented 10 months ago

还有个cdn的报错也基本一样的

请问下,您是怎么解决的