使用Python封装包保存Vowpal Wabbit模型到S3出现RuntimeError如何解决
错误原因
Vowpal Wabbit的save()方法仅支持本地文件系统路径,无法直接识别s3://开头的对象存储路径,因此调用该方法时会把S3路径当做本地文件路径解析,自然找不到对应目录抛出RuntimeError。
解决方法
分为两步操作:先将模型保存到本地临时路径,再通过AWS官方SDK将本地文件上传到S3存储桶即可。
首先安装所需依赖(未安装时执行):pip install boto3
修改后代码如下:
import boto3 import os # 原有训练逻辑保持不变 bucket = "你的存储桶名称" model_dir = "你的模型目录" vw = pyvw.vw("--cb 4 --quiet --save_resume -f vw.model") for data in train_data: learn_example = create_training_sample(data) vw.learn(learn_example) vw.finish() # 第一步:先保存模型到本地临时路径 local_model_path = "./vw_temp.model" vw.save(local_model_path) # 第二步:将本地模型文件上传到S3 s3_client = boto3.client('s3') s3_object_key = f"{model_dir}/vw.model" s3_client.upload_file(local_model_path, bucket, s3_object_key) # 可选:上传完成后删除本地临时文件节省空间 os.remove(local_model_path)
额外说明
如果后续需要从S3加载VW模型,采用反向逻辑即可:先调用s3_client.download_file()将S3上的模型文件下载到本地临时路径,再调用vw的加载方法读取本地文件。
需要确保运行环境配置了对应S3存储桶的读写权限,可通过AWS凭证文件、服务关联IAM角色等方式配置。
内容的提问来源于stack exchange,提问作者csp
相关产品推荐
相关产品推荐

