如何为 Cloud ML Engine 打包词汇文件

How to package vocabulary file for Cloud ML Engine

我有一个 .txt 文件,其中每行包含不同的标签。我用这个文件创建标签索引查找文件,例如:

label_index = tf.contrib.lookup.index_table_from_file(vocabulary_file = 'labels.txt'

我想知道我应该如何使用我的云 ml-engine 打包词汇文件? packaging suggestions 明确说明了如何设置 .py 文件,但我不完全确定应该将相关的 .txt 文件放在哪里。它们应该只托管在引擎可以访问的存储桶(即 gs://)中,还是可以以某种方式与训练器一起打包?

您有多种选择。我认为最直接的是将 labels.txt 存储在 GCS 位置。

但是,如果您愿意,也可以将文件打包到 setup.py 中。有多种方法可以做到这一点,所以我会推荐你​​参考 official setuptools documentation.

让我看一个简单的例子:

在你的训练包下面的目录中创建一个 setup.py(在 CloudML Engine 的示例中通常称为 trainer,所以我会继续,就好像你的代码结构与示例相同,包括使用 trainer 作为包)。以下是基于您引用的 docs 的一个重要更改,即 package_data 参数而不是 include_package_data:

from setuptools import find_packages
from setuptools import setup

setup(
    name='my_model',
    version='0.1',
    install_requires=REQUIRED_PACKAGES,
    packages=find_packages(),
    package_data={'trainer': ['labels.txt']},
    description='My trainer application package.'
)

如果你 运行 python setup.py sdist,你可以看到 trainer/labels.txt 被复制到压缩包中。

然后在您的代码中,您可以像这样访问文件:

from pkg_resources import Requirement, resource_filename
resource_filename(Requirement.parse('trainer'),'labels.txt')

请注意,要在本地 运行 此代码,您将必须安装您的软件包:python setup.py install [--user]

这就是我认为将文件存储在 GCS 上可能更容易的主要原因。