You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2020/01/20 09:31:04 UTC

[GitHub] [incubator-tvm] IshwaraK opened a new issue #4748: Segmentation Fault at Optimization level 2 and above

IshwaraK opened a new issue #4748: Segmentation Fault at Optimization level 2 and above
URL: https://github.com/apache/incubator-tvm/issues/4748
 
 
   The below reduced test-case shows segmentation fault in TVM compiler stack at the optimization level 2 and above. The problem is in call to 'lib.get_source()', as constant folding optimizes away whole graph and lib object becomes NULL.
   
       import tvm
       from tvm import relay
       from tvm.contrib import graph_runtime
       import numpy as np
       
       data_shape = (2, 2)
       matrix_x = relay.var('matrix_x', shape=data_shape, dtype='int32')
       matrix_y = relay.var('matrix_y', shape=data_shape, dtype='int32')
       
       add = relay.op.add(matrix_x, matrix_y)
       fun = relay.Function([matrix_x,matrix_y], add)
       relayMod = relay.Module({})
       fname = relay.GlobalVar('main')
       relayMod.entry_func = fname
       relayMod[fname] = fun
       print("Relay Module:\n", relayMod)
       
       x_data = np.matrix('1 2; 3 4', dtype='int32')
       y_data = np.matrix('5 6; 7 8', dtype='int32')
       params = {
           "matrix_x" : x_data,
           "matrix_y" : y_data,
       }
       with relay.build_config(opt_level=3):
           graph, lib, params = relay.build(relayMod, "llvm", params=params)
       print("Model graph:\n", graph)
       print("\nModel parameters:")
       for item in params:
           print(item, ":\n", params[item])
       print("\nOperator library:\n", lib.get_source())
       mod = graph_runtime.create(graph, lib, ctx=tvm.cpu(0))
       mod.set_input(**params)
       mod.run()
       res = mod.get_output(0).asnumpy()
       print("inference:\n", res)
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583767655
 
 
   I agree with @zhiics that allowing feeding an empty Module to GraphRT makes more sense here. 
   In parallel, I am also OK supporting a dummy function to get around with most of the issues we have. There are certain cases where we still want to serialize the module binary blob as so, but there aren't any host functions.
   
   
   also cc @FrozenGene @yzhliu 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] zhiics commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
zhiics commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583777095
 
 
   Not sure if we want to use LLVM in this case as it will be treated as the host module when exporting. I even think it is just okay to leave it as it is because it means we just return a null pointer when returning an empty module, which is a valid return. Considering `mod` is is essentially a shared pointer, the failure/crash in dereference sounds good to me.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583730264
 
 
   Hi @zhiics @tqchen I'm interested in this issue and would be happy to help.
   
   From a user's perspective, we would normally expect that `relay.build` returns an empty `lib`. An empty `lib` can be `NULL`/`None`, but it may cause confusion like this issue. As @zhiics mentioned, using assertion may raise unexpected issues for end users as well.
   
   One workaround for this problem, which I'm currently implementing, is inserting a dummy function (with empty content) into the `lowered_funcs` map before passing to module building. In this way, we won't break other parts of the codebase, and the returned `lib` still makes sense.
   
   If you prefer this way, I can continue implementing it and create a PR later.
   
   Thanks

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen closed issue #4748: Segmentation Fault at Optimization level 2 and above

