本文可帮助配置 BlobFuse 以在 缓存模式下装载容器。 在 缓存模式下,BlobFuse 将整个文件从 Azure Blob 存储下载到本地缓存目录中,然后再将其提供给应用程序。
小窍门
可以在 流模式 或 缓存模式下装载容器。 若要了解有关每个模式的详细信息,请参阅 流式处理模式与缓存模式。
配置参数
指定本地缓存的路径和可选的超时(以秒为单位)。
本地缓存(或 临时路径)是 BlobFuse 存储所有打开的文件内容的位置。 超时是更新后刷新数据之前的最大时间(以秒为单位)。 例如,如果工作流要求在更新后的三秒内刷新文件内容,请将此超时设置为 3。 如果工作流需要即时刷新,请将超时设置为 0。 将超时时间设置为 0 可以实现内容的即时刷新,但代价是导致对存储的 REST 调用频率更高。
以下示例将这些值设置为命令的参数 mount 。
blobfuse2 mount ~/mycontainer --tmp-path=/tmp/blobfusecache --file-cache-timeout=120
以下示例演示如何在 BlobFuse 配置文件中显示这些设置。
file_cache:
path: /tmp/blobfusecache
timeout-sec: 120
有关完整示例,请参阅 示例文件缓存配置。
注释
BlobFuse 将所有打开的文件内容存储在临时路径中。 请确保有足够的空间来包含所有打开的文件。
配置临时路径
可以在本地高性能磁盘、RAM 磁盘或固态硬盘(SSD)上配置临时路径。
如果使用现有的本地磁盘进行缓存,请选择提供最佳性能的磁盘,例如固态磁盘(SSD)。
在 Azure 中,可以使用虚拟机(VM)上提供的 SSD 临时磁盘为 BlobFuse 提供低延迟缓冲区。 根据使用的预配代理,为 cloud-init 或 /mnt Microsoft Azure Linux 代理 (waagent) VM 装载临时磁盘/mnt/resource。
确保用户有权访问临时路径。
sudo mkdir /mnt/resource/blobfuse2tmp -p
sudo chown <youruser> /mnt/resource/blobfuse2tmp
如果使用 RAM 磁盘,请选择满足要求的大小。 以下示例创建 16 GB 的 RAM 磁盘和 BlobFuse 的目录。 BlobFuse 使用 RAM 磁盘打开大小高达 16 GB 的文件。
sudo mkdir /mnt/ramdisk
sudo mount -t tmpfs -o size=16g tmpfs /mnt/ramdisk
sudo mkdir /mnt/ramdisk/blobfuse2tmp
sudo chown <youruser> /mnt/ramdisk/blobfuse2tmp
通过预加载数据优化性能
在缓存模式下,BlobFuse 等待打开的文件系统调用。 收到打开的调用后,BlobFuse 会先将整个文件下载到本地缓存,然后再使用它。 此行为会使初始加载速度变慢,尤其是对于应用程序正在处理许多文件的 AI 和机器学习任务。
预加载功能有助于在装载容器时将整个容器或子目录下载到本地缓存。 预加载可增强数据可用性,提高效率并减少等待时间。 这种改进对于使用大型数据集进行 AI 训练至关重要,因为它提前准备所有必要的文件,从而节省 GPU 时间和降低成本。 通过将预加载与 Blob 筛选器 功能相结合,可以访问容器或子目录中的特定文件,从而提供广泛的灵活性和优化 GPU 周期。
若要启用文件缓存模式的预加载,请使用 --preload 参数。 以下命令显示了一个示例:
blobfuse2 mount --preload /mnt/blobfuse_mnt --tmp-path=/home/temp_path
注释
预加载 blob 数据会使挂载为只读状态,并防止文件被驱逐。 若要访问更新的文件,请卸载并重新装载卷。 通过读取新添加的文件,仍可访问这些文件。 如果 Blob 筛选器用于预加载,则只有经过筛选的文件可通过 BlobFuse 装载进行预加载和访问。
使用预加载功能时的注意事项
启用预加载会使 BlobFuse 装载只读。
CLI 和配置文件中的所有文件缓存选项都将被忽略,但临时路径设置除外。
确保容器中所有或筛选的内容有足够的磁盘空间。 空间不足可能会导致部分加载并阻止新文件访问,直到从本地缓存手动删除文件。
在装载后立即访问文件将其设为下载优先项,同时预加载在后台继续进行。
BlobFuse 日志显示预加载状态和磁盘警告。
仅当从本地缓存手动删除文件并重新打开文件时,BlobFuse 装载才会刷新预加载或打开的文件。
BlobFuse 不会在预加载后自动下载添加到存储容器中的 blob,但可以通过直接读取来访问这些 blob。