Make DS2 run on Kubernates clusters
Created by: wanghaoshuang
- 重新组织语音数据,将小文件打包合并为大文件,以适应paddle cloud
- cloud的文件系统和分布式环境数据分发;数据上传到paddle cloud data center。
- 改写data reader,使其能在Kubernates cluster环境work
- 按paddle cloud教程编写提交任务脚本
- 测试
- 统一单机与分布式数据接口
design doc
数据
http://www.openslr.org/resources/12/about.html
单机数据存储方式与reader
存储方式
audio data: one audio clip is saved as a file manifest: Manifest is a json file with each line containing one audio clip filepath, its transcription text string, and its duration.
reader
steps:
- sample 200 lines from manifest to count mean and std for normolization
- shuffle manifest or sort manifest
- for line in manifest:extract and normalize features from audio clip file
- yield audio features and transcription text by batch which may be padded
为什么不适用于paddlecloud
paddle cloud特点:
为什么单机方案不能直接用于paddle cloud:
- 无法直接使用librispeech.py下载数据到paddle cloud
- 音频数据以小文件存储,不适用于paddle cloud的文件系统
- 所有数据信息集中在一个manifest文件中,不利于多节点分发数据
- 通过自定义分发逻辑可以把manifest拆成多个文件,分发到各个节点。但是,这样每个节点还是要从hdfs上一个个读小文件
改写方案
存储
reader
- 如果单节点可以完全load数据到内存:
- 提取特征步骤的结果是否可以缓存在内存,避免每个pass重复提取特征?
- 如果单节点无法完全load数据到内存:
- 提取特征后的结果是否可以存到文件系统,避免每个pass重复提取特征 ?
- 如果 图3 中buffer的size设置为无穷大,相当于对一个节点(worker)的数据做全局sort或shuffle
如何优雅统一单机与分布式数据接口?
- 把小音频文件打成tar包,并维护以下结构:
- list: [(filename, duration)] :快速全局sort by duration或shuffle
- dict: filename->(tarfile object , tarinfo) : 快速索引数据