Node Allocation

Allocating to multiple processes

If your processor node is a bottleneck of the graph, you might want to ask the framework to allocate it to more than one task.

Note

In the current version of Videoflow there is a one to one correspondence between a task and an operating system process.

The allocation will not happen immediately; it will happen when flow.run() is called. Producer and consumer nodes cannot be allocated to more than one process.

For example, to allocate a node to n processes, simply do at node definition time:

node = Node(nb_tasks = n)

Warning

Certain kind of processing nodes cannot be allocated to more than one process because they inherit from the videoflow.core.node.OneTaskProcessorNode. In this case, the framework will ignore the nb_tasks parameter passed to the node at creation time.

If you are creating your own nodes, and if they are not stateless, it is highly likely that you will want to implement them inheriting from videoflow.core.node.OneTaskProcessorNode.

Warning

If your processing node is CPU-bound and the number of CPU cores in the physical system is less than the number CPU-bound tasks in your graph, you may not win a speed processing advantage by allocating a node to more than one task (or process).

Allocating to gpu

When instantiating a node, you can ask the framework to run that node in a GPU like this: node = Node(device_type = 'gpu'). This does not mean that the node will run in a GPU. First, the source code of the node needs to support GPU allocation. Secondly, the machine where the flow is being ran may not have a GPU. Thirdly, even if the machine has a GPU, it might be in use by another node of the flow.

You can both allocate to GPU and allocate to more than one process. If the machine where the flow is running has enough GPUs, all the tasks (processes) will make use, each, of a GPU, otherwise, some of them will run in a GPU and some in the CPU.

Beware that some nodes have been defined to only be run in the GPU, and if no GPU is available at allocation time, a ValueError exception will be raised. See the section Using the GPU and the change_device method under the heading Writing your own components for more details.

Allocating to a different machine

Note

Currently Videoflow is designed for a multiprocessor setting. In the future Videoflow will have the capability to be deployed in a distributed setting.