如何修改gpt-2代码以适配Tensorflow 2.0?

3
我正在尝试使用GPT-2进行文本生成。即使运行了Tensorflow 2.0的代码升级脚本code upgrade script,我仍然遇到兼容性错误。
我所采取的步骤:
  1. Clone repo

  2. From here on out, follow the directions in DEVELOPERS.md

  3. Run upgrade script on files in /src

  4. In terminal run: sudo docker build --tag gpt-2 -f Dockerfile.gpu .

  5. After building is done, run: sudo docker run --runtime=nvidia -it gpt-2 bash

  6. Enter python3 src/generate_unconditional_samples.py | tee /tmp/samples

  7. Get this traceback:

    Traceback (most recent call last):
    File "src/generate_unconditional_samples.py", line 9, in <module>  
    import model, sample, encoder
    File "/gpt-2/src/model.py", line 4, in <module>
    from tensorboard.plugins.hparams.api import HParam
    ImportError: No module named 'tensorboard.plugins.hparams'
    root@f8bdde043f91:/gpt-2# python3 src/generate_unconditional_samples.py | tee 
    /tmp/samples
    Traceback (most recent call last):
    File "src/generate_unconditional_samples.py", line 9, in <module>
    import model, sample, encoder
    File "/gpt-2/src/model.py", line 4, in <module>
    from tensorboard.plugins.hparams.api import HParam
    ImportError: No module named 'tensorboard.plugins.hparams'```
    
    
似乎 HParams 已经被弃用了,Tensorflow 2.0 中的新版本叫做 HParam。但是,这些参数是不同的。在 model.py 中,参数被实例化如下:
def default_hparams():
return HParams(
    n_vocab=0,
    n_ctx=1024,
    n_embd=768,
    n_head=12,
    n_layer=12,
)

似乎没有将gpt-2直接翻译为Tensorflow 2.0的方法。有人知道如何在Tensorflow 2.0中让gpt-2工作吗?
我的GPU是NVIDIA 20xx。
谢谢。
3个回答

1
自动升级代码很少能一帆风顺地运行。对于那个仓库,你应该使用最高版本的Tensorflow=1.15
如果你真的想要Tensorflow=2,你可以看看这个仓库:https://github.com/akanyaani/gpt-2-tensorflow2.0 注意:你将无法获得预训练模型(对于普通用户来说可能是最有趣的部分)。也就是说,无法访问他们的1554M或778M模型。
我不知道有什么方法可以自动升级从1.15到2.3或其他版本的预训练模型。

1

1
我曾经遇到同样的问题,但是通过在文件夹中创建一个单独的hparams.py文件并将此处内容填充其中来解决了它:https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/utils/hparam.py 然后在您的model.py中添加以下代码并替换掉这个:
import tensorflow as tf
from tensorflow.contrib.training import HParams

使用这个:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
from hparams import HParams

然后您需要在模块名称 "tf" 和模块之间添加 "compat.v1" ... 例如,如果它是 "tf.Session",将其更改为 "tf.compat.v1.Session",如果它是 "tf.placeholder",则将其更改为 "tf.compat.v1.placeholder",等等。我尝试降级到 tensorflow-gpu 1.13,但 gpt-2 仍无法正常工作。在 Python 3.6 版本中运行环境也是如此。注:这是我的第一个答案,不确定格式是否正确,但我也会随着学习而进步。

这会让你有一些进展,但在更进一步的过程中,我最终还是遇到了AttributeError: 'HParams' object has no attribute 'encoder_type'的错误。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接