繁体   English   中英

Memory 分配错误调用 XGBoost C function XGBoosterUpdateOneIter 失败:std::bad_alloc

[英]Memory allocation error Call to XGBoost C function XGBoosterUpdateOneIter failed: std::bad_alloc

在 Sagemaker 上使用 Julia 笔记本: ml.m5d.24xlarge with 500GB memory。

我正在训练具有 230 个特征的 XGBoost(平均每个文件 500MB)。 它可以毫无问题地训练多达 205 个文件,但之后,随机出现此错误

> ┌ Info: Starting XGBoost training
└   num_boost_rounds = 99
ERROR: LoadError: Call to XGBoost C function XGBoosterUpdateOneIter failed: std::bad_alloc
Stacktrace:
  [1] error(::String, ::String, ::String, ::String)
    @ Base ./error.jl:42
  [2] XGBoosterUpdateOneIter(handle::Ptr{Nothing}, iter::Int32, dtrain::Ptr{Nothing})
    @ XGBoost ~/.julia/packages/XGBoost/fI0vs/src/xgboost_wrapper_h.jl:11
  [3] #update#21
    @ ~/.julia/packages/XGBoost/fI0vs/src/xgboost_lib.jl:204 [inlined]
  [4] xgboost(data::XGBoost.DMatrix, nrounds::Int64; label::Type, param::Vector{Any}, watchlist::Vector{Any}, metrics::Vector{String}, obj::Type, feval::Type, group::Vector{Any}, kwargs::Base.Iterators.Pairs{Symbol, Any, NTuple{15, Symbol}, NamedTuple{(:objective, :num_class, :num_parallel_tree, :eta, :gamma, :max_depth, :min_child_weight, :max_delta_step, :subsample, :colsample_bytree, :lambda, :alpha, :tree_method, :grow_policy, :max_leaves), Tuple{String, Int64, Int64, Float64, Float64, Int64, Int64, Int64, Float64, Float64, Int64, Int64, String, String, Int64}}})
    @ XGBoost ~/.julia/packages/XGBoost/fI0vs/src/xgboost_lib.jl:185
  [5] macro expansion
    @ /home/src/Training.jl:175 [inlined]
  [6] macro expansion
    @ ./timing.jl:210 [inlined]

不知道如何解决它。 AWS 实例的最大 CPU 为 memory。此外,已经使用了 99 个 procs/worker。

这看起来您正在尝试分配比机器上可用的更多的 memory。

不幸的是,除了对数据集进行子采样或尝试更大的实例之外,这里没什么可做的。

另一种方法是尝试分布式训练,使用类似 Dask 的东西: https://xgboost.readthedocs.io/en/stable/tutorials/dask.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM