【问题标题】:How to alter gpt-2 code to work with Tensorflow 2.0?如何更改 gpt-2 代码以使用 Tensorflow 2.0?
【发布时间】:2020-11-30 15:25:43
【问题描述】:

我正在尝试使用 gpt-2 生成文本。即使在运行 Tensorflow 2.0 code upgrade script 之后,我也会遇到兼容性错误。

我遵循的步骤:

  1. 克隆repo

  2. 从这里开始,按照 DEVELOPERS.md 中的说明进行操作

  3. 在 /src 中的文件上运行 upgrade script

  4. 在终端运行:sudo docker build --tag gpt-2 -f Dockerfile.gpu .

  5. 构建完成后,运行:sudo docker run --runtime=nvidia -it gpt-2 bash

  6. 输入python3 src/generate_unconditional_samples.py | tee /tmp/samples

  7. 获取此回溯:

    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 中,params 实例化如下:

def default_hparams():
return HParams(
    n_vocab=0,
    n_ctx=1024,
    n_embd=768,
    n_head=12,
    n_layer=12,
)

似乎没有任何 1:1 转换为 Tensorflow 2.0。有谁知道如何让 gpt-2 与 Tensorflow 2.0 一起工作?

我的 GPU 是 NVIDIA 20xx。

谢谢。

【问题讨论】:

    标签: python docker tensorflow tensorflow2.0 gpt-2


    【解决方案1】:

    如果你想看看我的 1.x 分支,它就在这里,正在编译: https://github.com/timschott/gpt-2

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但通过在文件夹中创建一个单独的 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 仍然无法正常工作。在 3.6 版本的 Python 中运行环境也是如此。

      附:这是我的第一个答案,不确定我的格式是否正确,但我也会学习。

      【讨论】:

      • 这会让你有一段距离,但更进一步我仍然以AttributeError: 'HParams' object has no attribute 'encoder_type'结束
      【解决方案3】:

      自动升级代码很少开箱即用。对于那个 repo,你应该使用 Tensorflow=1.15 最大值。

      如果你真的想要Tensorflow=2,你可以看看这个repo:https://github.com/akanyaani/gpt-2-tensorflow2.0

      注意:您不会得到预训练的模型(对于普通用户来说,这可能是 gpt2 中最有趣的部分)。意味着无法访问他们的 1554M 或 778M 型号。

      我知道没有任何方法可以自动将预训练模型从 1.15 升级到 2.3 或诸如此类。

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 2019-09-24
        • 2020-03-27
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 2020-01-06
        相关资源
        最近更新 更多