最近用 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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!