modelscope-funasr中finetune时有没有遇到RuntimeError:?

在使用modelscope-funasr进行finetune时,是否遇到过"RuntimeError: DataLoader worker(pid xxx) is killed by signal: Killed"的错误,在80GB内存和共享内存的Docker容器环境中,运行funasr版本0.8.8和modelscope版本1.8.1时,尝试微调的模型为speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online,请问有人遇到吗?

展开
收起
真的很搞笑 2024-02-15 08:48:51 89 分享 版权
阿里云 AI 助理回答

在使用 modelscope-funasr 进行微调时,出现 RuntimeError: DataLoader worker(pid xxx) is killed by signal: Killed 的错误,通常与系统资源不足或配置问题有关。以下是针对该问题的详细分析和解决方法:


1. 错误原因分析

根据知识库中的信息,此类错误可能由以下原因导致: - 内存不足:尽管您提到容器环境有80GB内存,但共享内存(/dev/shm)的大小可能不足,尤其是在多线程数据加载时。 - DataLoader 配置问题DataLoadernum_workers 参数设置过高可能导致系统资源耗尽,尤其是当每个 Worker 占用较多内存时。 - Docker 容器限制:即使宿主机内存充足,Docker 容器的内存或共享内存限制可能未正确配置,导致进程被强制终止。


2. 解决方案

2.1 检查并调整共享内存

共享内存(/dev/shm)是 Linux 系统中用于进程间通信的临时文件系统,默认大小通常为物理内存的一半。如果共享内存不足,可能会导致 DataLoader 的子进程被杀死。

  • 检查共享内存大小: 在容器内运行以下命令,查看 /dev/shm 的大小:

    df -h /dev/shm
    

    如果共享内存过小(例如小于 1GB),需要调整 Docker 容器的启动参数。

  • 调整共享内存大小: 启动 Docker 容器时,通过 --shm-size 参数增加共享内存大小。例如:

    docker run --shm-size=16G ...
    

    建议将共享内存设置为至少 16GB 或更高,以满足大规模模型训练的需求。


2.2 调整 DataLoader 的 num_workers 参数

DataLoadernum_workers 参数控制数据加载的并发线程数。如果设置过高,可能会导致内存耗尽。

  • 降低 num_workers: 尝试将 num_workers 设置为较小的值(例如 4 或 2),观察是否解决问题。例如:

    train_loader = torch.utils.data.DataLoader(train_set, num_workers=4, batch_size=32, shuffle=True)
    
  • 验证优化效果: 根据知识库中的案例,减少 num_workers 可以显著降低数据加载阶段的内存占用。


2.3 检查 Docker 容器的资源限制

确保 Docker 容器的内存和 CPU 资源未受到限制。

  • 检查容器资源限制: 使用以下命令查看容器的资源限制:

    docker inspect <container_id> | grep -i memory
    

    如果发现内存限制过低(例如低于 80GB),需要重新启动容器并移除限制。

  • 移除资源限制: 启动容器时,避免设置 --memory--cpus 参数,以充分利用宿主机资源。


2.4 监控系统资源使用情况

在训练过程中,实时监控系统资源使用情况,定位潜在瓶颈。

  • 监控工具: 使用 nvidia-smihtop 工具分别监控 GPU 和 CPU 内存使用情况:

    watch -n 1 nvidia-smi
    htop
    
  • 关注指标

    • GPU 显存是否接近上限。
    • 系统内存和共享内存是否耗尽。

3. 其他建议

3.1 更新 FunASR 和 ModelScope 版本

您当前使用的 funasr 版本为 0.8.8,modelscope 版本为 1.8.1。建议检查是否有更新版本,因为新版本可能修复了相关问题。

  • 升级方法
    pip install --upgrade funasr modelscope
    

3.2 减少 Batch Size

如果上述方法仍无法解决问题,可以尝试减少 batch_size 参数,以降低单次数据加载的内存需求。


4. 总结

通过以上步骤,您可以逐步排查并解决 RuntimeError: DataLoader worker(pid xxx) is killed by signal: Killed 的问题。重点在于: - 调整共享内存大小,确保 /dev/shm 足够大。 - 优化 DataLoader 配置,降低 num_workersbatch_size。 - 检查 Docker 容器资源限制,避免内存或 CPU 被限制。

如果问题仍未解决,请提供更多上下文信息(如完整的错误日志、系统资源使用情况等),以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

包含命名实体识别、文本分类、分词、关系抽取、问答、推理、文本摘要、情感分析、机器翻译等多个领域

热门讨论

热门文章

还有其他疑问?
咨询AI助理