Open jinhill opened 1 year ago
我和你同样的想法,不过我是通过go ->cgo 来调用的。我也是load model 和 asr分开。 而且遇到了和你一模一样的情况。
最终我发现 :
din 这个指针成空指针了?
@shen2009fei 你这个问题好像是内存malloc时候失败了。我不是很了解golang,从网上搜索到的是
在golang中每个协程都维护自己的栈空间,初始大小为2KB,最大为1GB。 而每个协程的堆大小也是有限制的,在64位操作系统下是1GB,32位操作系统下是250MB,超出时会panic。 相对而言,每个线程栈空间初始大小则为2MB。
golang的堆只有1G,paraformer的模型有800M,所以猜测肯能是堆的内存不够了,引起的malloc失败
我想把FastASR结合libhttp做了一个简单的服务,但出现Segmentation fault。 参考paraformer_cli.cpp,把加载模型和识别分开 Model load_model(const char path, int mode); string asr(Model mm, const char wav); 现象:在自己写的一个app中来调用这两个方法是可以正常使用的,但在libhttp调用就会出现Segmentation fault (gdb) n 42 msg = mm->forward(buff, len, flag); (gdb) p mm $7 = (Model ) 0x7fffcc0050e0 (gdb) p buff $8 = (float ) 0x7fffdb525090 (gdb) p len $9 = 72880 (gdb) p flag $10 = 2 (gdb) s
Thread 6 "civetweb-worker" received signal SIGSEGV, Segmentation fault. 0x00007ffff6bbc65b in sgemm_kernel_SANDYBRIDGE () from /lib/x86_64-linux-gnu/libopenblas.so.0