0

我有一个 spacy 模型,我正在尝试使用这种格式将它保存到 gcs 存储桶中

trainer.to_disk('gs://{bucket-name}/model')

但是每次我运行这个我都会收到这个错误消息

FileNotFoundError: [Errno 2] No such file or directory: 'gs:/{bucket-name}/model'

此外,当我创建 kubeflow 持久卷并将模型保存在那里时,我可以使用trainer.load('model')我收到此错误消息下载模型

File "/usr/local/lib/python3.7/site-packages/spacy/__init__.py", line 30, in load
    return util.load_model(name, **overrides)
  File "/usr/local/lib/python3.7/site-packages/spacy/util.py", line 175, in load_model
    raise IOError(Errors.E050.format(name=name))
OSError: [E050] Can't find model '/model/'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.

我不明白为什么会出现这些错误,因为当我在本地电脑上运行它并使用本地路径时,它可以完美运行。

4

2 回答 2

0

云存储不是本地磁盘或物理存储单元,您可以将内容直接保存到其中。

正如你所说

这在我本地的电脑上并使用本地路径

云存储实际上不是云中任何其他工具的本地路径

如果您使用的是 python,则必须使用 Storage 库创建一个客户端,然后使用 upload_blob 上传您的文件,即:

from google.cloud import storage


def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
# bucket_name = "your-bucket-name"
# source_file_name = "local/path/to/file"
# destination_blob_name = "storage-object-name"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(destination_blob_name)

blob.upload_from_filename(source_file_name)
于 2020-11-30T14:06:34.203 回答
0

既然您已将此问题标记为“kubeflow-pipelines”,我将从这个角度回答。

KFP 力求与平台无关。大多数好的组件都是独立于云的。KFP 促进系统管理的工件传递,其中组件代码仅将输出数据写入本地文件,系统获取它并使其可用于其他组件。

因此,最好以这种方式描述您的 SpaCy 模型训练器 - 将数据写入本地文件。检查所有其他组件的工作方式,例如,训练 Keras 分类器

由于您想上传到 GCS,请明确执行此操作,但将培训师的模型输出传递给“上传到 GCS”组件:

upload_to_gcs_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/616542ac0f789914f4eb53438da713dd3004fba4/components/google-cloud/storage/upload_to_explicit_uri/component.yaml')

def my_pipeline():
   model = train_specy_model(...).outputs['model']

   upload_to_gcs_op(
       data=model,
       gcs_path='gs:/.....',
   )
于 2020-12-03T05:57:27.383 回答