eric-haibin-lin opened a new issue #18575:
URL: https://github.com/apache/incubator-mxnet/issues/18575


   ```
   import mxnet as mx
   from mxnet.base import _as_list
   
   class MyBlock(mx.gluon.HybridBlock):
       def __init__(self):
           super().__init__()
   
       def hybrid_forward(self, F, free_nds, loop_nds):
           n_steps = 5
           max_iterations = 5
   
           def step(loop, free):
               (s, ), (a, b) = loop, free
               return (s, s)
   
           cond = lambda loop_vars, _: (loop_vars[0] < 1e35).prod()
           func=lambda *_loop_vars: func(_loop_vars, free_nds)
   
           outputs, final_loop_nds = F.contrib.while_loop(
               cond=lambda *_loop_vars: cond(_loop_vars, free_nds),
               func=lambda *_loop_vars: step(_loop_vars, free_nds),
               loop_vars=loop_nds,
               max_iterations=max_iterations,
           )
   
           outputs = _as_list(outputs)
           final_loop_nds = _as_list(final_loop_nds)
   
           if n_steps == 0:
               outputs = []
           else:
               outputs = [x.slice_axis(axis=0, begin=0, end=n_steps) for x in 
outputs]
           loop_result_sym = [x * 2 for x in outputs] + [x * 3 for x in 
final_loop_nds]
           return loop_result_sym
   
   net = MyBlock()
   net.initialize()
   net.hybridize()
   
   free_var_shapes=[(1, ),(1, )]
   loop_var_shapes=[(1, )]
   
   free_nds = [mx.nd.ones(s) for s in free_var_shapes]
   loop_nds = [mx.nd.ones(s) for s in loop_var_shapes]
   
   for n in free_nds + loop_nds:
       n.attach_grad()
   
   with mx.autograd.record():
       result = net(free_nds, loop_nds)
   
   print(result)
   mx.nd.waitall()
   ```
   python3.7 test.py
   ```
   Traceback (most recent call last):
     File "test.py", line 51, in <module>
       result = net(free_nds, loop_nds)
     File "/home/ec2-user/cached_executor/python/mxnet/gluon/block.py", line 
1324, in __call__
       return super().__call__(x, *args)
     File "/home/ec2-user/cached_executor/python/mxnet/gluon/block.py", line 
705, in __call__
       out = self.forward(*args)
     File "/home/ec2-user/cached_executor/python/mxnet/gluon/block.py", line 
1369, in forward
       return self._call_cached_op(x, *args)
     File "/home/ec2-user/cached_executor/python/mxnet/gluon/block.py", line 
1090, in _call_cached_op
       out = self._cached_op(*cargs)
     File "mxnet/cython/ndarray.pyx", line 177, in 
mxnet._cy3.ndarray.CachedOp.__call__
     File "mxnet/cython/./base.pyi", line 41, in mxnet._cy3.ndarray.CALL
   mxnet.base.MXNetError: Traceback (most recent call last):
     File "../src/imperative/imperative.cc", line 217
   MXNetError: Check failed: AGInfo: :IsNone(*output): Assigning to NDArrays 
that are already in a computational graph will cause undefined behavior when 
evaluating gradients. Please call backward first to clear the graph or do this 
out side of a record section. Also note that you cannot use inplace operations 
like +=, *=, relu(x, out=x), y[idx]=x, etc inside a record section._cachedop
   ```
   
   


----------------------------------------------------------------
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:
us...@infra.apache.org


Reply via email to