gpt4 book ai didi

Python gpt-2-simple,一次加载多个模型

转载 作者:行者123 更新时间:2023-12-04 12:59:41 28 4
gpt4 key购买 nike

我正在开发一个不和谐的机器人,我想要实现的功能之一响应 gpt-2-simple 库生成的文本。我希望加载多个模型,以便有多个模型可用于响应来自我的用户的消息。

但是,当我运行 load_gpt2() 时出现以下错误第二个模型中的函数

File "main.py", line 22, in <module>
main()
File "main.py", line 16, in main
text_events.register_Message(client)
File "U:\discord_bot\text_events\__init__.py", line 19, in register_Message
event.init()
File "U:\discord_bot\text_events\model2.py", line 20, in init
gpt2.load_gpt2(sess, run_name='model2', checkpoint_dir="characters")
File "C:\Program Files\Python36\lib\site-packages\gpt_2_simple\gpt_2.py", line 389, in load_gpt2
output = model.model(hparams=hparams, X=context, gpus=gpus)
File "C:\Program Files\Python36\lib\site-packages\gpt_2_simple\src\model.py", line 183, in model
initializer=tf.compat.v1.random_normal_initializer(stddev=0.01))
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\ops\variable_scope.py", line 1500, in get_variable
aggregation=aggregation)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\ops\variable_scope.py", line 1243, in get_variable
aggregation=aggregation)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\ops\variable_scope.py", line 567, in get_variable
aggregation=aggregation)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\ops\variable_scope.py", line 519, in _true_getter
aggregation=aggregation)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\ops\variable_scope.py", line 868, in _get_single_variable
(err_msg, "".join(traceback.format_list(tb))))
ValueError: Variable model/wpe already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:

File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1748, in __init__
self._traceback = tf_stack.extract_stack()
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3426, in _create_op_internal
op_def=op_def)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3357, in create_op
attrs, op_def, compute_device)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\util\deprecation.py", line 507, in new_func
return func(*args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 794, in _apply_op_helper
op_def=op_def)

我试图找到一种方法来保持 gpt2 实例在模块之间分离,但我找不到任何可以实现这种沙箱效果的东西,或者任何其他用于分离模型或其实例的建议。有没有人有任何想法?

最佳答案

根据@Kedar 的建议,您可以使用单独的 Python 进程来隔离执行并分别在每个进程中加载​​模型。或者,您可以使用单例模式确保一次只加载一个模型实例,或者更简单地,添加 lru_cache装饰器( https://docs.python.org/3/library/functools.html )到 load_gpt2 周围的包装器功能。例子:

from functools import lru_cache

@lru_cache
def load_gpt2_wrapper(*args, **kwargs):
# do some logic and return the model

这样每次调用 load_gpt2_wrapper都会返回相同的model ,假设提供了相同的参数。
或者,在该包装函数中,调用 tf.reset_default_graph()每次,类似于 https://github.com/minimaxir/gpt-2-simple/issues/80 中提出的建议.
总的来说,我认为最好的解决方案是提供提供 reuse 的选项。在 GPT-2 存储库中创建 Tensorflow session 时,我已在此处完成: https://github.com/minimaxir/gpt-2-simple/pull/272 .在您的情况下,因为看起来您正在单独创建 session 并将其提供给 load_gpt2 ,您可以提供 reuse选项明确:
sess = tf.compat.v1.Session(reuse=reuse, ...)
model = load_gpt2(sess, ...)
这应该可以缓解这个问题,假设您可以为您的应用程序保持一个 session 运行。

关于Python gpt-2-simple,一次加载多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com