2

我正在尝试使用 AMLCompute 实例来预处理我的数据。为此,我需要能够将处理后的数据写回数据存储区。我采用这种方法是因为集群完成后会自动关闭,所以我可以让它运行直到完成,而不必担心支付超过所需的时间。

问题是当我尝试写回数据存储(作为数据集安装)时,我收到以下错误:

OSError: [Errno 30] Read-only file system: '/mnt/batch/tasks/shared/LS_root/jobs/[...]/wav_test'

我已将数据存储的访问策略设置为允许读取、添加、创建、写入、删除和列出,但我认为这不是问题,因为我已经可以从 Microsoft Azure 文件资源管理器写入数据存储。

有没有办法直接或通过具有azureml python sdk写入权限的数据集挂载数据存储?

或者,是否有更好的方法在 azure 上预处理此(音频)数据以进行机器学习?

谢谢!

编辑:我正在添加一个说明问题的示例。

from azureml.core import Workspace, Dataset, Datastore
import os

ws = Workspace.from_config()
ds = Dataset.get_by_name(ws, name='birdsongs_alldata')

mount_context = ds.mount()
mount_context.start()

os.listdir(mount_context.mount_point)

输出:

['audio_10sec', 'mp3', 'npy', 'resources', 'wav']

因此文件系统已安装且可见。

# try to write to the mounted file system
outfile = os.path.join(mount_context.mount_point, 'test.txt')

with open(outfile, 'w') as f:
    f.write('test')

错误:

--------------------------------------------------------------------------- OSError                                   Traceback (most recent call last) <ipython-input-9-1b15714faded> in <module>
      1 outfile = os.path.join(mount_context.mount_point, 'test.txt')
      2 
----> 3 with open(outfile, 'w') as f:
      4     f.write('test')

OSError: [Errno 30] Read-only file system: '/tmp/tmp8ltgsx6x/test.txt'
4

1 回答 1

2

我已经在我的环境中模拟了相同的场景并且它已经奏效了。您能否分享问题中的代码和完整的错误消息?

关于成本问题,您可以使用 aml python sdk 通过azureml.core.compute启动、停止和等待运行状态。通过这种方式,您可以更好地控制“运行”(启动、执行、停止)的计算时间。

处理预处理音频文件的最佳方式取决于其内容。如果音频包含语音,我强烈建议您使用Azure Cognitive Services - Speech API (speech-to-text)

如果不是语音,可以使用wave 模块,如下面的代码:

from wave import open as open_wave
waveFile = open_wave(<filename>,'rb')
nframes = waveFile.getnframes()
wavFrames = waveFile.readframes(nframes)
ys = numpy.fromstring(wavFrames, dtype=numpy.int16)

学分

此方法不仅来自 azure,而且允许您以结构化方式使用数据。

于 2021-04-14T20:27:17.173 回答