在每次特定的in之后训练ML模型时的内存使用问题

2021-06-14 22:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着每隔1小时运行一次ML训练脚本,但是每小时内存使用量增加大约20%,3-4小时后,内存使用量达到90%,然后这个脚本抛出内存错误。 我想知道为什么当列车功能完成时内存没有被释放。你知道吗

尽管如果我手动运行train函数(通过不使用任何类型的线程调度器和连续两次或三次调用train函数),则不会显示这种行为。你知道吗

在每个特定的时间间隔后训练模型的任何建议。你知道吗

这是密码。你知道吗

import pickle
import pandas as pd
from pymongo import MongoClient
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

def train():

    client = MongoClient(databaseURI)
    db = client['mydb']

    movie_data = []
    for index, obj in enumerate(db.movies.find({})):
        movie_obj = {}

        movie_obj['_id'] = obj['_id']
        movie_obj['title'] = obj['title']
        movie_obj['rating'] = obj['rating']
        movie_data.append(movie_obj)


    user_data = []
    for index, obj in enumerate(db.users.find({})):
        user_obj = {}

        user_obj['_id'] = obj['_id']
        user_obj['username'] = obj['username']
        user_obj['movie_id'] = obj['movie_id']
        user_obj['rating'] = obj['rating']
        user_data.append(user_obj)


    movie_data_df = pd.DataFrame(movie_data)
    user_data_df = pd.DataFrame(user_data)

    # some ML training ALGO
    trainedModel = algo.train(user_data_df, movie_data_df)

    trained.to_pickle('files/trained.pkl')


scheduler = BlockingScheduler()
scheduler.add_job(train, 'interval', hours=1, next_run_time=datetime.datetime.now())
scheduler.start()