Coder Social home page Coder Social logo

Comments (12)

ar4 avatar ar4 commented on July 25, 2024

from deepwave.

lnnnn123 avatar lnnnn123 commented on July 25, 2024

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

from deepwave.

lnnnn123 avatar lnnnn123 commented on July 25, 2024

This is my code, because there are too many, I converted it into a file, thank you for your correction.
elatasic.txt

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

from deepwave.

lnnnn123 avatar lnnnn123 commented on July 25, 2024

Thanks for your guidance, after my testing, I finally found the reason, I ran the program on four Gpus at the same time, one GPU could run, but it could not conduct the gradient well, resulting in the loss of inversion results. This is the result of my latest run, obviously it can conduct the gradient very well, but it still appears two lines, I guess it should be multiple GPU conduction gradient, not as correct as one GPU conduction, I don't know what you think?
test.pdf

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

from deepwave.

lnnnn123 avatar lnnnn123 commented on July 25, 2024

This is my code, the main change is to run the code on 0,1,3 Gpus, welcome your correction.
elatasic.txt

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

I think I see the problem. In Deepwave's DataParallel example (https://github.com/ar4/deepwave/blob/master/docs/example_distributed_dp.py) the models are passed to the constructor of the propagator object, not when the propagator is being applied. This is because PyTorch's DataParallel divides input Tensors between GPUs on the specified dimension (0 by default), so if you pass the models when the propagator is applied the models will also be divided among the GPUs on this dimension. By passing them to the constructor instead, you avoid this.

So, I suggest that you modify your Prop class to take vp, vs, and rho as inputs in __init__ rather than passing them when applying the propagator:

class Prop(torch.nn.Module):

    def __init__(self, dx, dt, freq, vp, vs, rho):
        super().__init__()

        self.dx = dx
        self.dt = dt
        self.freq = freq
        self.vp = vp
        self.vs = vs
        self.rho = rho

    def forward(self, source_amplitudes, source_locations, receiver_locations):
        out = elastic(
            *deepwave.common.vpvsrho_to_lambmubuoyancy(self.vp, self.vs,
                                                       self.rho),
            self.dx,
            self.dt,
            source_amplitudes_y=source_amplitudes,
            source_locations_y=source_locations,
            receiver_locations_y=receiver_locations,
            pml_freq=self.freq,
        )
        return out[-2]

I hope that will resolve the problem you encountered, but note that PyTorch's documentation recommends using DistributedDataParallel rather than DataParallel for better performance. Here is an example of using it with Deepwave: https://github.com/ar4/deepwave/blob/master/docs/example_distributed_ddp.py

from deepwave.

lnnnn123 avatar lnnnn123 commented on July 25, 2024

Thank you for your guidance. My multi GPU running program is running correctly. The gradient can be conducted correctly.

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

from deepwave.

ar4 avatar ar4 commented on July 25, 2024

I hope this Issue is resolved, so I am going to close it. Please feel free to reopen it if you have further questions about this.

from deepwave.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.