Open
Description
- What version of Pydra are you using?
- 0.23
- What were you trying to do?
- Pass torch.Tensors to my function by splitting them as a list.
- What did you expect will happen?
- Expected the tensors to be passed to my function, have the function run, and get the result for each tensor.
- if I had a function that just adds 2 to the values in a tensor, inputting the list of tensors [torch.Tensor([1]), torch.Tensor([2])] to be split into this function should create an output of [torch.Tensor([3]), torch.Tensor([4])]
- What actually happened?
- Results "repeat" such that the output of a function (tested with multiple functions) match the result of the first split
- To continue the example from above, [torch.Tensor([1]), torch.Tensor([2])] gives out [torch.Tensor([3]), torch.Tensor([3])]
- Similarly, [torch.Tensor([1,2]), torch.Tensor([3,4])] gives out [torch.Tensor([3,4]), torch.Tensor([3,4])]
- Can you replicate this behavior?
- yes, the toy example below matches the above description (this is simplified from what I was actually trying to do but I imagine fixing on this toy example will fix other issues)
import torch
import pydra
@pydra.mark.task
def test_task(fake_audio_input):
return fake_audio_input+2
wf = pydra.Workflow(name='wf_test', input_spec=['audio_input'])
wf.split('audio_input', audio_input =[torch.tensor([1]),torch.tensor([2])]).combine('audio_input')
wf.add(test_task(name='testing', fake_audio_input=wf.lzin.audio_input))
# wf.combine('audio_input')
wf.set_output([('wf_out', wf.testing.lzout.out)])
with pydra.Submitter(plugin='cf') as sub:
sub(wf)
print(wf.done)
# results = wf.result(return_inputs='val')
results = wf(plugin='cf')
print(results)
# output: [Result(output=Output(wf_out=tensor([3])), runtime=None, errored=False), Result(output=Output(wf_out=tensor([3])), runtime=None, errored=False)]
Similarly, using other tensor structures doesn't change the behavior:
wf.split('audio_input', audio_input =[torch.tensor([1,2]),torch.tensor([3,4])]).combine('audio_input')
# output: [Result(output=Output(wf_out=tensor([3, 4])), runtime=None, errored=False), Result(output=Output(wf_out=tensor([3, 4])), runtime=None, errored=False)]
or
wf.split('audio_input', audio_input =[torch.tensor([[1],[2]]),torch.tensor([[3],[4]])]).combine('audio_input')
# output: [Result(output=Output(wf_out=tensor([[3],
# [4]])), runtime=None, errored=False), Result(output=Output(wf_out=tensor([[3],
# [4]])), runtime=None, errored=False)]
Notably, using numpy does give the expected behavior (likely as a result of #340)
wf.split('audio_input', audio_input =[np.array([1,2]),np.array([3,4])]).combine('audio_input')
# output: [Result(output=Output(wf_out=array([3, 4])), runtime=None, errored=False), Result(output=Output(wf_out=array([5, 6])), runtime=None, errored=False)]
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
v1.0