Colab中调用DeepSpeech的generate_lm.py构建自定义评分器出现subprocess错误
报错原因
*SIGSEGV(信号11)*属于内存访问异常(段错误),本次是kenlm的build_binary工具执行时触发,常见触发原因如下:
- 内存不足:Colab免费版运行内存上限通常为12GB,参数中
--top_k 500000词汇量过大,搭配5阶ARPA模型、--arpa_prune "0|0|1"前两阶完全不剪枝的设置,很容易超出内存限制触发段错误。 - 中间ARPA文件损坏:生成的
lm_filtered.arpa文件可能为空、格式不完整,根源可能是输入的hindi_tokens.txt存在编码错误、特殊字符、格式不符合kenlm输入要求,导致ARPA文件生成异常,build_binary读取时崩溃。 - kenlm二进制兼容问题:使用的kenlm编译产物和当前Colab运行环境的glibc版本、CPU架构不兼容,执行时触发异常。
- 参数设置不合理:
--binary_a_bits 255参数设置过大,低内存环境下处理对应规模的哈希表时容易触发内存越界。
解决方法
- 调整参数降低模型规模
- 将
--top_k从500000下调至200000以内,印地语常用词汇量无需设置过高的top_k阈值 - 修改剪枝参数,将
--arpa_prune改为"1|2|3",给低阶n元组也设置剪枝阈值,大幅降低内存占用 - 将
--binary_a_bits下调至225或200,不会明显影响模型效果,可有效降低内存开销 - 若调整后仍报错,可将
--arpa_order从5下调至4,降低模型阶数进一步减少内存占用
- 将
- 校验输入与中间文件
- 先检查
hindi_tokens.txt格式,确保每行单个token、无乱码、无空行,编码为UTF-8 - 报错后检查
/content/DeepSpeech/data/lm/lm_filtered.arpa文件大小,若小于1MB基本可判定为损坏文件,需排查输入问题后重新生成ARPA文件
- 先检查
- 优化内存分配
- 将
--max_arpa_memory从"85%"下调至"70%",避免触发Colab的内存OOM机制 - 执行脚本前清空Colab中不需要的变量、缓存,或直接重启运行时后再执行脚本,释放足够内存空间
- 将
- 重新编译kenlm
- 以上方法均无效时,在Colab中重新编译kenlm适配当前运行环境,执行命令如下:
cd /content/DeepSpeech/native_client/kenlm mkdir -p build && cd build cmake .. make -j$(nproc)
- 以上方法均无效时,在Colab中重新编译kenlm适配当前运行环境,执行命令如下:
- 分步排查定位问题
- 可跳过generate_lm.py的封装,手动分步执行kenlm命令,定位具体报错环节:先手动生成ARPA文件,再手动执行
build_binary命令,查看详细报错输出。
- 可跳过generate_lm.py的封装,手动分步执行kenlm命令,定位具体报错环节:先手动生成ARPA文件,再手动执行
内容的提问来源于stack exchange,提问作者Anjaly Vijayan
相关产品推荐
相关产品推荐

