Cloud Storage FUSE 中的文件缓存

本文档简要介绍了 Cloud Storage FUSE 文件缓存,并提供了有关如何配置和使用文件缓存的说明。

Cloud Storage FUSE 文件缓存是一种客户端读取缓存,可从您选择的速度更快的缓存存储中传送重复文件读取,从而提升读取操作的性能。启用文件缓存后,Cloud Storage FUSE 会在本地存储经常访问的文件的副本,从而可以直接从缓存中提供后续读取,这有助于减少延迟时间并提高吞吐量。

文件缓存的优势

文件缓存具有以下优势:

  • 提高较小的随机 I/O 的性能:文件缓存通过直接从缓存介质传送读取来缩短延迟时间并提高吞吐量。从缓存传送时,小型随机 I/O 操作的速度可以显著加快。

  • 自动启用并行下载:在 Cloud Storage FUSE 2.12 及更高版本中,当文件缓存处于启用状态时,系统会自动启用并行下载。并行下载利用多个工作器并行下载文件,并将文件缓存目录用作预提取缓冲区,从而使模型加载速度最多提高 9 倍。我们建议在加载大型文件(例如模型部署和检查点恢复)的单线程读取场景中使用并行下载。

  • 使用现有容量:文件缓存可以使用缓存目录的现有预配机器容量,而不会产生额外的存储费用。这包括 Cloud GPU 机器类型(例如 a2-ultragpua3-highgpu)随附的本地 SSD、永久性磁盘(每个虚拟机使用的启动磁盘)或内存中 /tmpfs

  • 减少费用:缓存命中在本地传送,不会产生 Cloud Storage 操作或网络费用。

  • 提高了 AI 和机器学习训练的总拥有成本:文件缓存通过更快地加载数据来提高 Cloud GPU 和 Cloud TPU 的利用率,这样可以缩短训练时间并提供更高的 AI 和机器学习 (AI/ML) 训练工作负载的性价比。

并行下载

并行下载通过使用多个工作器并行下载文件的多个部分(使用文件缓存目录作为预提取缓冲区),可以提高读取性能。我们建议在加载大型文件(例如模型部署、检查点恢复和大型对象训练)的读取场景中使用并行下载。

启用文件缓存和并行下载的用例包括:

使用场景类型 说明
培训 如果您要访问的数据会被多次读取(无论是多次读取同一文件,还是读取同一文件的不同偏移量),请启用文件缓存。 如果数据集大于文件缓存,则文件缓存应保持停用状态,并改为使用以下方法之一:
部署模型权重和检查点读取 启用文件缓存和并行下载,以便能够利用并行下载功能,该功能加载大文件的速度比不使用文件缓存和并行下载时快得多。

注意事项

  • 文件缓存存留时间 (TTL):如果文件缓存条目尚未根据其 TTL 过期,并且文件位于缓存中,则对该文件的读取操作将从本地客户端缓存传送,而不会向 Cloud Storage 发出任何请求。

  • 文件缓存条目过期:如果文件缓存条目已过期,则系统首先对 Cloud Storage 发出“GET 文件属性”调用。如果文件缺失或其属性或内容已更改,系统会检索新内容。如果属性已失效,但内容仍然有效(表示对象世代未更改),则只有在属性调用确认其有效性之后,才会从缓存中传送内容。这两种操作都会产生网络延迟。

  • 文件缓存失效:当 Cloud Storage FUSE 客户端修改缓存文件或其属性时,该客户端的缓存条目会立即失效,以确保一致性。不过,访问同一文件的其他客户端会继续读取其缓存的版本,直到各自的 TTL 设置导致失效。

  • 文件大小和可用容量:所读取的文件必须处于文件缓存目录的可用容量范围内,该容量可以使用 --file-cache-max-size-mb 选项file-cache:max-size-mb 字段进行控制。

  • 缓存逐出:逐出缓存的元数据和数据的方式是基于最久未使用 (LRU) 算法,该算法会在达到按照 --file-cache-max-size-mb 限制配置的空间阈值后开始。如果条目根据 TTL 过期,则系统首先会对 Cloud Storage 发出“GET元数据”调用,且受网络延迟时间的限制。由于数据和元数据是单独管理的,因此您可能会遇到一个实体被逐出或失效,而另一个实体不会被逐出或失效的情况。

  • 缓存持久性:卸载后,Cloud Storage FUSE 缓存不会保留,并会在重启时重启。对于文件缓存,虽然在卸载和重启时会移除从缓存中提供文件所需的元数据条目,但文件缓存中的数据可能仍存在于文件目录中。我们建议您在卸载或重启后删除文件缓存目录中的数据。

  • 随机读取和部分读取管理:如果首次文件读取操作从文件开头(偏移 0)开始,则 Cloud Storage FUSE 文件缓存会提取整个文件并将其加载到缓存中,即使只读取小部分子集也是如此。这样可以直接从缓存传送来自同一对象的后续随机或部分读取。

    默认情况下,从任何其他偏移量读取都不会触发异步完整文件提取。如需更改此行为,以便 Cloud Storage FUSE 在初始随机读取时将文件提取到缓存,请将 --file-cache-cache-file-for-range-read 选项或 file-cache:cache-file-for-range-read 字段设置为 true

    如果对同一对象执行许多不同的随机或部分读取操作,我们建议您启用此属性。

  • 数据安全性:启用缓存后,Cloud Storage FUSE 会使用您通过 --cache-dir 选项或 cache-dir 字段指定的缓存目录作为缓存的底层目录,以加密格式保存 Cloud Storage 存储桶中的文件。有权访问此缓存目录的任何用户或进程都可以访问这些文件。我们建议您限制对此目录的访问。

  • 直接访问或多次访问文件缓存:使用 Cloud Storage FUSE 以外的进程访问或修改缓存目录中的文件可能会导致数据损坏。Cloud Storage FUSE 缓存特定于每个运行中的 Cloud Storage FUSE 进程,但在相同或不同机器上运行的不同 Cloud Storage FUSE 进程中无法感知。因此,我们不建议为不同的 Cloud Storage FUSE 进程使用同一缓存目录。

  • 在同一机器上运行多个 Cloud Storage FUSE 进程:如果多个 Cloud Storage FUSE 进程需要在同一机器上运行,则每个 Cloud Storage FUSE 进程都应有自己的特定缓存目录,或使用以下某种方法确保您的数据不会损坏:

    • 使用共享缓存装载所有存储桶:使用动态装载,通过共享缓存在单个进程中装载您有权访问的所有存储桶。如需了解详情,请参阅 Cloud Storage FUSE 动态装载

    • 在特定存储桶上启用缓存:使用静态装载仅对指定的存储桶启用缓存。如需了解详情,请参阅 Cloud Storage FUSE 静态装载

    • 仅缓存特定文件夹或目录:仅装载和缓存特定的存储桶级文件夹,而不是装载整个存储桶。如需了解详情,请参阅在存储桶中装载目录

