uncomplicate / deep-diamond

A fast Clojure Tensor & Deep Learning library
https://aiprobook.com
Eclipse Public License 1.0
428 stars 17 forks source link

Evaluating tensors gives null pointer exception #9

Closed zendevil closed 3 years ago

zendevil commented 3 years ago

Evaluating t1 or (tensor 3) gives NullPointerException.

Here's the full stack trace:

  1. Caused by java.lang.NullPointerException (No message)

          Numbers.java: 1068  clojure.lang.Numbers/ops
          Numbers.java:  121  clojure.lang.Numbers/isPos
              core.clj: 2884  clojure.core/take/fn
          LazySeq.java:   42  clojure.lang.LazySeq/sval
          LazySeq.java:   51  clojure.lang.LazySeq/seq
               RT.java:  535  clojure.lang.RT/seq
              core.clj:  137  clojure.core/seq
              core.clj: 3133  clojure.core/dorun
              core.clj: 3148  clojure.core/doall
              core.clj: 3148  clojure.core/doall
            tensor.clj:  507  uncomplicate.diamond.internal.dnnl.tensor/eval76732/fn
          MultiFn.java:  234  clojure.lang.MultiFn/invoke
            pprint.clj:   40  cider.nrepl.pprint/pr/fn
              AFn.java:  152  clojure.lang.AFn/applyToHelper
              AFn.java:  144  clojure.lang.AFn/applyTo
              core.clj:  665  clojure.core/apply
              core.clj: 1973  clojure.core/with-bindings*
              core.clj: 1973  clojure.core/with-bindings*
           RestFn.java:  425  clojure.lang.RestFn/invoke
            pprint.clj:   37  cider.nrepl.pprint/pr
            pprint.clj:   29  cider.nrepl.pprint/pr
              Var.java:  393  clojure.lang.Var/invoke
             print.clj:  224  nrepl.middleware.print/wrap-print/fn/print
             print.clj:  148  nrepl.middleware.print/send-nonstreamed/print-key/fn
             print.clj:  147  nrepl.middleware.print/send-nonstreamed/print-key
              core.clj: 2742  clojure.core/map/fn/fn
         protocols.clj:   49  clojure.core.protocols/iter-reduce
         protocols.clj:   75  clojure.core.protocols/fn
         protocols.clj:   75  clojure.core.protocols/fn
         protocols.clj:   13  clojure.core.protocols/fn/G
              core.clj: 6884  clojure.core/transduce
              core.clj: 6870  clojure.core/transduce
             print.clj:  156  nrepl.middleware.print/send-nonstreamed
             print.clj:  138  nrepl.middleware.print/send-nonstreamed
             print.clj:  174  nrepl.middleware.print/printing-transport/reify
            caught.clj:   58  nrepl.middleware.caught/caught-transport/reify
       track_state.clj:  228  cider.nrepl.middleware.track-state/make-transport/reify

    interruptible_eval.clj: 114 nrepl.middleware.interruptible-eval/evaluate/fn main.clj: 442 clojure.main/repl/read-eval-print main.clj: 458 clojure.main/repl/fn main.clj: 458 clojure.main/repl main.clj: 368 clojure.main/repl RestFn.java: 137 clojure.lang.RestFn/applyTo core.clj: 665 clojure.core/apply core.clj: 660 clojure.core/apply regrow.clj: 18 refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn RestFn.java: 1523 clojure.lang.RestFn/invoke interruptible_eval.clj: 79 nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 55 nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 142 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn AFn.java: 22 clojure.lang.AFn/run session.clj: 171 nrepl.middleware.session/session-exec/main-loop/fn session.clj: 170 nrepl.middleware.session/session-exec/main-loop AFn.java: 22 clojure.lang.AFn/run Thread.java: 748 java.lang.Thread/run

blueberry commented 3 years ago

I can't reproduce that. Please read Neanderthal and DD documentation (the uncomplicate.org website, dragan.rocks tutorials, books).

qeshi commented 3 years ago

Hi! I got the same Null pointer Exception when doing (tensor 3) in my own project. But I got it working when using the Deep Diamond classification example uncomplicate.diamond.functional.imdb-sentiment.classification-test namespace.

So maybe it has something to do how I import dependencies.

51 jobtech-nlp-word-embeddings.lab> (t/tensor 3)                                                                                                                                       
52 {:shape [3], :data-type :float, :layout [1]}                                                                                                                                              
53 Error printing return value (NullPointerException) at clojure.lang.Numbers/ops (Numbers.java:1068).                                                                                       
 54 null                                   
