从 s3 存储桶加载 XGBoost
Load XGBoost from an s3 bucket
我有一个 XGBoost 模型位于我想要加载的 AWS s3 存储桶中。目前,我正在尝试使用 s3fs
加载数据,但我不断收到类型错误:
from s3fs.core import S3FileSystem
import xgboost as xgb
fs = S3FileSystem()
bst = xgb.XGBClassifier()
with fs.open(f'{bucket}/{modelPath}', mode='rb') as f:
bst.load_model(f.read())
我会包括输出,我很确定这种方法是完全错误的。我如何让它工作?
(另外,我想我宁愿使用boto)
如果我没有收到更好的答案,一个好的方法是将文件下载到 lambda 函数存储中,然后使用 bst.load_model('path_to_model')
加载它。基于 ,每个 lambda 函数都分配了 500 MB 的非持久性存储空间,这些存储空间实际上用于后续调用相同的 lambda 函数(直到 lambda 函数变冷)。
将缓冲区的内容转换为 bytearray
应该可以解决问题。我的灵感来自发现的源代码 here。它对我有用,无需在本地下载 json 文件
with fs.open(f'{bucket}/{modelPath}', mode='rb') as f:
bst.load_model(bytearray(f.read()))
我有一个 XGBoost 模型位于我想要加载的 AWS s3 存储桶中。目前,我正在尝试使用 s3fs
加载数据,但我不断收到类型错误:
from s3fs.core import S3FileSystem
import xgboost as xgb
fs = S3FileSystem()
bst = xgb.XGBClassifier()
with fs.open(f'{bucket}/{modelPath}', mode='rb') as f:
bst.load_model(f.read())
我会包括输出,我很确定这种方法是完全错误的。我如何让它工作?
(另外,我想我宁愿使用boto)
如果我没有收到更好的答案,一个好的方法是将文件下载到 lambda 函数存储中,然后使用 bst.load_model('path_to_model')
加载它。基于
将缓冲区的内容转换为 bytearray
应该可以解决问题。我的灵感来自发现的源代码 here。它对我有用,无需在本地下载 json 文件
with fs.open(f'{bucket}/{modelPath}', mode='rb') as f:
bst.load_model(bytearray(f.read()))