当您的计算实例准备好开始训练任务时,它们首先会问:“数据在哪里?”与存储可能是直接连接磁盘或网络文件共享的本地系统不同,云环境更倾向于解耦架构。这种架构的核心即对象存储,它是存放机器学习所需海量数据集的标准、高扩展性方案。对象存储与您笔记本电脑上的分层文件系统(如 NTFS 或 ext4)根本不同。它不以嵌套目录的形式组织文件,而是将数据作为在平面地址空间中称为对象的独立单元进行管理。每个对象包含三部分:数据本身: 这可以是任何内容,从图像文件到视频片段、CSV 文件,或序列化模型成果。元数据: 一组描述性键值标签,说明数据。例如,content-type: image/jpeg 或 source: sensor-123。唯一标识符: 一个全局唯一地址,用于通过 API(通常使用 GET 和 PUT 等 HTTP 方法)在网络上获取对象。可以将其想象成您数据的代客泊车服务。您交出数据(汽车),作为回报,会得到一张唯一的凭证(对象 ID)。您无需知道数据的确切物理位置,只需知道 ID 即可按需获取。这种抽象使得极大的规模和持久性成为可能。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; bgcolor="transparent"; "云账户" -> "存储桶" [label=" 包含"]; "存储桶" -> "Object1" [label=" 包含"]; "存储桶" -> "Object2" [label=" 包含"]; "存储桶" -> "Object3" [label=" 包含"]; "Object1" [label="cat_image.jpg\n(数据, 元数据, ID)", fillcolor="#a5d8ff"]; "Object2" [label="training_data_part1.parquet\n(数据, 元数据, ID)", fillcolor="#a5d8ff"]; "Object3" [label="config/hyperparams.json\n(数据, 元数据,ID)", fillcolor="#a5d8ff"]; "存储桶" [label="my-ml-dataset-bucket\n(一个全局唯一的命名空间)", shape=cylinder, margin=0.3, fillcolor="#ffec99"]; "云账户" [shape=cloud, fillcolor="#e9ecef"]; }一张图表,显示账户、存储桶以及存储桶内多个对象之间的关系。主要的云对象存储服务每个主要云服务商都提供一个核心对象存储服务,构成其数据和 AI 产品的核心支持:亚马逊网络服务 (AWS): 简单存储服务 (S3)谷歌云平台 (GCP): 云存储 (GCS)微软 Azure: Blob 存储虽然它们的基本原理几乎相同,但术语略有不同。特性AWS S3Google Cloud StorageAzure Blob Storage存储容器存储桶存储桶容器数据单位对象对象Blob (块 Blob)唯一性范围全局 (针对存储桶)全局 (针对存储桶)账户 (针对容器)主要 SDK 接口Boto3google-cloud-storageazure-storage-blob这些服务具备高持久性,通常会在区域内跨多个物理数据中心复制您的数据,以防止硬件故障。这提供了一定程度的数据安全,是本地部署难以且成本高昂实现的。通过存储分层优化成本云对象存储的一大优势是能够通过存储分层只为所需付费。并非所有数据都需要即时、频繁访问。您可以通过根据数据的访问模式选择合适的存储类别来大幅降低成本。典型存储分层的细分如下:标准(热)分层: 适用于频繁访问的数据。它提供最低延迟,但存储成本最高。这是您在模型开发过程中需要反复读取的活跃训练和验证数据集的适合分层。不频繁访问(IA)分层: 针对不常访问但需要时仍需快速访问的数据进行优化。其每 GB 存储价格低于标准分层,但包含少量数据取回费用。此分层适用于较旧的数据集、模型检查点或偶尔分析所需的数据。归档(冷)分层: 用于以尽可能低的存储成本进行长期数据归档。从此分层取回数据不是即时的;可能需要几分钟到数小时。它非常适合备份原始源数据或满足长期数据保留要求。{"layout":{"barmode":"group","title":{"text":"存储分层权衡:成本与取回时间"},"xaxis":{"title":{"text":"存储分层"}},"yaxis":{"title":{"text":"相对成本 ($)"},"side":"left","range":[0,12]},"yaxis2":{"title":{"text":"取回速度"},"side":"right","overlaying":"y","showgrid":false,"tickvals":[1,2,3],"ticktext":["毫秒","毫秒","分钟到数小时"]},"legend":{"x":0.01,"y":0.99},"font":{"family":"sans-serif"}},"data":[{"x":["标准/热","不频繁访问","归档/冷"],"y":[10,4,1],"name":"存储成本","type":"bar","marker":{"color":"#339af0"}},{"x":["标准/热","不频繁访问","归档/冷"],"y":[1,2,3],"name":"取回时间","type":"bar","marker":{"color":"#ff922b"},"yaxis":"y2"}]}常见对象存储分层的相对成本与取回时间对比。大多数云服务商提供生命周期策略,这是您可以配置的自动化规则,用于对象在不同分层之间转换。例如,您可以设置规则,在 60 天后自动将数据从标准分层移动到不频繁访问分层,然后在一年后移动到归档分层。这可实现成本优化,无需人工干预。对象存储与 AI 工作负载的整合对象存储的真正优势在于它与 AI/ML 生态系统的直接集成。现代框架和库可以直接从 S3、GCS 或 Blob 存储等服务流式传输数据,无需先复制到计算实例的本地磁盘。组织结构: 尽管对象存储是平面结构,但您可以使用对象键中的前缀来模拟目录。例如,将对象命名为 s3://my-bucket/dataset-v1/train/image-001.jpg 和 s3://my-bucket/dataset-v1/test/image-555.jpg 可提供用于组织和访问控制的逻辑结构。性能: 由于单个 API 请求的开销,从对象存储读取数百万个微小文件可能效率低下。通常更好的做法是将数据整合为数量较少但文件更大的形式。Apache Parquet、TFRecord 或 Petastorm 等格式为此而设计,可实现大型数据集的高效并行读取。数据出口成本: 一个重要的财务考量是数据出口。将数据移入对象存储几乎总是免费的。然而,将数据移出云服务商的网络,无论是传输到公共互联网还是另一个云,都会产生费用。在设计需要在不同环境间频繁传输数据的工作流程时,务必注意这一点。安全通过身份和访问管理 (IAM) 策略进行管理,这些策略授予特定用户或计算实例细粒度的读/写权限,确保您的数据集仅可由授权服务访问。