Posted by GitBox <gi...@apache.org>.
tqchen closed issue #4748: Segmentation Fault at Optimization level 2 and above
URL: https://github.com/apache/incubator-tvm/issues/4748
 
 
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583775765
 
 
   Thanks @tqchen , I've proposed a tentative implementation of this dummy function idea #4847. The script in this issue can be built successively now.
   
   `lib.get_source()` output:
   
   ```
   Operator library:
    ; ModuleID = '__dummy__'
   source_filename = "__dummy__"
   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
   target triple = "x86_64-pc-linux-gnu"
   
   @__tvm_main__ = weak local_unnamed_addr constant [10 x i8] c"__dummy__\00", align 1
   
   ; Function Attrs: norecurse nounwind readnone
   define dllexport i32 @__dummy__() local_unnamed_addr #0 !dbg !5 {
   entry:
     ret i32 0, !dbg !9
   }
   
   attributes #0 = { norecurse nounwind readnone }
   
   !llvm.dbg.cu = !{!0}
   !llvm.module.flags = !{!3, !4}
   
   !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "TVM", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, dwoId: 1)
   !1 = !DIFile(filename: "model.tvm", directory: "/tmp/")
   !2 = !{}
   !3 = !{i32 2, !"tvm_target", !"llvm"}
   !4 = !{i32 4, !"Debug Info Version", i32 3}
   !5 = distinct !DISubprogram(name: "__dummy__", scope: !1, file: !1, type: !6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
   !6 = !DISubroutineType(types: !7)
   !7 = !{!8}
   !8 = !DIBasicType(name: "int32", size: 32, encoding: DW_ATE_signed)
   !9 = !DILocation(line: 0, scope: !5)
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] FrozenGene commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
FrozenGene commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583851947
 
 
   >I even think it is just okay to leave it as it is because it means we just return a null pointer when returning an empty module, which is a valid return. Considering mod is is essentially a shared pointer, the failure/crash in dereferencing a null pointer sounds good to me.
   
   IMO, I agree with @zhiics 's point here.
   
   >There is one more question though: what the target of the dummy function should be? I currently set it to llvm.
   
   Should be `target_host_`. `llvm` just means x86 cpu.
    

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] kumasento edited a comment on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
kumasento edited a comment on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583775765
 
 
   Thanks @tqchen , I've proposed a tentative implementation of this dummy function idea #4847. The script in this issue can be built successively now.
   
   `lib.get_source()` output:
   
   ```
   Operator library:
    ; ModuleID = '__dummy__'
   source_filename = "__dummy__"
   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
   target triple = "x86_64-pc-linux-gnu"
   
   @__tvm_main__ = weak local_unnamed_addr constant [10 x i8] c"__dummy__\00", align 1
   
   ; Function Attrs: norecurse nounwind readnone
   define dllexport i32 @__dummy__() local_unnamed_addr #0 !dbg !5 {
   entry:
     ret i32 0, !dbg !9
   }
   
   attributes #0 = { norecurse nounwind readnone }
   
   !llvm.dbg.cu = !{!0}
   !llvm.module.flags = !{!3, !4}
   
   !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "TVM", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, dwoId: 1)
   !1 = !DIFile(filename: "model.tvm", directory: "/tmp/")
   !2 = !{}
   !3 = !{i32 2, !"tvm_target", !"llvm"}
   !4 = !{i32 4, !"Debug Info Version", i32 3}
   !5 = distinct !DISubprogram(name: "__dummy__", scope: !1, file: !1, type: !6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
   !6 = !DISubroutineType(types: !7)
   !7 = !{!8}
   !8 = !DIBasicType(name: "int32", size: 32, encoding: DW_ATE_signed)
   !9 = !DILocation(line: 0, scope: !5)
   ```
   
   There is one more question though: what the `target` of the dummy function should be? I currently set it to `llvm`.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-584385580
 
 
   I would also like to comment about the future direction here. 
   
   In our vision, eventually everything will be stored in an IRModule, and it would be fine to create an empty IRModule and export it. We could also in-theory create an EmptyRuntimeModule, or use CSourceModule(with no content) as an empty module.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen closed issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
tqchen closed issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748
 
 
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-599730475
 
 
   https://github.com/apache/incubator-tvm/pull/4847 Thanks to @kumasento 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen commented on issue #4748: [RELAY] Support RelayBuild with Empty Library

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #4748: [RELAY] Support RelayBuild with Empty Library
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-576370456
 
 
   cc @zhiics @jroesch 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] zhiics commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
zhiics commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-576397447
 
 
   I saw this before as well. We actually had a warning in the C++ code when the returned module is empty.
   https://github.com/apache/incubator-tvm/blob/ee0af843f3c5a3429e888079afb5f30789bd9bee/src/relay/backend/build_module.cc#L479-L480
   
   In order to avoid the erroneously working on the empty module, we can probably assert here:
   https://github.com/apache/incubator-tvm/blob/ee0af843f3c5a3429e888079afb5f30789bd9bee/python/tvm/relay/build_module.py#L244
   
   But I think it might be not a good idea to assert as we should probably allow to feed the graph runtime an empty module. It just does nothing.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen edited a comment on issue #4748: RelayBuild with Empty Library

Posted by GitBox <gi...@apache.org>.
tqchen edited a comment on issue #4748: RelayBuild with Empty Library
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-576369972
 
 
   Given that this is an clearly actionabble issue, turn this to a task

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] zhiics edited a comment on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
zhiics edited a comment on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-583777095
 
 
   Not sure if we want to use LLVM in this case as it will be treated as the host module when exporting. I even think it is just okay to leave it as it is because it means we just return a null pointer when returning an empty module, which is a valid return. Considering `mod` is is essentially a shared pointer, the failure/crash in dereferencing a null pointer sounds good to me.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants

Posted by GitBox <gi...@apache.org>.
kumasento commented on issue #4748: [RELAY] Support RelayBuild with Only Constants
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-584871414
 
 
   Thank you @zhiics @FrozenGene @tqchen I've changed the current implementation to use `CSourceModule`. It does not cost much and users can still get the benefit of avoiding unexpected halt.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] IshwaraK opened a new issue #4748: Segmentation Fault at Optimization level 2 and above

Posted by GitBox <gi...@apache.org>.
IshwaraK opened a new issue #4748: Segmentation Fault at Optimization level 2 and above
URL: https://github.com/apache/incubator-tvm/issues/4748
 
 
   The below reduced test-case shows segmentation fault in TVM compiler stack at the optimization level 2 and above. The problem is in call to 'lib.get_source()', as constant folding optimizes away whole graph and lib object becomes NULL.
   
       import tvm
       from tvm import relay
       from tvm.contrib import graph_runtime
       import numpy as np
       
       data_shape = (2, 2)
       matrix_x = relay.var('matrix_x', shape=data_shape, dtype='int32')
       matrix_y = relay.var('matrix_y', shape=data_shape, dtype='int32')
       
       add = relay.op.add(matrix_x, matrix_y)
       fun = relay.Function([matrix_x,matrix_y], add)
       relayMod = relay.Module({})
       fname = relay.GlobalVar('main')
       relayMod.entry_func = fname
       relayMod[fname] = fun
       print("Relay Module:\n", relayMod)
       
       x_data = np.matrix('1 2; 3 4', dtype='int32')
       y_data = np.matrix('5 6; 7 8', dtype='int32')
       params = {
           "matrix_x" : x_data,
           "matrix_y" : y_data,
       }
       with relay.build_config(opt_level=3):
           graph, lib, params = relay.build(relayMod, "llvm", params=params)
       print("Model graph:\n", graph)
       print("\nModel parameters:")
       for item in params:
           print(item, ":\n", params[item])
       print("\nOperator library:\n", lib.get_source())
       mod = graph_runtime.create(graph, lib, ctx=tvm.cpu(0))
       mod.set_input(**params)
       mod.run()
       res = mod.get_output(0).asnumpy()
       print("inference:\n", res)
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [incubator-tvm] tqchen commented on issue #4748: Segmentation Fault at Optimization level 2 and above

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #4748: Segmentation Fault at Optimization level 2 and above
URL: https://github.com/apache/incubator-tvm/issues/4748#issuecomment-576369972
 
 
   Please open a new trouble shooting thread on https://discuss.tvm.ai/

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services