使用 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) 训练工作负载的性价比。

并行下载

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

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

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

注意事项

以下各部分提供了有关使用文件缓存的重要注意事项。

文件大小和可用容量

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

随机读取和部分读取管理

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

如果文件的首次读取操作从偏移 0 以外的任何位置开始,则默认情况下,Cloud Storage FUSE 不会触发异步完整文件提取。如需更改此行为,以便 Cloud Storage FUSE 在初始随机读取时将文件提取到缓存,请使用以下方法之一将行为设置为 true

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

缓存逐出

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

缓存持久性

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

数据安全

启用缓存后,Cloud Storage FUSE 会使用您通过以下方法之一指定的缓存目录作为缓存的底层目录,以加密格式保存 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 静态装载

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

准备工作

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

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

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

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

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

启用和配置文件缓存行为

使用以下选项之一启用并配置文件缓存:

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

    如果您使用的是 Google Kubernetes Engine 部署,并使用适用于 Google Kubernetes Engine 的 Cloud Storage FUSE CSI 驱动程序,请指定以下选项之一:

  2. 可选:如果未自动启用并行下载,请将以下某个选项设置为 true 以启用并行下载:

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

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

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

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

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

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

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

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

为并行下载配置支持属性

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

房源描述 CLI 选项 配置文件字段
可为每个文件生成以将对象从 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

  • --file-cache-enable-parallel-downloads CLI 选项
  • file-cache:enable-parallel-downloads 字段

后续步骤