使用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 个文件。
我正在尝试在 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 个文件。