bojone / bert4keras

keras implement of transformers for humans
https://kexue.fm/archives/6915
Apache License 2.0
5.34k stars 923 forks source link

TF_KERAS=1 报错 #263

Open zmingshi opened 3 years ago

zmingshi commented 3 years ago

基本信息

核心代码

# examples/task_seq2seq_autotitle_csl_mt5.py
# 脚本头部设置变量
import os
os.environ['TF_KERAS'] = '1'

输出信息

[1,0]:Sun, 06 Dec 2020 14:54:00 deprecation.py[line:506] [WARNING] From /usr/lib64/python2.7/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1628: calling init (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version. [1,0]:Instructions for updating: [1,0]:If using Keras pass _constraint arguments to layers. [1,0]:Traceback (most recent call last): [1,0]: File "task_seq2seq_composition_unilm_wobert_predict.py", line 152, in [1,0]: config_path, checkpoint_path, application='unilm' [1,0]: File "/usr/lib/python2.7/site-packages/bert4keras/models.py", line 2294, in build_transformer_model [1,0]: transformer.build(configs) [1,0]: File "/usr/lib/python2.7/site-packages/bert4keras/models.py", line 88, in build [1,0]: outputs = self.call(inputs) [1,0]: File "/usr/lib/python2.7/site-packages/bert4keras/models.py", line 98, in call [1,0]: outputs = self.apply_embeddings(inputs) [1,0]: File "/usr/lib/python2.7/site-packages/bert4keras/models.py", line 431, in apply_embeddings [1,0]: name='Embedding-Token' [1,0]: File "/usr/lib/python2.7/site-packages/bert4keras/models.py", line 140, in apply [1,0]: return self.layers[name](inputs, arguments) [1,0]: File "/usr/lib64/python2.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 742, in call [1,0]: inputs, outputs, args, kwargs) [1,0]: File "/usr/lib64/python2.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 1841, in _set_connectivitymetadata [1,0]: input_tensors=inputs, output_tensors=outputs, arguments=kwargs) [1,0]: File "/usr/lib64/python2.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 1928, in _add_inbound_node [1,0]: input_tensors) [1,0]: File "/usr/lib64/python2.7/site-packages/tensorflow_core/python/util/nest.py", line 524, in map_structure [1,0]: structure[0], [func(x) for x in entries], [1,0]: File "/usr/lib64/python2.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 1927, in [1,0]: inbound_layers = nest.map_structure(lambda t: t._keras_history.layer, [1,0]:AttributeError: 'tuple' object has no attribute 'layer'[1,0]:

自我尝试

tensorflow2.2 同样报错,模型加载就直接报错了?不知道什么原因~

bojone commented 3 years ago

我跟你一样的环境,并没有报错。你确定你跑的是task_seq2seq_autotitle_csl_mt5.py?我看你的错误日志是task_seq2seq_composition_unilm_wobert_predict.py

zmingshi commented 3 years ago

我跟你一样的环境,并没有报错。你确定你跑的是task_seq2seq_autotitle_csl_mt5.py?我看你的错误日志是task_seq2seq_composition_unilm_wobert_predict.py

task_seq2seq_autotitle_csl_mt5.pytask_seq2seq_unilm_wobert.py 都报错了,那可能还是我的docker 环境问题吧~ 我只是改了一下训练数据,因为目前example 的DataGenerator 代码load 全量数据到内存的,我的数据比较大不能这么干。 现在把数据转成tfrecords 用了tf.dataset, 但是model.fit(dataset....) 目前有问题,网上查了下说是必须用 tf.keras 才行,没想到还是报错了。 我再试试吧,多谢苏神!!

bojone commented 3 years ago

我跟你一样的环境,并没有报错。你确定你跑的是task_seq2seq_autotitle_csl_mt5.py?我看你的错误日志是task_seq2seq_composition_unilm_wobert_predict.py

task_seq2seq_autotitle_csl_mt5.pytask_seq2seq_unilm_wobert.py 都报错了,那可能还是我的docker 环境问题吧~ 我只是改了一下训练数据,因为目前example 的DataGenerator 代码load 全量数据到内存的,我的数据比较大不能这么干。 现在把数据转成tfrecords 用了tf.dataset, 但是model.fit(dataset....) 目前有问题,网上查了下说是必须用 tf.keras 才行,没想到还是报错了。 我再试试吧,多谢苏神!!

关于转换为dataset,你可以参考一下这个脚本 https://github.com/bojone/bert4keras/blob/master/examples/task_seq2seq_autotitle_multigpu.py

zmingshi commented 3 years ago

我跟你一样的环境,并没有报错。你确定你跑的是task_seq2seq_autotitle_csl_mt5.py?我看你的错误日志是task_seq2seq_composition_unilm_wobert_predict.py

task_seq2seq_autotitle_csl_mt5.pytask_seq2seq_unilm_wobert.py 都报错了,那可能还是我的docker 环境问题吧~ 我只是改了一下训练数据,因为目前example 的DataGenerator 代码load 全量数据到内存的,我的数据比较大不能这么干。 现在把数据转成tfrecords 用了tf.dataset, 但是model.fit(dataset....) 目前有问题,网上查了下说是必须用 tf.keras 才行,没想到还是报错了。 我再试试吧,多谢苏神!!

关于转换为dataset,你可以参考一下这个脚本 https://github.com/bojone/bert4keras/blob/master/examples/task_seq2seq_autotitle_multigpu.py

多谢苏神,这次都直接改成多卡了~!! 我之前用horovod 改成多卡了,可以正常运行。 主要问题是多文件、大数据读入,后来改成 tf 自身的 TextLineDataSet 形式了,可以训练起来,但是不知道对错~ 不知道苏神为什么不用TextLineDataSet ,而是每次自己手动实现DataGenerator? 如下这种样本补齐到 全局 max_len, 相比与tf.dataset 的 padded_batch 是不是有点浪费了?

                token_ids = token_ids + [0] * (maxlen - len(token_ids))
                segment_ids = segment_ids + [0] * (maxlen - len(segment_ids))
                # 返回一条样本
                yield token_ids, segment_ids
bojone commented 3 years ago

其实我是想要能自己控制的就尽量自己控制,不依赖太多现成函数。关键是一般情况下这个也不会是瓶颈了,所以自己padding也无妨。

---原始邮件--- 发件人: "zmingshi"<notifications@github.com> 发送时间: 2021年1月31日(周日) 上午10:41 收件人: "bojone/bert4keras"<bert4keras@noreply.github.com>; 抄送: "苏剑林(Jianlin Su)"<bojone@spaces.ac.cn>;"Comment"<comment@noreply.github.com>; 主题: Re: [bojone/bert4keras] TF_KERAS=1 报错 (#263)

我跟你一样的环境,并没有报错。你确定你跑的是task_seq2seq_autotitle_csl_mt5.py?我看你的错误日志是task_seq2seq_composition_unilm_wobert_predict.py

task_seq2seq_autotitle_csl_mt5.py 和 task_seq2seq_unilm_wobert.py 都报错了,那可能还是我的docker 环境问题吧~ 我只是改了一下训练数据,因为目前example 的DataGenerator 代码load 全量数据到内存的,我的数据比较大不能这么干。 现在把数据转成tfrecords 用了tf.dataset, 但是model.fit(dataset....) 目前有问题,网上查了下说是必须用 tf.keras 才行,没想到还是报错了。 我再试试吧,多谢苏神!!

关于转换为dataset,你可以参考一下这个脚本 https://github.com/bojone/bert4keras/blob/master/examples/task_seq2seq_autotitle_multigpu.py

多谢苏神,这次都直接改成多卡了~!! 我之前用horovod 改成多卡了,可以正常运行。 主要问题是多文件、大数据读入,后来改成 tf 自身的 TextLineDataSet 形式了,可以训练起来,但是不知道对错~ 不知道苏神为什么不用TextLineDataSet ,而是每次自己手动实现DataGenerator? 如下这种样本补齐到 全局 max_len, 相比与tf.dataset 的 padded_batch 是不是有点浪费了? token_ids = token_ids + [0] (maxlen - len(token_ids)) segment_ids = segment_ids + [0] (maxlen - len(segment_ids)) # 返回一条样本 yield token_ids, segment_ids

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.