美文网首页
go-xgboost内存占用极高的原因分析

go-xgboost内存占用极高的原因分析

作者: AI_Finance | 来源:发表于2020-03-04 15:31 被阅读0次

在用go-xgboost做模型预测的时候,大家肯定非常熟悉下面的一条语句,但是这条语句非常的占用内存,因为模型在执行这样的加载时,顺带进行了以下循环:
predictor, err := xgboost.NewPredictor(modelDir+fileName, runtime.NumCPU(), 0, 5000, -1)

如果workCount=4,意味着任何一个模型均要加载四次

func NewPredictor(xboostSavedModelPath string, workerCount int, optionMask int, nTreeLimit uint, missingValue float32) (Predictor, error) {
    if workerCount <= 0 {
        return nil, errors.New("worker count needs to be larger than zero")
    }

    requestChan := make(chan multiBoosterRequest)
    initErrors := make(chan error)
    defer close(initErrors)

    for i := 0; i < workerCount; i++ {
        go func() {
            runtime.LockOSThread()
            defer runtime.UnlockOSThread()

            booster, err := core.XGBoosterCreate(nil)
            if err != nil {
                initErrors <- err
                return
            }

            err = booster.LoadModel(xboostSavedModelPath)
            if err != nil {
                initErrors <- err
                return
            }

            // No errors occured during init
            initErrors <- nil

            for req := range requestChan {
                data, rowCount, columnCount := req.matrix.Data()
                matrix, err := core.XGDMatrixCreateFromMat(data, rowCount, columnCount, missingValue)
                if err != nil {
                    req.resultChan <- multiBoosterResponse{
                        err: err,
                    }
                    continue
                }

                res, err := booster.Predict(matrix, optionMask, nTreeLimit)
                req.resultChan <- multiBoosterResponse{
                    err:    err,
                    result: res,
                }
            }
        }()

        err := <-initErrors
        if err != nil {
            return nil, err
        }
    }

    return &multiBooster{reqChan: requestChan}, nil
}

相关文章

  • go-xgboost内存占用极高的原因分析

    在用go-xgboost做模型预测的时候,大家肯定非常熟悉下面的一条语句,但是这条语句非常的占用内存,因为模型在执...

  • go tool 分析内存信息

    可以使用go tool分析CPU、内存占用情况时,pprof进行分析相关的cpu占用情况和内存占用情况:可以使用 ...

  • JVM

    JVM 类加载过程 动态链接、静态链接与分派 对象占用内存大小 内存 垃圾回收 CPU爆满原因分析 OOM Syn...

  • 内存占用分析

    问题现象:所有进程占用的内存远远少于系统消耗掉的内存 分析过程: 1、通过free -g查看内存使用量,发现系统使...

  • 内存优化(二)如何避免内存泄漏

    一、不同生命周期导致的内存泄漏 前面有分析了内存泄漏的原因,本该被回收的对象被占用,得不到回收便会内存泄漏。总归到...

  • 为什么有时Depthwise 卷积比正常卷积更耗时

    原因: 一、从计算量和内存占用量分析 作者:cs sun链接:https://www.zhihu.com/ques...

  • Java编程中对象内存空间占用分析

    Java编程中,了解对象的内存开销非常重要。本文主要分析Java语言中对象的内存占用。 1、Java对象内存占用简...

  • WWDC2018 - iOS Memory Deep Dive

    前言 这个topic主要介绍了如何分析iOS app的内存占用和如何做内存优化,包括以下几部分, 什么是内存占用 ...

  • iOS 内存分析-- 图片加载内存分析

    对于大多数APP来说,内存占用主要就是图片,本文将从实用角度分析,iOS图片的内存占用、测量、优化等。 iOS内存...

  • MAT使用技巧

    通过线程堆栈分析内存占用 如图 如图mat已经帮我们分析出了又四个模块占用的内存非常大,点击上面的detail并不...

网友评论

      本文标题:go-xgboost内存占用极高的原因分析

      本文链接:https://www.haomeiwen.com/subject/zravlhtx.html