准备工作

文件缓存需要使用目录路径来缓存文件。您可以在现有文件系统上创建新目录,也可以在预配的存储空间上创建新的文件系统。如果您要预配要使用的新存储空间,请按照以下说明创建新的文件系统:

  1. 对于 Google Cloud Hyperdisk,请参阅创建新的 Google Cloud Hyperdisk 卷

  2. 对于 Persistent Disk,请参阅创建新的 Persistent Disk 卷

  3. 对于本地 SSD,请参阅将本地 SSD 添加到虚拟机

  4. 对于内存中 RAM 磁盘,请参阅创建内存中 RAM 磁盘

启用和配置文件缓存行为

  1. 使用以下方法之一选择要启用和配置文件缓存的方法:

  2. 使用以下方法之一指定要使用的缓存目录。这使您可以为非 Google Kubernetes Engine 部署启用文件缓存:

    如果您通过适用于 Google Kubernetes Engine 的 Cloud Storage FUSE CSI 驱动程序来使用 Google Kubernetes Engine 部署,请指定以下方法之一:

  3. 可选:如果未自动启用并行下载,请通过将以下任一方法设置为 true 来启用并行下载:

  4. 通过调整以下某个选项来限制 Cloud Storage FUSE 缓存可以在其装载的目录中使用的总容量。当您指定缓存目录时,系统会自动将相应选项设置为 -1 值:

    您还可以指定一个以 MiB 或 GiB 为单位的值来限制缓存大小。

  5. 可选:通过使用以下方法之一并设置 -1 值,绕过缓存条目的 TTL 过期时间,并在缓存可用时从缓存中传送文件元数据:

    默认值为 60 秒,值为 -1 时表示无限制。您还可以根据自己的需求指定一个较高的值。我们建议您将 ttl-secs 值设置为工作负载所允许的最大值。如需详细了解缓存条目的 TTL,请参阅注意事项

  6. 可选:启用文件缓存异步将整个文件加载到缓存中的功能(如果文件的首次读取操作从 offset 0 以外的任何位置开始),以便后续从同一文件读取不同偏移量时也能从缓存中传送。使用以下方法之一,并将选项设置为 true

  7. 可选:配置统计信息缓存和类型缓存。如需详细了解统计信息和类型缓存,请参阅类型缓存概览统计信息缓存概览

  8. 在运行工作负载之前,在装载的存储桶上手动运行 ls -R 命令来预先填充元数据,从而以更快的批处理方法在首次读取之前填充类型缓存。 如需详细了解如何提升首次读取性能,请参阅提升首次读取性能

启用文件缓存后,Cloud Storage FUSE 2.12 及更高版本会自动启用并行下载。如果您使用的是旧版 Cloud Storage FUSE,请将 enable-parallel-downloads 选项设置为 true 以启用并行下载。

为并行下载配置支持属性

您可以使用 Cloud Storage FUSE CLI 或 Cloud Storage FUSE 配置文件,视需要为并行下载配置以下支持属性:

属性说明 gcsfuse 选项 配置文件字段
可为每个文件生成以将对象从 Cloud Storage 下载到文件缓存的工作器的数量上限。 --file-cache-parallel-downloads-per-file file-cache:parallel-downloads-per-file
在任何给定时间,所有文件下载作业可同时生成的工作器数量上限。默认值设置为机器上 CPU 核心数的两倍。如需指定无限制,请输入值“-1”。 --file-cache-max-parallel-downloads file-cache:max-parallel-downloads
每个工作器将对象下载到文件缓存时向 Cloud Storage 发出的每个读取请求的大小(以 MiB 为单位)。请注意,只有读取的文件达到指定大小时,系统才会触发并行下载。 --file-cache-download-chunk-size-mb file-cache:download-chunk-size-mb

停用并行下载

如需停用并行下载,请将以下其中一项设置为 false

  • gcsfuse option: --file-cache-enable-parallel-downloads
  • 配置文件字段:file-cache:enable-parallel-downloads

后续步骤