`

通过multiprocessing模块及时释放tensorflow的资源

阅读更多
在使用tf.data等模块时,tensorflow会产生内存泄露;当内存泄露发生时,我们期望及时保存checkpoint,返回相应的状态,然后重新启动tensorflow进行增量训练。

如果采用subprocess.call()方案在子进程中调用tensorflow,需要自行实现参数、结果的序列化和反序列化,比较麻烦。
本文给出一种通过multiprocessing模块在子进程中调用tensorflow的实现,传参数so easy
话不多说,上代码:
# coding=utf-8
'''
Created on Sep 18, 2018

@author: colinliang
'''
from __future__ import absolute_import, division, print_function
def run_tf(args, queue=None):
    print('\n\n------- beginning of tf process')
    print('args for tf: %s' % args)
    import tensorflow as tf
    sess = tf.Session()
    
    import psutil
    mem_start=psutil.virtual_memory().available
    batch=2000000
    n=(args['epoch']+1) *batch
    with tf.device('/cpu:0'):
        v = tf.get_variable(name="tf_var", shape=[n], dtype=tf.float32, initializer=tf.random_uniform_initializer(-1, 1, 0, dtype=tf.float32))
    sess.run(tf.global_variables_initializer())
#     print( (mem_start-psutil.virtual_memory().available)/batch)
    if(mem_start-psutil.virtual_memory().available  >batch*12): #内存检测,有内存泄露时及时退出
        result={'exit code':-1}
        if(queue is not None):
            queue.put(result)
        return result
    
    import time 
    time.sleep(10)
    
    r = sess.run(v[0])
    print('sess: %s' % sess)
    sess.close()
#     tf.reset_default_graph()
    result={'first elem of tf var':r}
    if(queue is not None):
        queue.put(result)
    print('------- end of tf process')
    return result

#####################################################
from  multiprocessing import Process, Queue
# 参考自https://stackoverflow.com/questions/39758094/clearing-tensorflow-gpu-memory-after-model-execution
for i in range(5):  # Process的使用方法 https://docs.python.org/2/library/multiprocessing.html
    q = Queue()
    args = {'epoch':i}
    p = Process(target=run_tf, args=(args, q))
    p.start()
    p.join()   
    print("result: %s" % q.get())

分享到:
评论

相关推荐

    Python3多进程 multiprocessing 模块实例详解

    通过`multiprocessing`模块,开发者可以在Python中轻松地实现多进程编程,利用多核处理器的优势,提高程序的执行效率。但同时,也需要根据具体的任务类型和需求选择合适的并发模型,以达到最佳性能。

    精品专题(2021-2022年收藏)Python多进程并行编程实践:以multiprocessing模块为例.doc

    Python的`multiprocessing`模块为开发者提供了强大的多进程并行编程工具,可以有效利用多核资源,提高计算密集型任务的执行速度。通过合理设计任务分解和进程间通信策略,可以实现高效并行计算。在实际应用中,需要...

    python multiprocessing模块用法及原理介绍

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程。 Python提供了multiprocessing。 ...

    Python multiprocessing模块中的Pipe管道使用实例

    Python的multiprocessing模块是Python标准库中的一个子模块,它提供了一个简单的API来实现多进程程序设计。在多进程环境中,不同进程间的数据通信是非常重要的一部分。multiprocessing模块中的Pipe管道机制是一个...

    Python进程Multiprocessing模块原理解析

    先看看下面的几个方法: star() 方法启动进程, ...multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None) 写一个的例子: from multiprocessing import Pool import

    python使用multiprocessing模块实现带回调函数的异步调用方法

    multipressing模块是python 2.6版本加入的,通过这个模块可以轻松实现异步调用 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': pool = Pool(processes=1) # Start a worker...

    Python多线程threading和multiprocessing模块实例解析

    Python中实现多线程的主要方式是通过threading模块和multiprocessing模块。在详细解析这两个模块之前,需要先了解进程和线程的基本概念。 进程和线程是操作系统进行资源分配和调度的基本单位。进程是系统进行资源...

    multiprocessing Mesh python script

    标题中的“multiprocessing Mesh python script”表明这是一个使用Python编程语言,并利用multiprocessing模块处理网格(Mesh)数据的脚本。multiprocessing是Python中用于并行计算的一个库,它允许我们利用多核...

    PyPI 官网下载 | qt_multiprocessing-0.0.2.tar.gz

    本文将深入探讨PyPI上的一款名为qt_multiprocessing-0.0.2的资源,它是一个压缩包文件,包含了一个名为qt_multiprocessing的Python库,主要用于结合Qt框架进行多进程编程。 首先,让我们来理解一下"qt"。Qt是一款跨...

    _multiprocessing_python多任务尝试_python_

    总的来说,Python的`_multiprocessing`模块为开发者提供了强大的工具来实现多任务处理,通过合理的任务调度和进程通信,可以有效提升程序的执行效率。然而,也需要注意多进程的开销,比如进程创建和销毁的资源消耗,...

    python多线程

    Python的Multiprocessing模块是一个强大的并行处理工具,对于需要并行计算或者能够充分利用多核CPU资源的程序来说,这是一个非常实用的模块。通过学习和掌握这个模块,程序员可以编写出更加高效和强大的Python程序。

    RGB Video Multiprocessing Gateway

    RGB’s Video Multiprocessing Gateway (VMG) product line offers the industry’s first high-density, carrier-class platform for the delivery of advanced video services, including high definition (HD) ...

Global site tag (gtag.js) - Google Analytics