如何更改 gpt-2 代码以使用 Tensorflow 2.0?
Posted
技术标签:
【中文标题】如何更改 gpt-2 代码以使用 Tensorflow 2.0?【英文标题】:How to alter gpt-2 code to work with Tensorflow 2.0? 【发布时间】:2020-11-30 15:25:43 【问题描述】:我正在尝试使用 gpt-2 生成文本。即使在运行 Tensorflow 2.0 code upgrade script 之后,我也会遇到兼容性错误。
我遵循的步骤:
克隆repo
从这里开始,按照 DEVELOPERS.md 中的说明进行操作
在 /src 中的文件上运行 upgrade script
在终端运行:sudo docker build --tag gpt-2 -f Dockerfile.gpu .
构建完成后,运行:sudo docker run --runtime=nvidia -it gpt-2 bash
输入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'
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。
谢谢。
【问题讨论】:
【参考方案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 或诸如此类。
【讨论】:
以上是关于如何更改 gpt-2 代码以使用 Tensorflow 2.0?的主要内容,如果未能解决你的问题,请参考以下文章