【问题标题】:How to set an environment variable when using gcloud ML engine?使用 gcloud ML 引擎时如何设置环境变量?
【发布时间】:2019-03-08 01:11:12
【问题描述】:

全部,

(环境:Windows 7、Python 3.6、Keras 和 tensorflow 库、gcloud ml 引擎)

我正在使用here 介绍的 gcloud ml 引擎运行某些 Keras ML 模型示例。一切都很好,但我在多次运行中得到了不同的结果,尽管我使用的是相同的训练和验证数据。我的目标是通过多次运行获得生殖训练结果。

我用谷歌搜索了一段时间,并在这个Keras Q&A 中找到了一些关于产生生殖结果的解决方案。基本上他们首先提出了这个建议:

首先,您需要在程序启动之前将 PYTHONHASHSEED 环境变量设置为 0(而不是在程序本身内)。

我知道我可以在我自己的机器上本地设置变量,或者我可以在部署 gcloud 功能时设置它,正如 here 介绍的那样。

但是,当我使用 gcloud ML 引擎(在服务器端但不在本地)时,我只是不知道如何设置环境变量。因此,当我的模型程序在那里运行时,我无法在 gcloud 服务器上设置“PYTHONHASHSEED=0”。

顺便说一句,总的来说,我知道随机性在 ML 领域是一种有用的性质,但我对生成结果的主题还不是很熟悉,所以也欢迎任何关于这个主题的想法。谢谢!

大旗

PS: 我尝试在下面的运行时设置环境变量:

import os
os.environ["PYTHONHASHSEED"] = "0" 
print(hash("keras"))

但它不能产生“在程序启动之前设置变量”的效果。因此,通过拥有此代码,我仍然无法从多次运行中获得相同的哈希结果。另一方面,在本地,如果我在运行代码之前设置“PYTHONHASHSEED=0”,我可能会得到相同的哈希结果。

【问题讨论】:

    标签: python machine-learning keras gcloud google-cloud-ml


    【解决方案1】:

    我认为 Cloud ML Engine API 不提供设置环境变量的机制。但是,您可以通过编写包装脚本(注意:未测试代码)来解决此问题:

    import os
    import subprocess
    
    env = os.environ.copy()
    env["PYTHONHASHSEED"] = "0"
    
    subprocess.check_call(['python', 'main.py'], env=env)
    

    【讨论】:

    • 谢谢!抱歉这么晚才回复。我已经按照你在本地说的实现了它,它有效。但是,当我使用基本的 gcloud ml 训练运行相同的代码时,始终无法找到从包装器(superprocess.py)调用的内部真实模型程序(model.py),正如作业的 gcloud 日志所报告的那样,像这样“python:无法打开文件'./model.py':[Errno 2]没有这样的文件或目录”。
    • 但是无论如何,至少对于这个问题,我认为您的回答已经足够好了。我可能会针对上述问题再开一张票。再次感谢~
    • 你可以试试 ['python', '-m', 'main'] 吗?此外,如果您使用的是 python3,请务必使用它(或使用“python-default”)。
    • 谢谢!我将使用“-m”参数进行检查。
    • 嗨,rhaertel80,最终我已经成功地通过包装器运行了模型,如你所说。棘手的部分是,我做了一个复制过程,在调用模型之前的运行时间内将我的模型文件从 gcloud gs 位置复制到当前文件夹,以便在模型在 gcloud 上运行时能够找到它.但是,即使将 PYTHONHASHSEED 设置为 0,我仍然得到不同的验证结果。无论如何,现在在这里很好。我们现在找到了一种在 gcloud 端设置环境变量的方法:)
    猜你喜欢
    • 2021-06-28
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2015-10-24
    • 2012-11-22
    • 2019-08-24
    • 2013-06-30
    相关资源
    最近更新 更多