如何使用Rubicon-ml将数据日志存储至S3实现协作共享?
Rubicon-ml 日志存储到S3实现协作共享操作指南
前置准备
- 提前创建好有读写权限的S3存储桶,记录好桶路径,后续给协作者分配对应桶的读写/只读权限即可实现共享
- 确认本地已有的Rubicon日志存储根目录,默认路径是
~/.rubicon,如果初始化时自定义过路径,提前定位到正确的根目录位置 - 安装带S3依赖的Rubicon版本,执行命令:
pip install rubicon-ml[s3]
操作步骤
1. 同步已有的本地历史日志到S3
不建议手动拖拽文件上传,容易破坏Rubicon的目录结构导致后续读取失败,优先用内置API迁移:
from rubicon import Rubicon # 连接本地已有的日志仓库 local_repo = Rubicon( persistence="filesystem", root_dir="替换成你本地的Rubicon日志根目录绝对路径" ) # 连接S3端的目标日志仓库 s3_repo = Rubicon( persistence="filesystem", root_dir="s3://你的S3桶名/rubicon-shared-logs/", # 如果你没有在本地配置全局AWS凭证,补全下面的配置项 # storage_options={ # "key": "你的AWS访问密钥ID", # "secret": "你的AWS秘密访问密钥" # } ) # 遍历本地所有项目全量同步 for local_project in local_repo.projects(): # S3端不存在对应项目则自动创建 s3_project = s3_repo.get_or_create_project(name=local_project.name) for local_exp in local_project.experiments(): # 已经同步过的实验直接跳过,避免重复上传 if any(exp.id == local_exp.id for exp in s3_project.experiments()): continue # 自动复制实验关联的所有参数、指标、文件工件到S3 local_exp.copy_to(s3_project)
如果本地日志量很大,也可以用AWS CLI做全量目录同步,执行命令:aws s3 sync 你的本地日志根目录 s3://你的S3桶名/rubicon-shared-logs/,同步前确认本地日志没有损坏即可。
2. 长期协作推荐:新实验直接写入S3
如果不想每次写完本地日志再手动同步,后续初始化Rubicon的时候直接指定S3为存储根目录即可,实验日志会实时写入S3,协作者随时能看到最新结果,使用逻辑和本地存储完全一致,不需要修改原有记录日志的代码:
from rubicon import Rubicon # 初始化时直接指向S3共享路径 rubicon = Rubicon( persistence="filesystem", root_dir="s3://你的S3桶名/rubicon-shared-logs/", # storage_options配置和上文一致 ) # 后续记录实验的代码完全不用改,比如 project = rubicon.get_or_create_project("ctr-prediction-exp") exp = project.log_experiment(name="v3-model-base") exp.log_parameter("batch_size", 128) exp.log_metric("f1", 0.87)
协作者访问共享日志方法
协作者只需要做3步就能访问所有共享日志:
- 安装带S3依赖的Rubicon版本:
pip install rubicon-ml[s3] - 配置好S3桶的对应访问权限(全局AWS凭证配置或初始化时传密钥均可)
- 初始化Rubicon时直接指向同一个S3路径,即可读取、写入共享日志:
from rubicon import Rubicon shared_repo = Rubicon( persistence="filesystem", root_dir="s3://你的S3桶名/rubicon-shared-logs/" ) # 查看所有共享项目 all_projects = shared_repo.projects() # 读取指定实验的指标、参数 target_project = shared_repo.get_project(name="ctr-prediction-exp") for exp in target_project.experiments(): print(f"实验{exp.name} F1值:{exp.metric(name='f1').value}")
注意:S3桶不要开启公网访问权限,给协作者分配最小必要权限即可;如果需要做团队权限隔离,可以给不同项目设置独立的S3路径前缀,给不同成员分配对应前缀的访问权限。
内容的提问来源于stack exchange,提问作者shania
相关产品推荐
相关产品推荐

