pytorch Whisper Zoo模型在DJL与GPU:获取错误“c10::instrument_ptr< c10::TensorImpl,c10::UndefinedTensorImpl>::operator->()const+0xc”

snvhrwxg  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(110)

我试图运行的Whisper动物园模型从DJL的例子在GPU。
在第一次运行中,我得到的错误是发现了两个设备- Cuda和CPU。
据我所知,发生此错误是由于模型在GPU中而不是输入,作为修复,我创建了两个扩展WhisperTranslator和WhisperTranslatorFactory的类,即WhisperGPUTranslator和WhisperGPUTranslatorFactory。制作这些类以便NDArray.to对处理后的输入图像数据执行www.example.com(gpu(0))。
这有助于我启动应用程序。然而,当我做出推断时,我得到了这个错误:

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f971f918000, pid=22329, tid=22431
#
# JRE version: OpenJDK Runtime Environment (11.0.20+8) (build 11.0.20+8-post-Ubuntu-1ubuntu123.04)
# Java VM: OpenJDK 64-Bit Server VM (11.0.20+8-post-Ubuntu-1ubuntu123.04, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [0.23.0-libdjl_torch.so+0x118000]  c10::intrusive_ptr<c10::TensorImpl, c10::UndefinedTensorImpl>::operator->() const+0xc

已尝试将DJL和DJL-Pytorch-Engine版本从23.0更改为21.1(低于21.1,示例代码不会编译)。每次都有同样的错误。
希望这里有人能知道如何解决这个问题。请帮帮我

ni65a41a

ni65a41a1#

想出来了,在这里发帖以防其他人也遇到这种情况。
在WhisperTranslator的processInput函数中,更改以下行:

NDArray placeholder = ctx.getNDManager().create("").toDevice(device, true);

NDArray placeholder = ctx.getNDManager().create(new float[0]).toDevice(device, true);

当然,toDevice(gpu(0),copy=true)也必须在WhisperTranslator类的扩展中添加。(对我来说是WhisperGPU Translator,正如问题中所描述的那样)

相关问题