Hey Everyone,
I am struggling to make ClusterODM work with web odm. I have setup 3 nodes running NodeODM . And setup ClusterODM in a server spec machine (no apparent reason why i choose a server machine for this task). As the guide says, i connect all the node to ClusterODM using telnet, and I can see the nodes are online. Now how do I implement this cluster setup from WebODM? As per the documentation in https://docs.opendronemap.org/large.html#distributed-split-merge, in CLI odm, you need to add –sm-cluster http://cluster_odm_ip:3001 .
My question again, is how do I trigger this action in webODM? In the custom settings option in webODM, there is a field to enter the URL of clusterODM, but I havent had any luck with that. What I need to know, is at what process stage, does odm create sub-models and distribute them to different nodes to process?
--sm-cluster is the option you want to use for splitting a dataset into parts to distribute across multiple nodes (is that your intent?). Make sure to pass the --split option too in that case, otherwise it will do nothing.
To let ClusterODM handle task distribution, simply add a new processing node in WebODM with ClusterODM’s IP/port (no need to use --sm-cluster in that case).
Should we be thinking about what flags are exposed in the web interface vs. ones that are meant for the command line, and have a mechanism for suppressing irrelevant flags?
Ideally WebODM wouldn’t expose any flag, but present a simpler set of controls to specify high level settings (Resolution, Quality, Mode, Generate DSM, Generate DTM, etc.).
Ideally how long should it take to process 600 images (considering the outputs: Point cloud, DSM, DTM, Orthophoto)
What is the system requirement to process 500+ images? (as per documentation it says “For processing more images, add more disk space and RAM linearly to the number of images you need to process.”, is there a specific scale, as to how much megabytes per image?)
What is the best settings combination, that has a good balance between output quality and processing time (considering it will not run into bugs and errors)
I don’t have any useful answers here, but I am planning to work with the community to get some benchmark data centralized and available in the next few months. Ideally we’ll be making these questions a lot easier to answer.
I’m trying to add the cluster to my webodm interface with both the local IP (0.0.0.0:3000) and docker IP (172.17.0.3:3000) but the node does not show as online. Any idea where I am going wrong?
You need to set the port of the cluster api, this is standard 3000. but be careful: your primary machine has nodeodm on 3000 too. That’s mean you need to set one of the 2 container to an other port. Than you need to check if the nodeodm is set in clusterodm, best way to check is using port 10000 for clusterodm as exposed port. Than you can easily add the nodes via a webinterface.
Don’t use the nodeodm port as cluster port
The ports were fine. localhost was not working for me, but I was able to get the pieces connected to each other using the full ip of the machines. Somehow localhost/0.0.0.0 are not functional even on the same machine
Thanks! It would be a handy piece of information to add in the documentation. I pieced together how to make this work though some forum posts/replies, some sheer trial and error, but it could be written better. I’ll try making some additions if I gain a good enough understanding of it in the future.
However - how is it that localhost:3000 / localhost:10000 / localhost:8000 / telnet localhost 8080 work in the browser/telnet? Where lies the difference?
Additionally, is ti possible for you have a look at my post here and see if you could give me any insights? I’ve been fumbling around a lot with this process.
Edits to docs always welcome! You may understand enough already/soon to do so.
The difference between going from your browser vs. from the docker machine. The docker machines have their own networks that are then bridged to their host and served on ports on that host. So from within the docker machine, they don’t really see/resolve localhost, because they are acting as a different machine. So they need the actual IP so that they can get to the other docker machines via a route on the network (not a route on your machine).
When you browse from your browser to localhost, that is a loopback that goes directly to resources running on your machine. But docker machines resolve localhost to themselves, not to the host machine.