You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DJL中用GPU运行Whisper Zoo模型遇c10指针错误求助

DJL Whisper模型GPU运行JVM致命错误解决思路

错误原因分析

你遇到的SIGSEGV错误来自DJL的PyTorch底层库,本质是Tensor指针访问异常,通常和张量设备不匹配、内存管理问题或版本兼容性有关。

具体解决步骤

  • 统一张量设备,避免手动局部迁移
    不要仅单独迁移处理后的输入张量,要确保所有喂给模型的张量(包括attention mask、辅助状态等)都在同一GPU设备上。可以在自定义Translator的processInput方法末尾,打印所有输出NDArray的设备信息,排查是否有遗漏的CPU张量:

    System.out.println("Tensor device: " + ndArray.getDevice());
    

    更推荐的方式是放弃手动转设备,直接在加载模型时指定GPU,让DJL自动完成模型和输入的设备迁移:

    Criteria<AudioData, String> criteria = Criteria.builder()
        .setTypes(AudioData.class, String.class)
        .optModelUrls("djl://ai.djl.zoo/whisper")
        .optDevice(Device.gpu(0))
        .build();
    
  • 检查PyTorch与CUDA版本兼容性
    DJL的PyTorch引擎版本和系统CUDA版本必须严格匹配:

    • DJL 0.23.0对应PyTorch 2.0.1,需CUDA 11.7/11.8
    • DJL 0.21.1对应PyTorch 1.13.1,需CUDA 11.6
      用nvidia-smi或echo $CUDA_VERSION查看系统CUDA版本,调整DJL版本到兼容区间。
  • 排查GPU内存问题
    用nvidia-smi实时监控显存占用,若显存不足会导致内存访问异常:

    • 尝试切换到更小的Whisper模型(如base.en替代large)
    • 减小推理的batch size,避免显存溢出
  • 规范自定义Translator的张量创建
    若必须自定义Translator,直接在GPU设备上创建张量,避免CPU转GPU的内存拷贝问题:

    NDArray input = manager.create(audioData, Device.gpu(0));
    

内容的提问来源于stack exchange,提问作者Sreekumar KJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:25