【问题标题】:Save and load a spacy model to a google cloud storage bucket将 spacy 模型保存并加载到谷歌云存储桶
【发布时间】:2021-03-12 05:49:05
【问题描述】:

我有一个 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.

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

【问题讨论】:

    标签: python-3.x google-cloud-storage spacy kubeflow kubeflow-pipelines


    【解决方案1】:

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

    如你所说

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

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

    如果您使用的是 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)
    

    【讨论】:

    • 我明白这一点,但是我如何使用这种格式将这个模型保存到 gcs trainer.to_disk()
    • 好吧,由于 SpaCy 只有 to_disk 方法来存储模型,您可以将模型本地保存在临时文件夹中,然后使用类似于我发布的代码运行另一个进程,运行所有在相同的代码执行中或尝试让GCS Fuse 将您的存储桶挂载为文件系统文件夹,这会将您的输出对象的内容同步到 GCS,因此您无需修改​​代码,只需修改您的环境。跨度>
    【解决方案2】:

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

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

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

    由于您想上传到 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:/.....',
       )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2018-08-29
      • 2016-04-26
      • 2021-04-07
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多