我正在运行龙卷风应用程序,如下所示
app = make_app()
server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(0) # autodetect number of cores and fork a process for each
print("server started at port 8888")
tornado.ioloop.IOLoop.instance().start()
这可以在可用内核上成功启动应用。这是在api调用上运行的代码片段
ctx = mx.cpu(0)
_, arg_params, aux_params = mx.model.load_checkpoint(args.prefix, args.epoch)
arg_params, aux_params = ch_dev(arg_params, aux_params, ctx)
sym = resnet_50(num_class=2)
arg_params["data"] = mx.nd.array(img, ctx)
arg_params["im_info"] = mx.nd.array(im_info, ctx)
exe = sym.bind(ctx, arg_params, args_grad=None, grad_req="null", aux_states=aux_params)
print("detect 4")
tic = time.time()
print("detect 5")
exe.forward(is_train=False)
print("detect 6")
output_dict = {name: nd for name, nd in zip(sym.list_outputs(), exe.outputs)}
rois = output_dict['rpn_rois_output'].asnumpy()[:, 1:]
在单核上运行龙卷风应用程序时工作正常,但在多核上运行直到上面代码的最后一行,之后我收到此错误
Segmentation fault: 11
Stack trace returned 10 entries:
[bt] (0) 0 libmxnet.so 0x0000000116ef741f _ .
ZN5mxnet15segfault_loggerEi + 63
[bt] (1) 1 libsystem_platform.dylib 0x00007fff6ce4af5a _sigtramp
+ 26
[bt] (2) 2 libsystem_malloc.dylib 0x00007fff6cd73cc0
malloc_zone_calloc + 87
[bt] (3) 3 CarbonCore 0x00007fff46798117
_ZL22connectToCoreServicesDv + 258
[bt] (4) 4 CarbonCore 0x00007fff46797fe4
_ZL9getStatusv + 24
[bt] (5) 5 CarbonCore 0x00007fff46797f62
scCreateSystemServiceVersion + 49
[bt] (6) 6 CarbonCore 0x00007fff46799392
FileIDTreeGetCachedPort + 213
[bt] (7) 7 CarbonCore 0x00007fff467991f2
FSNodeStorageGetAndLockCurrentUniverse + 79
[bt] (8) 8 CarbonCore 0x00007fff46799080
FileIDTreeGetAndLockVolumeEntryForDeviceID + 38
[bt] (9) 9 CarbonCore 0x00007fff46798fdd
_ZN7FSMountC2Ej17FSMountNumberTypePiPKj + 75
child 3 (pid 42579) exited with status 255, restarting
答案 0 :(得分:1)
当我使用mxnet进行多处理和OpenCV时,我遇到了类似的问题。我没有使用Tornado,但症状相同:单个进程环境工作正常,但是一旦我设置了多处理,我就会出现分段错误。
事实证明我的问题与此问题有关:https://github.com/opencv/opencv/issues/5150,我通过在代码开头设置cv2.setNumThread(0)
来解决这个问题。由于您使用的是resnet,我假设您还依赖OpenCV。
我还注意到mxnet 1.1版中修复了很多分段错误问题,所以如果你不使用这个版本,我建议升级到它,因为它更稳定。