2. Unhandled clojure.lang.ExceptionInfo                                                                                                                                                   
  6                                                                                                                                                                                           
 26 1. Caused by java.lang.NullPointerException                                                                                                                                               
 27    (No message)                                                                                                                                                                           
 28                                                                                                                                                                                           
 29               Numbers.java: 1068  clojure.lang.Numbers/ops                                                                                                                                
 30               Numbers.java:  121  clojure.lang.Numbers/isPos                                                                                                                              
 31                   core.clj: 2888  clojure.core/take/fn                                                                                                                                    
 32               LazySeq.java:   42  clojure.lang.LazySeq/sval                                                                                                                               
 33               LazySeq.java:   51  clojure.lang.LazySeq/seq                                                                                                                                
 34                    RT.java:  535  clojure.lang.RT/seq                                                                                                                                     
 35                   core.clj:  139  clojure.core/seq                                                                                                                                        
 36                   core.clj: 3121  clojure.core/dorun                                                                                                                                      
 37                   core.clj: 3136  clojure.core/doall                                                                                                                                      
 38                 tensor.clj:  507  uncomplicate.diamond.internal.dnnl.tensor/eval44618/fn                                                                                                  
 40               MultiFn.java:  234  clojure.lang.MultiFn/invoke                                                                                                                             
 41                   core.clj: 3662  clojure.core/pr-on                                                                                                                                      
 42                   core.clj: 3665  clojure.core/pr                                                                                                                                         
 43               dispatch.clj:  171  clojure.pprint/pprint-simple-default                                                                                                                    
 45               dispatch.clj:  167  clojure.pprint/pprint-simple-default                                                                                                                    
 46               MultiFn.java:  229  clojure.lang.MultiFn/invoke                                                                                                                             
 47            pprint_base.clj:  194  clojure.pprint/write-out                                                                                                                                
 48            pprint_base.clj:  233  clojure.pprint/write/fn                                                                                                                                 
 49            pprint_base.clj:  197  clojure.pprint/write                                                                                                                                    
 51                RestFn.java:  139  clojure.lang.RestFn/applyTo                                                                                                                             
 52                   core.clj:  669  clojure.core/apply                                                                                                                                      
 53                   core.clj:  662  clojure.core/apply                                                                                                                                      
 54                   Var.java:  393  clojure.lang.Var/invoke                                                                                                                                 
 57                   core.clj: 7717  clojure.core/run!/fn                                                                                                                                    
 60              protocols.clj:   49  clojure.core.protocols/iter-reduce                                                                                                                      
 61              protocols.clj:   75  clojure.core.protocols/fn                                                                                                                               
 62              protocols.clj:   13  clojure.core.protocols/fn/G                                                                                                                             
 64                   core.clj: 6830  clojure.core/reduce                                                                                                                                     
 65                   core.clj: 7712  clojure.core/run!                                                                                                                                       
 66                   main.clj:  442  clojure.main/repl/read-eval-print                                                                                                                       
 74                   main.clj:  458  clojure.main/repl/fn                                                                                                                                    
 75                   main.clj:  368  clojure.main/repl                                                                                                                                       
 77                RestFn.java:  137  clojure.lang.RestFn/applyTo  
78                   core.clj:  667  clojure.core/apply                                                                                                                                      
 79                   core.clj:  662  clojure.core/apply                                                                                                                                      
 80                 regrow.clj:   20  refactor nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn                                                                                                
 81                RestFn.java: 1523  clojure.lang.RestFn/invoke                                                                                                                              
 82                   AFn.java:   22  clojure.lang.AFn/run                                                                                                                                    
 86                   AFn.java:   22  clojure.lang.AFn/run                                                                                                                                    
 89                Thread.java:  829  java.lang.Thread/run

I'm using java version 11 openjdk on Ubuntu in AWS

java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
blueberry commented 3 years ago

Please note that you've got the error during printing the return value in the REPL, which is probably because you automatically cleaned context after the computation, but before the REPL implicitly invokes printing. This means that DD computed everything all right, so it's up to you to set a context (can be default) that stays active for longer in the REPL (something which is very practical for REPL experimentation, but is probably not what you want in production app on some server). Of course, without seeing your actual code, I'm only guessing based on this output:

53 Error printing return value (NullPointerException)

qeshi commented 3 years ago

Yes this was it! I had to (set! *print-length* 128) and now it works!

I made a minimal project to look at if anyone else runs in to the same problem. https://gitlab.com/arbetsformedlingen/taxonomy-dev/backend/nlp/minimal-dd