如何存储 sklearn RF 模型以使其具有最快的加载时间?
Posted
技术标签:
【中文标题】如何存储 sklearn RF 模型以使其具有最快的加载时间?【英文标题】:How to store an sklearn RF model such that it has fastest load time? 【发布时间】:2021-05-24 14:06:46 【问题描述】:我有一个 RF 模型,我试图在部署期间加快加载速度。第一次创建并保存为压缩的 joblib 文件。但是加载时间太长了,无法满足我的需要。这是我尝试对我拥有的东西进行基准测试的 sn-p:
# load the base file:
print("Loading compressed joblib...")
MODEL = f"base_path/data/model_files/dataset_RF_C.compressed"
tic = time.perf_counter()
with open(MODEL, "rb") as f:
model = joblib.load(f)
mem = sys.getsizeof(model) / 1024 / 1024
toc = time.perf_counter()
load_time = toc - tic
size = os.path.getsize(MODEL) / 1024 / 1024
print(f"file on disk: size:0.2f MB\nfile on RAM: mem:0.2f MB\nload time: load_time:0.3f seconds\n")
输出:
Loading compressed joblib...
file on disk: 52.22 MB
file on RAM: 0.00 MB
load time: 9.510 seconds
我不确定为什么没有显示加载到 RAM 中的文件大小。如果你知道,也请帮忙。
未压缩的作业库:
# create uncompressed joblib, save it, load it, benchmark
print("Saving uncompressed joblib...")
MODEL = f"base_path/data/model_files/dataset_RF_C.uncompressed.joblib"
tic = time.perf_counter()
with open(MODEL, "wb") as f:
joblib.dump(model, f, compress=False)
toc = time.perf_counter()
save_time = toc - tic
size = os.path.getsize(MODEL) / 1024 / 1024
print(f"file on disk: size:0.2f MB\nsave time: save_time:0.3f seconds\n")
del model
print("Loading uncompressed joblib...")
tic = time.perf_counter()
with open(MODEL, "rb") as f:
model = joblib.load(f)
mem = sys.getsizeof(model) / 1024 / 1024
toc = time.perf_counter()
load_time = toc - tic
size = os.path.getsize(MODEL) / 1024 / 1024
print(f"file on disk: size:0.2f MB\nfile on RAM: mem:0.2f MB\nload time: load_time:0.3f seconds")
输出:
Saving uncompressed joblib...
file on disk: 4376.51 MB
save time: 8.718 seconds
Loading uncompressed joblib...
file on disk: 4376.51 MB
file on RAM: 0.00 MB
load time: 7.645 seconds
可以看出,通过将 50MB 压缩换成 4.3GB 文件大小,我并没有在加载时间上获得太多收益。
【问题讨论】:
【参考方案1】:根据您的描述,听起来您正在将模型加载到部署环境中,以便它可以返回实时预测。
如果是这样,我建议调查以下几件事:
将模型加载到内存中之前它需要开始服务实时请求/在 5-10 秒无关紧要的时间。例如,当您使用的服务或 lambda 函数正在启动时,将模型加载到内存中。 按照this guide 将模型转换为ONNX 格式。正如this blog post describes,使用 ONNX 尤其有助于缩短推理时间。 考虑通过增加max_depth
、min_samples_split
和/或min_samples_leaf
参数来训练更小的随机森林模型(未压缩模型的 4.3GB 听起来相当大)
【讨论】:
以上是关于如何存储 sklearn RF 模型以使其具有最快的加载时间?的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?