最近用 LLaMA-Factory 训练大模型,数据都放在 AWS S3 上,发现其实不用自己写 boto3,直接用 S3 路径就能搞定。这里把我的踩坑和经验都写下来,帮你少走弯路。
LLaMA-Factory 支持直接从 S3 读取数据集,不用你自己写 boto3 脚本,也不用提前把数据下载到本地。你只要在配置里写上 S3 路径,比如 s3://my-bucket/data.jsonl,剩下的都交给 LLaMA-Factory。
支持的格式有:alpaca、sharegpt,文件类型支持 json、jsonl、csv、parquet、arrow。
你只要保证内容和本地训练时一样,比如 alpaca 格式长这样:
json展开代码[
  {
    "instruction": "请写一首诗",
    "input": "",
    "output": "床前明月光,疑是地上霜。"
  }
]
多模态(图文)训练时,图片字段直接写 S3 路径:
json展开代码{
  "instruction": "描述这张图片",
  "input": "",
  "output": "这是一只猫。",
  "image": "s3://your-bucket/path/to/cat.jpg"
}
在 data/dataset_info.json 里加一段:
json展开代码"my_s3_dataset": {
  "cloud_file_name": "s3://your-bucket/path/to/data.jsonl",
  "formatting": "alpaca"
}
训练时参数写 dataset: my_s3_dataset 就行。
fsspec 访问 S3,默认先试匿名,不行就用你本地的 AWS 配置(比如 ~/.aws/credentials)。AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY,或者直接用 EC2 的 IAM 角色。如果你训练多模态模型,json 里图片字段直接写 S3 路径,LLaMA-Factory 会自动用 fsspec 读取图片。你不用提前下载,也不用改代码,和本地图片用法一模一样。
fsspec.open("s3://bucket/file"),就像操作本地文件一样操作 S3 文件。| 特性 | fsspec | boto3 | 
|---|---|---|
| 适用场景 | 数据读写、批量处理 | S3 全功能管理 | 
| 易用性 | 非常高 | 需要写较多代码 | 
| 性能 | 和 boto3 基本一致 | 原生 | 
| 稳定性 | 很高 | 官方 | 
| 认证方式 | 支持多种 | 官方 | 
| 生态 | 数据科学主流 | AWS 官方 | 
Q:S3 访问报错怎么办?
检查 AWS 权限,或者用环境变量指定 key/secret。
Q:多模态图片用 S3 路径会不会慢?
fsspec 支持并发和缓存,速度很快。如果你带宽够,基本没问题。
Q:能不能用 http 链接?
建议用 s3://,这样权限和速度都更好。


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!