登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
11月29日 Gitee Talk | 模力方舟 AI 沙龙深圳站:看懂算力到应用的下一个主战场!点击立即报名~
代码拉取完成,页面将自动刷新
开源项目
>
人工智能
>
机器学习/深度学习
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
51
Star
465
Fork
161
PaddlePaddle
/
PaddleHub
代码
Issues
35
Pull Requests
1
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
升级paddlehub2.0后序列标注任务显存翻倍问题:
待办的
#I4QBW4
PaddlePaddle-Gardener
创建于
2022-01-11 14:52
[<b>源自github用户suntao2015005848</b>](https://github.com/PaddlePaddle/PaddleHub/issues/1531): 目前的环境是: python 3.7.5 cuda10.1 cudnn7.6.5 paddlepaddle gpu 2.1.0.post101 paddlenlp 2.0.1 碰到一个问题,之前的paddlehub我用的是1.8.5的,一个序列标的任务启动后显存占用大概是2g,后面升级到paddlehub 是2.0.4,但是同样的一个序列标注任务启动后显存竟然达到了8个G。翻了大概4倍。 这个问题困扰良久,希望解惑。 这是预测代码 ``` import paddlehub as hub from paddlehub.module.module import moduleinfo, serving import logging import paddle # 加载模型的路径参数 LOAD_CHECKPOINT = '/home/suntao_test/v2_nlp_es003/nlp_mod_003/best_model/model.pdparams' label_list = ['B-BG', 'I-BG', 'B-QT', 'I-QT', 'B-JY', 'I-JY', 'B-QK', 'I-QK', 'B-SY', 'I-SY', 'B-JHL', 'I-JHL', 'B-RF', 'I-RF', 'B-JX', 'I-JX', 'B-CS', 'I-CS', 'B-GS', 'I-GS', 'B-ZY', 'I-ZY', 'B-SZ', 'I-SZ', 'B-WZ', 'I-WZ', 'B-F', 'I-F', 'B-JD', 'I-JD', 'O'] label_map = {idx: label for idx, label in enumerate(label_list)} split_char = ' ' max_seq_len = 256 @moduleinfo(name="nlp_zjgjz", version="2.0.0", summary="危险驾驶罪案件关键字抽取", author="sun_tao", author_email="http://eastsoft.com.cn", type="nlp/es003") class ESNLPMOD(hub.Module): logging.basicConfig(level=logging.INFO) logging.info('开始加载模型') model = hub.Module( name='ernie', task='token-cls', load_checkpoint=LOAD_CHECKPOINT, label_map=label_map ) def parse_chunk_labels(self, text, labels): res = "" p_res = "" labels = labels[1:len(text) + 1] lastIsO = True for tObj, lObj in zip(text, labels): p_res += "{}--{}||".format(tObj, lObj) if lObj == "O": lastIsO = True continue if lObj.startswith('B-'): lastIsO = False res += '*--*' + lObj.split('-')[1] + '\\' + tObj elif lObj.startswith('I-'): if lastIsO: lastIsO = False res += '*--*' + lObj.split('-')[1] + '\\' + tObj else: res += tObj res = res.split('*--*') res = [item for item in res if item != ""] return res def predict(self, texts, use_gpu): paddle.disable_static() data = [ [split_char.join(text)] for text in texts ] results = self.model.predict(data, max_seq_len=max_seq_len, batch_size=16, use_gpu=use_gpu) return results @serving def serving_method(self, data, use_gpu=False): finalres = [] results = self.predict(data, use_gpu) for idx, text in enumerate(data): labels = results[idx] finalres.append(self.parse_chunk_labels(text, labels)) return finalres res = ESNLPMOD() ``` 这是训练代码: ``` import paddlehub as hub from paddlehub.datasets.base_nlp_dataset import SeqLabelingDataset from paddlehub.module.module import moduleinfo import logging import paddle # 检查模型存放位置的从参数 CHECKPOINT_DIR = '/home/suntao_test/v2_nlp_es002' # 存放数据的路径 BASE_DATA_PATH = '/home/suntao_test/v2_nlp_es002/data' label_list = ['B-YH', 'I-YH', 'B-BG', 'I-BG', 'B-FZR', 'I-FZR', 'B-BJ', 'I-BJ', 'B-ET', 'I-ET', 'B-ZJ', 'I-ZJ', 'B-SBJ', 'I-SBJ', 'B-SET', 'I-SET', 'B-SZJ', 'I-SZJ', 'B-SSF', 'I-SSF', 'B-XYK', 'I-XYK', 'B-KH', 'I-KH', 'B-FY', 'I-FY', 'B-QST', 'I-QST', 'B-KT', 'I-KT', 'O'] label_map = {idx: label for idx, label in enumerate(label_list)} split_char = ' ' max_seq_len = 512 class MyDataset(SeqLabelingDataset): # 数据集存放目录 # 数据文件使用的分隔符 def __init__(self, tokenizer, max_seq_len: int = 128, mode: str = 'train'): if mode == 'train': data_file = 'train.txt' elif mode == 'test': data_file = 'test.txt' else: data_file = 'dev.txt' super().__init__( base_path=BASE_DATA_PATH, tokenizer=tokenizer, max_seq_len=max_seq_len, mode=mode, data_file=data_file, label_file=None, label_list=label_list, split_char=split_char, is_file_with_header=True) @moduleinfo(name="NLP_ES002", version="2.0.0", summary="", author="", author_email="", type="nlp/es002") class ESNLPMOD(hub.Module): def __init__(self): logging.info('训练准备阶段') self.model = hub.Module( name='ernie', task='token-cls', label_map=label_map ) tokenizer = self.model.get_tokenizer() # 获取数据集 train_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='train') dev_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='dev') test_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='test') # 优化器的选择和参数配置 optimizer = paddle.optimizer.Adam(learning_rate=5e-5, parameters=self.model.parameters()) # fine-tune任务的执行者 trainer = hub.Trainer(self.model, optimizer, checkpoint_dir=CHECKPOINT_DIR, use_gpu=True) # 配置训练参数,启动训练,并指定验证集 trainer.train(train_dataset, epochs=15, batch_size=16, eval_dataset=dev_dataset, save_interval=3) # 在测试集上评估当前训练模型W trainer.evaluate(test_dataset, batch_size=16) if __name__ == '__main__': ESNLPMOD() ```
[<b>源自github用户suntao2015005848</b>](https://github.com/PaddlePaddle/PaddleHub/issues/1531): 目前的环境是: python 3.7.5 cuda10.1 cudnn7.6.5 paddlepaddle gpu 2.1.0.post101 paddlenlp 2.0.1 碰到一个问题,之前的paddlehub我用的是1.8.5的,一个序列标的任务启动后显存占用大概是2g,后面升级到paddlehub 是2.0.4,但是同样的一个序列标注任务启动后显存竟然达到了8个G。翻了大概4倍。 这个问题困扰良久,希望解惑。 这是预测代码 ``` import paddlehub as hub from paddlehub.module.module import moduleinfo, serving import logging import paddle # 加载模型的路径参数 LOAD_CHECKPOINT = '/home/suntao_test/v2_nlp_es003/nlp_mod_003/best_model/model.pdparams' label_list = ['B-BG', 'I-BG', 'B-QT', 'I-QT', 'B-JY', 'I-JY', 'B-QK', 'I-QK', 'B-SY', 'I-SY', 'B-JHL', 'I-JHL', 'B-RF', 'I-RF', 'B-JX', 'I-JX', 'B-CS', 'I-CS', 'B-GS', 'I-GS', 'B-ZY', 'I-ZY', 'B-SZ', 'I-SZ', 'B-WZ', 'I-WZ', 'B-F', 'I-F', 'B-JD', 'I-JD', 'O'] label_map = {idx: label for idx, label in enumerate(label_list)} split_char = ' ' max_seq_len = 256 @moduleinfo(name="nlp_zjgjz", version="2.0.0", summary="危险驾驶罪案件关键字抽取", author="sun_tao", author_email="http://eastsoft.com.cn", type="nlp/es003") class ESNLPMOD(hub.Module): logging.basicConfig(level=logging.INFO) logging.info('开始加载模型') model = hub.Module( name='ernie', task='token-cls', load_checkpoint=LOAD_CHECKPOINT, label_map=label_map ) def parse_chunk_labels(self, text, labels): res = "" p_res = "" labels = labels[1:len(text) + 1] lastIsO = True for tObj, lObj in zip(text, labels): p_res += "{}--{}||".format(tObj, lObj) if lObj == "O": lastIsO = True continue if lObj.startswith('B-'): lastIsO = False res += '*--*' + lObj.split('-')[1] + '\\' + tObj elif lObj.startswith('I-'): if lastIsO: lastIsO = False res += '*--*' + lObj.split('-')[1] + '\\' + tObj else: res += tObj res = res.split('*--*') res = [item for item in res if item != ""] return res def predict(self, texts, use_gpu): paddle.disable_static() data = [ [split_char.join(text)] for text in texts ] results = self.model.predict(data, max_seq_len=max_seq_len, batch_size=16, use_gpu=use_gpu) return results @serving def serving_method(self, data, use_gpu=False): finalres = [] results = self.predict(data, use_gpu) for idx, text in enumerate(data): labels = results[idx] finalres.append(self.parse_chunk_labels(text, labels)) return finalres res = ESNLPMOD() ``` 这是训练代码: ``` import paddlehub as hub from paddlehub.datasets.base_nlp_dataset import SeqLabelingDataset from paddlehub.module.module import moduleinfo import logging import paddle # 检查模型存放位置的从参数 CHECKPOINT_DIR = '/home/suntao_test/v2_nlp_es002' # 存放数据的路径 BASE_DATA_PATH = '/home/suntao_test/v2_nlp_es002/data' label_list = ['B-YH', 'I-YH', 'B-BG', 'I-BG', 'B-FZR', 'I-FZR', 'B-BJ', 'I-BJ', 'B-ET', 'I-ET', 'B-ZJ', 'I-ZJ', 'B-SBJ', 'I-SBJ', 'B-SET', 'I-SET', 'B-SZJ', 'I-SZJ', 'B-SSF', 'I-SSF', 'B-XYK', 'I-XYK', 'B-KH', 'I-KH', 'B-FY', 'I-FY', 'B-QST', 'I-QST', 'B-KT', 'I-KT', 'O'] label_map = {idx: label for idx, label in enumerate(label_list)} split_char = ' ' max_seq_len = 512 class MyDataset(SeqLabelingDataset): # 数据集存放目录 # 数据文件使用的分隔符 def __init__(self, tokenizer, max_seq_len: int = 128, mode: str = 'train'): if mode == 'train': data_file = 'train.txt' elif mode == 'test': data_file = 'test.txt' else: data_file = 'dev.txt' super().__init__( base_path=BASE_DATA_PATH, tokenizer=tokenizer, max_seq_len=max_seq_len, mode=mode, data_file=data_file, label_file=None, label_list=label_list, split_char=split_char, is_file_with_header=True) @moduleinfo(name="NLP_ES002", version="2.0.0", summary="", author="", author_email="", type="nlp/es002") class ESNLPMOD(hub.Module): def __init__(self): logging.info('训练准备阶段') self.model = hub.Module( name='ernie', task='token-cls', label_map=label_map ) tokenizer = self.model.get_tokenizer() # 获取数据集 train_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='train') dev_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='dev') test_dataset = MyDataset(tokenizer=tokenizer, max_seq_len=max_seq_len, mode='test') # 优化器的选择和参数配置 optimizer = paddle.optimizer.Adam(learning_rate=5e-5, parameters=self.model.parameters()) # fine-tune任务的执行者 trainer = hub.Trainer(self.model, optimizer, checkpoint_dir=CHECKPOINT_DIR, use_gpu=True) # 配置训练参数,启动训练,并指定验证集 trainer.train(train_dataset, epochs=15, batch_size=16, eval_dataset=dev_dataset, save_interval=3) # 在测试集上评估当前训练模型W trainer.evaluate(test_dataset, batch_size=16) if __name__ == '__main__': ESNLPMOD() ```
评论 (
5
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (23)
标签 (29)
develop
dependabot/pip/modules/audio/asr/u2_conformer_aishell/scipy-1.10.0
dependabot/pip/modules/audio/asr/deepspeech2_librispeech/scipy-1.10.0
dependabot/pip/modules/audio/asr/deepspeech2_aishell/scipy-1.10.0
dependabot/pip/modules/audio/asr/u2_conformer_librispeech/scipy-1.10.0
release/v1.8
release/v1.7
release/v1.5
release/v1.6
release/v2.3
add_release_note
release/v2.2
release/v2.1
release/v2.0.0-rc
release/v2.0.0-beta
release/v2.0
npu+xpu
release/v1.4
release/v1.2
release/v1.3
release/v1.1.0
release/v1.0.0
release/v0.5.0
v2.3.1
v2.3.0
v2.1.0
v2.0.0
v2.0.0-rc0
v2.0.0-beta1
v2.0.0-beta0
v1.8.1
v1.8.0
v1.7.0
v1.6.1
v1.6.0
v1.5.3
v1.5.4
v1.5.2
v1.5.1
v1.5.0
v1.4.1
v1.4.0
v1.3.0
v1.2.0
v1.1.2
v1.1.1
1.1.0
v1.0.1
1.0.0
v0.5.0
v0.3.1.alpha
V0.2-alpha
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
Python
1
https://gitee.com/paddlepaddle/PaddleHub.git
[email protected]
:paddlepaddle/PaddleHub.git
paddlepaddle
PaddleHub
PaddleHub
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册