2

我正在尝试使用 gpt-2 进行文本生成。即使在运行 Tensorflow 2.0代码升级脚本之后,我也会遇到兼容性错误。

我遵循的步骤:

  1. 克隆回购

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

  3. 对 /src 中的文件运行升级脚本

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

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

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

我的 GPU 是 NVIDIA 20xx。

谢谢你。

4

3 回答 3

1

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

于 2020-08-11T05:08:18.853 回答
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 仍然无法正常工作。在 3.6 版本的 Python 中运行环境也是如此。

PS这是我的第一个答案,不确定我的格式是否正确,但我也会随着我的学习而学习。

于 2020-10-27T02:39:54.190 回答
0

自动升级代码很少开箱即用。使用该存储库,您应该使用Tensorflow=1.15最大值。

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

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

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

于 2021-03-08T21:33:15.390 回答