簡體   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