使用librosa时如何防止内存泄漏?

How to prevent memory leakage while using librosa?

我正在尝试在 librosa 中加载相当数量的音频片段(大约 173K),大部分时间都在 <15 秒内,当我 运行 我的功能时,30 分钟内我的 RAM 为 90已使用 %+ 容量.. 最终使我的计算机完全崩溃。

这些片段是 .wav 文件,我尝试将 soundfile 和 audioread 作为独立文件使用,但结果相同。我还尝试了不同的迭代器方法,这些方法也不起作用。我对我的 RAM 进行了 运行 诊断,一切正常。我只是想一次循环播放多个音频文件吗?我想,因为我的文件非常小,所以这应该不是问题。我过去没有遇到过内存泄漏或 运行 处理大型模型作业批次的问题。

内存:16.0 GB 用于缓存的磁盘 space:2TB space

试过这个:

def load_wavs(wav_dir, sr):

    wavs = list()
    for file in os.listdir(wav_dir):
        file_path = os.path.join(wav_dir, file)
        wav, _ = librosa.load(file_path, sr = sr, mono = True)
        #wav = wav.astype(np.float64)
        wavs.append(wav)

    return wavs 

试过这个:

def load_segs(audio_arrays):

    segments_data = []
    for a in audio_arrays:
        data = librosa.load(a, sr=16000, mono=True)
        segments_data.append(data)
        print(librosa.display.waveplot(data))

并尝试了这个:

audio_data_all = []

for i in audio_arrays: 
    data = librosa.load(i, sr=16000, mono=True)   
    audio_data_all.append(data)  

并且在每个函数中:

audio_data = [librosa.load(i, sr=16000, mono=True) for i in audio_arrays]

非常感谢任何帮助,谢谢。

每个加载的音频文件都会占用内存。这大约是 samplewidth_bytes * channels * samplerate * seconds_per_sample * number_of_samples 字节。 使用 16 kHz 采样率,加载到 64 位浮点数,1 通道,长达 15 秒,以及 173k 音频文件,这是:(8*1*16000*15*173000)/1e9 = 332 GB。 所以它不适合 16 GB 的 RAM。

这不是内存泄漏问题,只是您试图一次加载太多数据。一个一个地处理音频文件,或者批量处理最多 1-2k 个文件。